Coqでつくる手続き型プログラミング言語

とってもシンプルな言語をCoq内で定義してみた。

次のような感じでプログラムは表現される。

(* プログラムの例 入力された2数を足し算するプログラム *)
Definition plus_program :=
MAIN (
   X O <- LEFT (!X_IN);                  (*変数X_INの左値を変数X0に代入*)
   X_OUT <- RIGHT (!X_IN);               (*変数X_INの右値を変数X_OUTに代入*)
   WHILE (!X O) (                        (*変数X0がnilになるまでループ*)
      X_OUT <- CONS (D DNIL) (!X_OUT);   (*X_OUTに(nil, X_OUTの値)を代入*)
      X O <- RIGHT (!X O)                (*X0にX0の右値を代入*)
   )
).

詳細は以下