Coq
状態のところを読む。
Definition mystate : state := fun i => match i with | Id n => n // id nに対応するなんらかのnatを返すことが出来る。 end. Definition myid5 := Id 5. Eval simpl in update mystate myid5 10. (* Id 5に対応する値を 10にするという意味かな? *)
返るのが新しい状態を表す関数である。dictionaryの時もそうだったっけ。updateはoverrideと似てるというか同じか。
SICPで言うところの環境なのかな?stateというと、stateパターンとか単一の変数を思いうかべてしまう。
Theorem update_neq : forall V2 V1 n st, beq_id V2 V1 = false -> (update st V2 n) V1 = (st V1). Proof . intros. unfold update. (* subst. が効かないのはなぜ? *) rewrite -> H. reflexivity. Qed.
substも効いたり効かなかったりだな。このへんがよくわからん。
update_exampleにて、
タクティックを使って遊び始める前に、 定理が言っていることを正確に理解していることを確認しなさい!
ごもっとも。でもやっぱりタクティック使って証明するのって感覚的にゲームに近いよなあ。