Coq:基于唯一性和存在性定理定义函数
为了尽可能地隔离这个问题,假设我开始一个Coq会话,如下所示Coq:基于唯一性和存在性定理定义函数,coq,theorem-proving,Coq,Theorem Proving,为了尽可能地隔离这个问题,假设我开始一个Coq会话,如下所示 Parameter A : Type. Parameter B : Type. Parameter P : A -> B -> Prop. Axiom existence : forall a : A, exists b : B, P a b. Axiom uniqueness : forall a : A, forall b b' : B, P a b -> P a b' -> b = b'. 从这里,我
Parameter A : Type.
Parameter B : Type.
Parameter P : A -> B -> Prop.
Axiom existence : forall a : A, exists b : B, P a b.
Axiom uniqueness : forall a : A, forall b b' : B, P a b -> P a b' -> b = b'.
从这里,我想定义一个函数f:a->B
,作为pa(fa)
始终为真的唯一函数
我该怎么做?我能做这个吗?显然,我应该从这样的事情开始
Definition f : A -> B.
intro a.
assert (E := existence a).
assert (U := uniqueness a).
…但是我如何根据这些假设来编写函数呢?我认为在您当前的环境中是不可能的 问题是你可以从你的
存在性定理中提取b,但这只能存在于Prop
中
所以,我相信你要么在Prop
中移动A
和B
,要么在集合中移动存在性
和唯一性
这将导致以下任一情况:
很可能这两者都不是你真正想要的。在这种情况下,我需要更多的细节来提供帮助。这可能是因为你愿意做一些在直觉环境下不可能做的事情
PS:我不是专家。很抱歉,我花了这么长时间才接受这个答案。您的第二个示例适用于我,事实上,它甚至适用于Type
中的A
和B
。谢谢
Parameter A : Prop.
Parameter B : Prop.
Parameter P : A -> B -> Prop.
Axiom existence : forall a : A, exists b : B, P a b.
Axiom uniqueness : forall a : A, forall b b' : B, P a b -> P a b' -> b = b'.
Definition f : A -> B.
intro a. destruct (existence a) as [b _]. exact b.
Defined.
Parameter A : Set.
Parameter B : Set.
Parameter P : A -> B -> Prop.
Axiom existence : forall a : A, { b : B | P a b }.
Axiom uniqueness : forall a : A, forall b b' : B, P a b -> P a b' -> b = b'.
Definition f : A -> B.
intro a. destruct (existence a) as [b _]. exact b.
Defined.