|
|
|
@ -22,22 +22,22 @@ dass das Gegenteil des Goals wahr sei, und dann einen Widerspruch erzeugen.
|
|
|
|
|
|
|
|
|
|
|
|
**Bemerkung:** Besonders beim Beweis durch Widerspruch ist es hilfreich, wenn man
|
|
|
|
**Bemerkung:** Besonders beim Beweis durch Widerspruch ist es hilfreich, wenn man
|
|
|
|
Zwischenresultate erstellen kann.
|
|
|
|
Zwischenresultate erstellen kann.
|
|
|
|
`suffices h₁ : ¬(odd (n ^ 2))` erstellt zwei neue Goals:
|
|
|
|
`suffices h₁ : ¬(Odd (n ^ 2))` erstellt zwei neue Goals:
|
|
|
|
|
|
|
|
|
|
|
|
1) Ein Beweis, wieso es genügt `¬(odd (n ^ 2))` zu zeigen (\"weil das einen Widerspruch zu
|
|
|
|
1) Ein Beweis, wieso es genügt `¬(Odd (n ^ 2))` zu zeigen (\"weil das einen Widerspruch zu
|
|
|
|
`h` bewirkt\").
|
|
|
|
`h` bewirkt\").
|
|
|
|
2) Einen Beweis des Zwischenresultats `suffices h₁ : ¬(odd (n ^ 2))`
|
|
|
|
2) Einen Beweis des Zwischenresultats `suffices h₁ : ¬(Odd (n ^ 2))`
|
|
|
|
|
|
|
|
|
|
|
|
Alternativ macht `have h₁ : ¬(odd (n ^ 2))` genau das gleiche, vertauscht aber die
|
|
|
|
Alternativ macht `have h₁ : ¬(Odd (n ^ 2))` genau das gleiche, vertauscht aber die
|
|
|
|
Beweise (1) und (2), so dass man zuerst `h₁` beweist, und dann den eigentlichen Beweis
|
|
|
|
Beweise (1) und (2), so dass man zuerst `h₁` beweist, und dann den eigentlichen Beweis
|
|
|
|
fortsetzt.
|
|
|
|
fortsetzt.
|
|
|
|
"
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
Statement
|
|
|
|
Statement
|
|
|
|
"Ist n² ungerade, so ist auch n ungerade. Beweise durch Widerspruch."
|
|
|
|
"Ist n² ungerade, so ist auch n ungerade. Beweise durch Widerspruch."
|
|
|
|
(n : ℕ) (h : odd (n ^ 2)) : odd n := by
|
|
|
|
(n : ℕ) (h : Odd (n ^ 2)) : Odd n := by
|
|
|
|
by_contra g
|
|
|
|
by_contra g
|
|
|
|
suffices d : ¬ odd (n ^ 2) -- TODO: I don't like this
|
|
|
|
suffices d : ¬ Odd (n ^ 2) -- TODO: I don't like this
|
|
|
|
contradiction
|
|
|
|
contradiction
|
|
|
|
|
|
|
|
|
|
|
|
rw [not_odd] at g
|
|
|
|
rw [not_odd] at g
|
|
|
|
@ -45,37 +45,37 @@ Statement
|
|
|
|
apply even_square
|
|
|
|
apply even_square
|
|
|
|
assumption
|
|
|
|
assumption
|
|
|
|
|
|
|
|
|
|
|
|
Message (n : ℕ) (h : odd (n^2)) : odd n =>
|
|
|
|
Message (n : ℕ) (h : Odd (n^2)) : Odd n =>
|
|
|
|
"Schreibe `by_contra h₁` um einen Beweis durch Widerspruch zu starten."
|
|
|
|
"Schreibe `by_contra h₁` um einen Beweis durch Widerspruch zu starten."
|
|
|
|
|
|
|
|
|
|
|
|
Message (n : ℕ) (g : ¬ odd n) (h : odd (n^2)) : False =>
|
|
|
|
Message (n : ℕ) (g : ¬ Odd n) (h : Odd (n^2)) : False =>
|
|
|
|
"Nun *genügt es zu zeigen, dass* `¬odd (n ^ 2)` wahr ist,
|
|
|
|
"Nun *genügt es zu zeigen, dass* `¬Odd (n ^ 2)` wahr ist,
|
|
|
|
denn dann erhalten wir einen Widerspruch zu `h`.
|
|
|
|
denn dann erhalten wir einen Widerspruch zu `h`.
|
|
|
|
|
|
|
|
|
|
|
|
Benütze dafür `suffices h₂ : ¬odd (n ^ 2)`.
|
|
|
|
Benütze dafür `suffices h₂ : ¬Odd (n ^ 2)`.
|
|
|
|
"
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
|
|
Message (n : ℕ) (g : ¬ odd (n^2)) (h : odd (n^2)) : False =>
|
|
|
|
Message (n : ℕ) (g : ¬ Odd (n^2)) (h : Odd (n^2)) : False =>
|
|
|
|
"Hier musst du rechtfertigen, wieso das genügt. In unserem Fall, weil
|
|
|
|
"Hier musst du rechtfertigen, wieso das genügt. In unserem Fall, weil
|
|
|
|
dadurch einen Widerspruch entsteht."
|
|
|
|
dadurch einen Widerspruch entsteht."
|
|
|
|
|
|
|
|
|
|
|
|
Hint (n : ℕ) (g : ¬ odd (n^2)) (h : odd (n^2)) : False =>
|
|
|
|
Hint (n : ℕ) (g : ¬ Odd (n^2)) (h : Odd (n^2)) : False =>
|
|
|
|
"Also `contradiction`..."
|
|
|
|
"Also `contradiction`..."
|
|
|
|
|
|
|
|
|
|
|
|
Message (n : ℕ) (g : ¬ odd n) (h : odd (n^2)) : ¬ odd (n^2) =>
|
|
|
|
Message (n : ℕ) (g : ¬ Odd n) (h : Odd (n^2)) : ¬ Odd (n^2) =>
|
|
|
|
"Das Zwischenresultat `¬odd (n^2)` muss auch bewiesen werden.
|
|
|
|
"Das Zwischenresultat `¬Odd (n^2)` muss auch bewiesen werden.
|
|
|
|
Hier ist wieder das Lemma `not_odd` hilfreich."
|
|
|
|
Hier ist wieder das Lemma `not_Odd` hilfreich."
|
|
|
|
|
|
|
|
|
|
|
|
Hint (n : ℕ) (g : ¬ odd n) (h : odd (n^2)) : even (n^2) =>
|
|
|
|
Hint (n : ℕ) (g : ¬ Odd n) (h : Odd (n^2)) : Even (n^2) =>
|
|
|
|
"Mit `rw [not_odd] at *` kannst du im Goal und allen Annahmen gleichzeitig umschreiben."
|
|
|
|
"Mit `rw [not_Odd] at *` kannst du im Goal und allen Annahmen gleichzeitig umschreiben."
|
|
|
|
|
|
|
|
|
|
|
|
Message (n: ℕ) (h : odd (n ^ 2)) (g : even n) : even (n ^ 2) =>
|
|
|
|
Message (n: ℕ) (h : Odd (n ^ 2)) (g : Even n) : Even (n ^ 2) =>
|
|
|
|
"Diese Aussage hast du bereits als Lemma bewiesen."
|
|
|
|
"Diese Aussage hast du bereits als Lemma bewiesen."
|
|
|
|
|
|
|
|
|
|
|
|
Hint (n: ℕ) (h : odd (n ^ 2)) (g : even n) : even (n ^ 2) =>
|
|
|
|
Hint (n: ℕ) (h : Odd (n ^ 2)) (g : Even n) : Even (n ^ 2) =>
|
|
|
|
"Probiers mit `apply ...`"
|
|
|
|
"Probiers mit `apply ...`"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tactics contradiction by_contra rw apply assumption -- TODO: suffices, have
|
|
|
|
Tactics contradiction by_contra rw apply assumption -- TODO: suffices, have
|
|
|
|
|
|
|
|
|
|
|
|
Lemmas odd even not_odd not_even even_square
|
|
|
|
Lemmas Odd Even not_odd not_even even_square
|
|
|
|
|