|
|
@ -17,109 +17,76 @@ Title "Zusammenfassung"
|
|
|
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
Introduction
|
|
|
|
"
|
|
|
|
"
|
|
|
|
Zusammenfassung aus diesem Kapitel
|
|
|
|
**Du**: Robo gib mir nochmals eine Übersicht, bitte.
|
|
|
|
|
|
|
|
|
|
|
|
## Notationen / Begriffe
|
|
|
|
**Robo**: Aber klar:
|
|
|
|
|
|
|
|
|
|
|
|
| | Beschreibung |
|
|
|
|
| | Beschreibung |
|
|
|
|
|:---------------------|:------------------------------------------|
|
|
|
|
|:---------------------|:------------------------------------------|
|
|
|
|
| `Fin n` | Ist ein Typ mit Zahlen $0, \\ldots, n-1$. |
|
|
|
|
| `Fin n` | Ist ein Typ mit Zahlen $0, \\ldots, n-1$. |
|
|
|
|
| `∑ (i : Fin n), a i` | $\\sum_{i=0}^{n-1} a_i$ |
|
|
|
|
| `∑ (i : Fin n), a i` | $\\sum_{i=0}^{n-1} a_i$ |
|
|
|
|
|
|
|
|
| `↑i` | Eine Coersion, z.B. `Fin n → ℕ`. |
|
|
|
|
|
|
|
|
|
|
|
|
## Taktiken
|
|
|
|
und
|
|
|
|
|
|
|
|
|
|
|
|
| | Taktik | Beispiel |
|
|
|
|
| | Taktik | Beispiel |
|
|
|
|
|:---|:--------------------------|:-------------------------------------|
|
|
|
|
|:---|:--------------------------|:-------------------------------------|
|
|
|
|
| 20 | `simp` | Simplifikation. |
|
|
|
|
| 21 | `simp` | Simplifikation. |
|
|
|
|
| 21 | `induction n` | Induktion über $n$ |
|
|
|
|
| 22 | `induction n` | Induktion über $n$ |
|
|
|
|
|
|
|
|
|
|
|
|
Und hier noch eine etwas schwierigere Übung.
|
|
|
|
Da löst sich aus der Steinlandschaft plötzlich ein grosser Steingolem. Er schaut euch
|
|
|
|
|
|
|
|
bedrohlich an und fragt in tiefer Stimme:
|
|
|
|
Das Resultat aus Level 3 kannst du als `arithmetic_sum` wiederverwenden:
|
|
|
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
2 \\cdot \\sum_{i = 0}^n i = n \\cdot (n + 1)
|
|
|
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
"
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
open BigOperators
|
|
|
|
open BigOperators
|
|
|
|
|
|
|
|
|
|
|
|
Statement
|
|
|
|
Statement (m : ℕ) : (∑ i : Fin (m + 1), (i : ℕ)^3) = (∑ i : Fin (m + 1), (i : ℕ))^2 := by
|
|
|
|
"Zeige $\\sum_{i = 0}^m i^3 = (\\sum_{i = 0}^m i)^2$."
|
|
|
|
Hint "**Du**: Gulp. Naja das wird schon klappen. Also man fängt wieder mit Induktion an…"
|
|
|
|
(m : ℕ) : (∑ i : Fin (m + 1), (i : ℕ)^3) = (∑ i : Fin (m + 1), (i : ℕ))^2 := by
|
|
|
|
induction m
|
|
|
|
induction' m with m hm
|
|
|
|
Hint "**Du**: Also den Induktionsanfang kann man einfach zeigen…"
|
|
|
|
simp
|
|
|
|
simp
|
|
|
|
|
|
|
|
Hint "**Robo**: Und jetzt wieder `rw [Fin.sum_univ_castSucc]` und `simp` um vorwärts zu
|
|
|
|
|
|
|
|
kommen!"
|
|
|
|
rw [Fin.sum_univ_castSucc]
|
|
|
|
rw [Fin.sum_univ_castSucc]
|
|
|
|
simp
|
|
|
|
simp
|
|
|
|
rw [hm]
|
|
|
|
Hint "**Robo**: Siehst du die Induktionshypothese hier drin?"
|
|
|
|
rw [Fin.sum_univ_castSucc (n := m + 1)]
|
|
|
|
rw [n_ih]
|
|
|
|
simp
|
|
|
|
Hint "**Du**: Ok, damit habe ich die linke Seite der Gleichung ziemlich gut bearbeitet.
|
|
|
|
rw [add_pow_two]
|
|
|
|
Aber, ehm, mit der Rechten komme ich nicht weiter…
|
|
|
|
rw [arithmetic_sum]
|
|
|
|
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NewLemma arithmetic_sum add_pow_two
|
|
|
|
Der Golem schaut dich finster an.
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint (m : ℕ) : ∑ i : Fin (m + 1), (i : ℕ) ^ 3 = (∑ i : Fin (m + 1), ↑i) ^ 2 =>
|
|
|
|
**Robo**: Du willst `Fin.sum_univ_castSucc` auf der rechten Seite anwenden, aber es
|
|
|
|
"Führe auch hier einen Induktionsbeweis."
|
|
|
|
gibt mehrere Orte, wo das Lemma passen würde.
|
|
|
|
|
|
|
|
Deshalb musst du mit `rw [Fin.sum_univ_castSucc (n := {n} + 1)]` angeben, wo genau.
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint : ∑ i : Fin (Nat.zero + 1), (i : ℕ) ^ 3 = (∑ i : Fin (Nat.zero + 1), ↑i) ^ 2 =>
|
|
|
|
**Du**: Was bedeutet das?
|
|
|
|
"`simp` kann den Induktionsanfang beweisen."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hint (m : ℕ) : ∑ i : Fin (Nat.succ m + 1), (i : ℕ) ^ 3 = (∑ i : Fin (Nat.succ m + 1), ↑i) ^ 2 =>
|
|
|
|
**Robo** Das Lemma hat eine Annahme `n` und du sagst ihm explizit, was es für dieses `n`
|
|
|
|
"Im Induktionsschritt willst du das Goal so umformen, dass du folgende Therme
|
|
|
|
einsetzen muss, nämlich `{n} + 1`"
|
|
|
|
ersetzen kannst:
|
|
|
|
Branch
|
|
|
|
|
|
|
|
rw [Fin.sum_univ_castSucc]
|
|
|
|
* `∑ i : Fin (m + 1), ↑i ^ 3` (Induktionshypothese)
|
|
|
|
Hint "**Robo**: Das hat jetzt einfach `Fin.sum_univ_castSucc` am ersten Ort angewendet,
|
|
|
|
* `2 * (∑ i : Fin (m + 1), ↑i)` (arithmetische Summe)
|
|
|
|
wo das möglich war. Das ist nicht so ideal, die like Seite war schon okay.
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint (m : ℕ) : ∑ i :
|
|
|
|
|
|
|
|
Fin (Nat.succ m + 1), (i : ℕ) ^ 3 = (∑ i : Fin (Nat.succ m + 1), ↑i) ^ 2 =>
|
|
|
|
|
|
|
|
"
|
|
|
|
|
|
|
|
Als erstes kannst du mal mit dem bekannten `rw [Fin.sum_univ_castSucc]` anfangen.
|
|
|
|
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint (m : ℕ) : ∑ i : Fin (m + 1), (Fin.castSucc.toEmbedding i : ℕ) ^ 3 +
|
|
|
|
**Robo**: Geh doch zurück und bring `rw` dazu am anderen Ort umzuschreiben."
|
|
|
|
↑(Fin.last (m + 1)) ^ 3 = (∑ i : Fin (Nat.succ m + 1), ↑i) ^ 2 =>
|
|
|
|
rw [Fin.sum_univ_castSucc (n := n + 1)]
|
|
|
|
"Mit `simp` kriegst du das `↑(Fin.castSucc.toEmbedding i)` weg"
|
|
|
|
simp
|
|
|
|
|
|
|
|
Hint "**Robo**: `add_pow_two` ist auch noch nützlich!"
|
|
|
|
Hint (m : ℕ) : ∑ x : Fin (m + 1), (x : ℕ) ^ 3 + (m + 1) ^ 3 =
|
|
|
|
rw [add_pow_two]
|
|
|
|
(∑ i : Fin (Nat.succ m + 1), ↑i) ^ 2 =>
|
|
|
|
Hint "**Du**: Ich glaube, ich sehe hier ne arithmetische Summe drin!!
|
|
|
|
"Jetzt kannst du die Induktionshypothese benützen."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hint (m : ℕ) : (∑ i : Fin (m + 1), (i : ℕ)) ^ 2 + (m + 1) ^ 3 = (∑ i : Fin (Nat.succ m + 1), ↑i) ^ 2 =>
|
|
|
|
|
|
|
|
"Die linke Seite ist jetzt erst mal gut. Um auf der rechten Seite `Fin.sum_univ_castSucc`
|
|
|
|
|
|
|
|
anzuwenden, haben wir ein Problem: Lean schreibt immer die erste Instanz um, also würde gerne
|
|
|
|
|
|
|
|
auf der linken Seite `(∑ i : Fin (m + 1), ↑i) ^ 2` umschreiben.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wir können Lean hier weiterhelfen, indem wir manche Argemente von `Fin.sum_univ_castSucc`
|
|
|
|
|
|
|
|
explizit angeben. Die Funktion hat ein Argument mit dem Namen `n`, welches wir z.B. explizit
|
|
|
|
|
|
|
|
angeben können:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
rw [Fin.sum_univ_castSucc (n := m + 1)]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint (m : ℕ) : (∑ i : Fin (m + 1), ↑i) ^ 2 + (m + 1) ^ 3 =
|
|
|
|
**Robo**: Ich habe dir das dies von vorhin temporär als `arithmetic_sum` gespeichert,
|
|
|
|
(∑ i : Fin (m + 1), ↑(Fin.castSucc.toEmbedding i) + ↑(Fin.last (m + 1))) ^ 2 =>
|
|
|
|
damit du diese brauchen kannst."
|
|
|
|
"Wenn du noch einen AUsdruck `↑(Fin.castSucc.toEmbedding i)` hast, solltest du mal
|
|
|
|
rw [arithmetic_sum]
|
|
|
|
`simp` aufrufen."
|
|
|
|
Hint "**Du**: Jetzt sollten es eigentlich nur noch arithmetische Operationen sein."
|
|
|
|
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
|
|
Hint (m : ℕ) : (∑ i : Fin (m + 1), ↑i) ^ 2 + (m + 1) ^ 3 = (∑ i : Fin (m + 1), ↑i + (m + 1)) ^ 2 =>
|
|
|
|
NewLemma arithmetic_sum add_pow_two
|
|
|
|
"Die rechte Seite hat die Form $(a + b)^2$ welche mit `add_pow_two` zu $a^2 + 2ab + b^2$
|
|
|
|
|
|
|
|
umgeschrieben werden kann."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HiddenHint (m : ℕ) : (∑ i : Fin (m + 1), ↑i) ^ 2 + (m + 1) ^ 3 =
|
|
|
|
Conclusion "Der Golem denkt ganz lange nach, und ihr bekommt das Gefühl, dass er gar nie
|
|
|
|
(∑ i : Fin (m + 1), ↑i) ^ 2 + (2 * ∑ i : Fin (m + 1), ↑i) * (m + 1) + (m + 1) ^ 2 =>
|
|
|
|
aggressive war, sondern nur eine sehr tiefe Stimme hat.
|
|
|
|
"Wenn du noch einen AUsdruck `↑(Fin.castSucc.toEmbedding i)` hast, solltest du mal
|
|
|
|
|
|
|
|
`simp` aufrufen."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hint (m : ℕ) : (∑ i : Fin (m + 1), ↑i) ^ 2 + (m + 1) ^ 3 =
|
|
|
|
Mit einem kleinen Erdbeben setzt er sich hin und winkt euch dankend zu.
|
|
|
|
(∑ i : Fin (m + 1), ↑i) ^ 2 + (2 * ∑ i : Fin (m + 1), ↑i) * (m + 1) + (m + 1) ^ 2 =>
|
|
|
|
|
|
|
|
"Jetzt hast du in der Mitte `2 * ∑ i : Fin (m + 1), ↑i)`, welches du mit der
|
|
|
|
|
|
|
|
arithmetischen Summe `arithmetic_sum` umschreiben kannst."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hint (m : ℕ) : (∑ i : Fin (m + 1), ↑i) ^ 2 + (m + 1) ^ 3 =
|
|
|
|
Damit zieht ihr weiter durch die karge Landschaft auf diesem Planet."
|
|
|
|
(∑ i : Fin (m + 1), ↑i) ^ 2 + m * (m + 1) * (m + 1) + (m + 1) ^ 2 =>
|
|
|
|
|
|
|
|
"Den Rest sollte `ring` für dich übernehmen."
|
|
|
|
|
|
|
|