pull/43/head
Jon Eugster 3 years ago
parent c065dcc5e3
commit cbd1867148

@ -8,6 +8,7 @@ import TestGame.Levels.Prime
import TestGame.Levels.Induction import TestGame.Levels.Induction
import TestGame.Levels.Numbers import TestGame.Levels.Numbers
import TestGame.Levels.Inequality
import TestGame.Levels.LeanStuff import TestGame.Levels.LeanStuff
import TestGame.Levels.SetTheory import TestGame.Levels.SetTheory
@ -43,9 +44,10 @@ Conclusion
Path Proposition → Implication → Predicate → Prime Path Proposition → Implication → Predicate → Prime
Path Predicate → Contradiction → LeanStuff → SetTheory → SetTheory2 → SetFunction Path Predicate → Contradiction → LeanStuff → SetTheory → SetTheory2 → SetFunction
Path Predicate → Induction → LeanStuff → Function → SetFunction
Path SetTheory2 → Numbers Path SetTheory2 → Numbers
Path Module → Basis → Module2 Path Module → Basis → Module2
Path Contradiction → Inequality → Induction → LeanStuff → Function → SetFunction
MakeGame MakeGame

@ -37,6 +37,15 @@ LemmaDoc imp_iff_not_or as imp_iff_not_or in "Logic"
`(A B : Prop)` `(A B : Prop)`
" "
LemmaDoc Nat.succ_pos as Nat.succ_pos in "Nat"
"
"
LemmaDoc zero_lt_iff as zero_lt_iff in "Nat"
"
"
LemmaDoc zero_add as zero_add in "Addition" LemmaDoc zero_add as zero_add in "Addition"
"This lemma says `∀ a : , 0 + a = a`." "This lemma says `∀ a : , 0 + a = a`."

@ -17,4 +17,4 @@ TODO
Statement Statement
"TODO: Find an exercise." "TODO: Find an exercise."
(U S T V : Type _) (f : U → V) (g : V → T) (x : U) : (g ∘ f) x = g (f x) := by (U S T V : Type _) (f : U → V) (g : V → T) (x : U) : (g ∘ f) x = g (f x) := by
trivial simp only [Function.comp_apply]

@ -32,8 +32,6 @@ Zum Beispiel kennt es ein Lemma das ungefähr so aussieht:
lemma sum_const_add (n : ) : (∑ i in Fin n, 0) = 0 := by lemma sum_const_add (n : ) : (∑ i in Fin n, 0) = 0 := by
sorry sorry
``` ```
Mit `simp?` anstatt `simp` kannst du zudem schauen, welche Lemmas von `simp` benutzt wurde.
" "
open BigOperators open BigOperators

@ -1,10 +1,8 @@
import TestGame.Levels.Prime.L01_Linarith import TestGame.Levels.Prime.L01_Dvd
import TestGame.Levels.Prime.L02_Linarith
import TestGame.Levels.Prime.L03_Dvd
import TestGame.Levels.Prime.L04_Prime import TestGame.Levels.Prime.L04_Prime
import TestGame.Levels.Prime.L05_Prime import TestGame.Levels.Prime.L05_Prime
import TestGame.Levels.Prime.L06_ExistsUnique import TestGame.Levels.Prime.L06_ExistsUnique
Game "TestGame" Game "TestGame"
World "Prime" World "Prime"
Title "mehr Nat" Title "Teilbarkeit"

@ -1,29 +0,0 @@
import TestGame.Metadata
import Mathlib.Tactic.Linarith
import TestGame.ToBePorted
Game "TestGame"
World "Prime"
Level 1
Title "Kleinergleich"
Introduction
"
Ungleichheiten werden in Lean generell immer als Kleinergleich `≤` (`\\le`) oder `<`
geschrieben.
Die Symbole `≥` und `>` gibt es zwar auch, sind aber nur Notation für die gleiche
Aussage mit `≤` und `<`.
Die Taktik `linarith` kann alle Systeme von linearen (Un-)gleichungen über ``, ``, etc. lösen.
Über `` ist sie etwas schwächer, aber einfache Aussagen kann sie trotzdem beweisen.
"
Statement
"Wenn $n \\ge 2$, zeige, dass $n$ nich Null sein kann."
(n : ) (h : 2 ≤ n) : n ≠ 0 := by
linarith
NewTactics linarith

@ -1,31 +0,0 @@
import TestGame.Metadata
import Mathlib.Tactic.Linarith
Game "TestGame"
World "Prime"
Level 2
Title "Linarith"
Introduction
"
Sobald man mit einem Ring arbeitet, der eine lineare Order hat (also z.B. `` oder ``),
ist `linarith` stärker und kann Systeme von Gleichungen und Ungleichungen angehen.
`linarith` kann aber nur mit linearen Ungleichungen umgehen, mit Termen der Form `x ^ 2`
kann es nicht umgehen.
"
Statement
"Angenommen man hat für zwei Ganzzahlen $x, y$ folgende Ungleichungen.
$$
\\begin{aligned} 5 * y &\\le 35 - 2 * x \\\\ 2 * y &\\le x + 3 \\end{aligned}
$$
Zeige, dass $y \\le 5$.
"
(x y : )
(h₂ : 5 * y ≤ 35 - 2 * x)
(h₃ : 2 * y ≤ x + 3)
: y ≤ 5 := by
linarith

@ -1,29 +0,0 @@
import TestGame.Metadata
import Mathlib.Tactic.Ring
Game "TestGame"
World "Prime"
Level 3
Title "Teilbarkeit"
Introduction
"
Die Aussage \"$m$ teilt $n$.\" wird in Lean als `m | n` (`\\|`) geschrieben.
**Wichtig:** `` (Teilbarkeit) ist ein spezielles Unicode Symbol, das nicht dem
senkrechten Strich auf der Tastatur (`|`) entspricht. Man erhält es mit `\\|`.
`m n` bedeutet `∃ c, n = m * c`, das heisst, man kann damit genau gleich umgehen
wie mit einem `∃`-Quantifier.
"
Statement dvd_add
"Wenn $m$ ein Teiler von $n$ und $k$ ist, dann teilt es die Summe."
(n m k : ) (h : m n) (g : m k) : m n + k := by
rcases h with ⟨x, h⟩
rcases g with ⟨y, g⟩
use x + y
rw [h, g]
ring

@ -11,20 +11,21 @@ import TestGame.ToBePorted
Game "TestGame" Game "TestGame"
World "Prime" World "Prime"
Level 4 Level 2
Title "Primzahlen" Title "Primzahlen"
Introduction Introduction
" "
Um zu sagen, dass eine natürliche Zahl $n$ eine Primzahl ist, braucht man Eine Primzahl wird mit `(n : ) (h : Nat.Prime n)` dargestellt.
eine Aussage `Nat.Prime n`, ähnlich wie `Even n`.
Primzahlen sind ein Objekt in Lean, das genug abstrakt definiert ist, dass es sich Wichtige Lemmas über Primzhalen werden mit
aus mathematischer Sicht nicht lohnt mit der Definition zu arbeiten.
Alle wichtigen Lemmas um mit Primzahlen zu arbeiten sind in ```
[`import Data.Nat.Prime`](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Nat/Prime.html) import Data.Nat.Prime
```
importiert (siehe
[Docs](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Nat/Prime.html))
Insbesondere `Nat.prime_def_lt''` welches die aus der Schule bekannte Definition einer Insbesondere `Nat.prime_def_lt''` welches die aus der Schule bekannte Definition einer
Primzahl `Prime p ↔ 2 ≤ p ∧ (∀ m, m p → m = 1 m = p)` gibt. Primzahl `Prime p ↔ 2 ≤ p ∧ (∀ m, m p → m = 1 m = p)` gibt.

@ -11,7 +11,7 @@ import TestGame.ToBePorted
Game "TestGame" Game "TestGame"
World "Prime" World "Prime"
Level 5 Level 3
Title "Primzahlen" Title "Primzahlen"

@ -11,7 +11,7 @@ import TestGame.ToBePorted
Game "TestGame" Game "TestGame"
World "Prime" World "Prime"
Level 6 Level 4
Title "Existiert eindeutig" Title "Existiert eindeutig"

@ -61,12 +61,33 @@ TacticDoc rewrite
Wie `rw` aber ruft `rfl` am Schluss nicht automatisch auf. Wie `rw` aber ruft `rfl` am Schluss nicht automatisch auf.
" "
TacticDoc induction
"
## Beschreibung
Wie `rw` aber ruft `rfl` am Schluss nicht automatisch auf.
"
TacticDoc linarith TacticDoc linarith
" "
## Beschreibung ## Beschreibung
" "
TacticDoc fin_cases
"
## Beschreibung
"
TacticDoc funext
"
## Beschreibung
"
TacticDoc rw TacticDoc rw
" "
## Beschreibung ## Beschreibung

Loading…
Cancel
Save