This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
import TestGame.Metadata
import Std.Tactic.RCases
import Mathlib.Tactic.Contrapose
import Mathlib.Tactic.Use
import Mathlib.Tactic.Ring
-- TODO: `even`/`odd` sind in Algebra.Parity. Not ported yet
def even (a : ℕ) : Prop := ∃ r, a = 2 * r
def odd (a : ℕ) : Prop := ∃ k, a = 2 * k + 1
lemma not_odd {n : ℕ} : ¬ odd n ↔ even n := by sorry
lemma not_even {n : ℕ} : ¬ even n ↔ odd n := by sorry
lemma even_square (n : ℕ) : even n → even (n ^ 2) := by
intro ⟨x, hx⟩
unfold even at *
use 2 * x ^ 2
rw [hx]
ring
def prime (n : ℕ) : Prop := (2 ≤ n) ∧ ∀ a b, n = a * b → a = 1 ∨ b = 1
Game "TestGame"
World "Nat"
Level 4
Title "Für alle"
Introduction
"
Eine Primzahl könnte man folgendermassen implementieren:
```
def prime (p : ℕ) : Prop := (2 ≤ p) ∧ (∀ a b, p = a * b → a = 1 ∨ b = 1)
```
Also, eine Zahl `p` ungleich `0` oder `1`, für die gilt wenn `a * b = p` dann ist
entweder `a` oder `b` eins.
(Tatsächlich ist eine Primzahl dann etwas genereller definiert, aber dazu mehr später.)
"
Statement
"Wenn `n * m` eine Primzahl ist, dann ist einer der beiden Faktoren eins."
(p n m : ℕ) (h : prime p) (h₂ : p = m * n) : n = 1 ∨ m = 1 := by