Library UniMath.Paradoxes.GirardsParadox

This file provides a direct formalizatoin of Girard's paradox, as explained in Martin-Lof's 1972 "An intuitionistic theory of types". It can serve as a test as to whether the version of Coq being used is (in the most obvious way) inconsistent.

Require Import UniMath.Foundations.All.

Section girard.

Variable Flse : Type.

Definition wf (T : Type) : Type
  := lt : T T Type,
            ( x y z: T, lt x y lt y z lt x z) ×
            ( h : (nat T), ( n : nat, lt (h (S n)) (h n)) Flse).

Definition wfs : Type := total2 wf.

Definition uset (w : wfs) : Type := pr1 w.
Definition uord (w : wfs) : uset w uset w Type := pr1 (pr2 w).
Definition trans (w : wfs) {x y z : uset w}
  : pr1 (pr2 w) x y pr1 (pr2 w) y z pr1 (pr2 w) x z
  := pr1 (pr2 (pr2 w)) x y z.
Definition wfp (w : wfs) :
  (λ _ : x y z : pr1 w, pr1 (pr2 w) x y pr1 (pr2 w) y z pr1 (pr2 w) x z,
                    h : nat pr1 w, ( n : nat, pr1 (pr2 w) (h (S n)) (h n)) Flse) (pr1 (pr2 (pr2 w)))
  := pr2 (pr2 (pr2 w)).

Definition wfs_wf_uord (v : wfs) (w : wfs) : Type
  := f : uset v uset w,
           ( x y : uset v, (uord v) x y (uord w) (f x) (f y)) ×
           ( y : uset w, (x: uset v), (uord w) (f x) y).

Definition ufun {v : wfs} {w : wfs} (a : wfs_wf_uord v w) : uset v uset w := pr1 a.
Definition homo {v : wfs} {w : wfs} (a : wfs_wf_uord v w)
  : (x y : uset v), uord v x y uord w (pr1 a x) (pr1 a y)
  := pr1 (pr2 a).
Definition domi {v : wfs} {w : wfs} (a : wfs_wf_uord v w) : uset w := pr1 (pr2 (pr2 a)).
Definition domicom {v : wfs} {w : wfs} (a : wfs_wf_uord v w)
  : (λ y : uset w, x : uset v, uord w (pr1 a x) y) (pr1 (pr2 (pr2 a)))
  := pr2 (pr2 (pr2 a)).

Definition wfs_wf_trans : x y z : wfs, wfs_wf_uord x y wfs_wf_uord y z wfs_wf_uord x z.
Proof.
  intros x y z.
  intros f g.
   (fun a : uset x ⇒ (ufun g) ((ufun f) a)).
  split.
  + intros x0 y0.
    intro x0y0.
    exact (homo g _ _ (homo f _ _ x0y0)).
  + (domi g).
    intro x0.
    set (y0 := ufun f x0).
    set (ydom := domi f).
    set (co := domicom f x0).
    exact (trans z (homo g _ _ co) (domicom g (domi f))).
Defined.



Definition wfs_wf_wfp_shift (f : nat wfs) (b : n : nat, wfs_wf_uord (f (S n)) (f n)) :
   (n : nat), (uset (f n) uset (f 0)).
Proof.
  intro n.
  induction n.
  intro a; exact a.
  intro x.
  exact (IHn (ufun (b n) x)).
Defined.

Definition wfs_wf_wfp_seq (f : nat wfs) (b : n : nat, wfs_wf_uord (f (S n)) (f n)) :
  nat uset (f 0).
Proof.
  intro n.
  exact (wfs_wf_wfp_shift f b n (domi (b n))).
Defined.

Definition wfs_wf_wfp_compshift (f : nat wfs) (b : n : nat, wfs_wf_uord (f (S n)) (f n)) :
   (n : nat) {x y : uset (f n)},
    uord (f n) x y uord (f 0) (wfs_wf_wfp_shift f b n x) (wfs_wf_wfp_shift f b n y).
Proof.
  intros n.
  induction n.
  intros x y p.
  exact p.
  intros x y p.
  exact (IHn _ _ (homo (b n) x y p)).
Qed.

Lemma wfs_wf_wfp_desc (f : nat wfs) (b : n : nat, wfs_wf_uord (f (S n)) (f n)) :
   n : nat, uord (f 0) (wfs_wf_wfp_seq f b (S n)) (wfs_wf_wfp_seq f b n).
Proof.
  intro n.
  exact (wfs_wf_wfp_compshift f b n (domicom (b n) (domi (b (S n))))).
Defined.

Definition wfs_wf : wf wfs.
Proof.
   wfs_wf_uord.
  split.
  exact wfs_wf_trans.
  intro h.
  intro b.
  exact (wfp _ (wfs_wf_wfp_seq h b) (wfs_wf_wfp_desc h b)).
Defined.

Definition wfs_wf_t : wfs := tpair (fun Twf T) wfs (wfs_wf).


Definition maxi_fun (w : wfs) : uset w wfs.
Proof.
  intro x.
   ( y : uset w, uord w y x).
   (fun a buord w (pr1 a) (pr1 b)).
  split.
  - intros x0 y z p q.
    exact (trans w p q).
  - intro h.
    intro b.
    exact (wfp w (fun npr1 (h n)) b).
Defined.

Lemma maxi_homo (w : wfs) : (x y : uset w),
    uord w x y wfs_wf_uord (maxi_fun w x) (maxi_fun w y).
Proof.
  intros x y p.
   (fun (z : uset (maxi_fun w x)) ⇒ tpair _ (pr1 z) (trans w (pr2 z) p)).
  split.
  - intros x0 y0 q.
    exact q.
  - (tpair _ x p).
    intro x0.
    exact (pr2 x0).
Defined.

Lemma maxidom (w : wfs) : (x : uset w), wfs_wf_uord (maxi_fun w x) w.
Proof.
  intro x.
   (fun (z : uset (maxi_fun w x)) ⇒ pr1 z).
  split.
  - intros x0 y p.
    exact p.
  - x.
    intro x0.
    exact (pr2 x0).
Defined.

Lemma maxi (w : wfs) : wfs_wf_uord w wfs_wf_t.
Proof.
   (maxi_fun w).
  split.
  - exact (maxi_homo w).
  - exact (tpair _ _ (maxidom w)).
Defined.

Proposition whoa : uord wfs_wf_t wfs_wf_t wfs_wf_t.
Proof.
  apply maxi.
Defined.

Proposition irref (w : wfs) : (x : uset w), (uord w) x x Flse.
Proof.
  intro x.
  intro p.
  exact (wfp w (fun nx) (fun np)).
Defined.

Proposition the_world_explodes : Flse.
Proof.
  exact (irref wfs_wf_t wfs_wf_t whoa).
Defined.

End girard.

Proposition but_seriously_the_world_explodes : empty.
  exact (the_world_explodes empty).
Defined.