Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(* -*- mode: coq; mode: visual-line -*- *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Modality.LocalOpen Scope path_scope.(** * The double negation modality *)(** This is Exercise 7.12 in the book. Note that it is (apparently) *not* accessible unless we assume propositional resizing. *)
H: Funext
Modality
H: Funext
Modality
H: Funext
Type -> Type
H: Funext
forallT : Type, T -> ?O_reflector T
H: Funext
forall (A : Type) (B : ?O_reflector A -> Type),
(foralla : A, ?O_reflector (B (?to A a))) ->
forallz : ?O_reflector A, ?O_reflector (B z)
H: Funext
forall (A : Type) (B : ?O_reflector A -> Type)
(f : foralla : A, ?O_reflector (B (?to A a)))
(a : A), ?O_indO A B f (?to A a) = f a
H: Funext
forall (A : Type) (zz' : ?O_reflector A),
IsEquiv (?to (z = z'))
H: Funext
Type -> Type
intros X; exact (~ (~ X)).
H: Funext
forallT : Type, T -> (funX : Type => ~~ X) T
intros T x nx; exact (nx x).
H: Funext
forall (A : Type)
(B : (funX : Type => ~~ X) A -> Type),
(foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a))) ->
forallz : (funX : Type => ~~ X) A,
(funX : Type => ~~ X) (B z)
H: Funext A: Type B: (funX : Type => ~~ X) A -> Type f: foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a)) z: (funX : Type => ~~ X) A nBz: ~ B z
Empty
H: Funext A: Type B: (funX : Type => ~~ X) A -> Type f: foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a)) z: (funX : Type => ~~ X) A nBz: ~ B z a: A
forall (A : Type)
(B : (funX : Type => ~~ X) A -> Type)
(f : foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a))) (a : A),
(fun (A0 : Type)
(B0 : (funX : Type => ~~ X) A0 -> Type)
(f0 : foralla0 : A0,
(funX : Type => ~~ X)
(B0
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A0 a0)))
(z : (funX : Type => ~~ X) A0) =>
(funnBz : ~ B0 z =>
z
((funa0 : A0 =>
f0 a0
(transport (funx : ~~ A0 => ~ B0 x)
(path_ishprop z (funnx : ~ A0 => nx a0))
nBz))
:
~ A0))
:
(funX : Type => ~~ X) (B0 z)) A B f
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x) : (funX : Type => ~~ X) T)
A a) = f a
H: Funext A: Type B: (funX : Type => ~~ X) A -> Type f: foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a)) a: A
(fun (A : Type) (B : (funX : Type => ~~ X) A -> Type)
(f : foralla : A,
(funX : Type => ~~ X)
(B
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x)
:
(funX : Type => ~~ X) T) A a)))
(z : (funX : Type => ~~ X) A) =>
(funnBz : ~ B z =>
z
((funa : A =>
f a
(transport (funx : ~~ A => ~ B x)
(path_ishprop z (funnx : ~ A => nx a)) nBz))
:
~ A))
:
(funX : Type => ~~ X) (B z)) A B f
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x) : (funX : Type => ~~ X) T)
A a) = f a
apply path_ishprop.
H: Funext
forall (A : Type) (zz' : (funX : Type => ~~ X) A),
IsEquiv
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x) : (funX : Type => ~~ X) T)
(z = z'))
H: Funext A: Type z, z': (funX : Type => ~~ X) A
IsEquiv
((fun (T : Type) (x : T) =>
(funnx : ~ T => nx x) : (funX : Type => ~~ X) T)
(z = z'))