-- These are propositions, of type `Prop`. #check 2 + 2 = 4
def FermatLastTheorem := ∀ x y z n : ℕ, n > 2 ∧ x * y * z ≠ 0 → x ^ n + y ^ n ≠ z ^ n
#check FermatLastTheorem
-- These are proofs of propositions. theorem easy : 2 + 2 = 4 := rfl
#check easy
theorem hard : FermatLastTheorem := sorry
#check hard
-- Here are some proofs. example : ∀ m n : Nat, Even n → Even (m * n) := fun m n ⟨k, (hk : n = k + k)⟩ ↦ have hmn : m * n = m * k + m * k := by rw [hk, mul_add] show ∃ l, m * n = l + l from ⟨_, hmn⟩
example : ∀ m n : Nat, Even n → Even (m * n) := fun m n ⟨k, hk⟩ ↦ ⟨m * k, by rw [hk, mul_add]⟩
example : ∀ m n : Nat, Even n → Even (m * n) := by -- Say m and n are natural numbers, and assume n=2*k. rintro m n ⟨k, hk⟩ -- We need to prove m*n is twice a natural number. Let's show it's twice m*k. use m * k -- Substitute for n, rw [hk] -- and now it's obvious. ring
example : ∀ m n : Nat, Even n → Even (m * n) := by rintro m n ⟨k, hk⟩; use m * k; rw [hk]; ring
example : ∀ m n : Nat, Even n → Even (m * n) := by intros; simp [*, parity_simps]