|
|
import Adam.Metadata
|
|
|
|
|
|
import Adam.Options.MathlibPart
|
|
|
|
|
|
set_option tactic.hygienic false
|
|
|
|
|
|
open Nat
|
|
|
|
|
|
Game "Adam"
|
|
|
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**: Ah und jetzt falls `n ≠ 0`."
|
|
|
Branch
|
|
|
simp only [ne_eq, succ_ne_zero, not_false_iff, iff_true]
|
|
|
Hint "**Robo**: Warte! Den Rest geb ich dir als Lemma: `Nat.suc_pos`."
|
|
|
apply Nat.succ_pos
|
|
|
Branch
|
|
|
simp?
|
|
|
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 Nat.succ_pos'
|
|
|
LemmaTab "Nat"
|
|
|
|
|
|
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."
|