テクノロジー

【Coq】掛け算の交換法則を証明してみた。

がくし's icon'
  • がくし
  • 2020/02/10 13:14

 

●はじめに

たまに物議を醸す掛け算の順番について。

 

「掛け算の定義より自明」なんて説明じゃ学校の先生は納得してくれなそうなので、定理証明支援系のプログラミング言語であるCoqを用いて証明をしてみました。以前軽く紹介したペアノ自然数を用いています。

 

●証明

 

(* 自然数の定義 *)
Inductive nat : Set :=
  | O : nat
  | S : nat -> nat.


(* 足し算と掛け算の定義 *)
Fixpoint add (m n : nat) : nat :=
  match m with
  | O    => n
  | S m' => S (add m' n)
  end.

Fixpoint mul (m n : nat) : nat :=
  match m with
  | O    => O
  | S m' => n + (mul m' n)
  end.

(* シンタックスシュガーみたいなヤツの定義 *)
Notation "m + n" := (add m n) (at level 50, left associativity).
Notation "m * n" := (mul m n) (at level 40, left associativity).


(* 各種証明 *)
Theorem add_identity_l (n : nat) : n + O = n.
Proof.
  induction n.
  + reflexivity.
  + simpl.
    rewrite IHn.
    reflexivity.
Qed.

Theorem add_assoc : forall m n l : nat, (m + n) + l = m + (n + l).
Proof.
  induction m.
  + reflexivity.
  + intros n l.
    simpl.
    rewrite IHm.
    reflexivity.
Qed.

Theorem add_suc_r (m n : nat) : m + S n = S (m + n).
Proof.
induction m.
  + reflexivity.
  + simpl.
    rewrite IHm.
    reflexivity.
Qed.

Theorem add_comm (m n : nat) : m + n = n + m.
Proof.
  induction n.
  + apply add_identity_l.
  + rewrite add_suc_r.
    rewrite IHn.
    reflexivity.
Qed.

Theorem mul_univ_r (n : nat) : n * O = O.
Proof.
induction n.
  + reflexivity.
  + simpl.
    apply IHn.
Qed.

Theorem mul_suc_r (n m : nat) : n * S m = n + n * m.
Proof.
  induction n.
  + reflexivity.
  + simpl.
    rewrite IHn.
    rewrite <- (add_assoc m n (n * m)).
    rewrite (add_comm m n).
    rewrite <- (add_assoc n m (n * m)).
    reflexivity.
Qed.
   
Theorem mul_comm (n m : nat) : n * m = m * n.
Proof.
  induction n.
  + symmetry.
    apply mul_univ_r.
  + rewrite mul_suc_r.
    simpl.
    rewrite IHn.
    reflexivity.
Qed.

 

 

●おわりに

これで小学生も安心して掛け算の交換法則を使えますね。

 

めでたしめでたし。

 

Supporter profile iconSupporter profile iconSupporter profile icon
Article tip 3人がサポートしています
獲得ALIS: Article like 31.82 ALIS Article tip 22.10 ALIS
がくし's icon'
  • がくし
  • @gaxiiiiiiiiiiii
養蜂家。暇な時にプログラミングをして遊んでる。

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
121.79 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
テクノロジー

オープンソースプロジェクトに参加して自己肯定感を高める

Like token Tip token
85.05 ALIS
Eye catch
テクノロジー

彼女でも分かるように解説:ディープフェイク

Like token Tip token
32.10 ALIS
Eye catch
テクノロジー

iOS15 配信開始!!

Like token Tip token
7.20 ALIS
Eye catch
テクノロジー

なぜ、素人エンジニアの私が60日間でブロックチェーンゲームを制作できたのか、について語ってみた

Like token Tip token
270.93 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
ゲーム

ドラクエで学ぶオーバフロー

Like token Tip token
30.10 ALIS