Math Coq-向上下文添加选择函数
假设我在一个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
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.