theorem
theorem
は名前付きで命題を証明するための構文です.より正確には,theorem
は証明項を定義するための構文だといえます.
/-- 自然数に右から0を足しても変わらない -/
theorem add_zero {n : Nat} : n + 0 = n := by simp
-- `add_zero` という項の型が,命題の内容になっている
#check (add_zero : ∀ {n : Nat}, n + 0 = n)
def との違い
theorem
コマンドは特定の型を持つ項を定義するという意味で,def
と同じです.実際,def
を使っても証明項を定義することは可能です. しかし theorem
を使っても関数などを定義することはできません.theorem
で宣言できる項は命題のみです.
def add_zero' {n : Nat} : n + 0 = n := by simp
/--
error: type of theorem 'Theorem.frac' is not a proposition
Nat → Nat
-/
theorem frac (n : Nat) : Nat :=
match n with
| 0 => 1
| n + 1 => (n + 1) * frac n