我的证明环境中有以下内容:
1 subgoal
a, b : nat
H : (fix loop (m : nat) : nat :=
match (m - a) with
| 0 => m
| S m' => loop m'
end) b = 0
G : (b - a) = 0
很明显,H等于
match (b - a) with
| 0 => b
| S m' => loop m'
end = 0
然后允许我使用G重写。
但是由于它被困在其中,表示为(m-a),因此我无法使用G进行重写。
如何通过一次迭代展开定点?
编辑:以下代码将设置证明环境。只是忽略admit语句。您的目标不是证明语句(琐碎的事),而是“展开”定点。
From mathcomp Require Import all.
Goal forall a b : nat,
modn b a = 0 -> True.
Proof.
intros a b H.
unfold modn in H.
destruct a.
+ admit.
+ simpl in H.
assert ((b - a) = 0) as G.
- admit.
- unfold modn_rec in H.
答案 0 :(得分:4)
要展开定点,您需要破坏其递减参数。
destruct b; simpl in H.
如果要保留单个案例,则必须在单独的引理或assert
ion中证明您提到的相等性。
assert (Hfix : (fix loop m := match ... end) b = match ... end)