【问题标题】:Coq: defining a function based on uniqueness and existence theoremsCoq:根据唯一性和存在性定理定义函数
【发布时间】:2012-10-22 04:51:54
【问题描述】:

为了尽可能地隔离这个问题,假设我如下开始一个 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).

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

【问题讨论】:

    标签: coq theorem-proving


    【解决方案1】:

    我认为在您当前的设置下这是不可能的。

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

    所以,我相信您要么必须将AB 移动到Prop,或者将existenceuniqueness 移动到Set

    这将导致以下任一情况:


    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:我不是专家。

    【讨论】:

    • 抱歉花了这么长时间才接受这个答案。您的第二个示例对我有用,实际上甚至可以与Type 中的AB 一起使用。谢谢!
    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2017-04-01
    • 2021-08-26
    • 1970-01-01
    • 2020-12-29
    • 2020-06-25
    • 2012-07-09
    • 2013-07-16
    相关资源
    最近更新 更多