有没有办法一次简化一步?
假设您f1 (f2 x)
可以通过单个simpl
依次简化f2 x
,是否可以简化f1
作为第一步,检查中间结果然后简化Theorem pred_length : forall n : nat, forall l : list nat,
pred (length (n :: l)) = length l.
Proof.
intros.
simpl.
reflexivity.
Qed.
?
以定理为例:
simpl
Nat.pred (length (n :: l))
策略将length l
简化为Nat.pred (length (n :: l)) --> Nat.pred (S (length l)) --> length l
。有没有办法将其分解为两步简化,即:
SSL_write
答案 0 :(得分:11)
您还可以将simpl
用于特定模式。
Theorem pred_length : forall n : nat, forall l : list nat,
pred (length (n :: l)) = length l.
Proof.
intros.
simpl length.
simpl pred.
reflexivity.
Qed.
如果您可以简化多次出现类似length
的模式,您可以通过给出该事件的位置(从左到右)进一步限制简化的结果,例如:第一次或第二次出现simpl length at 1
或simpl length at 2
。
答案 1 :(得分:4)
我们可以关闭pred
的简化,简化其论点并将其重新打开:
Theorem pred_length : forall n : nat, forall l : list nat,
pred (length (n :: l)) = length l.
Proof.
intros.
Arguments pred : simpl never. (* do not unfold pred *)
simpl.
Arguments pred : simpl nomatch. (* unfold if extra simplification is possible *)
simpl.
reflexivity.
Qed.
有关详细信息,请参阅“参考手册”的§8.7.4。