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 4 Title "Primzahlen" Introduction " Um zu sagen, dass eine natürliche Zahl $n$ eine Primzahl ist, braucht man eine Aussage `Nat.Prime n`, ähnlich wie `Even n`. Primzahlen sind ein Objekt in Lean, das genug abstrakt definiert ist, dass es sich aus mathematischer Sicht nicht lohnt mit der Definition zu arbeiten. Alle wichtigen Lemmas um mit Primzahlen zu arbeiten sind in [`import Data.Nat.Prime`](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 NewLemmas Nat.prime_def_lt''