Coq 类型产品的注入能力有意义吗?

Coq 类型产品的注入能力有意义吗?,coq,dependent-type,Coq,Dependent Type,如何在Coq中证明以下内容 Goal forall (A B : Type), (A*A = B*B)%type -> A = B. 如果它是不可证明的,是否可以安全地添加为公理?编辑:以下答案假设一个比问题中更有力的陈述:对于所有(a B C D:Type),(a*B=C*D)%Type->a=C。所以答案实际上并没有回答这个问题 你的目标是不可证明的,因为它与Coq相矛盾,而Coq是独立的。出现这种矛盾是因为对于任何A,A*False同构于False。然后,单价意味着A*False=

如何在Coq中证明以下内容

Goal forall (A B : Type), (A*A = B*B)%type -> A = B.

如果它是不可证明的,是否可以安全地添加为公理?

编辑:以下答案假设一个比问题中更有力的陈述:
对于所有(a B C D:Type),(a*B=C*D)%Type->a=C
。所以答案实际上并没有回答这个问题

你的目标是不可证明的,因为它与Coq相矛盾,而Coq是独立的。出现这种矛盾是因为对于任何
A
,A*False同构于
False
。然后,单价意味着
A*False=False
,您的目标让我们对任何
A
B
得出结论。特别是,
True=False
,它通过传输生成
False
的证明。所以,如果你的目标是可证明的,Coq将是反单价的


我不知道没有单价的目标是否也会导致矛盾。

它肯定与单价不一致,例如2x3=1 x 6,但1/=2和3/=6。想要这个主意真奇怪。

是的,我的评论是针对更强烈的声明。平方应该是内射的,但我不确定你们是否能在HoTt中证明这一点。

我的猜测是,假设这个公理是安全的,但它从来都不是必需的,你们总是可以重新表述一些东西,所以你们不需要它,这可能需要更多的努力。@李耀霞我在解决问题时达到了这个目标。你看到避免它的方法了吗?我会用类型特定的等价关系来切换
JMeq
eqR(r1r2:ra):Prop:=(val\ur1=val\ur2)
(通过
a
上的等价关系进行参数化,可以更概括)。然后你可以重新表述这个定理,使其符合定义。@李耀霞好吧。。。我原以为你会更好;-)我不确定我能看出
A*False=False
如何让我们对任何
A
B
得出结论。你能详细说明一下吗?(例如,担心的是,作为一个公理添加也应该是不安全的?)@Sassan如果你是对的,我在我的证明中假设了一个比问题中给出的更有力的陈述。谢谢你指出这一点。我已相应地编辑了答案。OP,请不要接受答案,因为它没有回答问题。但是2、3、1和6不是类型。此外,在
nat
上,我的语句类似于
for all(xy:nat),x*x=y*y->x=y
,因此您的反例不适用。你能提供一个证据证明我的陈述与单价不一致吗?顺便说一句,我之所以要这样做(奇怪?)是因为@AndrásKovácsI我只是为有n个元素的类型写了n。如果你已经定义了Fin,那么这就是finn,我明白了。但在我的陈述中,每个乘积的操作数是相等的。限制为
Fin
类型:
forall(xy:nat),finx*finx=finy*finy->finx=finy
。所以你的反例不适用。在HoTT中,你可以很容易地证明平方运算的内射性:这是给定的A x A=B x B,然后A=B。重点是A={x:A x A | fst x=snd x},其中我们使用Sigma类型来表示子集理解,但现在{x:A x A | fst x=snd x}={x:B x B | fst x=snd x}实际上我在掩饰一些细节(你必须消除讨厌的交通工具,但最终这是正确的)。因此,这应该可以在cubical agda中证明,我现在没有时间来检查这一点。这听起来是迄今为止最好的答案。