Chiến thuật simpl
mở ra các biểu thức như 2 + a
thành "cây phù hợp" không hề đơn giản chút nào. Ví dụ:Làm thế nào để cấm chiến thuật đơn giản để mở ra các biểu thức số học?
Goal forall i:Z, ((fun x => x + i) 3 = i + 3).
simpl.
Dẫn đến:
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
Làm thế nào để tránh biến chứng như vậy với simpl
chiến thuật?
Mục tiêu cụ thể này có thể được giải quyết với omega
, nhưng nếu nó phức tạp hơn một chút, thì lỗi omega không thành công và tôi phải sử dụng thứ gì đó như: replace (2 + a) with (a + 2); simpl; replace (a + 2) with (2 + a)
.