simpl
策略将2 + a
这样的表达式展现为“匹配树”,它看起来并不简单。例如:如何禁止简单的策略展开算术表达式?
Goal forall i:Z, ((fun x => x + i) 3 = i + 3).
simpl.
引出:
forall i : Z,
match i with
| 0 => 3
| Z.pos y' =>
Z.pos
match y' with
| q~1 =>
match q with
| q0~1 => (Pos.succ q0)~1
| q0~0 => (Pos.succ q0)~0
| 1 => 3
end~0
| q~0 =>
match q with
| q0~1 => (Pos.succ q0)~0
| q0~0 => q0~1
| 1 => 2
end~1
| 1 => 4
end
| Z.neg y' => Z.pos_sub 3 y'
end = i + 3
如何避免此类并发症与simpl
战术?
这个特殊的目标可以用omega
来解决,但如果它有点复杂,欧米茄就会失败,我不得不求助于类似于:replace (2 + a) with (a + 2); simpl; replace (a + 2) with (2 + a)
。