import Adam.Metadata
import Std.Tactic.RCases
import Mathlib.Tactic.Contrapose
import Mathlib.Tactic.Use
import Mathlib.Tactic.Ring

import Adam.ToBePorted

Game "Adam"
World "Contradiction"
Level 6

Title "Contradiction"

Introduction
"
**Du**: Sag mal Robo, das hätte ich aber auch als Widerspruch anstatt Kontraposition
beweisen können?

**Robo**: Klar. `contrapose` ist eine Kontraposition, `by_contra` ein Widerspruchsbeweis.
Probiers doch einfach!
In diesem Kapitel hast du also folgende Taktiken kennengelernt:


Als Vergleich zwischen Beweisen \"per Widerspruch\"
und \"per Kontraposition\", beweise die Gleiche Aufgabe indem
du mit `by_contra` einen Widerspruch suchst.
"

open Nat

Statement (n : ℕ) (h : Odd (n ^ 2)) : Odd n := by
  Hint "**Robo**: Fang diesmal mit `by_contra g` an!"
  by_contra g
  Hint "**Robo**: Jetzt würde ich einen Widerspruch zu `Odd (n ^ 2)` führen."
  Hint "**Robo**: Also `suffices g : ¬ Odd (n ^ 2)`."
  suffices d : ¬ Odd (n ^ 2)
  contradiction
  rw [←even_iff_not_odd] at *
  apply even_square
  assumption

DisabledTactic contrapose revert

Conclusion "**Robo**: Bravo! Hier nochmals ein Überblick, was wir jetzt alles auf diesem
Mond gelernt haben:

|       | Taktik          | Beispiel                                               |
|:------|:----------------|:-------------------------------------------------------|
| 177   | `have`          | Zwischenresultat annehmen.                             |
| 18    | `suffices`      | Zwischenresultat annehmen.                             |
| 19    | `by_contra`     | Widerspruch. (startet einen Widerspruch)               |
| *3*   | `contradiction` | *(Schliesst einen Widerspruchsbeweis)*                 |
| 20    | `contrapose`    | Kontraposition.                                        |
| *9*   | `revert`        | Nützlich um danach `contrapose` anzuwenden.            |
"
