import TestGame.Metadata import Mathlib Game "TestGame" World "Predicate" Level 2 Title "Rewrite" Introduction " Wir haben gesehen, dass man mit `rw` Äquivalenzen wie `A ↔ B` brauchen kann, um im Goal $A$ durch $B$ zu ersetzen. Genau gleich kann man auch Gleichungen `a = b` mit `rw` verwenden. " Statement umschreiben "Angenommen man hat die Gleichheiten $$ \\begin{aligned} a &= b \\\\ a &= d \\\\ c &= d \\end{aligned} $$ 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 HiddenHint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c => "Im Goal kommt `c` vor und `h₁` sagt `c = d`. Probiers doch mit `rw [h₁]`." HiddenHint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : a = c => "Im Goal kommt `C` vor und `h₁` sagt `C ↔ D`. Probiers doch mit `rw [h₁]`." HiddenHint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = d => " Man kann auch rückwärts umschreiben: `h₂` sagt `a = b` mit `rw [←h₂]` ersetzt man im Goal `b` durch `a` (`\\l`, also ein kleines L)" HiddenHint (a : ℕ) (b : ℕ) (h : a = b) : a = b => "Schau mal durch die Annahmen durch." -- These should not be necessary if they don't use `rw [] at`. HiddenHint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = c) : b = c => "Auch eine Möglichkeit... Kannst du das Goal so umschreiben, dass es mit einer Annahme übereinstimmt?" HiddenHint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : a = b) (h₃ : b = d) : b = c => "Auch eine Möglichkeit.. Kannst du das Goal so umschreiben, dass es mit einer Annahme übereinstimmt?" Hint (a : ℕ) (b : ℕ) (h : b = a) : a = b => "Naja auch Umwege führen ans Ziel... Wenn du das Goal zu `a = A` umschreibst, kann man es mit `rfl` beweisen (rsp. das passiert automatisch.)" Hint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : d = b) (h₃ : d = a) : b = c => "das ist nicht der optimale Weg..." Hint (a : ℕ) (b : ℕ) (c : ℕ) (d : ℕ) (h₁ : c = d) (h₂ : d = b) (h₃ : a = d) : b = c => "das ist nicht der optimale Weg..." Conclusion "Übrigens, mit `rw [h₁, ←h₂]` könnte man mehrere `rw` zusammenfassen." Tactics assumption rw