■
Imp_J.v プログラム正当性 (Optional)
長いうえに何やってんのか分がんね。
apply with の使いかたは何となく分かった気がしないでもない。
現在のコンテキストは H(仮定orなんかの定理)そのものである場合
apply H.
現在のコンテキスト((サブ)ゴールにある命題)は、全称修飾のパラメータつき命題 (関数)H にあるパラメータ xを適用したものである場合は
apply H with x.
あるいは、
apply (H x).
とも書ける。
Theorem ceval_step_more: forall i1 i2 st st' c, i1 <= i2 -> ceval_step st c i1 = Some st' -> ceval_step st c i2 = Some st'.
という定理を
st : state st' : state c1 : com x1 : nat x2 : nat H1 : ceval_step st c1 x1 = Some st'
という仮定H1にi2を(x1+x2)で適用したい場合、
正式にはこう書く。
apply (ceval_step_more x1 (x1+x2) st st' c1) in H1.
適用にかんして、Coqが中途半端によきにはからってくれるので、私のような初心者は混乱する。
実際
apply ceval_step_more (i2:=x1+x2) in H1.
とも書ける。
そしてやる気を失ないかける。でもまあ、実行出来るかどうかは、実際に動くので一目瞭然なところが、他の教科書と違ってありがたい。