Math Coq-向上下文添加选择函数

Math Coq-向上下文添加选择函数,math,coq,proof,Math,Coq,Proof,假设我在一个Coq证明中,当前的上下文包括一个形式的假设 H : forall a : A, P a -> exists b : B, Q a b 在哪里 然后,我想在上下文中添加两个新术语: f : A -> B H' : forall a : A, P a -> Q a (f a) 我该怎么做?我很高兴添加非结构化公理来实现这一点。在这种普遍性中,这是不可能的。请看以下内容: Definition A : Type := True. Definition B : Typ

假设我在一个Coq证明中,当前的上下文包括一个形式的假设

H : forall a : A, P a -> exists b : B, Q a b
在哪里

然后,我想在上下文中添加两个新术语:

f : A -> B
H' : forall a : A, P a -> Q a (f a)

我该怎么做?我很高兴添加非结构化公理来实现这一点。

在这种普遍性中,这是不可能的。请看以下内容:

Definition A : Type := True.
Definition B : Type := False.
Definition P : A -> Prop := (fun a : A => False).
Definition Q : A -> B -> Prop := (fun (a : A) (b : B) => True).

Example H_is_trivial: forall a : A, P a -> exists b : B, Q a b.
Proof.
  intros a HP.
  destruct HP.
Qed.

Example f_cannot_exist: (exists f : A -> B, forall a : A, P a -> Q a (f a)) -> False.
Proof.
  intros.
  destruct H as [f H].
  apply f.
  exact I.
Qed.
所以存在A,B,p和Q的赋值,其中H保持不变,但可以证明f不存在

对于精化问题,您可以定义一个simga类型{a | pa}并使用选择公理进行证明:

Require Import ClassicalChoice.

Section Test.
Variable A B : Type.
Variable P : A -> Prop.
Variable Q : A -> B -> Prop.
Variable H : forall a : A, P a -> exists b : B, Q a b.

Definition AP := { a : A | P a }.
Definition QAP (a : AP) (b : B) := Q (proj1_sig a) b.

Lemma f_exists: exists f : AP -> B, (forall ap : AP, QAP ap (f ap)).
  apply choice.
  intros ap.
  specialize (H (proj1_sig ap) (proj2_sig ap)).
  destruct H as [b HQ].
  exists b. exact HQ.
Qed.

再次分解sigma类型并直接回答您的问题应该不难,但sigma类型可能更方便。

这与我的不同,因为它特别涉及如何将这些术语添加到证据中的上下文。很好的理解。我假设我想要一个
f
,它将
(a:a,p:pa)
B
的元素进行配对?然后是假设
H':对于所有(a:a)(p:pa),qa(fap)
Require Import ClassicalChoice.

Section Test.
Variable A B : Type.
Variable P : A -> Prop.
Variable Q : A -> B -> Prop.
Variable H : forall a : A, P a -> exists b : B, Q a b.

Definition AP := { a : A | P a }.
Definition QAP (a : AP) (b : B) := Q (proj1_sig a) b.

Lemma f_exists: exists f : AP -> B, (forall ap : AP, QAP ap (f ap)).
  apply choice.
  intros ap.
  specialize (H (proj1_sig ap) (proj2_sig ap)).
  destruct H as [b HQ].
  exists b. exact HQ.
Qed.