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.
(** * Accessible subuniverses and modalities *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Extensions NullHomotopy.Require Import Modality.LocalOpen Scope nat_scope.LocalOpen Scope path_scope.(** ** Accessible reflective subuniverses *)(** An accessible reflective subuniverse is one that is the localization at a small family of maps. Accessibility is necessary for some constructions, and in practice it's a reasonable hypothesis that includes most examples (though a few examples, such as double negation, may only be accessible if we assume propositional resizing).We now give the basic definitions related to accessibility, using [ooExtendableAlong] as our notion of equivalence as we did with reflective subuniverses. The actual construction of a reflective subuniverse by localization will be in [Localization]. *)RecordLocalGenerators@{a} :=
{ lgen_indices : Type@{a} ;
lgen_domain : lgen_indices -> Type@{a} ;
lgen_codomain : lgen_indices -> Type@{a} ;
lgenerator : foralli, lgen_domain i -> lgen_codomain i
}.Coercionlgenerator : LocalGenerators >-> Funclass.(** We put this definition in a module so that no one outside of this file will use it accidentally. It will be redefined in [Localization] to refer to the localization reflective subuniverse, which is judgmentally the same but will also pick up typeclass inference for [In]. *)ModuleImport IsLocal_Internal.DefinitionIsLocalfX :=
(forall (i : lgen_indices f), ooExtendableAlong (f i) (fun_ => X)).EndIsLocal_Internal.ClassIsAccRSU@{a i} (O : Subuniverse@{i}) :=
{
acc_lgen : LocalGenerators@{a} ;
inO_iff_islocal : forall (X : Type@{i}),
(** We call [iff] explicitly to control the number of universe parameters. *)
iff@{i i i} (In O X) (IsLocal acc_lgen X) ;
}.Arguments acc_lgen O {_}.Arguments inO_iff_islocal O {_} X.
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O)
O_inverts O (acc_lgen O i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O)
O_inverts O (acc_lgen O i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i))
O_inverts O (acc_lgen O i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O_inverts O (acc_lgen O i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O (lgen_codomain (acc_lgen O) i) ->
O (lgen_domain (acc_lgen O) i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O_functor O (acc_lgen O i) o ?g == idmap
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
?g o O_functor O (acc_lgen O i) == idmap
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O (lgen_codomain (acc_lgen O) i) ->
O (lgen_domain (acc_lgen O) i)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
lgen_codomain (acc_lgen O) i ->
O (lgen_domain (acc_lgen O) i)
exact ((fst (ext_dom i 1%nat) (to O _)).1).
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O_functor O (acc_lgen O i)
o O_rec
(fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1 == idmap
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_codomain (acc_lgen O) i
O_functor O (acc_lgen O i)
(O_rec
(fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1
(to O (lgen_codomain (acc_lgen O) i) x)) =
to O (lgen_codomain (acc_lgen O) i) x
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_codomain (acc_lgen O) i
O_functor O (acc_lgen O i)
((fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1 x) =
to O (lgen_codomain (acc_lgen O) i) x
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_codomain (acc_lgen O) i a: lgen_domain (acc_lgen O) i
O_functor O (acc_lgen O i)
((fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1
(acc_lgen O i a)) =
to O (lgen_codomain (acc_lgen O) i) (acc_lgen O i a)
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_codomain (acc_lgen O) i a: lgen_domain (acc_lgen O) i
O_functor O (acc_lgen O i)
(to O (lgen_domain (acc_lgen O) i) a) =
to O (lgen_codomain (acc_lgen O) i) (acc_lgen O i a)
apply to_O_natural.
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i))
O_rec
(fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1
o O_functor O (acc_lgen O i) == idmap
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_domain (acc_lgen O) i
O_rec
(fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1
(O_functor O (acc_lgen O i)
(to O (lgen_domain (acc_lgen O) i) x)) =
to O (lgen_domain (acc_lgen O) i) x
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_domain (acc_lgen O) i
O_rec
(fst (ext_dom i 1)
(to O (lgen_domain (acc_lgen O) i))).1
(to O (lgen_codomain (acc_lgen O) i)
(acc_lgen O i x)) =
to O (lgen_domain (acc_lgen O) i) x
O: ReflectiveSubuniverse H: IsAccRSU O i: lgen_indices (acc_lgen O) ext_dom:= fst
(inO_iff_islocal O
(O (lgen_domain (acc_lgen O) i)))
(O_inO (lgen_domain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_domain (acc_lgen O) i)) ext_cod:= fst
(inO_iff_islocal O
(O (lgen_codomain (acc_lgen O) i)))
(O_inO (lgen_codomain (acc_lgen O) i)): IsLocal (acc_lgen O)
(O (lgen_codomain (acc_lgen O) i)) x: lgen_domain (acc_lgen O) i
(fst (ext_dom i 1) (to O (lgen_domain (acc_lgen O) i))).1
(acc_lgen O i x) =
to O (lgen_domain (acc_lgen O) i) x
exact ((fst (ext_dom i 1%nat) (to O _)).2 x).Qed.(** The construction of the localization reflective subuniverse for any family of maps will be in [Localization]. *)(** ** Accessible modalities *)(** A modality is accessible just when its underlying reflective subuniverse is accessible. However, for modalities we have a simpler characterization in terms of families of generating connected objects rather than families of generating inverted maps. We call an object [S]-null if it is local with respect to the maps [S i -> Unit]. *)RecordNullGenerators :=
{ ngen_indices : Type@{a} ;
ngen_type : ngen_indices -> Type@{a}
}.Coercionngen_type : NullGenerators >-> Funclass.Definitionnull_to_local_generators : NullGenerators@{a1} -> LocalGenerators@{a2}
:= funS => Build_LocalGenerators (ngen_indices S) (ngen_type S) (fun_ => Unit) (fun__ => tt).(** As with [IsLocal], the real version of this notation will be defined in [Nullification]. *)ModuleImport IsNull_Internal.DefinitionIsNull (S : NullGenerators@{a}) (X : Type@{i})
:= IsLocal@{i i a} (null_to_local_generators@{a a} S) X.EndIsNull_Internal.(** A central fact: if a type [X] is null for all the fibers of a map [f], then it is [f]-local. (NB: the converse is *not* generally true.) TODO: Should this go in [Extensions]? *)
n: nat A, B: Type f: A -> B C: B -> Type
(forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))) -> ExtendableAlong n f C
n: nat A, B: Type f: A -> B C: B -> Type
(forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))) -> ExtendableAlong n f C
n: nat A, B: Type f: A -> B
forallC : B -> Type,
(forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))) -> ExtendableAlong n f C
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))
forallg : foralla : A, C (f a), ExtensionAlong f C g
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))
forallhk : forallb : B, C b,
ExtendableAlong n f (funb : B => h b = k b)
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))
forallg : foralla : A, C (f a), ExtensionAlong f C g
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) g: foralla : A, C (f a)
ExtensionAlong f C g
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) g: foralla : A, C (f a)
forallx : A,
(fst (null (f x) 1)
(funx0 : hfiber f (f x) =>
transport C x0.2 (g x0.1))).1 tt = g x
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) g: foralla : A, C (f a) a: A
(fst (null (f a) 1)
(funx : hfiber f (f a) => transport C x.2 (g x.1))).1
tt = g a
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) g: foralla : A, C (f a) a: A
(fst (null (f a) 1)
(funx : hfiber f (f a) => transport C x.2 (g x.1))).1
(const_tt A a) = g a
exact ((fst (null (f a) 1%nat) _).2 (a ; 1)).
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b))
forallhk : forallb : B, C b,
ExtendableAlong n f (funb : B => h b = k b)
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) h, k: forallb : B, C b
ExtendableAlong n f (funb : B => h b = k b)
A, B: Type f: A -> B n: nat IHn: forallC : B -> Type,
(forallb : B, ooExtendableAlong (const_tt (hfiber f b)) (unit_name (C b))) ->
ExtendableAlong n f C C: B -> Type null: forallb : B,
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (C b)) h, k: forallb : B, C b b: B
ooExtendableAlong (const_tt (hfiber f b))
(unit_name (h b = k b))
apply ooextendable_homotopy, null.Defined.Definitionooextendable_isnull_fibers {AB} (f : A -> B) (C : B -> Type)
: (forallb, ooExtendableAlong (const_tt (hfiber f b))
(fun_ => C b))
-> ooExtendableAlong f C
:= funnulln => extendable_isnull_fibers n f C null.(** We define a modality to be accessible if it consists of the null types for some family of generators as above. *)ClassIsAccModality@{a i} (O : Subuniverse@{i}) :=
{
acc_ngen : NullGenerators@{a} ;
inO_iff_isnull : forall (X : Type@{i}),
iff@{i i i} (In O X) (IsNull acc_ngen X) ;
}.Arguments acc_ngen O {_}.Arguments inO_iff_isnull O {_} X.SectionAccessibleModalities.Context (O : Modality) {acco : IsAccModality O}.(** Unsurprisingly, the generators are connected. *)
O: Modality acco: IsAccModality O i: ngen_indices (acc_ngen O)
IsConnected O (acc_ngen O i)
O: Modality acco: IsAccModality O i: ngen_indices (acc_ngen O)
IsConnected O (acc_ngen O i)
O: Modality acco: IsAccModality O i: ngen_indices (acc_ngen O)
NullHomotopy (to O (acc_ngen O i))
O: Modality acco: IsAccModality O i: ngen_indices (acc_ngen O) H:= fst
(fst (inO_iff_isnull O (O (acc_ngen O i)))
(O_inO (acc_ngen O i)) i 1)
(to O (acc_ngen O i)): ExtensionAlong
(null_to_local_generators (acc_ngen O) i)
(fun_ : lgen_codomain
(null_to_local_generators (acc_ngen O))
i => O (acc_ngen O i))
(to O (acc_ngen O i))
NullHomotopy (to O (acc_ngen O i))
O: Modality acco: IsAccModality O i: ngen_indices (acc_ngen O) H:= fst
(fst (inO_iff_isnull O (O (acc_ngen O i)))
(O_inO (acc_ngen O i)) i 1)
(to O (acc_ngen O i)): ExtensionAlong
(null_to_local_generators (acc_ngen O) i)
(fun_ : lgen_codomain
(null_to_local_generators (acc_ngen O))
i => O (acc_ngen O i))
(to O (acc_ngen O i))
forallx : acc_ngen O i,
to O (acc_ngen O i) x = H.1 tt
exact (funx => (H.2 x)^).Defined.(** If all the generators are inhabited, some things become a bit simpler. *)SectionInhabitedGenerators.Context (inhab : foralli, acc_ngen O i).(** For testing modal-ness of types, it suffices for all maps out of a generator to be constant. Probably one could do without [Funext]. *)
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f
In O A
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f
In O A
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
ooExtendableAlong
(null_to_local_generators (acc_ngen O) i)
(fun_ : lgen_codomain
(null_to_local_generators (acc_ngen O)) i
=> A)
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
IsEquiv
(fung : lgen_codomain
(null_to_local_generators (acc_ngen O)) i ->
A =>
g oD null_to_local_generators (acc_ngen O) i)
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
(lgen_domain (null_to_local_generators (acc_ngen O)) i ->
A) ->
lgen_codomain (null_to_local_generators (acc_ngen O))
i -> A
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
(fung : lgen_codomain
(null_to_local_generators (acc_ngen O)) i ->
A =>
g oD null_to_local_generators (acc_ngen O) i) o
?g == idmap
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
?g
o (fung : lgen_codomain
(null_to_local_generators (acc_ngen O)) i ->
A =>
g oD null_to_local_generators (acc_ngen O) i) ==
idmap
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
(lgen_domain (null_to_local_generators (acc_ngen O)) i ->
A) ->
lgen_codomain (null_to_local_generators (acc_ngen O))
i -> A
intros f []; exact (c i f).1.
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
(fung : lgen_codomain
(null_to_local_generators (acc_ngen O)) i ->
A =>
g oD null_to_local_generators (acc_ngen O) i)
o (fun
(f : lgen_domain
(null_to_local_generators (acc_ngen O)) i ->
A)
(b : lgen_codomain
(null_to_local_generators (acc_ngen O)) i)
=> match b with
| tt => (c i f).1end) == idmap
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O)) f: lgen_domain
(null_to_local_generators (acc_ngen O)) i -> A x: lgen_domain
(null_to_local_generators (acc_ngen O)) i
((funb : lgen_codomain
(null_to_local_generators (acc_ngen O)) i =>
match b with
| tt => (c i f).1end) oD null_to_local_generators (acc_ngen O) i) x =
f x
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O)) f: lgen_domain
(null_to_local_generators (acc_ngen O)) i -> A x: lgen_domain
(null_to_local_generators (acc_ngen O)) i
(c i f).1 = f x
symmetry; exact ((c i f).2 x).
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O))
(fun
(f : lgen_domain
(null_to_local_generators (acc_ngen O)) i ->
A)
(b : lgen_codomain
(null_to_local_generators (acc_ngen O)) i)
=> match b with
| tt => (c i f).1end)
o (fung : lgen_codomain
(null_to_local_generators (acc_ngen O)) i ->
A =>
g oD null_to_local_generators (acc_ngen O) i) ==
idmap
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O)) g: lgen_codomain
(null_to_local_generators (acc_ngen O)) i -> A
(c i (g oD null_to_local_generators (acc_ngen O) i)).1 =
g tt
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O)) g: lgen_codomain
(null_to_local_generators (acc_ngen O)) i -> A p:= (c i (g oD null_to_local_generators (acc_ngen O) i)).2: (funy : A =>
forallx : acc_ngen O i,
(g oD null_to_local_generators (acc_ngen O) i) x =
y)
(c i
(g oD null_to_local_generators (acc_ngen O) i)).1
(c i (g oD null_to_local_generators (acc_ngen O) i)).1 =
g tt
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type c: forall (i : ngen_indices (acc_ngen O))
(f : acc_ngen O i -> A),
NullHomotopy f i: lgen_indices
(null_to_local_generators (acc_ngen O)) g: lgen_codomain
(null_to_local_generators (acc_ngen O)) i -> A p:= (c i (fun_ : acc_ngen O i => g tt)).2: acc_ngen O i ->
g tt = (c i (fun_ : acc_ngen O i => g tt)).1
(c i (g oD null_to_local_generators (acc_ngen O) i)).1 =
g tt
symmetry; apply p, inhab.Defined.(** In particular, all hprops are modal. *)
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type IsHProp0: IsHProp A
In O A
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type IsHProp0: IsHProp A
In O A
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type IsHProp0: IsHProp A i: ngen_indices (acc_ngen O) f: acc_ngen O i -> A
NullHomotopy f
O: Modality acco: IsAccModality O inhab: foralli : ngen_indices (acc_ngen O),
acc_ngen O i H: Funext A: Type IsHProp0: IsHProp A i: ngen_indices (acc_ngen O) f: acc_ngen O i -> A
forallx : acc_ngen O i, f x = f (inhab i)
intros; apply path_ishprop.Defined.EndInhabitedGenerators.EndAccessibleModalities.(** We will now show that a modality is accessible in this sense if and only if its underlying reflective subuniverse is accessible in the sense previously defined. We (almost?) never need to actually use this, though; in practice accessible modalities usually seem to be given to us with the appropriate sort of generators. *)(** One direction of this implication is trivial. *)Instanceacc_rsu_modality (O : Modality) `{IsAccModality O}
: IsAccRSU O
:= Build_IsAccRSU O (null_to_local_generators (acc_ngen O)) (funX => inO_iff_isnull O X).(** For the less trivial converse, the idea is as follows. By [ooextendable_isnull_fibers], we can detect locality with respect to a map by nullity with respect to its fibers. Therefore, our first thought might be to just consider all the fibers of all the maps that we are localizing at. However, this doesn't quite work because [ooextendable_isnull_fibers] is not an if-and-only-if, so not every modal type would necessarily be null for that type family. We do know, however, that if [f] is an [O]-connected map, then any [O]-modal type is null for its fibers (since they are [O]-connected types). There is no *a priori* why all the maps we localize at should end up being connected for the modality; they will always be inverted, but not every inverted map is connected (unless the modality is lex). But if [f : A -> B] is [O]-inverted, then the [O]-connected map [to O A] is (up to equivalence) the composite of [f] with the [O]-connected map [to O B]. Thus, if [X] is null for the fibers of [to O A] and [to O B], it will be [f]-local and hence [O]-modal, while all [O]-modal types will be null for these fibers since they are connected. *)(** We don't make this an [Instance] since it is rarely used, and would cause loops when combined with the previous one. *)
O: Modality H: IsAccRSU O
IsAccModality O
O: Modality H: IsAccRSU O
IsAccModality O
O: Modality H: IsAccRSU O
NullGenerators
O: Modality H: IsAccRSU O
forallX : Type, In O X <-> IsNull ?acc_ngen X
O: Modality H: IsAccRSU O
NullGenerators
O: Modality H: IsAccRSU O
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)} -> Type
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type
IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)} =>
match X with
| inl s =>
hfiber (to O (lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O (lgen_codomain (acc_lgen O) s.1))
s.2end
|} X -> In O X
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X
In O X
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong (acc_lgen O i)
(fun_ : lgen_codomain (acc_lgen O) i => X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(to O (lgen_codomain (acc_lgen O) i))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(funx : lgen_domain (acc_lgen O) i =>
to O (lgen_codomain (acc_lgen O) i)
(acc_lgen O i x))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(to O (lgen_codomain (acc_lgen O) i))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O) x: O_reflector O (lgen_codomain (acc_lgen O) i)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(funx : lgen_domain (acc_lgen O) i =>
to O (lgen_codomain (acc_lgen O) i)
(acc_lgen O i x))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
(funx : lgen_domain (acc_lgen O) i =>
O_functor O (acc_lgen O i)
(to O (lgen_domain (acc_lgen O) i) x)) ==
(funx : lgen_domain (acc_lgen O) i =>
to O (lgen_codomain (acc_lgen O) i) (acc_lgen O i x))
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(funx : lgen_domain (acc_lgen O) i =>
O_functor O (acc_lgen O i)
(to O (lgen_domain (acc_lgen O) i) x))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong
(funx : lgen_domain (acc_lgen O) i =>
O_functor O (acc_lgen O i)
(to O (lgen_domain (acc_lgen O) i) x))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong (O_functor O (acc_lgen O i))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong (to O (lgen_domain (acc_lgen O) i))
(fun_ : O (lgen_domain (acc_lgen O) i) => X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong (O_functor O (acc_lgen O i))
(fun_ : O_reflector O (lgen_codomain (acc_lgen O) i)
=> X)
apply ooextendable_equiv, O_inverts_generators.
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O)
ooExtendableAlong (to O (lgen_domain (acc_lgen O) i))
(fun_ : O (lgen_domain (acc_lgen O) i) => X)
O: Modality H: IsAccRSU O cm: forallA : Type, IsConnMap O (to O A) X: Type Xnull: IsNull
{|
ngen_indices :=
{i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)};
ngen_type :=
funX : {i : lgen_indices (acc_lgen O) &
O (lgen_domain (acc_lgen O) i)} +
{i : lgen_indices (acc_lgen O) &
O (lgen_codomain (acc_lgen O) i)}
=>
match X with
| inl s =>
hfiber
(to O
(lgen_domain (acc_lgen O) s.1))
s.2
| inr s =>
hfiber
(to O
(lgen_codomain (acc_lgen O) s.1))
s.2end
|} X i: lgen_indices (acc_lgen O) x: O (lgen_domain (acc_lgen O) i)