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'. 从这里,我

为了尽可能地隔离这个问题,假设我开始一个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'.
从这里,我想定义一个函数
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.