|
|
|
|
import Adam.Metadata
|
|
|
|
|
import Std.Tactic.RCases
|
|
|
|
|
import Mathlib.Tactic.Contrapose
|
|
|
|
|
import Mathlib.Tactic.Use
|
|
|
|
|
import Mathlib.Tactic.Ring
|
|
|
|
|
|
|
|
|
|
import Mathlib.Algebra.Parity
|
|
|
|
|
|
|
|
|
|
set_option tactic.hygienic false
|
|
|
|
|
|
|
|
|
|
Game "Adam"
|
|
|
|
|
World "Predicate"
|
|
|
|
|
Level 7
|
|
|
|
|
|
|
|
|
|
Title "Gerade/Ungerade"
|
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
|
"
|
|
|
|
|
Sofort taucht das nächste Blatt auf. Anscheinend hatten sie sich auf einen Kompromiss geeinigt.
|
|
|
|
|
"
|
|
|
|
|
|
|
|
|
|
Statement odd_square (n : ℕ) (h : Odd n) : Odd (n ^ 2) := by
|
|
|
|
|
unfold Odd at *
|
|
|
|
|
rcases h with ⟨r, hr⟩
|
|
|
|
|
Hint "**Robo**: Ich hab noch einen Trick auf Lager:
|
|
|
|
|
Wenn du jetzt herausfinden willst, welche Zahl Du einsetzen musst, könntest
|
|
|
|
|
Du schon jetzt mit `rw [{hr}]` weitermachen …"
|
|
|
|
|
rw [hr]
|
|
|
|
|
Hint "**Robo**: Wenn Du jetzt `ring` benötigst, dann schreibt es einfach alles in
|
|
|
|
|
Normalform um, das hilft beim Vergleichen."
|
|
|
|
|
ring
|
|
|
|
|
Hint "**Du**: Was bedeutet `ring_nf`?
|
|
|
|
|
|
|
|
|
|
**Robo**: Wenn man `ring` nicht am Schluss benützt, sollte man stattdessen `ring_nf`
|
|
|
|
|
schreiben, aber die funktionieren praktisch gleich."
|
|
|
|
|
use 2 * (r + r ^ 2)
|
|
|
|
|
ring
|
|
|
|
|
|
|
|
|
|
-- TODO: Allow `ring_nf` as part of `ring`.
|
|
|
|
|
|
|
|
|
|
Conclusion "Applaus!"
|
|
|
|
|
|