今日のCoq

午前中時間が空いた。

Inductive ok_day : day -> Prop :=
 | okd_gd : forall d:day,
    good_day d -> ok_day d
 | okd_before : forall d1 d2 : day,
    ok_day d2 -> day_before d2 d1 ->
    ok_day d1.

という型定義において、

okd_gd は(コンストラクタ)関数である
good_day d という命題を引数に取り、
od_day dという命題を返す


命題によるプログラミングの章にさらっと書かれていた

 命題(パラメータ化された命題も含む)はCoqにおける第一級(first-class)市民です。 このため、ほかの定義の中でこれらの命題を使うことができます。 

というのは、そのことなんだろう。
使う。というのが理解出来ていなかった。

その上でなお、書き方に対する疑問は残る。

Definition gdsa : good_day saturday :=
 gd_sat.

上記にように書けることからも、gd_satは 「good_day saturday」という命題を生み出すコンストラクタであるのは分かる。

なんで、

Definition okdsaturday : ok_day saturday :=
 okd_gd saturday gd_sat.

okd_gdの後に、saturdayとか書かんとあかんの?


多相的なlistの定義の

Inductive list (X:Type) : Type :=
  | nil : list X
  | cons : X → list X → list X.

(X:Type) が(forall X:Type)みたいな感じか?
いまいちまだ納得出来てないけど、先に進もう。