実際の帰納型を使ったコードの例(曜日) Inductive day : Type := | monday : day | tuesday : day | wednesday : day | thursday : day | friday : day | saturday : day | sunday : day. 雰囲気としてはC言語のenumだったり、Haskellその他にある列挙型に似ています。 このday型はmondayからsundayのうちのどれかの値を持ちます! 8
パターンマッチングを用いた関数の例(ピアノ数) Definition is_even (n:nat) : bool := match n with | O => true | S O => false | S (S n') => is_even n' end. この関数は、nat型の値を引数に取って、その値が偶数かどうかを返します。 このパターンマッチでは、nat型の値nに対して、3つのパターンに分岐させていま す。 12
パターンマッチングを用いた関数の例(ピアノ数)(再掲) Definition is_even (n:nat) : bool := match n with | O => true | S O => false | S (S n') => is_even n' end. O => true は 0の場合に対応してます S O => false は 1の場合に対応してます S (S n') => is_even n' は 2以上の場合に対応してます 例えば、ピアノ数では3は S (S (S O)) と表現されます S (S n') を S (S (S O)) にマッチさせると、 n' の部分に S O =1が入ります、 この n' を再帰的に is_even に渡すことで、偶数判定がうまいこと出来ます。 13
1つのコンストラクタを持つ場合(cap) Inductive Cap (A B: Ensemble): Ensemble := Cap_intro: forall x: T, x \in A -> x \in B -> x \in (Cap A B). (今までの例と違ってちょっと応用的な感じになってしまったんですが、出来ます!) 15