|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
import TestGame.Metadata
|
|
|
|
|
import Mathlib
|
|
|
|
|
import Std.Tactic.RCases
|
|
|
|
|
import Mathlib.Tactic.LeftRight
|
|
|
|
|
|
|
|
|
|
set_option tactic.hygienic false
|
|
|
|
|
|
|
|
|
|
Game "TestGame"
|
|
|
|
|
World "TestWorld"
|
|
|
|
@ -9,47 +12,14 @@ Title "Oder"
|
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
|
"
|
|
|
|
|
Das logische ODER `A ∨ B` (`\\or`) funktioniert
|
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
Statement
|
|
|
|
|
(A B C : Prop) (h : (A ∨ B) ∨ C) : B ∨ (C ∨ A) := by
|
|
|
|
|
cases h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Message (A : Prop) (B : Prop) : A ∧ (A → B) ↔ A ∧ B =>
|
|
|
|
|
"`↔` oder `∧` im Goal kann man mit `constructor` aufteilen."
|
|
|
|
|
|
|
|
|
|
-- if they don't use `intro ⟨_, _⟩`.
|
|
|
|
|
Message (A : Prop) (B : Prop) (h : A ∧ (A → B)) : A ∧ B =>
|
|
|
|
|
"Jetzt erst mal noch schnell die Annahme `A ∧ (A → B)` mit `rcases` aufteilen."
|
|
|
|
|
Das logische ODER `A ∨ B` (`\\or`) funktioniert ein wenig anders als das UND.
|
|
|
|
|
|
|
|
|
|
-- if they don't use `intro ⟨_, _⟩`.
|
|
|
|
|
Message (A : Prop) (B : Prop) (h : A ∧ B) : A ∧ (A → B) =>
|
|
|
|
|
"Jetzt erst mal noch schnell die Annahme `A ∧ B` mit `rcases` aufteilen."
|
|
|
|
|
|
|
|
|
|
Message (A : Prop) (B : Prop) (hA : A) (h : A → B) : A ∧ B =>
|
|
|
|
|
"Wieder in Einzelteile aufteilen..."
|
|
|
|
|
|
|
|
|
|
Message (A : Prop) (B : Prop) : A ∧ (A → B) =>
|
|
|
|
|
"Immer das gleiche ... noch mehr aufteilen."
|
|
|
|
|
|
|
|
|
|
Message (A : Prop) (B : Prop) (h₁: A) (h₂: B) : A → B =>
|
|
|
|
|
"Das ist jetzt vielleicht etwas verwirrend: Wir wollen die Implikation `A → B` zeigen,
|
|
|
|
|
wissen aber, dass `B` immer wahr ist (habe eine Annahme der Form `(hB : B)`).
|
|
|
|
|
|
|
|
|
|
Mit intro können wir einfach nochmal annehmen, dass `A` wahr ist. Es stört uns nicht,
|
|
|
|
|
dass wir das schon wissen und auch gar nicht brauchen. Damit müssen wir nur noch zeigen,
|
|
|
|
|
dass `B` wahr ist."
|
|
|
|
|
|
|
|
|
|
Hint (A : Prop) (B : Prop) (hA : A) (h : A → B) : B =>
|
|
|
|
|
"Sieht nach einem Fall für `apply` aus."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- TODO
|
|
|
|
|
Wenn das Goal ein `∨` ist kann man mit `left` oder `right` entscheiden,
|
|
|
|
|
welche Seite man beweisen möchte.
|
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
Statement (A B : Prop) (hA : A) : A ∨ (¬ B) := by
|
|
|
|
|
left
|
|
|
|
|
assumption
|
|
|
|
|
|
|
|
|
|
Tactics apply rcases
|
|
|
|
|
Tactics assumption
|
|
|
|
|
Tactics left right assumption
|
|
|
|
|