import TestGame.Metadata
import Mathlib.Data.Nat.Prime

import Std.Tactic.RCases
import Mathlib.Tactic.LeftRight
import Mathlib.Tactic.Contrapose
import Mathlib.Tactic.Use
import Mathlib.Tactic.Ring

import TestGame.ToBePorted

Game "TestGame"
World "Prime"
Level 2

Title "Primzahlen"

Introduction
"
Eine Primzahl wird mit `(n : ℕ) (h : Nat.Prime n)` dargestellt.

Wichtige Lemmas über Primzhalen werden mit

```
import Data.Nat.Prime
```
importiert (siehe
[Docs](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Nat/Prime.html)).

Insbesondere `Nat.prime_def_lt''` welches die aus der Schule bekannte Definition einer
Primzahl `Prime p ↔ 2 ≤ p ∧ (∀ m, m ∣ p → m = 1 ∨ m = p)` gibt.

Beachte: In Lean gibt es auch noch den Ausdruck `Prime n`, der beschreibt generelle
Primelemente in einem generellen Ring. Wenn man mit natürlichen
Zahlen arbeitet, ist es besser `Nat.Prime` zu verwenden, obwohl man natürlich zeigen kann
dass die beiden äquivalent sind.
"

Statement
"Zeige dass die einzigen Teiler einer Primzahl $1$ und $p$ sind."
    (p : ℕ) (h : Nat.Prime p) : ∀ (x : ℕ), (x ∣ p) → x = 1 ∨ x = p := by
  rw [Nat.prime_def_lt''] at h
  rcases h with ⟨_, h₂⟩
  assumption

NewLemma Nat.prime_def_lt''
