diff --git a/client/src/App.tsx b/client/src/App.tsx
index db553a2..7be4e5b 100644
--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -44,7 +44,7 @@ function App() {
if (finished) {
mainComponent =
} else if (curLevel > 0) {
- mainComponent =
+ mainComponent =
} else {
mainComponent =
}
diff --git a/server/testgame/TestGame/Levels/Logic/L04_Rewrite.lean b/server/testgame/TestGame/Levels/Logic/L04_Rewrite.lean
index 6b1329f..765544e 100644
--- a/server/testgame/TestGame/Levels/Logic/L04_Rewrite.lean
+++ b/server/testgame/TestGame/Levels/Logic/L04_Rewrite.lean
@@ -1,4 +1,5 @@
import TestGame.Metadata
+import Mathlib
Game "TestGame"
World "TestWorld"
@@ -16,38 +17,40 @@ kann man die Taktik `rw` (steht für 'rewrite') brauchen um im Goal
das eine durch das andere zu ersetzen.
"
-Statement umschreiben
- "
- Angenommen man hat die Gleichheiten
- `a = b`, `a = d`, `c = d`.
- Zeige dass `b = c`.
- "
- (a b c d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c := by
- rw [h₁]
- rw [←h₂]
+Statement (A : Prop) (hA : A) : A := by
assumption
--- Gleich am Anfang anzeigen.
-Message (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c =>
-"Wenn man eine Annahme `(h₁ : c = d)` hat, kann man mit `rw [h₁]` (oder `rewrite [h₁]`) das erste
-`c` im Goal mit `d` ersetzen."
-
-Hint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c =>
-"Die kleinen Zahlen `h₁ h₂ h₃` werden in Lean oft verwendet und man schreibt diese mit
-`\\1`, `\\2`, `\\3`, …"
-
-Message (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = d =>
-"Mit `rw [← h₂]` (`\\l`, also klein L wie \"left\") kann man eine Hypotheses
-`(h₂ : a = b)` rückwärts anwenden und `b` durch `a` ersetzen."
-
--- TODO: Muss ich das wirklich mehrmals auflisten?
-Message (x : ℕ) : x = x =>
-"Der Hauptunterschied zwischen `rw` und `rewrite` ist, dass das erste automatisch versucht,
-anschliessend `rfl` anzuwenden. Bei `rewrite` musst du `rfl` explizit noch aufrufen."
+-- Statement umschreiben
+-- "
+-- Angenommen man hat die Gleichheiten
+-- `a = b`, `a = d`, `c = d`.
+-- Zeige dass `b = c`.
+-- "
+-- (a b c d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c := by
+-- rw [h₁]
+-- rw [←h₂]
+-- assumption
+
+-- -- Gleich am Anfang anzeigen.
+-- Message (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c =>
+-- "Wenn man eine Annahme `(h₁ : c = d)` hat, kann man mit `rw [h₁]` (oder `rewrite [h₁]`) das erste
+-- `c` im Goal mit `d` ersetzen."
+
+-- Hint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c =>
+-- "Die kleinen Zahlen `h₁ h₂ h₃` werden in Lean oft verwendet und man schreibt diese mit
+-- `\\1`, `\\2`, `\\3`, …"
+
+-- Message (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = d =>
+-- "Mit `rw [← h₂]` (`\\l`, also klein L wie \"left\") kann man eine Hypotheses
+-- `(h₂ : a = b)` rückwärts anwenden und `b` durch `a` ersetzen."
+
+-- -- TODO: Muss ich das wirklich mehrmals auflisten?
+-- Message (x : ℕ) : x = x =>
+-- "Der Hauptunterschied zwischen `rw` und `rewrite` ist, dass das erste automatisch versucht,
+-- anschliessend `rfl` anzuwenden. Bei `rewrite` musst du `rfl` explizit noch aufrufen."
Conclusion "Übrigens, mit `rw [h₁] at h₂` kann man auch eine andere Annahme umschreiben
anstatt dem Goal."
-- TODO: Das macht es doch unmöglich mit den Messages...
-Tactics assumption
-Tactics rw
+Tactics assumption rw
diff --git a/server/testgame/TestGame/Levels/Logic/L05c_Apply.lean b/server/testgame/TestGame/Levels/Logic/L05c_Apply.lean
index f10e1c7..bbc1e80 100644
--- a/server/testgame/TestGame/Levels/Logic/L05c_Apply.lean
+++ b/server/testgame/TestGame/Levels/Logic/L05c_Apply.lean
@@ -1,5 +1,7 @@
import TestGame.Metadata
+set_option tactic.hygienic false
+
Game "TestGame"
World "TestWorld"
Level 8
@@ -8,7 +10,8 @@ Title "Implikation"
Introduction
"
-Wenn das Goal von der Form `A → B` ist, kann man mit `intro` annehmen, dass `A` wahr ist
+Wenn das Goal von der Form `A → B` ist, kann man mit `intro hA` annehmen, dass `A` wahr ist
+(i.e. erstellt eine Annahme `(hA : A)`)
und das Goal wird zu `B`.
"
diff --git a/server/testgame/TestGame/Levels/Logic/L06_Iff.lean b/server/testgame/TestGame/Levels/Logic/L06_Iff.lean
index 506d103..9d2f9d6 100644
--- a/server/testgame/TestGame/Levels/Logic/L06_Iff.lean
+++ b/server/testgame/TestGame/Levels/Logic/L06_Iff.lean
@@ -26,5 +26,4 @@ Statement
rw [←h₂]
assumption
-Tactics rw
-Tactics assumption
+Tactics rw assumption
diff --git a/server/testgame/TestGame/Levels/Logic/L06b_Iff.lean b/server/testgame/TestGame/Levels/Logic/L06b_Iff.lean
index 1940f8e..d5b35cd 100644
--- a/server/testgame/TestGame/Levels/Logic/L06b_Iff.lean
+++ b/server/testgame/TestGame/Levels/Logic/L06b_Iff.lean
@@ -33,7 +33,6 @@ aus mehreren Einzelteilen besteht: `⟨A → B, B → A⟩`. Man sagt also Lean,
ob das Goal aus solchen Einzelteilen \"konstruiert\" werden kann.
"
-Tactics constructor
-Tactics assumption
+Tactics constructor assumption
-- TODO : `case mpr =>` ist mathematisch noch sinnvoll.
diff --git a/server/testgame/TestGame/Levels/Logic/L08b_Or.lean b/server/testgame/TestGame/Levels/Logic/L08b_Or.lean
index 7de302e..c2ec0a2 100644
--- a/server/testgame/TestGame/Levels/Logic/L08b_Or.lean
+++ b/server/testgame/TestGame/Levels/Logic/L08b_Or.lean
@@ -55,4 +55,4 @@ Message (A : Prop) (B : Prop) (C : Prop) (h : A ∧ B) : C ∧ A =>
Message (A : Prop) (B : Prop) (C : Prop) (h : A → C) : C ∧ A =>
"Ein UND im Goal kann mit `constructor` aufgeteilt werden."
-Tactics left right assumption constructor rcases
+Tactics left right assumption constructor rcases apply