Одна довольно общая конструкция - match goal with
, позволяющая вам соответствовать шаблону, ну, в общем, вашей цели.Таким образом, вы можете искать несоответствия в своих гипотезах с соответствующими логическими сравнениями в цели (или другими гипотезами, если хотите) (context _ [ _ ]
- это особый шаблон, который позволяет сопоставить любые подтермы с шаблоном в скобках), и переписать, используяправильная лемма.Затем вы можете дать этой match
тактике имя, чтобы вам не нужно было помнить, как на самом деле называется лемма.Как и следовало ожидать, match
также поддерживает множество предложений (со странным поведением обратного отслеживания, о котором следует знать), поэтому вы можете расширить эту тактику в своей собственной базе данных переписывания бедного человека.
From Coq Require Import Arith.
Ltac rewrite_eqb :=
match goal with
| [ H : ?u <> ?v |- context E [ ?u =? ?v ] ] =>
rewrite (proj2 (Nat.eqb_neq u v) H)
end.
Goal forall (w x y z: nat), w <> x -> (if (Nat.eqb w x) then y else z) = z.
Proof.
intros.
rewrite_eqb.
reflexivity.
Qed.
См. Также: