small fixes

pull/43/head
Jon Eugster 2 years ago
parent 7091f8adac
commit daa45e4f9e

@ -44,7 +44,7 @@ function App() {
if (finished) { if (finished) {
mainComponent = <GoodBye message={conclusion} /> mainComponent = <GoodBye message={conclusion} />
} else if (curLevel > 0) { } else if (curLevel > 0) {
mainComponent = <Level nbLevels={5} level={curLevel} setCurLevel={setCurLevel} setLevelTitle={setLevelTitle} setFinished={setFinished}/> mainComponent = <Level nbLevels={99} level={curLevel} setCurLevel={setCurLevel} setLevelTitle={setLevelTitle} setFinished={setFinished}/>
} else { } else {
mainComponent = <Welcome setNbLevels={setNbLevels} startGame={startGame} setConclusion={setConclusion}/> mainComponent = <Welcome setNbLevels={setNbLevels} startGame={startGame} setConclusion={setConclusion}/>
} }

@ -1,4 +1,5 @@
import TestGame.Metadata import TestGame.Metadata
import Mathlib
Game "TestGame" Game "TestGame"
World "TestWorld" 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. das eine durch das andere zu ersetzen.
" "
Statement umschreiben Statement (A : Prop) (hA : A) : A := by
"
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 assumption
-- Gleich am Anfang anzeigen. -- Statement umschreiben
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 -- Angenommen man hat die Gleichheiten
`c` im Goal mit `d` ersetzen." -- `a = b`, `a = d`, `c = d`.
-- Zeige dass `b = c`.
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 -- (a b c d : ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c := by
`\\1`, `\\2`, `\\3`, …" -- rw [h₁]
-- rw [←h₂]
Message (a : ) (b : ) (c : ) (d : ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = d => -- assumption
"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." -- -- Gleich am Anfang anzeigen.
-- Message (a : ) (b : ) (c : ) (d : ) (h₁ : c = d) (h₂ : a = b) (h₃ : a = d) : b = c =>
-- TODO: Muss ich das wirklich mehrmals auflisten? -- "Wenn man eine Annahme `(h₁ : c = d)` hat, kann man mit `rw [h₁]` (oder `rewrite [h₁]`) das erste
Message (x : ) : x = x => -- `c` im Goal mit `d` ersetzen."
"Der Hauptunterschied zwischen `rw` und `rewrite` ist, dass das erste automatisch versucht,
anschliessend `rfl` anzuwenden. Bei `rewrite` musst du `rfl` explizit noch aufrufen." -- 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 Conclusion "Übrigens, mit `rw [h₁] at h₂` kann man auch eine andere Annahme umschreiben
anstatt dem Goal." anstatt dem Goal."
-- TODO: Das macht es doch unmöglich mit den Messages... -- TODO: Das macht es doch unmöglich mit den Messages...
Tactics assumption Tactics assumption rw
Tactics rw

@ -1,5 +1,7 @@
import TestGame.Metadata import TestGame.Metadata
set_option tactic.hygienic false
Game "TestGame" Game "TestGame"
World "TestWorld" World "TestWorld"
Level 8 Level 8
@ -8,7 +10,8 @@ Title "Implikation"
Introduction 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`. und das Goal wird zu `B`.
" "

@ -26,5 +26,4 @@ Statement
rw [←h₂] rw [←h₂]
assumption assumption
Tactics rw Tactics rw assumption
Tactics assumption

@ -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. ob das Goal aus solchen Einzelteilen \"konstruiert\" werden kann.
" "
Tactics constructor Tactics constructor assumption
Tactics assumption
-- TODO : `case mpr =>` ist mathematisch noch sinnvoll. -- TODO : `case mpr =>` ist mathematisch noch sinnvoll.

@ -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 => Message (A : Prop) (B : Prop) (C : Prop) (h : A → C) : C ∧ A =>
"Ein UND im Goal kann mit `constructor` aufgeteilt werden." "Ein UND im Goal kann mit `constructor` aufgeteilt werden."
Tactics left right assumption constructor rcases Tactics left right assumption constructor rcases apply

Loading…
Cancel
Save