你能解决这个错误:
Parameter Arg: Type.
Parameter F X XP: Arg.
Parameter Sen Phy Leg Inf: Arg -> Prop.
Parameter tree car: Phy X.
Parameter mary john: Phy XP /\ Leg XP /\ Sen XP.
Fail Coercion c (u:Arg) (x y z: Arg -> Prop) (t:x u /\ y u /\ z u): x u := fun t => @proj1 (x u) (y u /\ z u) t.
(*The type of this term is a product while it is expected to be "x u".*)
当我从
中取词时,我遇到了同样的错误Coercion f (u:Arg) (x y z: Arg -> Prop) (t:x u /\ y u /\ z u): x u. tauto. Defined. Print f.
答案 0 :(得分:1)
部分答案:您的fun t => @proj1 (x u) (y u /\ z u) t
字词类型为x u /\ y u /\ z u -> x /\ u
。您希望整个强制使用x u
类型,因此您需要为函数提供x u /\ y u /\ z u
类型的术语,以便获得x u
。
我认为你因为fun t => proj1 t
而感到困惑。为避免混淆,您可以使用新名称重命名此变量,例如fun foobar => proj1 foobar
,您将看到实际上从未使用t
参数。
因此,整个字词为(fun t => @proj1 (x u) (y u /\ z u) t) t
,适用于Definition
。但是对于Coercion
,我收到以下消息:
c is defined
Warning: c does not respect the uniform inheritance condition
Error: Cannot find the target class.