定理証明 単語


ニコニコ動画で定理証明の動画を見に行く

テイリショウメイ

1.2千文字の記事
これはリビジョン 2218821 の記事です。
内容が古い・もしくは誤っている可能性があります。
最新版をみる

定理証明(theorem proving)とは、プログラミングにおける次世代のテスト・開発手法である。

概要

たとえば、プログラムで1からnまでの整数の和を計算するにはどうすればいいだろうか。for文? 再帰? いやいや、足し算が許されるのは小学生までだよね。当然、等差数列の和の公式 n * (n + 1) / 2 でしょう。

ところで、上記の計算は実際には1からnまでの整数を「足して」いないわけであるが、本当に大丈夫だろうか。もちろん、賢明な読者の皆様であれば等差数列の和の公式の証明が容易に頭に浮かぶに違いない。

しかし、もっと複雑なケースになるとどうだろうか。証明が思いつくだろうか。思いついた証明は本当に正しいだろうか。ちょっと本格的にプログラミングをかじった人なら、ユニットテストをきちんと書けば問題ないと言うだろう。しかし、本当にテストケースにないケースまで大丈夫と言い切れるだろうか。

そこで出てきた考え方が定理証明である。目標とする仕様を数学の定理として「証明」すれば、テストケースを選ばずともすべての場合について仕様を満たすことが保証できるのである。

証明駆動開発

実際にはどのようにして開発を行うかというと、

  1. 仕様をコードで書く
  2. 1.を定理と考え、その証明をコードで書く
  3. 2.の証明を定理証明器というプログラムにかけて、証明が正しいか検証する。
  4. 3.で証明が正しければ、その証明を別のプログラム言語のソースコードに変換する。
  5. 4.のソースコードをコンパイル・実行する。
  6. 5.が正しく動作することは数学的に保証されている(もっとも、定理証明器とコンパイラにバグがなければだが)。

という手順になる。ユニットテストから始める開発をテスト駆動開発というのに対して、定理証明から始まる開発なので証明駆動開発という。

残念ながら2.のプロセスが自動化されていないために難易度が高く、Coq, Agdaなどの定理証明器があるものの、現実にはほとんど実用化には至っておらず、重要な中核部分に限定的に使われる程度にとどまっている。

Coq

上記の証明駆動開発で最も成果をあげている定理証明器がCoqである。

Coq自体はプログラミング言語ではなく、記述に用いられるプログラミング言語はGallinaというものである。定理証明器プログラム自体はOCamlでプログラミングされている。

証明できた場合は、そこからHaskell, OCaml, Schemeのソースコードに変換できる。

数学的な証明なので、数学的な意味での関数を扱う関数型言語と相性がいいようである。

主な実績として、4色問題の証明(2004年: なお、4色問題自体が最初に証明されたのは1976年のことである)や、定理証明により動作が保証されたCコンパイラCompCertの開発などがある。

関連動画

関連項目

  • 定理
  • 関数
  • ユニットテスト
  • 関数型言語
  • プログラミング関連用語の一覧
関連記事

親記事

子記事

  • なし

兄弟記事

  • なし

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2025/12/23(火) 09:00

ほめられた記事

最終更新:2025/12/23(火) 09:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP