konsequente Kleinschreibung von du, dein, dir

pull/54/head
Marcus Zibrowius 3 years ago
parent 23abcaf488
commit e947c434a8

@ -26,20 +26,20 @@ Introduction
# Game Over oder QED? # Game Over oder QED?
Willkommen zu unserem Prototyp eines Lean4-Lernspiels. Hier lernst du computer-gestützte Willkommen zu unserem Prototyp eines Lean4-Lernspiels. Hier lernst du computer-gestützte
Beweisführung. Das Interface ist etwas vereinfacht, aber wenn Du den *Editor Mode* aktivierst, fühlt es sich Beweisführung. Das Interface ist etwas vereinfacht, aber wenn du den *Editor Mode* aktivierst, fühlt es sich
fast genauso an wie eine professionalle IDE, etwa VSCode. fast genauso an wie eine professionalle IDE, etwa VSCode.
Rechts siehst du eine Übersicht. Das Spiel besteht aus mehreren Planeten, und jeder Planet hat mehrere Levels, Rechts siehst du eine Übersicht. Das Spiel besteht aus mehreren Planeten, und jeder Planet hat mehrere Levels,
die in Form von grauen Punkten dargestellt sind. Gelöste Levels werden grün. die in Form von grauen Punkten dargestellt sind. Gelöste Levels werden grün.
Klicke auf den ersten Planeten \"Logo\", um deine Reise zu starten. Klicke auf den ersten Planeten *Logo*, um deine Reise zu starten.
### Spielstand ### Spielstand
Dein Spielstand wird lokal in deinem Browser als *site data* gespeichert. Dein Spielstand wird lokal in deinem Browser als *site data* gespeichert.
Solltest du diese löschen, verlierst du deinen Spielstand! Solltest du diese löschen, verlierst du deinen Spielstand!
Viele Browser löschen *site data* und *cookies* zusammen. Viele Browser löschen *site data* und *cookies* zusammen.
Du kannst aber jederzeit jedes Level spielen, auch wenn Du vorhergende Levels noch nicht gelöst hast. Du kannst aber jederzeit jedes Level spielen, auch wenn du vorhergende Levels noch nicht gelöst hast.
### Funding ### Funding

@ -17,7 +17,7 @@ Ein einziger, einsamer Formalosoph, der sich als Benedictus vorstellt, erwartet
**Benedictus**: Schön, dass Ihr gekommen seid! Ich habe schon auf Euch gewartet! **Benedictus**: Schön, dass Ihr gekommen seid! Ich habe schon auf Euch gewartet!
**Du**: Hast Du auch ein paar dringende Fragen … ? **Du**: Hast du auch ein paar dringende Fragen … ?
**Benedictus**: Ach nein, aus dem Alter bin ich heraus. Aber ich kann mir denken, wie es Euch auf Implis und Quantus ergangen ist. Und glaubt, mir auf den anderen Planeten wird es nicht viel besser. Aber ich kann Euch vielleicht ein bisschen vorbereiten. **Benedictus**: Ach nein, aus dem Alter bin ich heraus. Aber ich kann mir denken, wie es Euch auf Implis und Quantus ergangen ist. Und glaubt, mir auf den anderen Planeten wird es nicht viel besser. Aber ich kann Euch vielleicht ein bisschen vorbereiten.

@ -39,13 +39,13 @@ Statement (A B : Prop) (h : A → ¬ B) (k : A ∧ B) : False := by
rcases k with ⟨h₁, h₂⟩ rcases k with ⟨h₁, h₂⟩
Hint "**Du**: Und jetzt … Hint "**Du**: Und jetzt …
**Benedictus**: … solltest Du Dir ein passendes Zwischenresultat zurechtlegen. **Benedictus**: … solltest du dir ein passendes Zwischenresultat zurechtlegen.
**Robo**: Ja! Probier mal `have g : ¬ B`!" **Robo**: Ja! Probier mal `have g : ¬ B`!"
have g : ¬ B have g : ¬ B
· Hint "**Du**: Was? Jetzt hab ich einfach angenommen, dass sei richtig? · Hint "**Du**: Was? Jetzt hab ich einfach angenommen, dass sei richtig?
**Robo**: Nee, jetzt musst Du das erst noch beweisen, bevor Du es dann benutzen kannst." **Robo**: Nee, jetzt musst du das erst noch beweisen, bevor du es dann benutzen kannst."
Hint (hidden := true) "**Robo**: `apply` sollte helfen" Hint (hidden := true) "**Robo**: `apply` sollte helfen"
apply h apply h
assumption assumption

@ -38,7 +38,7 @@ Introduction
Statement Statement
(A B : Prop) (h : A → ¬ B) (k₁ : A) (k₂ : B) : False := by (A B : Prop) (h : A → ¬ B) (k₁ : A) (k₂ : B) : False := by
Hint "**Robo**: Ich weiss was er meint! Anstatt `have` kannst Du auch `suffices` Hint "**Robo**: Ich weiss was er meint! Anstatt `have` kannst du auch `suffices`
verwenden. Das funktioniert genau gleich, außer, dass dann die beiden Beweisziele vertauscht sind. verwenden. Das funktioniert genau gleich, außer, dass dann die beiden Beweisziele vertauscht sind.
**Du**: Also nach `suffices g : ¬B` muss ich dann zuerst zeigen, wie man mit `g` den Beweis **Du**: Also nach `suffices g : ¬B` muss ich dann zuerst zeigen, wie man mit `g` den Beweis
@ -46,9 +46,9 @@ Statement
**Robo**: Genau!" **Robo**: Genau!"
suffices g : ¬ B suffices g : ¬ B
Hint "**Robo**: Also hier beendest Du den Beweis unter der Annahme `{g}` sei wahr." Hint "**Robo**: Also hier beendest du den Beweis unter der Annahme `{g}` sei wahr."
contradiction contradiction
Hint "**Robo**: Und hier beweist Du das Zwischenresultat." Hint "**Robo**: Und hier beweist du das Zwischenresultat."
apply h apply h
assumption assumption

@ -30,21 +30,21 @@ Introduction
-- steht: -- steht:
Statement (A B : Prop) (g : A → B) (b : ¬ B) : ¬ A := by Statement (A B : Prop) (g : A → B) (b : ¬ B) : ¬ A := by
Hint "**Robo**: Ein `¬` im Goal heißt häufig, dass Du einen Widerspruchsbeweis führen Hint "**Robo**: Ein `¬` im Goal heißt häufig, dass du einen Widerspruchsbeweis führen
möchtest. möchtest.
**Du**: Und wie mache ich das? Mit `contradiction`? **Du**: Und wie mache ich das? Mit `contradiction`?
**Robo**: Mit `by_contra h` fängst Du einen Widerspruchsbeweis an. Und mit `contradiction` schließt Du ihn ab." **Robo**: Mit `by_contra h` fängst du einen Widerspruchsbeweis an. Und mit `contradiction` schließt du ihn ab."
by_contra h by_contra h
Hint "**Robo**: Jetzt hast du also eine Annahme `{h} : {A}`, und damit musst Du einen Widerspruch herleiten. Hint "**Robo**: Jetzt hast du also eine Annahme `{h} : {A}`, und damit musst du einen Widerspruch herleiten.
Du könntest zum Beispiel jetzt mit `suffices` sagten, welchen Widerspruch Du gern herleiten möchtest, etwa `suffices k : B` Du könntest zum Beispiel jetzt mit `suffices` sagten, welchen Widerspruch du gern herleiten möchtest, etwa `suffices k : B`
" "
suffices k : B suffices k : B
Hint "**Du**: Ah, und jetzt kann ich einfach sagen dass sich die Annahmen `{B}` und `¬{B}` sich widersprechen." Hint "**Du**: Ah, und jetzt kann ich einfach sagen dass sich die Annahmen `{B}` und `¬{B}` sich widersprechen."
contradiction contradiction
Hint "**Robo**: Und jetzt musst Du nur noch das Zwischenresultat herleiten, dass zu diesem Widerspruch geführt hat." Hint "**Robo**: Und jetzt musst du nur noch das Zwischenresultat herleiten, dass zu diesem Widerspruch geführt hat."
apply g apply g
assumption assumption

@ -22,7 +22,7 @@ Introduction
Statement not_imp_not (A B : Prop) : A → B ↔ (¬ B → ¬ A) := by Statement not_imp_not (A B : Prop) : A → B ↔ (¬ B → ¬ A) := by
Hint "**Du**: Ja, das habe ich tatsächlich schon einmal gesehen. Hint "**Du**: Ja, das habe ich tatsächlich schon einmal gesehen.
**Robo**: Ja, klar hast Du das schon einmal gesehen. Das benutzen Mathematiker doch ständig. Wenn ihnen zu $A ⇒ B$ nichts einfällt, zeigen sie stattdessen $¬B ⇒ ¬A$. Ich würde das ja statt *Kontraposition* oder `not_imp_not` eher *von_hinten_durch_die_Brust_ins_Auge* nennen. Aber gut, ich will mich nicht einmisschen. **Robo**: Ja, klar hast du das schon einmal gesehen. Das benutzen Mathematiker doch ständig. Wenn ihnen zu $A ⇒ B$ nichts einfällt, zeigen sie stattdessen $¬B ⇒ ¬A$. Ich würde das ja statt *Kontraposition* oder `not_imp_not` eher *von_hinten_durch_die_Brust_ins_Auge* nennen. Aber gut, ich will mich nicht einmisschen.
" "
Hint (hidden := true) "**Robo**: Fang doch mal mit `constructor` an." Hint (hidden := true) "**Robo**: Fang doch mal mit `constructor` an."
constructor constructor

@ -42,7 +42,7 @@ Statement (n : ) (h : Odd (n ^ 2)): Odd n := by
**Du**: Richtig. Von hinten durch die Brust … Aber warte, im Moment steht da doch gar kein `→`. **Du**: Richtig. Von hinten durch die Brust … Aber warte, im Moment steht da doch gar kein `→`.
**Robo**: Erinner Dich an `revert`. Mit `revert {h}` kannst du die Annahme `{h}` als Implikationsannahme ins Beweissziel schieben." **Robo**: Erinner dich an `revert`. Mit `revert {h}` kannst du die Annahme `{h}` als Implikationsannahme ins Beweissziel schieben."
revert h revert h
Hint "**Du**: Und jetzt kann ich dieses Kontrapositionslemma anwenden? Wie hieß das noch einmal? Hint "**Du**: Und jetzt kann ich dieses Kontrapositionslemma anwenden? Wie hieß das noch einmal?

@ -22,7 +22,7 @@ der andere eines mit
def g : := fun x ↦ if 0 ≤ x then 2*x else 0 def g : := fun x ↦ if 0 ≤ x then 2*x else 0
``` ```
und gibt Dir ein Blatt mit einer einzelnen Zeile am oberen Ende. und gibt dir ein Blatt mit einer einzelnen Zeile am oberen Ende.
" "
open Set open Set

@ -14,7 +14,7 @@ eine Inverse Funktion bestehe. Jetzt steht ihr aber schon seit einer halben Stun
und der Gelehrte möchte wissen, wie das den genau ginge. und der Gelehrte möchte wissen, wie das den genau ginge.
Offensichtlich kennt er diese Aussage als `Function.bijective_iff_has_inverse` aus seinen Büchern, Offensichtlich kennt er diese Aussage als `Function.bijective_iff_has_inverse` aus seinen Büchern,
aber er möchte, dass Du ihm das hier und jetzt nochmals von Grund auf zeigst. aber er möchte, dass du ihm das hier und jetzt nochmals von Grund auf zeigst.
" "
open Function open Function

@ -14,7 +14,7 @@ eine Inverse Funktion bestehe. Jetzt steht ihr aber schon seit einer halben Stun
und der Gelehrte möchte wissen, wie das den genau ginge. und der Gelehrte möchte wissen, wie das den genau ginge.
Offensichtlich kennt er diese Aussage als `Function.bijective_iff_has_inverse` aus seinen Büchern, Offensichtlich kennt er diese Aussage als `Function.bijective_iff_has_inverse` aus seinen Büchern,
aber er möchte, dass Du ihm das hier und jetzt nochmals von Grund auf zeigst. aber er möchte, dass du ihm das hier und jetzt nochmals von Grund auf zeigst.
" "
open Function open Function

@ -20,7 +20,7 @@ Statement (A B : Prop) (hb : B) : A → (A ∧ B) := by
**Du**: Einen Moment. Das ist ja gerade so eine Implikation (`\\to`). Wir nehmen an, dass `{B}` gilt, und wollen zeigen, dass dann gilt `{A}` impliziert `{A} und {B}`. Ja, klar! Natürlich stimmt das. **Du**: Einen Moment. Das ist ja gerade so eine Implikation (`\\to`). Wir nehmen an, dass `{B}` gilt, und wollen zeigen, dass dann gilt `{A}` impliziert `{A} und {B}`. Ja, klar! Natürlich stimmt das.
Der Operationsleiter sieht Dich erwartungsvoll an. Der Operationsleiter sieht dich erwartungsvoll an.
**Du** *(leise zu Robo)*: Soll ich ihm `tauto` aufschreiben? **Du** *(leise zu Robo)*: Soll ich ihm `tauto` aufschreiben?
@ -29,11 +29,11 @@ Statement (A B : Prop) (hb : B) : A → (A ∧ B) := by
*Du**: Aber wie denn? Ich glaube, ich würde als erstes gern so etwas sagen wie 'Nehmen wir also an, `{A}` gilt …' *Du**: Aber wie denn? Ich glaube, ich würde als erstes gern so etwas sagen wie 'Nehmen wir also an, `{A}` gilt …'
**Robo**: Ja, gute Idee. Wähle dazu für Deine Annahme einfach einen Namen, zum Beispiel `h`, und schreib `intro h`." **Robo**: Ja, gute Idee. Wähle dazu für deine Annahme einfach einen Namen, zum Beispiel `h`, und schreib `intro h`."
intro hA intro hA
Hint "**Du**: OK. Jetzt habe ich also sowohl `{A}` als auch `{B}` in meinen Annahmen und muss `{A} ∧ {B}` zeigen. Hint "**Du**: OK. Jetzt habe ich also sowohl `{A}` als auch `{B}` in meinen Annahmen und muss `{A} ∧ {B}` zeigen.
**Robo**: Genau. Und wie das geht, weißt Du ja schon." **Robo**: Genau. Und wie das geht, weißt du ja schon."
constructor constructor
assumption assumption
assumption assumption

@ -17,7 +17,7 @@ Statement (A B : Prop) (mp : A → B) (mpr : B → A) : A ↔ B := by
**Du**: Also ganz ähnlich wie das UND, `A ∧ B`? **Du**: Also ganz ähnlich wie das UND, `A ∧ B`?
**Robo**: Genau. Entsprechend kannst Du auch hier mit `constructor` anfangen." **Robo**: Genau. Entsprechend kannst du auch hier mit `constructor` anfangen."
constructor constructor
Hint "**Du**: Ah, und die beiden Teile habe ich schon in den Annahmen." Hint "**Du**: Ah, und die beiden Teile habe ich schon in den Annahmen."
assumption assumption
@ -32,7 +32,7 @@ heißen bei `(h : A ↔ B)` die beiden Teile `h.mp` und `h.mpr`.
**Du**: Also `h.mp` ist `A → B`? Wieso `mp`? **Du**: Also `h.mp` ist `A → B`? Wieso `mp`?
**Robo**: `mp` steht für Modus Ponens`. Der Modus ponens ist eine schon in der antiken Logik geläufige Schlussfigur, die in vielen logischen Systemen … Ach nee, das wolltest Du ja nicht hören. Das \"r\" in `mpr` steht für \"reverse\", weil's die Rückrichtung ist. **Robo**: `mp` steht für Modus Ponens`. Der Modus ponens ist eine schon in der antiken Logik geläufige Schlussfigur, die in vielen logischen Systemen … Ach nee, das wolltest du ja nicht hören. Das \"r\" in `mpr` steht für \"reverse\", weil's die Rückrichtung ist.
" "
NewTactic constructor NewTactic constructor

@ -33,7 +33,7 @@ Statement (A B C D : Prop) (h₁ : C ↔ D) (h₂ : A ↔ B) (h₃ : A ↔ D) :
sowas wie `A ↔ A` erhältst, kann `rfl` das beweisen. sowas wie `A ↔ A` erhältst, kann `rfl` das beweisen.
**Robo: Da fällt mir ein, `rw` wendet ohnehin auch versuchsweise `rfl` an. **Robo: Da fällt mir ein, `rw` wendet ohnehin auch versuchsweise `rfl` an.
Das heißt, Du musst `rfl` nicht einmal ausschreiben." Das heißt, du musst `rfl` nicht einmal ausschreiben."
rw [h₂] rw [h₂]
rw [←h₂] rw [←h₂]
assumption assumption

@ -23,7 +23,7 @@ Statement (A B C : Prop) (h : A ↔ B) (g : B → C) : A → C := by
**Du**: Weiß ich doch!" **Du**: Weiß ich doch!"
apply g apply g
Hint "**Robo**: … und Du kannst die Implikation `{A} → {B}` genau gleich mit Hint "**Robo**: … und du kannst die Implikation `{A} → {B}` genau gleich mit
`apply {h}.mp` anwenden. `apply {h}.mp` anwenden.
**Du**: Aber normalerweise könnte ich hier auch `rw [← h]` sagen, oder? **Du**: Aber normalerweise könnte ich hier auch `rw [← h]` sagen, oder?

@ -23,11 +23,11 @@ Statement (A B : Prop) : (A ↔ B) → (A → B) := by
intro h intro h
Hint "**Du**: Also, ich kenne `rw [h]` und `apply h.mp`, aber das wollten wir ja diesmal vermeiden. Hint "**Du**: Also, ich kenne `rw [h]` und `apply h.mp`, aber das wollten wir ja diesmal vermeiden.
**Robo**: Was Du machen könntest, ist, mit `rcases h with ⟨mp, mpr⟩` die Annahme in zwei **Robo**: Was du machen könntest, ist, mit `rcases h with ⟨mp, mpr⟩` die Annahme in zwei
Teile aufteilen." Teile aufteilen."
Branch Branch
intro a intro a
Hint "**Robo**: Hier müsstest Du jetzt `rw [←h]` oder `apply h.mp` benutzen. Hint "**Robo**: Hier müsstest du jetzt `rw [←h]` oder `apply h.mp` benutzen.
Geh lieber einen Schritt zurück, sodass das Goal `A → B` ist." Geh lieber einen Schritt zurück, sodass das Goal `A → B` ist."
rcases h with ⟨mp, mpr⟩ rcases h with ⟨mp, mpr⟩
Hint (hidden := true) "**Du**: Ah, und jetzt ist das Beweisziel in den Annahmen." Hint (hidden := true) "**Du**: Ah, und jetzt ist das Beweisziel in den Annahmen."

@ -20,8 +20,8 @@ Statement (A : Prop) : ¬A A := by
Hint "**Du**: Das scheint wieder ziemlich offensichtlich. Hint "**Du**: Das scheint wieder ziemlich offensichtlich.
**Robo**: Nee, offensichtlich ist das nicht. Aber ich glaube, es gibt ein wohlbekanntens Lemma, das hier weiterhilft: **Robo**: Nee, offensichtlich ist das nicht. Aber ich glaube, es gibt ein wohlbekanntens Lemma, das hier weiterhilft:
`not_or_of_imp` besagt `(A → B) → ¬ A B`. Da die rechte Seite der Implikation mit Deinem Beweisziel übereinstimmt, `not_or_of_imp` besagt `(A → B) → ¬ A B`. Da die rechte Seite der Implikation mit deinem Beweisziel übereinstimmt,
kannst Du es mit `apply not_or_of_imp` anwenden. kannst du es mit `apply not_or_of_imp` anwenden.
**Du**: `Wohlbekannt` auf Implis? **Du**: `Wohlbekannt` auf Implis?
@ -30,12 +30,12 @@ Statement (A : Prop) : ¬A A := by
right right
Hint "**Du**: Und jetzt? Hint "**Du**: Und jetzt?
**Robo**: `right/left` funktioniert hier nicht, da Du nicht weißt, ob `A` wahr oder falsch ist." **Robo**: `right/left` funktioniert hier nicht, da du nicht weißt, ob `A` wahr oder falsch ist."
Branch Branch
left left
Hint "**Du**: Und jetzt? Hint "**Du**: Und jetzt?
**Robo**: `right/left` funktioniert hier nicht, da Du nicht weißt, ob `A` wahr oder falsch ist." **Robo**: `right/left` funktioniert hier nicht, da du nicht weißt, ob `A` wahr oder falsch ist."
apply not_or_of_imp apply not_or_of_imp
Hint (hidden := true) "**Robo**: Ich würde wieder mit `intro` weitermachen." Hint (hidden := true) "**Robo**: Ich würde wieder mit `intro` weitermachen."
intro intro

@ -22,7 +22,7 @@ Wenn `A` wahr ist, beweisen wir die rechte Seite, sonst die Linke.
Statement (A : Prop) : ¬A A := by Statement (A : Prop) : ¬A A := by
Hint (hidden := true) "**Du**: Wie noch einmal? Hint (hidden := true) "**Du**: Wie noch einmal?
**Robo**: Also `by_cases h : A` erstellt zwei Goals. Im ersten hast Du `(h : A)` zur **Robo**: Also `by_cases h : A` erstellt zwei Goals. Im ersten hast du `(h : A)` zur
Verfügung, im zweiten `(h : ¬ A)`." Verfügung, im zweiten `(h : ¬ A)`."
by_cases h : A by_cases h : A
right right

@ -15,7 +15,7 @@ Introduction
" "
**Operationsleiter**: Ihr habt mir wirklich so geholfen! Hier ist das letzte Problem. Das habe ich von meinem Vorgänger geerbt. Er hat behauptet, wenn wir das lösen können, dann läuft hier wieder alles. Aber es sah mir immer viel zu schwierig aus, um es überhaupt zu versuchen. Wollt Ihr es einmal probieren? **Operationsleiter**: Ihr habt mir wirklich so geholfen! Hier ist das letzte Problem. Das habe ich von meinem Vorgänger geerbt. Er hat behauptet, wenn wir das lösen können, dann läuft hier wieder alles. Aber es sah mir immer viel zu schwierig aus, um es überhaupt zu versuchen. Wollt Ihr es einmal probieren?
**Du**: Klar, zeig her! Robo, kannst Du mir vielleicht auch noch einmal so eine nette Zusammenfassung anzeigen, was ich theoretisch in den letzten fünf Minuten gelernt habe? **Du**: Klar, zeig her! Robo, kannst du mir vielleicht auch noch einmal so eine nette Zusammenfassung anzeigen, was ich theoretisch in den letzten fünf Minuten gelernt habe?
**Robo**: Hier ist die Übersicht: **Robo**: Hier ist die Übersicht:
@ -49,8 +49,8 @@ Statement imp_iff_not_or (A B : Prop) : (A → B) ↔ ¬ A B := by
apply not_or_of_imp apply not_or_of_imp
Hint "**Du**: Gibt es für die Gegenrichtung auch ein Lemma? Hint "**Du**: Gibt es für die Gegenrichtung auch ein Lemma?
**Robo**: Leider nicht. Da musst Du manuell ran." **Robo**: Leider nicht. Da musst du manuell ran."
Hint (hidden := true) "**Robo**: Na Implikationen gehst Du immer mit `intro` an." Hint (hidden := true) "**Robo**: Na Implikationen gehst du immer mit `intro` an."
intro h intro h
intro ha intro ha
Hint (hidden := true) "**Robo**: Ich würde mal die Annahme `h` mit `rcases` aufteilen." Hint (hidden := true) "**Robo**: Ich würde mal die Annahme `h` mit `rcases` aufteilen."

@ -50,5 +50,5 @@ LemmaTab "Nat"
Conclusion "**Du**: Oh `simp` ist ja echt nicht schlecht… Conclusion "**Du**: Oh `simp` ist ja echt nicht schlecht…
Die andere Person scheint beeindruckt, hat aber gleichzeitig auch das Bedürfnis, Dich aus Die andere Person scheint beeindruckt, hat aber gleichzeitig auch das Bedürfnis, dich aus
der Reserve zu locken." der Reserve zu locken."

@ -26,4 +26,4 @@ Statement (x y : ) (h₂ : 5 * y ≤ 35 - 2 * x) (h₃ : 2 * y ≤ x + 3) : y
Conclusion "**Du**: Boah, das ist schon gar nicht schlecht. Conclusion "**Du**: Boah, das ist schon gar nicht schlecht.
Und damit endet auch Deine Erinnerung und wer weiss was du anschließend gemacht hast…" Und damit endet auch deine Erinnerung und wer weiss was du anschließend gemacht hast…"

@ -9,7 +9,7 @@ Title "Lean"
Introduction Introduction
"Während ihr weiter durch Täler, über Geröllhalden und zwischen monumentalen Steintürmen "Während ihr weiter durch Täler, über Geröllhalden und zwischen monumentalen Steintürmen
umherzieht, fragst Du eines Tages Robo. umherzieht, fragst du eines Tages Robo.
**Du**: Sag mal, hast du dir je Gedanken dazu gemacht, wie du eigentlich funktionierts? **Du**: Sag mal, hast du dir je Gedanken dazu gemacht, wie du eigentlich funktionierts?

@ -30,9 +30,9 @@ Nun herrscht betretenes Schweigen. Alle zucken mit den Schultern.
**Du**: Ist das nicht ein Widerspruch? **Du**: Ist das nicht ein Widerspruch?
**Robo**: Fragst Du, Du als Mathematiker? Nein, das ist kein Widerspruch. Das ist einfach eine „reine Existenzaussage“. **Robo**: Fragst du, du als Mathematiker? Nein, das ist kein Widerspruch. Das ist einfach eine „reine Existenzaussage“.
Du bist Dir nicht ganz sicher, wie ernst er das meint. Du bist dir nicht ganz sicher, wie ernst er das meint.
**Du**: Dann ich schlage vor, wir übergeben das Päckchen einfach an *alle* Bewohner. Dann haben wir es ja insbesondere der Königin übergeben. **Du**: Dann ich schlage vor, wir übergeben das Päckchen einfach an *alle* Bewohner. Dann haben wir es ja insbesondere der Königin übergeben.

@ -16,7 +16,7 @@ Statement (x y : ) : (x + y) ^ 2 = x ^ 2 + 2 * x * y + y ^ 2 := by
Hint "**Du**: Das ist doch Schulmathematik! Man rechnet das einfach aus, Hint "**Du**: Das ist doch Schulmathematik! Man rechnet das einfach aus,
indem man die Terme umsortiert. indem man die Terme umsortiert.
**Robo**: Wenn die Gleichung stimmt, kannst Du auf Leansch sogar einfach mit `ring` beweisen, dass das so ist. **Robo**: Wenn die Gleichung stimmt, kannst du auf Leansch sogar einfach mit `ring` beweisen, dass das so ist.
**Du**: Aber `` ist doch gar kein Ring? **Du**: Aber `` ist doch gar kein Ring?

@ -23,7 +23,7 @@ $$
(a b : ) (h : a = b) (g : a + a ^ 2 = b + 1) : b + b ^ 2 = b + 1 := by (a b : ) (h : a = b) (g : a + a ^ 2 = b + 1) : b + b ^ 2 = b + 1 := by
Hint "**Du**: Hier muss man, glaube ich, einfach in Annahme `{g}` die Variable `{a}` durch `{b}` ersetzen. Hint "**Du**: Hier muss man, glaube ich, einfach in Annahme `{g}` die Variable `{a}` durch `{b}` ersetzen.
**Robo**: Genau! Das machst Du mit `rw [{h}] at {g}`." **Robo**: Genau! Das machst du mit `rw [{h}] at {g}`."
rw [h] at g rw [h] at g
Hint (hidden := true) "**Robo**: Schau mal durch die Annahmen." Hint (hidden := true) "**Robo**: Schau mal durch die Annahmen."
assumption assumption

@ -17,7 +17,7 @@ Title "Gerade/Ungerade"
Introduction Introduction
" "
Ihr habt nun alle Fragen aus dem königlichen Päckchen beantwortet, und die Formalosophinnen applaudieren. Dann wollen Sie aber auch noch ein paar Fragen stellen, aber sie können sich nicht einigen, welche. Ihr habt nun alle Fragen aus dem königlichen Päckchen beantwortet, und die Formalosophinnen applaudieren. Dann wollen Sie aber auch noch ein paar Fragen stellen, aber sie können sich nicht einigen, welche.
Ihr heute abwechselnd die Rufe „Even“ und „Odd“ aus der Menge heraus. Deshalb zeigt Dir Robo vorsichtshalber schon einmal die entsprechenden Definitionen an: Ihr heute abwechselnd die Rufe „Even“ und „Odd“ aus der Menge heraus. Deshalb zeigt dir Robo vorsichtshalber schon einmal die entsprechenden Definitionen an:
``` ```
def Even (n : ) : Prop := ∃ r, n = r + r def Even (n : ) : Prop := ∃ r, n = r + r
@ -33,14 +33,14 @@ Schließlich taucht von irgendwo aus der Menge folgendes Papier auf:
" "
Statement even_square (n : ) (h : Even n) : Even (n ^ 2) := by Statement even_square (n : ) (h : Even n) : Even (n ^ 2) := by
Hint "**Robo**: Du kannst Dir mit `unfold Even` auch hier auf dem Papier die Definition sehen." Hint "**Robo**: Du kannst dir mit `unfold Even` auch hier auf dem Papier die Definition sehen."
Branch Branch
unfold Even unfold Even
Hint "Robo**: Am besten machst Du auch noch `unfold Even at h`, damit Du verstehst, was los ist." Hint "Robo**: Am besten machst du auch noch `unfold Even at h`, damit du verstehst, was los ist."
Hint "**Robo**: Wie Du oben siehst, ist `Even n` dadurch definiert, Hint "**Robo**: Wie du oben siehst, ist `Even n` dadurch definiert,
dass ein `r` existiert so dass `r + r = n` ist. Am besten dass ein `r` existiert so dass `r + r = n` ist. Am besten
öffnest du diese Definition mit `unfold Even at *` einmal. öffnest du diese Definition mit `unfold Even at *` einmal.
Dann siehst Du besser, was los ist. " Dann siehst du besser, was los ist. "
unfold Even at * unfold Even at *
Hint "**Du**: Also von `{h}` weiß ich jetzt, dass ein `r` existiert, so dass `r + r = n` … Hint "**Du**: Also von `{h}` weiß ich jetzt, dass ein `r` existiert, so dass `r + r = n` …
@ -50,17 +50,17 @@ Statement even_square (n : ) (h : Even n) : Even (n ^ 2) := by
**Robo**: Genau. Und mit `use _` gibst du diese Zahl an." **Robo**: Genau. Und mit `use _` gibst du diese Zahl an."
Hint (hidden := true) "**Robo**: Also sowas ähnliches wie `use 4 * r ^ 3`, aber ich kann Hint (hidden := true) "**Robo**: Also sowas ähnliches wie `use 4 * r ^ 3`, aber ich kann
Dir leider nicht sagen, welche Zahl passt. dir leider nicht sagen, welche Zahl passt.
" "
Branch Branch
rw [hr] rw [hr]
Hint "**Robo**: Das geht auch, jetzt musst Du aber wirklich `use` verwenden." Hint "**Robo**: Das geht auch, jetzt musst du aber wirklich `use` verwenden."
use 2 * r ^ 2 use 2 * r ^ 2
ring ring
use 2 * r ^ 2 use 2 * r ^ 2
Hint "**Du**: Ah, und jetzt `ring`! Hint "**Du**: Ah, und jetzt `ring`!
**Robo**: Aber zuerst musst Du noch mit **Robo**: Aber zuerst musst du noch mit
`rw` `n` durch `r + r` ersetzen, da `ring` das sonst nicht weiß." `rw` `n` durch `r + r` ersetzen, da `ring` das sonst nicht weiß."
rw [hr] rw [hr]
ring ring

@ -23,10 +23,10 @@ Statement odd_square (n : ) (h : Odd n) : Odd (n ^ 2) := by
unfold Odd at * unfold Odd at *
rcases h with ⟨r, hr⟩ rcases h with ⟨r, hr⟩
Hint "**Robo**: Ich hab noch einen Trick auf Lager: Hint "**Robo**: Ich hab noch einen Trick auf Lager:
Wenn du jetzt herausfinden willst, welche Zahl Du einsetzen musst, könntest Wenn du jetzt herausfinden willst, welche Zahl du einsetzen musst, könntest
Du schon jetzt mit `rw [{hr}]` weitermachen …" Du schon jetzt mit `rw [{hr}]` weitermachen …"
rw [hr] rw [hr]
Hint "**Robo**: Wenn Du jetzt `ring` benötigst, dann schreibt es einfach alles in Hint "**Robo**: Wenn du jetzt `ring` benötigst, dann schreibt es einfach alles in
Normalform um, das hilft beim Vergleichen." Normalform um, das hilft beim Vergleichen."
ring ring
Hint "**Du**: Was bedeutet `ring_nf`? Hint "**Du**: Was bedeutet `ring_nf`?

@ -37,7 +37,7 @@ Nach längerem Durcheinander findet ein weiteres Blatt aus der Menge zu Euch.
Statement : ∀ (x : ), (Even x) → Odd (1 + x) := by Statement : ∀ (x : ), (Even x) → Odd (1 + x) := by
Hint "**Du**: Das `∀` heisst sicher \"für alle\". Hint "**Du**: Das `∀` heisst sicher \"für alle\".
**Robo**: Und man schreibt `\\forall`. Ein `∀ x, …` im Beweisziel kannst Du wie eine **Robo**: Und man schreibt `\\forall`. Ein `∀ x, …` im Beweisziel kannst du wie eine
Implikation mit `intro x` angehen." Implikation mit `intro x` angehen."
intro x h intro x h
unfold Even at h unfold Even at h

@ -32,7 +32,7 @@ open Nat
Statement : ¬ ∃ (n : ), ∀ (k : ) , Odd (n + k) := by Statement : ¬ ∃ (n : ), ∀ (k : ) , Odd (n + k) := by
Hint "**Du**: Ich würde gern diese Negation `¬` am Quantor vorbeischieben. Hint "**Du**: Ich würde gern diese Negation `¬` am Quantor vorbeischieben.
**Robo**: `push_neg` macht genau das! Oder Du könntest `rw` mit den folgenden Lemmas verwenden: **Robo**: `push_neg` macht genau das! Oder du könntest `rw` mit den folgenden Lemmas verwenden:
``` ```
not_exists (A : Prop) : ¬ (∃ x, A) ↔ ∀x, (¬A) not_exists (A : Prop) : ¬ (∃ x, A) ↔ ∀x, (¬A)
@ -44,12 +44,12 @@ Statement : ¬ ∃ (n : ), ∀ (k : ) , Odd (n + k) := by
push_neg push_neg
Hint "**Robo**: Dieser Lösungsweg scheint mir etwas zu schwierig. Hint "**Robo**: Dieser Lösungsweg scheint mir etwas zu schwierig.
Ich würde nochmal zurückgehen und schauen, Ich würde nochmal zurückgehen und schauen,
dass Du irgendwie `¬Odd` erhältst. dass du irgendwie `¬Odd` erhältst.
Das kannst Du dann mit `rw [←even_iff_not_odd]` Das kannst du dann mit `rw [←even_iff_not_odd]`
zu `Even` umwandeln." zu `Even` umwandeln."
push_neg push_neg
intro n intro n
Hint "**Robo**: Jetzt brauchst Du eine Zahl mit `use`, und danach vermutlich das Lemma `←even_iff_not_odd` brauchen. Hint "**Robo**: Jetzt brauchst du eine Zahl mit `use`, und danach vermutlich das Lemma `←even_iff_not_odd` brauchen.
**Du**: Könnte ich jetzt schon `rw [←even_iff_not_odd]` anwenden? **Du**: Könnte ich jetzt schon `rw [←even_iff_not_odd]` anwenden?
@ -61,19 +61,19 @@ Statement : ¬ ∃ (n : ), ∀ (k : ) , Odd (n + k) := by
Ich würde jetzt lieber mit `use` eine richtige Zahl angeben, und danach umschreiben." Ich würde jetzt lieber mit `use` eine richtige Zahl angeben, und danach umschreiben."
Branch Branch
use n + 2 use n + 2
Hint "**Robo**: Gute Wahl! Jetzt kannst Du `←even_iff_not_odd` verwenden." Hint "**Robo**: Gute Wahl! Jetzt kannst du `←even_iff_not_odd` verwenden."
Branch Branch
use n + 4 use n + 4
Hint "**Robo**: Gute Wahl! Jetzt kannst Du `←even_iff_not_odd` verwenden." Hint "**Robo**: Gute Wahl! Jetzt kannst du `←even_iff_not_odd` verwenden."
use n use n
Hint "**Robo**: Gute Wahl! Jetzt kannst Du `←even_iff_not_odd` verwenden." Hint "**Robo**: Gute Wahl! Jetzt kannst du `←even_iff_not_odd` verwenden."
rw [←even_iff_not_odd] rw [←even_iff_not_odd]
unfold Even unfold Even
use n use n
--ring --ring
Conclusion "Die Formalosophinnen sind ganz begeistert. Conclusion "Die Formalosophinnen sind ganz begeistert.
Nachdem sich der Beifall gelegt hat, hast Du auch einmal eine Frage. Nachdem sich der Beifall gelegt hat, hast du auch einmal eine Frage.
**Du**: Kann uns hier irgendjemand vielleicht ein bisschen Orientierung im Formaloversum geben? **Du**: Kann uns hier irgendjemand vielleicht ein bisschen Orientierung im Formaloversum geben?
@ -83,7 +83,7 @@ Nachdem sich der Beifall gelegt hat, hast Du auch einmal eine Frage.
Die Frage war wieder zu konkret. Betretenes Schweigen. Die Frage war wieder zu konkret. Betretenes Schweigen.
**Robo**: Lass nur. Ich schlage vor, wir machen als nächstes einen Ausflug auf den Asteroiden da drüben. Und bevor Du fragst hier ist wieder ein Überblick, was Du auf diesem Planeten gelernt hast. **Robo**: Lass nur. Ich schlage vor, wir machen als nächstes einen Ausflug auf den Asteroiden da drüben. Und bevor du fragst hier ist wieder ein Überblick, was du auf diesem Planeten gelernt hast.
| | Beschreibung | | | Beschreibung |
|:--------------|:----------------------------| |:--------------|:----------------------------|

@ -19,21 +19,21 @@ Title "Logo"
Introduction " Introduction "
Durch eine unvorhergesehene und nicht-kanonische Singularität in der Raumzeit Durch eine unvorhergesehene und nicht-kanonische Singularität in der Raumzeit
bist Du ausversehen in ein Paralleluniversum gestolpert. Wie es aussieht, gibt es kein zurück. bist du ausversehen in ein Paralleluniversum gestolpert. Wie es aussieht, gibt es kein zurück.
Richte Dich besser darauf ein, hier bleiben und Dich zurechtzufinden zu müssen. Richte dich besser darauf ein, hier bleiben und dich zurechtzufinden zu müssen.
Wie es aussieht, gibt es hier viele nette kleine Planeten. Alle bewohnbar, und bis zu Wie es aussieht, gibt es hier viele nette kleine Planeten. Alle bewohnbar, und bis zu
sieben Sonnenuntergänge täglich inklusive. Nur werden sie allesamt von Formalosophen bewohnt, sieben Sonnenuntergänge täglich inklusive. Nur werden sie allesamt von Formalosophen bewohnt,
seltsamen Wesen mit ausgefallenen mathematischen Obsessionen. Und dummerweise hat sich seltsamen Wesen mit ausgefallenen mathematischen Obsessionen. Und dummerweise hat sich
herumgesprochen, dass Du in Deinem früheren Universum Mathematiker warst. Du wirst hier herumgesprochen, dass du in deinem früheren Universum Mathematiker warst. Du wirst hier
keine Ruhe finden, solange Du nicht lernst, ihren unablässigen Wissensdurst zu stillen. keine Ruhe finden, solange du nicht lernst, ihren unablässigen Wissensdurst zu stillen.
Es gibt nur zwei Schwierigkeiten: Erstens haben die Formalosophen allem Anschein nach Es gibt nur zwei Schwierigkeiten: Erstens haben die Formalosophen allem Anschein nach
überhaupt kein tieferes mathematisches Verständnis, und zweitens kommunizieren Sie über Mathematik überhaupt kein tieferes mathematisches Verständnis, und zweitens kommunizieren Sie über Mathematik
exklusiv in einem Dir fremden Dialekt, den sie Leansch [liːnʃ] nennen. exklusiv in einem dir fremden Dialekt, den sie Leansch [liːnʃ] nennen.
Zum Glück hat Robo mit Dir das Universum gewechselt. Zum Glück hat Robo mit dir das Universum gewechselt.
Robo, das ist Dein kleiner SmartElf. Robo ist war auch nicht die mathematische Leuchte, die Du Dir Robo, das ist dein kleiner SmartElf. Robo ist war auch nicht die mathematische Leuchte, die du Dir
in dieser Situation gewünscht hättest, aber es scheint, er hat irgendwo Leansch gelernt. in dieser Situation gewünscht hättest, aber es scheint, er hat irgendwo Leansch gelernt.
Und das ist Gold wert. Und das ist Gold wert.
" "

@ -14,7 +14,7 @@ Gerade seid Ihr auf Königin *Logisindes* Planeten. Sie kommt ohne Umschweife zu
**Logisinde** Werte Wesen aus fremden Welten, gestatten Sie eine Frage. Warum gilt … **Logisinde** Werte Wesen aus fremden Welten, gestatten Sie eine Frage. Warum gilt …
Und sie kritzelt etwas auf ein Stück Papier: oben ein paar Annahmen, unten eine Schlussfolgerung. Und sie kritzelt etwas auf ein Stück Papier: oben ein paar Annahmen, unten eine Schlussfolgerung.
Dazwischen sollst Du offenbar einen Beweis eintragen. Dazwischen sollst du offenbar einen Beweis eintragen.
Du siehst Robo hilflos an. Du siehst Robo hilflos an.
" "
@ -23,7 +23,7 @@ Statement ""
¬((¬B ¬ C) (A → B)) → (¬A B) ∧ ¬ (B ∧ C) := by ¬((¬B ¬ C) (A → B)) → (¬A B) ∧ ¬ (B ∧ C) := by
Hint "**Robo** Das ist ganz einfach. Mit `{A} {B} {C} : Prop` meint sie: Hint "**Robo** Das ist ganz einfach. Mit `{A} {B} {C} : Prop` meint sie:
`{A}`, `{B}` und `{C}` sind irgendwelche Aussagen (*propositions*). `{A}`, `{B}` und `{C}` sind irgendwelche Aussagen (*propositions*).
Und mit `→` meint sie ⇒, also “impliziert”. Die anderen Symbole kennst Du, oder? Und mit `→` meint sie ⇒, also “impliziert”. Die anderen Symbole kennst du, oder?
**Du** Ehhm, ja. Aber da muss ich jetzt trotzdem erst einmal überlegen. **Du** Ehhm, ja. Aber da muss ich jetzt trotzdem erst einmal überlegen.

@ -14,7 +14,7 @@ Fragen stellen würden. Logisinde winkt den ersten nach vorn. Er räuspert sich.
**Untertan** Warum ist $42 = 42$? **Untertan** Warum ist $42 = 42$?
Du schaust ihn fassungslos an. Du schaust ihn fassungslos an.
Er schreibt es Dir wieder auf. Er schreibt es dir wieder auf.
" "
Statement "" : Statement "" :

@ -18,7 +18,7 @@ Statement ""
**Du** Warum schreibt er dann nicht `{n} ∈ `?? **Du** Warum schreibt er dann nicht `{n} ∈ `??
**Robo** Weil das hier alles komische Typen sind … Ich kann Dir das später mal in Ruhe erklären. **Robo** Weil das hier alles komische Typen sind … Ich kann dir das später mal in Ruhe erklären.
Jetzt will ich erst einmal die Frage entschlüsseln. Jetzt will ich erst einmal die Frage entschlüsseln.
**Robo** Also, `{h₁}`, `{h₂}`, `{h₃}` sind einfach nur Namen für verschiedene Annahmen, und zwar **Robo** Also, `{h₁}`, `{h₂}`, `{h₃}` sind einfach nur Namen für verschiedene Annahmen, und zwar

@ -20,7 +20,7 @@ Statement ""
**Du** Und unter dieser Annahme sollen wir jetzt `{A}` beweisen? **Du** Und unter dieser Annahme sollen wir jetzt `{A}` beweisen?
**Robo** Ja. Da kommst Du jetzt selbst drauf, wie das geht, oder? **Robo** Ja. Da kommst du jetzt selbst drauf, wie das geht, oder?
" "
Hint (hidden := true) "**Robo**: Ist doch genau wie eben: Hint (hidden := true) "**Robo**: Ist doch genau wie eben:
die Aussage, die zu beweisen ist, gehört selbst zu den Annahmen. die Aussage, die zu beweisen ist, gehört selbst zu den Annahmen.

@ -18,7 +18,7 @@ bedingungslos wahr ist.
**Du** Und was genau ist dann zu beweisen? **Du** Und was genau ist dann zu beweisen?
**Robo** Ich glaube, nichts. Ich glaube, Du kannst einfach `trivial` schreiben. **Robo** Ich glaube, nichts. Ich glaube, du kannst einfach `trivial` schreiben.
" "
trivial trivial

@ -28,7 +28,7 @@ Insbesondere die gesuchte Aussage `{A}`.
**Du** Und wie erkläre ich das jetzt diesem Formalosophen? **Du** Und wie erkläre ich das jetzt diesem Formalosophen?
**Robo** Ich glaube, Du musst ihn darauf hinweisen, dass zwischen der allgemeingültigen **Robo** Ich glaube, du musst ihn darauf hinweisen, dass zwischen der allgemeingültigen
Annahme `True` und seiner Annahme `False` ein Widerspruch besteht. Probier mal `contradiction`." Annahme `True` und seiner Annahme `False` ein Widerspruch besteht. Probier mal `contradiction`."
contradiction contradiction

@ -41,7 +41,7 @@ konstruieren kann.
**Robo**: Schau mal, das ist Zauberpapier. **Robo**: Schau mal, das ist Zauberpapier.
Jetzt haben wir auf einmal zwei Beweisziele. Jetzt haben wir auf einmal zwei Beweisziele.
Hier ist dast Ziel `{A}`. Hier ist dast Ziel `{A}`.
Ich glaube, Du weißt schon, wie man die jeweils erreicht. Ich glaube, du weißt schon, wie man die jeweils erreicht.
Die Ziele stehen ja jeweils in den *Annahmen*. Die Ziele stehen ja jeweils in den *Annahmen*.
" "
assumption assumption
@ -50,7 +50,7 @@ Die Ziele stehen ja jeweils in den *Annahmen*.
**Robo**: Schau mal, das ist Zauberpapier. **Robo**: Schau mal, das ist Zauberpapier.
Jetzt haben wir auf einmal zwei Beweisziele. Jetzt haben wir auf einmal zwei Beweisziele.
Hier ist dast Ziel `{B}`. Hier ist dast Ziel `{B}`.
Ich glaube, Du weißt schon, wie man die jeweils erreicht. Ich glaube, du weißt schon, wie man die jeweils erreicht.
Die Ziele stehen ja jeweils in den *Annahmen*. Die Ziele stehen ja jeweils in den *Annahmen*.
" "
assumption assumption
@ -62,7 +62,7 @@ Conclusion
Ihm scheinen diese Fragen inzwischen Spaß zu machen. Ihm scheinen diese Fragen inzwischen Spaß zu machen.
**Robo** Meinst Du, dieser Hebel, an dem \"Editor mode\" steht, ist echt? **Robo** Meinst du, dieser Hebel, an dem \"Editor mode\" steht, ist echt?
Oder ist der nur gemalt? Probier mal! Oder ist der nur gemalt? Probier mal!
" "

@ -23,8 +23,8 @@ Statement ""
**Du** Moment, wie schreib ich *das* denn hier auf? **Du** Moment, wie schreib ich *das* denn hier auf?
**Robo** Die bleiden Klammern schreibst Du als `\\<` und `\\>`, oder gleichzeitig als `\\<>`. **Robo** Die bleiden Klammern schreibst du als `\\<` und `\\>`, oder gleichzeitig als `\\<>`.
Und h₁ schreibst Du einfach als `h\\1`. Aber Du kannst Dir auch einfach andere Namen Und h₁ schreibst du einfach als `h\\1`. Aber du kannst dir auch einfach andere Namen
für `h₁` und `h₂`, zum Beispiel `rcases {h} with ⟨hA, hBC⟩` für `h₁` und `h₂`, zum Beispiel `rcases {h} with ⟨hA, hBC⟩`
" "
Branch Branch

@ -20,8 +20,8 @@ Statement
(A B : Prop) (hA : A) : A (¬ B) := by (A B : Prop) (hA : A) : A (¬ B) := by
Hint "**Du** Muss ich jetzt wieder das Beweisziel de-konstruieren? Hint "**Du** Muss ich jetzt wieder das Beweisziel de-konstruieren?
**Robo** Nein, viel einfacher. Wenn Du eine Oder-Aussage beweisen sollst, musst Du Dich **Robo** Nein, viel einfacher. Wenn du eine Oder-Aussage beweisen sollst, musst du Dich
einfach entscheiden, ob Du die linke oder rechte Seite beweisen willst. einfach entscheiden, ob du die linke oder rechte Seite beweisen willst.
**Du** Und wie erkläre ich meinem Formalosophen, welche Seite ich gern beweisen würde? **Du** Und wie erkläre ich meinem Formalosophen, welche Seite ich gern beweisen würde?
Ich will natürlich `{A}` beweisen! Ich will natürlich `{A}` beweisen!
@ -29,7 +29,7 @@ Ich will natürlich `{A}` beweisen!
**Robo** Mit `left` bzw. `right`. Ist doch logisch, oder?" **Robo** Mit `left` bzw. `right`. Ist doch logisch, oder?"
Branch Branch
right right
Hint "**Robo** Wusste gar nicht, dass Du eine Links-Rechts-Schwäche hast. Probier's nochmal." Hint "**Robo** Wusste gar nicht, dass du eine Links-Rechts-Schwäche hast. Probier's nochmal."
left left
assumption assumption

@ -37,16 +37,16 @@ Wir sind ja gleich hier fertig, und können zu einem interessanteren Planeten we
**Robo** Ja, aber diesmal nicht `rcases {h} with ⟨h₁, h₂⟩`, sondern `rcases {h} with h | h`." **Robo** Ja, aber diesmal nicht `rcases {h} with ⟨h₁, h₂⟩`, sondern `rcases {h} with h | h`."
rcases h with h | h rcases h with h | h
Hint "**Robo** Hint "**Robo**
Jetzt musst Du Dein Ziel zweimal beweisen: Jetzt musst du dein Ziel zweimal beweisen:
Einmal unter Annahme der linken Seite `{A} {B}`, Einmal unter Annahme der linken Seite `{A} {B}`,
und einmal unter Annahme der rechten Seite `{A}`. und einmal unter Annahme der rechten Seite `{A}`.
Hier haben nehmen wir an, die linke Seite Hier haben nehmen wir an, die linke Seite
sei wahr." sei wahr."
Hint (hidden := true) " **Robo** Wie man mit einem Und in den Annahmen umgeht, Hint (hidden := true) " **Robo** Wie man mit einem Und in den Annahmen umgeht,
weißt Du doch schon: weißt du doch schon:
`rcases h with ⟨h₁, h₂⟩`. Zur Erinnerung: Für die Klammern schreibst Du `\\<>`." `rcases h with ⟨h₁, h₂⟩`. Zur Erinnerung: Für die Klammern schreibst du `\\<>`."
rcases h with ⟨h₁, h₂⟩ rcases h with ⟨h₁, h₂⟩
Hint "**Robo** Jetzt musst Du Dein Ziel zweimal beweisen: Hint "**Robo** Jetzt musst du dein Ziel zweimal beweisen:
Einmal unter Annahme der linken Seite `{A}`, Einmal unter Annahme der linken Seite `{A}`,
und einmal unter Annahme der rechten Seite `{A} {B}`. Hier haben nehmen wir an, die linke Seite und einmal unter Annahme der rechten Seite `{A} {B}`. Hier haben nehmen wir an, die linke Seite
sei wahr." sei wahr."
@ -55,10 +55,10 @@ sei wahr."
Conclusion Conclusion
"**Du** Ok, das scheint ihn zufriedenzustellen. Nur noch eine Seele… "**Du** Ok, das scheint ihn zufriedenzustellen. Nur noch eine Seele…
Kannst Du mir vorher noch einmal kurz alles Leansch zusammenfassen, Kannst du mir vorher noch einmal kurz alles Leansch zusammenfassen,
das Du mir bis hierher beigebracht hast? das du mir bis hierher beigebracht hast?
Robo strahlt überglücklich. Noch *nie* warst Du so auf ihn angewiesen. Robo strahlt überglücklich. Noch *nie* warst du so auf ihn angewiesen.
**Robo** Na klar, schau her! **Robo** Na klar, schau her!
@ -89,7 +89,7 @@ Robo strahlt überglücklich. Noch *nie* warst Du so auf ihn angewiesen.
## Taktiken ## Taktiken
Die Worte, die Du aktiv gebrauchen musst, heißen zusammengefasst `Taktiken`. Hier sind alle Taktiken, die wir auf diesem Planeten gebraucht haben: Die Worte, die du aktiv gebrauchen musst, heißen zusammengefasst `Taktiken`. Hier sind alle Taktiken, die wir auf diesem Planeten gebraucht haben:
| | Taktik | Beispiel | | | Taktik | Beispiel |
|:---|:--------------------------|:--------------------------------------------------| |:---|:--------------------------|:--------------------------------------------------|
@ -102,7 +102,7 @@ Die Worte, die Du aktiv gebrauchen musst, heißen zusammengefasst `Taktiken`. H
| 7ᵃ | `rcases h with ⟨h₁, h₂⟩` | Teilt ein UND in den Annahmen auf. | | 7ᵃ | `rcases h with ⟨h₁, h₂⟩` | Teilt ein UND in den Annahmen auf. |
| 7ᵇ | `rcases h with h \\| h` | Teilt ein ODER in den Annahmen in zwei Fälle auf. | | 7ᵇ | `rcases h with h \\| h` | Teilt ein ODER in den Annahmen in zwei Fälle auf. |
**Du** Woher weißt Du das eigentlich alles? **Du** Woher weißt du das eigentlich alles?
**Robo** Keine Ahnung. War, glaube ich, vorinstalliert. **Robo** Keine Ahnung. War, glaube ich, vorinstalliert.
" "

@ -14,8 +14,8 @@ Introduction
" "
Der letzte Untertan tritt vor. Ihr Anliegen ist etwas komplizierter als die vorherigen. Der letzte Untertan tritt vor. Ihr Anliegen ist etwas komplizierter als die vorherigen.
**Robo** Wirf einfach alles drauf, was Du gelernt hast. **Robo** Wirf einfach alles drauf, was du gelernt hast.
Hier, ich bin sogar so nett und zeig Dir noch einmal die vier Hier, ich bin sogar so nett und zeig dir noch einmal die vier
wichtigsten Taktiken für diese Situation an. wichtigsten Taktiken für diese Situation an.
| (Übersicht) | Und (`∧`) | Oder (``) | | (Übersicht) | Und (`∧`) | Oder (``) |
@ -45,7 +45,7 @@ Statement ""
right right
assumption assumption
rcases h rcases h
Hint (hidden := true) "**Robo**: Jetzt kannst Du das `∧` im Goal mit `constructor` angehen." Hint (hidden := true) "**Robo**: Jetzt kannst du das `∧` im Goal mit `constructor` angehen."
· constructor · constructor
· left · left
assumption assumption
@ -80,26 +80,26 @@ Statement ""
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A B) ∧ (A C) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A B) ∧ (A C) =>
-- "**Robo** Das `∧` in der Annahme kannst Du mit `rcases {h} with ⟨h₁, h₂⟩` zerlegen." -- "**Robo** Das `∧` in der Annahme kannst du mit `rcases {h} with ⟨h₁, h₂⟩` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) : (A B) ∧ (A C) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) : (A B) ∧ (A C) =>
-- "**Robo** Das `∧` im Goal kannst Du mit `constructor` zerlegen." -- "**Robo** Das `∧` im Goal kannst du mit `constructor` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A B) ∧ (A C) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A B) ∧ (A C) =>
-- "**Robo** Das `` in der Annahme kannst Du mit `rcases h with h | h` zerlegen." -- "**Robo** Das `` in der Annahme kannst du mit `rcases h with h | h` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A B) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A B) =>
-- "**Robo** Das `` in der Annahme kannst Du mit `rcases h with h | h` zerlegen." -- "**Robo** Das `` in der Annahme kannst du mit `rcases h with h | h` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A C) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : A (B ∧ C)) : (A C) =>
-- "**Robo** Das `` in der Annahme kannst Du mit `rcases h with h | h` zerlegen." -- "**Robo** Das `` in der Annahme kannst du mit `rcases h with h | h` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A B) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A B) =>
-- "**Robo** Das `∧` in der Annahme kannst Du mit `rcases h with ⟨h₁, h₂⟩` zerlegen." -- "**Robo** Das `∧` in der Annahme kannst du mit `rcases h with ⟨h₁, h₂⟩` zerlegen."
-- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A C) => -- HiddenHint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A C) =>
-- "**Robo** Das `∧` in der Annahme kannst Du mit `rcases {h} with ⟨h₁, h₂⟩` zerlegen." -- "**Robo** Das `∧` in der Annahme kannst du mit `rcases {h} with ⟨h₁, h₂⟩` zerlegen."
-- -- TODO: Hint nur Anhand der Annahmen? -- -- TODO: Hint nur Anhand der Annahmen?

Loading…
Cancel
Save