rename testgame to adam
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import TestGame.Metadata
|
||||
|
||||
Game "TestGame"
|
||||
World "Inequality"
|
||||
Level 1
|
||||
|
||||
Title "Kleinergleich"
|
||||
|
||||
Introduction
|
||||
"
|
||||
*(Gesrpäch)*
|
||||
|
||||
**Robo** (*lallend*, oder war's fröhlich proklamierend?):
|
||||
…und deshalb sind `≥` und `>` eigentlich nur Notationen für `≤`,
|
||||
welches man übrigens `\\le` schreibt, was für Less-Equal (also Kleinergleich) steht…
|
||||
|
||||
**Du**: Wir haben's verstanden, man benützt also Standartmässig lieber `≤` und `<`,
|
||||
aber damit weiß ich eh nichts anzufangen.
|
||||
|
||||
**dritte Person**: Komm schon, das kannst du ja sicher:
|
||||
"
|
||||
|
||||
Statement
|
||||
(n m : ℕ) : m < n ↔ m.succ ≤ n := by
|
||||
Hint "**Robo**: Du Narr! Das ist doch eine Kuriosität, dass `m < n` auf `ℕ` per Definition
|
||||
als `m + 1 ≤ n` definiert ist!
|
||||
|
||||
**dritte Person**: Du verdirbst den Witz! Ich wollte ihn doch nur testen."
|
||||
rfl
|
||||
|
||||
OnlyTactic rfl
|
||||
|
||||
Conclusion "**Du**: Ha. ha… Na aber jetzt mal ehrlich, könnt ihr mir ein bisschen mehr
|
||||
erzählen?"
|
||||
@@ -0,0 +1,53 @@
|
||||
import TestGame.Metadata
|
||||
|
||||
import Mathlib.Tactic.LibrarySearch
|
||||
|
||||
set_option tactic.hygienic false
|
||||
|
||||
Game "TestGame"
|
||||
World "Inequality"
|
||||
Level 2
|
||||
|
||||
Title "Kleinergleich"
|
||||
|
||||
Introduction
|
||||
"
|
||||
*weitere Person*: …ich sag dir, eine positive Zahl kann man sowohl mit `0 < n`
|
||||
als auch `n ≠ 0` darstellen.
|
||||
|
||||
*Robo*: Und da gibts leider keinen Standard dazu.
|
||||
|
||||
**weitere Person*: Ja und, da kann man ja einfach mit `Nat.pos_iff_ne_zero`
|
||||
wechseln. Wart mal, wieso galt das nochmals…
|
||||
"
|
||||
|
||||
Statement Nat.pos_iff_ne_zero (n : ℕ) : 0 < n ↔ n ≠ 0 := by
|
||||
Hint "**Robo** (*flüsternd*): Wenn du ein bisschen schwere Maschinerie auffahren willst,
|
||||
um in zu beeindrucken, hab ich was. Mach doch eine Fallunterscheidung ob `n` Null ist
|
||||
oder nicht!
|
||||
|
||||
**Du** (*flüsternd*): Und wie geht das?
|
||||
|
||||
**Robo** (*laut und selbstsicher*): Wir fangen mit `rcases n` an!"
|
||||
rcases n
|
||||
Hint "**Du**: Hmm, das muss man doch vereinfachen können.
|
||||
|
||||
**Robo** (*flüsternd*): Zweiter pompöser Auftritt: sag einfach `simp` und lass das alles
|
||||
automatisch geschehen."
|
||||
simp
|
||||
Hint "**Du**: Und hier fang ich wohl am besten an wie ich das schon kenne."
|
||||
constructor
|
||||
intro
|
||||
simp
|
||||
intro
|
||||
Hint "**Robo**: Warte! Den Rest geb ich dir als Lemma: `Nat.suc_pos`."
|
||||
apply Nat.succ_pos
|
||||
|
||||
NewTactic simp
|
||||
NewLemma Nat.succ_pos
|
||||
DisabledLemma Nat.pos_iff_ne_zero
|
||||
|
||||
Conclusion "**Du**: Oh `simp` ist ja echt nicht schlecht…
|
||||
|
||||
Die andere Person scheint beeindruckt, hat aber gleichzeitig auch das Bedürfnis, Dich aus
|
||||
der Reserve zu locken."
|
||||
@@ -0,0 +1,26 @@
|
||||
import TestGame.Metadata
|
||||
import Mathlib.Tactic.Linarith
|
||||
|
||||
Game "TestGame"
|
||||
World "Inequality"
|
||||
Level 3
|
||||
|
||||
Title "Linarith"
|
||||
|
||||
Introduction
|
||||
"
|
||||
**dritte Person**: Nah wenn wir so spielen:
|
||||
"
|
||||
|
||||
Statement (n : ℕ) (h : 2 ≤ n) : n ≠ 0 := by
|
||||
Hint "**Du**: `simp` geht hier nicht, was mir ja auch einläuchtet.
|
||||
|
||||
**Robo**: Ist auch keine Vereinfachung, die du machen willst. Stattdessen,
|
||||
`linarith` kann lineare Gleichungen und Ungleichungen lösen. Das ist das Powertool
|
||||
in der hinsicht."
|
||||
linarith
|
||||
|
||||
NewTactic linarith
|
||||
NewLemma Nat.pos_iff_ne_zero
|
||||
|
||||
Conclusion "**Du**: Naja so beeindruckend war das jetzt auch noch nicht."
|
||||
@@ -0,0 +1,29 @@
|
||||
import TestGame.Metadata
|
||||
import Mathlib.Tactic.Linarith
|
||||
|
||||
Game "TestGame"
|
||||
World "Inequality"
|
||||
Level 4
|
||||
|
||||
Title "Linarith"
|
||||
|
||||
Introduction
|
||||
"
|
||||
**Robo**: Die Taktik kann aber noch viel mehr.
|
||||
|
||||
**weitere Person**: Hier, probier mal!
|
||||
|
||||
$$
|
||||
\\begin{aligned}
|
||||
5 * y &\\le 35 - 2 * x \\\\
|
||||
2 * y &\\le x + 3
|
||||
\\end{aligned}
|
||||
$$
|
||||
"
|
||||
|
||||
Statement (x y : ℤ) (h₂ : 5 * y ≤ 35 - 2 * x) (h₃ : 2 * y ≤ x + 3) : y ≤ 5 := by
|
||||
linarith
|
||||
|
||||
Conclusion "**Du**: Boah, das ist schon gar nicht schlecht.
|
||||
|
||||
Und damit endet auch Deine Erinnerung und wer weiss was du anschließend gemacht hast…"
|
||||
@@ -0,0 +1,41 @@
|
||||
import TestGame.Metadata
|
||||
|
||||
import Mathlib
|
||||
|
||||
Game "TestGame"
|
||||
World "Inequality"
|
||||
Level 1
|
||||
|
||||
Title "Induktion"
|
||||
|
||||
set_option tactic.hygienic false
|
||||
|
||||
|
||||
Introduction
|
||||
"
|
||||
Hier lernst du Induktion und Ungleichungen kennen. Beides essenziele Grundlagen, die du
|
||||
für spätere Aufgaben brauchst.
|
||||
|
||||
Die Leantaktik `induction n` führt einen Induktionsbeweis über `(n : ℕ)`. Hier zuerst
|
||||
ein abstraktes Beispiel.
|
||||
"
|
||||
|
||||
Statement
|
||||
"Sei $P(n)$ eine logische Aussage über die natürliche Zahl.
|
||||
Agenommen $P(0)$ ist wahr und $P(m) \\Rightarrow P(m+1)$ für alle $m$,
|
||||
dann gilt $P(n)$ für alle $n \\in \\mathbb{N}.$"
|
||||
(n : ℕ) (P : ℕ → Prop) (h_base : P 0) (h_step : ∀ m, P m → P m.succ) : P n := by
|
||||
induction n
|
||||
assumption
|
||||
apply h_step
|
||||
assumption
|
||||
|
||||
Hint (P : ℕ → Prop) : P Nat.zero =>
|
||||
"Das ist die Induktionsverankerung, hier musst du $P(0)$ zeigen."
|
||||
|
||||
Hint (P : ℕ → Prop) (m : ℕ) (hi : P m) : P (Nat.succ m) =>
|
||||
"An der Stelle kommt der Beweis $P(m) \\Rightarrow P(m+1)$.
|
||||
|
||||
In diesem Beispiel kannst du `apply` benützen."
|
||||
|
||||
NewTactic induction
|
||||
Reference in New Issue
Block a user