level
This commit is contained in:
@@ -110,3 +110,15 @@ wie andere Objekte verwenden.
|
||||
|
||||
Note: `=>` wird in mathlib oft auch `↦` (`\\maps`) geschrieben.
|
||||
"
|
||||
|
||||
DefinitionDoc Inhabited as "Inhabited" "
|
||||
`Inhabited U` ist eine Instanz, die aussagt, dass `U` mindestens ein Element
|
||||
enthält.
|
||||
|
||||
Hat man eine solche Instanz, kann man immer das Element `(default : U)` verwenden.
|
||||
|
||||
Was `default` genau ist hängt davon ab, wie `Inhabited U` bewiesen wurde. Es könnte
|
||||
also alles sein und man sollte sich nicht darauf verlassen, dass `default` eine
|
||||
bestimmte Eigenschaft hat. Z.B. ist `(default : ℕ) = 0` aber es hätte genau so gut
|
||||
als `1` oder `2` definiert werden können.
|
||||
"
|
||||
|
||||
@@ -2,10 +2,11 @@ import Adam.Levels.Inequality.L01_LE
|
||||
import Adam.Levels.Inequality.L02_Pos
|
||||
import Adam.Levels.Inequality.L03_Linarith
|
||||
import Adam.Levels.Inequality.L04_Linarith
|
||||
import Adam.Levels.Inequality.L05_DrinkersParadox
|
||||
|
||||
Game "Adam"
|
||||
World "Inequality"
|
||||
Title "Ungleichung"
|
||||
Title "Traum"
|
||||
|
||||
Introduction "
|
||||
Später erinnerst du dich gar nicht mehr wo und wann du diese Unterhaltung hattest, geschweige
|
||||
|
||||
@@ -24,6 +24,4 @@ $$
|
||||
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…"
|
||||
Conclusion "**Du**: Boah, das ist schon gar nicht schlecht."
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
import Adam.Metadata
|
||||
|
||||
import Adam.Options.MathlibPart
|
||||
|
||||
Game "Adam"
|
||||
World "Inequality"
|
||||
Level 5
|
||||
|
||||
Title "Drinker's Paradox"
|
||||
|
||||
set_option tactic.hygienic false
|
||||
|
||||
Introduction
|
||||
"
|
||||
**weitere Person**: Jetzt aber zu einem anderen Thema. Kennt ihr eigentlich das
|
||||
Drinker-Paradoxon?
|
||||
|
||||
**Robo**: Das ist in meinem System. *In dieser Bar gibt es eine Person, so dass
|
||||
falls diese Person jetzt am drinken ist, dann sind alle am trinken*.
|
||||
|
||||
**weitere Person**: Genau! Könnt ihr mir das beweisen?
|
||||
"
|
||||
|
||||
open Function
|
||||
|
||||
Statement {People : Type} [Inhabited People] (isDrinking : People → Prop) :
|
||||
∃ (x : People), isDrinking x → ∀ (y : People), isDrinking y := by
|
||||
Hint "**Du**: Wenn `p` eine Person ist, dann ist also `isDrinking p` eine Aussage,
|
||||
die wahr oder falsch ist. Soweit so gut.
|
||||
Wieso hat er aber `Inhabited People` hinzugefügt?
|
||||
|
||||
**Robo**: Die Aussage ist falsch, wenn die Bar leer wäre, da dann keine solche
|
||||
Person existieren kann. Jedenfalls kannst du dadurch jederzeit `default`, oder lang
|
||||
`(default : Person)`, schreiben, wenn du einfach irgendeine Person brauchst.
|
||||
|
||||
**Du**: Und wie fang ich jetzt an?
|
||||
|
||||
**Robo**: Du könntest eine Fallunterscheidung machen, ob die Aussage
|
||||
`∀ (y : People), isDrinking y` wahr oder falsch ist."
|
||||
Hint (hidden := true) "**Robo**: Schau mal `by_cases` an."
|
||||
by_cases ∀ y, isDrinking y
|
||||
Hint (hidden := true) "**Du**: Und wen nehm ich jetzt?
|
||||
|
||||
**Robo**: Wie gesagt, `default` ist eine x-beliebige Person."
|
||||
use (default : People)
|
||||
intro
|
||||
assumption
|
||||
Hint (hidden := true) "**Robo**: Du könntest hier mit `push_neg at {h}` weitermachen."
|
||||
push_neg at h
|
||||
rcases h with ⟨p, hp⟩
|
||||
use p
|
||||
intro hp'
|
||||
Hint (hidden := true) "**Robo**: Was siehst du, wenn du `{hp}` und `{hp'}` anschaust?"
|
||||
contradiction
|
||||
|
||||
LemmaTab "Logic"
|
||||
NewDefinition Inhabited
|
||||
|
||||
Conclusion
|
||||
"**weitere Person**: Fantastisch! Zum wohl!
|
||||
|
||||
…und damit endet auch deine Erinnerung und wer weiss was du anschließend gemacht hast…"
|
||||
Reference in New Issue
Block a user