【发布时间】:2022-05-06 14:57:14
【问题描述】:
我正在阅读软件基础,他们将平等定义为
Inductive eq {X:Type} : X -> X -> Prop :=
| eq_refl : forall x, eq x x.
Notation "x == y" := (eq x y)
(at level 70, no associativity)
: type_scope.
我已经能够用战术证明equality__leibniz_equality
Lemma equality__leibniz_equality : forall (X : Type) (x y: X),
x == y -> forall P:X->Prop, P x -> P y.
Proof.
intros X x y H P evP. destruct H. apply evP.
Qed.
但是我也想构造证明对象。这是我尝试过的:
Definition equality__leibniz_equality' : forall (X : Type) (x y: X),
x == y -> forall P:X->Prop, P x -> P y :=
fun (X:Type) (x y: X) (H: x==y) (P:X->Prop) (evP: P x) =>
match H with
| eq_refl a => evP
end.
虽然destruct H 在我的第一个证明中起作用,因为该策略立即将y 替换为x,但是模式匹配eq_refl a 似乎没有类似的效果,因此x=y=a 的信息似乎是迷路了,我被卡住了。有没有办法构造证明对象?
【问题讨论】:
标签: coq