2010-03-01から1ヶ月間の記事一覧

Isabelle Tutorial その9

3.4 Advanced Datatype 3.4.1 Mutual Recursion 相互再帰するデータ型の例として、算術式とブール式を示します。算術式には条件文が含まれており、よってブール式が含まれています。またブール式には値の比較が含まれており、よって算術式が含まれています。…

Isabelle Tutorial その8

3.3 Case Study: Compiling Expressions 今節では、変数、定数、そして二項演算子からなる式からスタックマシーンへのコンパイラを開発します。これは、2.5.6のブール式を一般化したものです。変数や値の型は特に定めず、型パラメータとして定義します。二項…

Isabelle Tutorial その7

3.2 Induction Heuristics この節では、帰納法を使った証明のヒューリスティクスを説明します。最初は既に出てきたヒューリスティクスです。 再帰関数に関する定理は帰納法で証明せよ。 次は二つ以上の引数を取る関数の証明についてです。 i番目の引数が再帰…

Isabelle Tutorial その6

3. More Functional Programming 3.1 Simplification 単純化はIsabelle及び他の多くのシステムにおいて重要な定理証明ツールです。今節では単純化について述べていきます。 3.1.1 What is Simplification? 簡単に言うと、単純化とは等式の左辺から右辺への変…

Isabelle Tutorial その5

2.6 Some Basic Types 2.6.1 Natural Numbers 自然数を表す型natは構成子0とSucで定義されています。case式を使った例を示します。 case n of 0 => 0 | Suc m => m 原始再帰関数の定義と、帰納法による証明の例も示します。 primrec sum :: "nat => nat" whe…

Isabelle Tutorial その4

やっと証明に入りました。 2.3 An Introductory Proof 証明の大まかな流れを追ってみます。Main Goal.リストにrevを二回適用すると元に戻ることを証明します。 theorem rev_rev [simp]: "rev (rev xs) = xs" theoremは新しい定理"rev (rev xs) = xs"を証明し…

Isabelle Tutorial その3

2. Functional Programming in HOLここからはHOLでどのように関数プログラムを書き、どのように検証するのか見ていきます。Isabelle/HOLを使う目的はシステムをモデル化し検証することなので、関数を実行可能なかたちで定義する必要はないのですが、まずは実…

Isabelle Tutorial その2

1.4 Variables もちろんIsabelleは自由変数と束縛変数を区別しますし、束縛変数は名前の衝突が起こらないよう自動で改名されます。この2つに加えて、?で始まる変数があります。これをスキーマ変数(schematic variable)またはアンノウン(unknown)といいます。…

Isabelle Tutorial その0

Isabelleのチュートリアルを読みながらまとめていきたいと思います。http://www.cl.cam.ac.uk/research/hvg/Isabelle/ http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle/doc/tutorial.pdf最新バージョンはIsabelle2009-1。バージョンが変わる前…

Isabelle Tutorial その1

1. The Basics 1.1 Introduction Isabelleは汎用的な証明支援器であり、高階論理に特化させたものがIsabelle/HOLです。私は数学屋さんではないので、高階論理って何?とかは深く考えず進みます。 1.2 Theories Isabelleを使用して理論を構築していきます。理…