Merge branch 'main' of github.com:leanprover-community/lean4game
This commit is contained in:
@@ -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,
|
||||
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?
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ $$
|
||||
(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.
|
||||
|
||||
**Robo**: Genau! Das machst Du mit `rw [{h}] at {g}`."
|
||||
**Robo**: Genau! Das machst du mit `rw [{h}] at {g}`."
|
||||
rw [h] at g
|
||||
Hint (hidden := true) "**Robo**: Schau mal durch die Annahmen."
|
||||
assumption
|
||||
|
||||
@@ -17,7 +17,7 @@ Title "Gerade/Ungerade"
|
||||
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 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
|
||||
@@ -33,10 +33,10 @@ Schließlich taucht von irgendwo aus der Menge folgendes Papier auf:
|
||||
"
|
||||
|
||||
Statement even_square (n : ℕ) (h : Even n) : Even (n ^ 2) := by
|
||||
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
|
||||
öffnest du diese Definition mit `unfold Even at *` einmal.
|
||||
Dann siehst Du besser, was los ist."
|
||||
Dann siehst du besser, was los ist."
|
||||
Branch
|
||||
unfold Even
|
||||
Hint "Robo**: Am besten machst Du auch noch `unfold Even at h`, damit Du verstehst, was los ist."
|
||||
@@ -49,18 +49,18 @@ Statement even_square (n : ℕ) (h : Even n) : Even (n ^ 2) := by
|
||||
|
||||
**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
|
||||
Dir leider nicht sagen, welche Zahl passt.
|
||||
dir leider nicht sagen, welche Zahl passt.
|
||||
"
|
||||
Branch
|
||||
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
|
||||
Hint (hidden := true) "**Du**: Ah, und jetzt `ring`!"
|
||||
ring
|
||||
use 2 * r ^ 2
|
||||
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 [hr]
|
||||
ring
|
||||
|
||||
@@ -34,11 +34,11 @@ Statement odd_square (n : ℕ) (h : Odd n) : Odd (n ^ 2) := by
|
||||
das `r` nehmen, das laut Annahme existieren muss."
|
||||
rcases h with ⟨r, hr⟩
|
||||
Hint "**Robo**: Ich hab noch einen Trick auf Lager:
|
||||
Wenn du jetzt noch nicht weißt, welche Zahl Du einsetzen musst, könntest
|
||||
Du schon jetzt mit `rw [{hr}]` weitermachen …"
|
||||
Wenn du jetzt noch nicht weißt, welche Zahl du einsetzen musst, könntest
|
||||
du schon jetzt mit `rw [{hr}]` weitermachen …"
|
||||
Branch
|
||||
rw [hr]
|
||||
Hint "**Robo**: Wenn Du jetzt `ring` brauchst, dann schreibt es einfach alles in
|
||||
Hint "**Robo**: Wenn du jetzt `ring` brauchst, dann schreibt es einfach alles in
|
||||
Normalform um, das hilft beim Vergleichen."
|
||||
ring
|
||||
Hint "**Du**: Was bedeutet `ring_nf`?
|
||||
@@ -49,11 +49,11 @@ Statement odd_square (n : ℕ) (h : Odd n) : Odd (n ^ 2) := by
|
||||
ring
|
||||
rcases h with ⟨r, hr⟩
|
||||
Hint "**Robo**: Ich hab noch einen Trick auf Lager:
|
||||
Wenn du jetzt noch nicht weißt, welche Zahl Du einsetzen musst, könntest
|
||||
Wenn du jetzt noch nicht weißt, welche Zahl du einsetzen musst, könntest
|
||||
Du schon jetzt mit `rw [{hr}]` weitermachen…"
|
||||
Branch
|
||||
rw [hr]
|
||||
Hint "**Robo**: Wenn Du jetzt `ring` brauchst, dann schreibt es einfach alles in
|
||||
Hint "**Robo**: Wenn du jetzt `ring` brauchst, dann schreibt es einfach alles in
|
||||
Normalform um, das hilft beim Vergleichen."
|
||||
ring
|
||||
Hint "**Du**: Was bedeutet `ring_nf`?
|
||||
|
||||
@@ -39,7 +39,7 @@ Nach längerem Durcheinander findet ein weiteres Blatt aus der Menge zu Euch.
|
||||
Statement : ∀ (x : ℕ), (Even x) → Odd (1 + x) := by
|
||||
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."
|
||||
intro x h
|
||||
unfold Even at h
|
||||
|
||||
@@ -32,7 +32,7 @@ open Nat
|
||||
Statement : ¬ ∃ (n : ℕ), ∀ (k : ℕ) , Odd (n + k) := by
|
||||
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)
|
||||
@@ -44,12 +44,12 @@ Statement : ¬ ∃ (n : ℕ), ∀ (k : ℕ) , Odd (n + k) := by
|
||||
push_neg
|
||||
Hint "**Robo**: Dieser Lösungsweg scheint mir etwas zu schwierig.
|
||||
Ich würde nochmal zurückgehen und schauen,
|
||||
dass Du irgendwie `¬Odd` erhältst.
|
||||
Das kannst Du dann mit `rw [←even_iff_not_odd]`
|
||||
dass du irgendwie `¬Odd` erhältst.
|
||||
Das kannst du dann mit `rw [←even_iff_not_odd]`
|
||||
zu `Even` umwandeln."
|
||||
push_neg
|
||||
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?
|
||||
|
||||
@@ -61,12 +61,12 @@ Statement : ¬ ∃ (n : ℕ), ∀ (k : ℕ) , Odd (n + k) := by
|
||||
Ich würde jetzt lieber mit `use` eine richtige Zahl angeben, und danach umschreiben."
|
||||
Branch
|
||||
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
|
||||
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
|
||||
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]
|
||||
-- TODO: if I write `tauto` here, I get a weird error
|
||||
unfold Even
|
||||
|
||||
Reference in New Issue
Block a user