import TestGame.Metadata import TestGame.ToBePorted import Mathlib.Algebra.BigOperators.Fin import Mathlib.Tactic.Ring import TestGame.ToBePorted import TestGame.Options.ArithSum Game "TestGame" World "Sum" Level 6 set_option tactic.hygienic false Title "Zusammenfassung" Introduction " **Du**: Robo gib mir nochmals eine Übersicht, bitte. **Robo**: Aber klar: | | Beschreibung | |:---------------------|:------------------------------------------| | `Fin n` | Ist ein Typ mit Zahlen $0, \\ldots, n-1$. | | `∑ (i : Fin n), a i` | $\\sum_{i=0}^{n-1} a_i$ | | `↑i` | Eine Coersion, z.B. `Fin n → ℕ`. | und | | Taktik | Beispiel | |:---|:--------------------------|:-------------------------------------| | 21 | `simp` | Simplifikation. | | 22 | `induction n` | Induktion über $n$ | Da löst sich aus der Steinlandschaft plötzlich ein grosser Steingolem. Er schaut euch bedrohlich an und fragt in tiefer Stimme: " open BigOperators Statement (m : ℕ) : (∑ i : Fin (m + 1), (i : ℕ)^3) = (∑ i : Fin (m + 1), (i : ℕ))^2 := by Hint "**Du**: Gulp. Naja das wird schon klappen. Also man fängt wieder mit Induktion an…" induction m Hint "**Du**: Also den Induktionsanfang kann man einfach zeigen…" simp Hint "**Robo**: Und jetzt wieder `rw [Fin.sum_univ_castSucc]` und `simp` um vorwärts zu kommen!" rw [Fin.sum_univ_castSucc] simp Hint "**Robo**: Siehst du die Induktionshypothese hier drin?" rw [n_ih] Hint "**Du**: Ok, damit habe ich die linke Seite der Gleichung ziemlich gut bearbeitet. Aber, ehm, mit der Rechten komme ich nicht weiter… Der Golem schaut dich finster an. **Robo**: Du willst `Fin.sum_univ_castSucc` auf der rechten Seite anwenden, aber es gibt mehrere Orte, wo das Lemma passen würde. Deshalb musst du mit `rw [Fin.sum_univ_castSucc (n := {n} + 1)]` angeben, wo genau. **Du**: Was bedeutet das? **Robo** Das Lemma hat eine Annahme `n` und du sagst ihm explizit, was es für dieses `n` einsetzen muss, nämlich `{n} + 1`" Branch rw [Fin.sum_univ_castSucc] Hint "**Robo**: Das hat jetzt einfach `Fin.sum_univ_castSucc` am ersten Ort angewendet, wo das möglich war. Das ist nicht so ideal, die like Seite war schon okay. **Robo**: Geh doch zurück und bring `rw` dazu am anderen Ort umzuschreiben." rw [Fin.sum_univ_castSucc (n := n + 1)] simp Hint "**Robo**: `add_pow_two` ist auch noch nützlich!" rw [add_pow_two] Hint "**Du**: Ich glaube, ich sehe hier ne arithmetische Summe drin!! **Robo**: Ich habe dir das dies von vorhin temporär als `arithmetic_sum` gespeichert, damit du diese brauchen kannst." rw [arithmetic_sum] Hint "**Du**: Jetzt sollten es eigentlich nur noch arithmetische Operationen sein." ring NewLemma arithmetic_sum add_pow_two Conclusion "Der Golem denkt ganz lange nach, und ihr bekommt das Gefühl, dass er gar nie aggressive war, sondern nur eine sehr tiefe Stimme hat. Mit einem kleinen Erdbeben setzt er sich hin und winkt euch dankend zu. Damit zieht ihr weiter durch die karge Landschaft auf diesem Planet."