From : Hugo Herbelin <Hugo.Herbelin AT inria.fr>

: Hugo Herbelin <Hugo.Herbelin AT inria.fr> To : Andreas Abel <andreas.abel AT ifi.lmu.de>

: Andreas Abel <andreas.abel AT ifi.lmu.de> Cc : Daniel Schepler <dschepler AT gmail.com>, Jonas Oberhauser <s9joober AT gmail.com>, coq-club AT inria.fr

: Daniel Schepler <dschepler AT gmail.com>, Jonas Oberhauser <s9joober AT gmail.com>, coq-club AT inria.fr Subject : Re: [Coq-Club] Prop vs Type

: Re: [Coq-Club] Prop vs Type Date: Thu, 15 Nov 2012 04:30:03 +0100

Hi,Attached is a proof relying on Hurkens' paradox (not without pain)!HugoOn Thu, Nov 15, 2012 at 12:16:52AM +0100, Andreas Abel wrote:(** A proof of the inconsistency of Prop=Type (for some fixed Type) in CoqusingHurkens' paradox for system Type:Type.Adapted from an initial formulation by Herman Geuvers (this formulationwas usedto show the inconsistency in the pure calculus of constructions of aretract fromProp into a small type).A. J. Hurkens, "A simplification of Girard's paradox",Proceedings of the 2nd international conference Typed Lambda-Calculiand Applications (TLCA'95), 1995.*)Section Paradox.Definition Type2 := Type.Definition Type1 := Type : Type2.(** Preliminary *)Notation "'rew2' X) H'_ H)(at level 10, H' at level 10).Notation "'rew2' H 'in' H'" := (@eq_rect Type2 _ (fun X : Type2 => X) H' _ H)(at level 10, H' at level 10).Notation "'rew1' X) H'_ H)(at level 10, H' at level 10).Notation "'rew1' H 'in' H'" := (@eq_rect Type1 _ (fun X : Type1 => X) H' _ H)(at level 10, H' at level 10).Lemma rew_rew : forall (A B:Type1) (H:B=A) (x:A), rew1 H in rew1 Type2.Definition down : Type1 -> Prop := fun A => rew2 Type1 := fun A => rew2 Heq in A.Lemma up_down : forall (A:Type1), up (down A) = A :> Type1.Proof.unfold down, up. rewrite Heq. reflexivity.Defined.Definition V : Type1 := forall A:Prop, ((up A -> Prop) -> up A -> Prop) -> upA -> Prop.Definition U : Type1 := V -> Prop.Definition forth (a:U) : up (down U) := rew1 r (z A r) a.Definition le (i:U -> Prop) (x:U) : Prop := x (fun A r a => i (fun v => sb vA r a)).Definition le' (i:up (down U) -> Prop) (x:up (down U)) : Prop := le (fun a:U=> i (forth a)) (back x).Definition induct (i:U -> Prop) : Type1 := forall x:U, up (le i x) -> up (ix).Definition WF : U := fun z => down (induct (fun a => z (down U) le' (fortha))).Definition I (x:U) : Prop :=(forall i:U -> Prop, up (le i x) -> up (i (fun v => sb v (down U) le'(forth x)))) -> False.Lemma back_forth (a:U) : back (forth a) = a.Proof.apply rew_rew.Defined.Lemma Omega : forall i:U -> Prop, induct i -> up (i WF).Proof.intros i y.apply y.unfold le, WF, induct.rewrite up_down.intros x H0.apply y.unfold sb, le', le.rewrite back_forth.exact H0.Qed.Lemma lemma1 : induct (fun u => down (I u)).Proof.unfold induct.intros x p.rewrite up_down.intro q.generalize (q (fun u => down (I u)) p).rewrite up_down.intro r.apply r.intros i j.unfold le, sb, le', le in j |-.rewrite back_forth in j.specialize q with (i := fun y => i (fun v:V => sb v (down U) le' (forth y))).apply q.exact j.Qed.Lemma lemma2 : (forall i:U -> Prop, induct i -> up (i WF)) -> False.Proof.intro x.generalize (x (fun u => down (I u)) lemma1).rewrite up_down.intro r. apply r.intros i H0.apply (x (fun y => i (fun v => sb v (down U) le' (forth y)))).unfold le, WF in H0.rewrite up_down in H0.exact H0.Qed.Theorem paradox : False.Proof.exact (lemma2 Omega).Qed.End Paradox.