simpl Tactic
http://d.hatena.ne.jp/propella/20090215/p1
Coq < Parameter a b :nat. a is assumed b is assumed Coq < Print plus. plus = fix plus (n m : nat) {struct n} : nat := match n with | 0 => m | S p => S (plus p m) end : nat -> nat -> nat Argument scopes are [nat_scope nat_scope] Coq < Eval simpl in S a + (S b). = S (a + S b) : nat Coq < Eval simpl in S a + (S a + (S b)). = S (a + S (a + S b)) : nat
外側から簡約され、内側も再帰的に簡約される。
Coq < Definition hoge (a : nat) : nat := 1 + a. hoge is defined Coq < Eval simpl in hoge 1. = hoge 1 : nat Coq < Eval compute in hoge 1. = 2 : nat
computeと違い、関数の中までは展開してくれない。
よく分からんが、Fixpoint + パターンマッチな関数なら、simplでも関数展開してくれる。ようだ。そうでなければ、plusで上記のような挙動になるはずがない。
Coq < Fixpoint mymatch (n : nat) : nat := Coq < match n with Coq < | O => S O Coq < | S n' => S (mymatch n') Coq < end. Coq < Eval simpl in mymatch (S a). = S (mymatch a) : nat
しかし、simpl. で何が行なわれるか、今迄考えたこともなかった。
だからテキトーにレバガチャして、技が出たらラッキーなストII初心者状態だったわけだ。どうりで分かってる感がなかったわけだ。これで少しは進歩出来たかもしれない。