Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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.
(** * Nullification *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Extensions.Require Import Modality Accessible.Require Export Modalities.Localization. (** Nullification is a special case of localization *)LocalOpen Scope path_scope.(** Nullification is the special case of localization where the codomains of the generating maps are all [Unit]. In this case, we get a modality and not just a reflective subuniverse. *)(** The hypotheses of this lemma may look slightly odd (why are we bothering to talk about type families dependent over [Unit]?), but they seem to be the most convenient to make the induction go through. *)
n: nat A: Type C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))
ExtendableAlong_Over n (const_tt A) C D ext
n: nat A: Type C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))
ExtendableAlong_Over n (const_tt A) C D ext
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u))
forall (g : foralla : A, C (const_tt A a))
(g' : foralla : A, D (const_tt A a) (g a)),
{rec : forallb : Unit, D b ((fst ext g).1 b) &
foralla : A,
transport (D (const_tt A a)) ((fst ext g).2 a)
(rec (const_tt A a)) = g' a}
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u))
forall (hk : forallb : Unit, C b)
(h' : forallb : Unit, D b (h b))
(k' : forallb : Unit, D b (k b)),
ExtendableAlong_Over n (const_tt A)
(funb : Unit => h b = k b)
(fun (b : Unit) (c : h b = k b) =>
transport (D b) c (h' b) = k' b)
(snd ext h k)
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u))
forall (g : foralla : A, C (const_tt A a))
(g' : foralla : A, D (const_tt A a) (g a)),
{rec : forallb : Unit, D b ((fst ext g).1 b) &
foralla : A,
transport (D (const_tt A a)) ((fst ext g).2 a)
(rec (const_tt A a)) = g' a}
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u)) g: foralla : A, C (const_tt A a) g': foralla : A, D (const_tt A a) (g a)
{rec : forallb : Unit, D b ((fst ext g).1 b) &
foralla : A,
transport (D (const_tt A a)) ((fst ext g).2 a)
(rec (const_tt A a)) = g' a}
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u)) g: foralla : A, C (const_tt A a) g': foralla : A, D (const_tt A a) (g a) a: A
transport (D (const_tt A a)) ((fst ext g).2 a)
((fst (ext' (fst ext g).1)
(funa : A =>
transport (D (const_tt A a)) ((fst ext g).2 a)^
(g' a))).1 (const_tt A a)) = g' a
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u)) g: foralla : A, C (const_tt A a) g': foralla : A, D (const_tt A a) (g a) a: A
(fst (ext' (fst ext g).1)
(funa : A =>
transport (D (const_tt A a)) ((fst ext g).2 a)^
(g' a))).1 (const_tt A a) =
transport (D (const_tt A a)) ((fst ext g).2 a)^ (g' a)
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u))
forall (hk : forallb : Unit, C b)
(h' : forallb : Unit, D b (h b))
(k' : forallb : Unit, D b (k b)),
ExtendableAlong_Over n (const_tt A)
(funb : Unit => h b = k b)
(fun (b : Unit) (c : h b = k b) =>
transport (D b) c (h' b) = k' b) (snd ext h k)
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u)) h, k: forallb : Unit, C b h': forallb : Unit, D b (h b) k': forallb : Unit, D b (k b)
ExtendableAlong_Over n (const_tt A)
(funb : Unit => h b = k b)
(fun (b : Unit) (c : h b = k b) =>
transport (D b) c (h' b) = k' b) (snd ext h k)
A: Type n: nat IH: forall (C : Unit -> Type)
(D : forallu : Unit, C u -> Type)
(ext : ExtendableAlong n (const_tt A) C),
(forallc : forallu : Unit, C u,
ExtendableAlong n (const_tt A)
(funu : Unit => D u (c u))) ->
ExtendableAlong_Over n (const_tt A) C D ext C: Unit -> Type D: forallu : Unit, C u -> Type ext: ExtendableAlong n.+1 (const_tt A) C ext': forallc : forallu : Unit, C u,
ExtendableAlong n.+1 (const_tt A)
(funu : Unit => D u (c u)) h, k: forallb : Unit, C b h': forallb : Unit, D b (h b) k': forallb : Unit, D b (k b) g: forallu : Unit, h u = k u
ExtendableAlong n (const_tt A)
(funu : Unit => transport (D u) (g u) (h' u) = k' u)
exact (snd (ext' k) (funu => g u # h' u) k').Defined.Definitionooextendable_over_unit@{i j k l m}
(A : Type@{i}) (C : Unit -> Type@{j}) (D : forallu, C u -> Type@{k})
(ext : ooExtendableAlong@{l l j m} (const_tt A) C)
(ext' : forall (c : forallu, C u),
ooExtendableAlong (const_tt A) (funu => (D u (c u))))
: ooExtendableAlong_Over (const_tt A) C D ext
:= funn => extendable_over_unit n A C D (ext n) (func => ext' c n).#[local] Hint Extern4 => progress (cbv beta iota) : typeclass_instances.
S: NullGenerators
Modality
S: NullGenerators
Modality
(** We use the localization reflective subuniverses for most of the necessary data. *)
S: NullGenerators
forallT : Type,
PreReflects (Loc (null_to_local_generators S)) T
ReflectsD (Loc (null_to_local_generators S))
(Loc (null_to_local_generators S)) A
(** We take care with universes. *)
S: NullGenerators A: Type
forallB : O_reflector (Loc (null_to_local_generators S)) A ->
Type,
(foralloa : O_reflector (Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa)) ->
(foralla : A,
B (to (Loc (null_to_local_generators S)) A a)) ->
foralloa : O_reflector (Loc (null_to_local_generators S)) A,
B oa
S: NullGenerators A: Type
forall
(B : O_reflector (Loc (null_to_local_generators S)) A ->
Type)
(B_inO : foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa))
(f : foralla : A,
B (to (Loc (null_to_local_generators S)) A a))
(a : A),
?OO_ind' B B_inO f
(to (Loc (null_to_local_generators S)) A a) = f a
S: NullGenerators A: Type
forallB : Type,
In (Loc (null_to_local_generators S)) B ->
forallzz' : B,
In (Loc (null_to_local_generators S)) (z = z')
S: NullGenerators A: Type
forallB : O_reflector (Loc (null_to_local_generators S)) A ->
Type,
(foralloa : O_reflector (Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa)) ->
(foralla : A,
B (to (Loc (null_to_local_generators S)) A a)) ->
foralloa : O_reflector (Loc (null_to_local_generators S)) A,
B oa
S: NullGenerators A: Type B: O_reflector (Loc (null_to_local_generators S)) A ->
Type B_inO: foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa) g: foralla : A,
B (to (Loc (null_to_local_generators S)) A a)
foralloa : O_reflector (Loc (null_to_local_generators S)) A,
B oa
S: NullGenerators A: Type B: O_reflector (Loc (null_to_local_generators S)) A ->
Type B_inO: foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa) g: foralla : A,
B (to (Loc (null_to_local_generators S)) A a) i: lgen_indices (null_to_local_generators S)
ooExtendableAlong_Over (null_to_local_generators S i)
(fun_ : lgen_codomain (null_to_local_generators S) i
=> Localize (null_to_local_generators S) A)
(fun_ : lgen_codomain (null_to_local_generators S) i
=> B)
(islocal_localize (null_to_local_generators S) A i)
S: NullGenerators A: Type B: O_reflector (Loc (null_to_local_generators S)) A ->
Type B_inO: foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa) g: foralla : A,
B (to (Loc (null_to_local_generators S)) A a) i: lgen_indices (null_to_local_generators S) c: Unit -> Localize (null_to_local_generators S) A
ooExtendableAlong
(const_tt
(lgen_domain (null_to_local_generators S) i))
(funu : Unit => B (c u))
S: NullGenerators A: Type B: O_reflector (Loc (null_to_local_generators S)) A ->
Type B_inO: foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa) g: foralla : A,
B (to (Loc (null_to_local_generators S)) A a) i: lgen_indices (null_to_local_generators S) c: Unit -> Localize (null_to_local_generators S) A
forall
(B : O_reflector (Loc (null_to_local_generators S)) A ->
Type)
(B_inO : foralloa : O_reflector
(Loc (null_to_local_generators S)) A,
In (Loc (null_to_local_generators S)) (B oa))
(f : foralla : A,
B (to (Loc (null_to_local_generators S)) A a))
(a : A),
(fun
(B0 : O_reflector
(Loc (null_to_local_generators S)) A ->
Type)
(B_inO0 : foralloa : O_reflector
(Loc (null_to_local_generators S))
A,
In (Loc (null_to_local_generators S))
(B0 oa))
(g : foralla0 : A,
B0
(to (Loc (null_to_local_generators S)) A a0))
=>
Localize_ind (null_to_local_generators S) A B0 g
(funi : lgen_indices (null_to_local_generators S)
=>
ooextendable_over_unit
(lgen_domain (null_to_local_generators S) i)
(fun_ : lgen_codomain
(null_to_local_generators S) i =>
Localize (null_to_local_generators S) A)
(fun_ : lgen_codomain
(null_to_local_generators S) i => B0)
(islocal_localize (null_to_local_generators S) A
i)
(func : Unit ->
Localize (null_to_local_generators S) A
=>
ooextendable_postcompose
(unit_name (B0 (c tt)))
(funu : Unit => B0 (c u))
(const_tt
(lgen_domain (null_to_local_generators S)
i))
(funu : Unit =>
transport B0 (ap c (path_unit tt u)))
(ooextendable_islocal
(null_to_local_generators S) i)))) B B_inO
f (to (Loc (null_to_local_generators S)) A a) =
f a
reflexivity.
S: NullGenerators A: Type
forallB : Type,
In (Loc (null_to_local_generators S)) B ->
forallzz' : B,
In (Loc (null_to_local_generators S)) (z = z')
apply inO_paths@{i i}.Defined.(** And here is the "real" definition of the notation [IsNull]. *)NotationIsNull f := (In (Nul f)).(** ** Nullification and Accessibility *)(** Nullification modalities are accessible, essentially by definition. *)
S: NullGenerators
IsAccModality (Nul S)
S: NullGenerators
IsAccModality (Nul S)
S: NullGenerators
NullGenerators
S: NullGenerators
forallX : Type,
In (Nul S) X <-> IsNull_Internal.IsNull ?acc_ngen X
S: NullGenerators
NullGenerators
exact S.
S: NullGenerators
forallX : Type,
In (Nul S) X <-> IsNull_Internal.IsNull S X
intros; reflexivity.Defined.(** And accessible modalities can be lifted to other universes. *)Definitionlift_accmodality@{a i j} (O : Subuniverse@{i}) `{IsAccModality@{a i} O}
: Modality@{j}
:= Nul@{a j} (acc_ngen O).