pull/68/head
Jon Eugster 3 years ago
parent a18ad27985
commit a4cb28df7b

@ -110,3 +110,15 @@ wie andere Objekte verwenden.
Note: `=>` wird in mathlib oft auch `↦` (`\\maps`) geschrieben. 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.L02_Pos
import Adam.Levels.Inequality.L03_Linarith import Adam.Levels.Inequality.L03_Linarith
import Adam.Levels.Inequality.L04_Linarith import Adam.Levels.Inequality.L04_Linarith
import Adam.Levels.Inequality.L05_DrinkersParadox
Game "Adam" Game "Adam"
World "Inequality" World "Inequality"
Title "Ungleichung" Title "Traum"
Introduction " Introduction "
Später erinnerst du dich gar nicht mehr wo und wann du diese Unterhaltung hattest, geschweige 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 Statement (x y : ) (h₂ : 5 * y ≤ 35 - 2 * x) (h₃ : 2 * y ≤ x + 3) : y ≤ 5 := by
linarith linarith
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…"

@ -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…"
Loading…
Cancel
Save