如何应用公理来简化 Coq 中的匹配?
How to apply an axiom to simplify a match in Coq?
我有这个代码
Parameter foo : nat -> option bool.
Definition foo_valid x :=
match foo x with
Some _ => True
| None => False
end.
Axiom foo_is_valid : forall x, foo x = Some true.
Lemma foo_some_is_true_for_real : forall {x : nat}, foo_valid x.
cbv.
intros.
至此我有了这个目标
x : nat
========================= (1 / 1)
match foo x with
| Some _ => True
| None => False
end
是否可以使用foo_is_valid
公理来消除匹配并完成证明?我该怎么做?
foo_is_valid x
是一个等式,所以你可以用它来重写。
最简单的方法是使用 rewrite
tactic.
rewrite foo_is_valid.
应该在您的目标中用 Some true
替换 foo x
,然后 simpl
将进行 match
计算。
我有这个代码
Parameter foo : nat -> option bool.
Definition foo_valid x :=
match foo x with
Some _ => True
| None => False
end.
Axiom foo_is_valid : forall x, foo x = Some true.
Lemma foo_some_is_true_for_real : forall {x : nat}, foo_valid x.
cbv.
intros.
至此我有了这个目标
x : nat
========================= (1 / 1)
match foo x with
| Some _ => True
| None => False
end
是否可以使用foo_is_valid
公理来消除匹配并完成证明?我该怎么做?
foo_is_valid x
是一个等式,所以你可以用它来重写。
最简单的方法是使用 rewrite
tactic.
rewrite foo_is_valid.
应该在您的目标中用 Some true
替换 foo x
,然后 simpl
将进行 match
计算。