change term

ゴールとtermが変換可能なときに、ゴールをtermで置き換える tacic。

simpl とかを適当に使った結果、やりすぎていらんとこまで置き換えてしまった場合とか、逆に何をどう使えばもっと簡単に置き換えることができるのか分からない場合に使うとよいかも。

例えば、simpl の結果

  ============================
   x =
   match y with
   | 0 => 0
   | Zpos y' => Zpos (xO y')
   | Zneg y' => Zneg (xO y')
   end + x

というわけのわからない式になっちまったが、よく考えると「x = 2 * y + x」じゃねーかってときに

< change (x = 2 * y + x).

とすればよい。

absurd term

仮定に矛盾がありそうなときはこれを使う。term~termを証明すれば、ゴールを証明したことになる。

普通はterm~termのどちらかが仮定にそのまま入ってる。すでに両方とも入ってる場合は contradiction を使うとよい。

contradiction

これは tauto でも証明できる。

cbv系

さっぱりわからん。あとで書く。