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!"

