我正在尝试在 Coq 中嵌入 HOL4 证明的可能性。
在 HOL 中,可以给出如下定义
fun ALPHA t1 t2 = TRANS (REFL t1) (REFL t2)
是否有可能以类似的方式在 Coq 中定义这个函数?我的尝试在最后一行失败,原因是
The term "REFL t2" has type "t2 == t2"
while it is expected to have type "t1 == ?t3" (cannot unify
"t2" and "t1").
编码:
Axiom EQ : forall {aa:Type}, aa -> aa -> Prop.
Notation " x == y " := (@EQ _ x y) (at level 80).
Axiom REFL : forall {aa:Type} (a:aa), a == a.
Axiom TRANS :forall {T:Type}{t1 t2 t3:T},
(t1 == t2) -> (t2 == t3) -> (t1 == t3).
Definition ALPHA t1 t2 := TRANS (REFL t1) (REFL t2).
补充:也许有一种定义 ALPHA 的方法,我们可以假设 t1=t2?(我的意思是,在 Coq 的标准平等意义上)。我不能添加假设(H:t1 = t2),但是我需要以某种方式进行匹配。如何进行相等的匹配?
Definition ALPHA (t1 t2:T) (H:t1=t2) : t1==t2 :=
match H with
| eq_refl _ => TRANS (REFL t1) (REFL t2)
end
. (*fails*)