Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-Lean4のお勉強 帰納法と再帰

Mathmatics In Lean4の第5章 初等数論の2つ目の話題は帰納法再帰です。自然数では定義が帰納的であること(自然数型は帰納型であること)を知ります。

inductive Nat
  | zero : Nat
  | succ (n : Nat) : Nat

この意味は、0はNat型、Nat型の要素を1つとってnとするとsucc nもNat型です。そしてsucc n=0となるようなnはありません。ちなみにsucc nはn+1とも書かれます。

 

次にこの型の上で階乗関数を再帰的に定義します。

def fac : ℕ → ℕ
  | 0 => 1
  | n + 1 => (n + 1) * fac n

 

そして階乗関数について幾つかの性質を証明します。

fac 0 = 1   "0の階乗は1"

fac (n+1) = (n+1)*fac n   "n+1の階乗はnの階乗にn+1をかけたものと等しい"

theorem fac_pos (n:Nat) : 0 < fac n := by ...   階乗の値は正である。

theorem dvd_fac {i n : ℕ} (ipos : 0 < i) (ile : i ≤ n) : i ∣ fac n := by ...

 nの階乗は1以上n以下の全ての自然数で割り切れる。

ここで数学的帰納法が登場し、それに対応するinduction'タクティクが紹介されます。とは言ってもあまり難しいものではありません。全ての自然数について成り立つ時ことを証明する際に、induction'タクティクを使うと、証明が2つに分かれて、0で成り立つことの証明とnで成り立つことを仮定してn+1でも成り立つことを証明します。0 < fac nの証明ではinduction'タクティクが必要になります。

 

ここまでの話のまとめの意味を込めて階乗関数の下からの評価 2 ^ (n - 1) ≤ fac nを証明します。まさにinduction'タクティクを使えばごく自然に証明は終了できます。

 

帰納法再帰の後半の話題は有限集合です。ここではn以下の自然数を有限集合として取り上げて、その全ての要素にわたる総和や総積が導入されます。例えば

theorem sum_id (n : ℕ) : ∑ i in range (n + 1), i = n * (n + 1) / 2 := by ...

 これは$\sum_{i=0}^n i = \frac{n\,(n+1)}{2}$という総和の式です。

 

と読み進んできて、「あれ!これ!」と気がつきました。この道具があれば任意桁数の場合の3の倍数の確認方法を形式化して証明できそうです。

というわけで次回はその話を書くことにしましょう。