Coq:基于唯一性和存在定理定义函数

时间:2012-10-22 04:51:55

标签: 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'.

从这里开始,我想将函数f : A -> B定义为P a (f a)始终为真的唯一函数。

我该怎么做? 可以吗我这样做?显然我应该从像

这样的东西开始
Definition f : A -> B.
  intro a.
  assert (E := existence a).
  assert (U := uniqueness a).

...但我如何根据这些假设实际编写函数?

1 个答案:

答案 0 :(得分:4)

我相信在你目前的环境中是不可能的。

问题在于你可以从existence定理中提取b,但这只能存在于Prop中。

因此,我相信您必须在A中移动BProp,或在existence中移动uniquenessSet

这将产生以下任何一种:


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.

很可能这些都不是你想要的。在这种情况下,我需要更多细节才能提供帮助。可能是你愿意做一些在直觉主义背景下无法做到的事情。

PS:我不是专家。