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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
LocalOpen Scope nat_scope.LocalOpen Scope path_scope.Generalizable VariablesA B f.SectionAssumeFunext.Context `{Funext}.(** * n-Path-split maps.A map is n-path-split if its induced maps on the first n iterated path-spaces are split surjections. Thus every map is 0-path-split, the 1-path-split maps are the split surjections, and so on. It turns out that for n>1, being n-path-split is the same as being an equivalence. *)FixpointPathSplit (n : nat) `(f : A -> B) : Type
:= match n with
| 0 => Unit
| S n => (foralla, hfiber f a) *
forall (xy : A), PathSplit n (@ap _ _ f x y)
end.
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f -> IsEquiv f
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f -> IsEquiv f
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a k: forallxy : A, PathSplit n.+1 (ap f)
IsEquiv f
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a k: forallxy : A, PathSplit n.+1 (ap f) h:= fun (xy : A) (p : f x = f y) => (fst (k x y) p).1: forallxy : A, f x = f y -> x = y
IsEquiv f
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a k: forallxy : A, PathSplit n.+1 (ap f) h:= fun (xy : A) (p : f x = f y) => (fst (k x y) p).1: forallxy : A, f x = f y -> x = y hs:= funxy : A =>
(funp : f x = f y => (fst (k x y) p).2)
:
ap f o h x y == idmap: forallxy : A, ap f o h x y == idmap
IsEquiv f
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap
IsEquiv f
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B
Contr (hfiber f b)
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B
IsHProp (hfiber f b)
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B
hfiber f b
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B
IsHProp (hfiber f b)
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
(a; p) = (a'; p')
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
transport (funx : A => f x = b) (h a a' (p @ p'^)) p =
p'
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
(ap f (h a a' (p @ p'^)))^ @ p = p'
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
(p @ p'^)^ @ p = p'
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
((p'^)^ @ p^) @ p = p'
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
(p'^)^ @ (p^ @ p) = p'
H: Funext n: nat A, B: Type f: A -> B g: foralla : B, hfiber f a h: forallxy : A, f x = f y -> x = y hs: forallxy : A, ap f o h x y == idmap b: B a: A p: f a = b a': A p': f a' = b
(p'^)^ @ 1 = p'
exact ((inv_V p' @@ 1) @ concat_p1 _).Defined.
H: Funext n: nat A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit n f)
H: Funext n: nat A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit n f)
H: Funext n: nat
forall (AB : Type) (f : A -> B),
IsEquiv f -> Contr (PathSplit n f)
H: Funext A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit 0 f)
H: Funext n: nat IHn: forall (AB : Type) (f : A -> B), IsEquiv f -> Contr (PathSplit n f) A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit n.+1 f)
H: Funext A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit 0 f)
exact _.
H: Funext n: nat IHn: forall (AB : Type) (f : A -> B), IsEquiv f -> Contr (PathSplit n f) A, B: Type f: A -> B H0: IsEquiv f
Contr (PathSplit n.+1 f)
exact contr_prod.Defined.
H: Funext n: nat A, B: Type f: A -> B
IsHProp (PathSplit n.+2 f)
H: Funext n: nat A, B: Type f: A -> B
IsHProp (PathSplit n.+2 f)
H: Funext n: nat A, B: Type f: A -> B ps: PathSplit n.+2 f
Contr (PathSplit n.+2 f)
H: Funext n: nat A, B: Type f: A -> B ps: PathSplit n.+2 f i:= isequiv_pathsplit n ps: IsEquiv f
Contr (PathSplit n.+2 f)
exact _.Defined.
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f <~> IsEquiv f
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f <~> IsEquiv f
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f -> IsEquiv f
H: Funext n: nat A, B: Type f: A -> B
IsEquiv f -> PathSplit n.+2 f
H: Funext n: nat A, B: Type f: A -> B
PathSplit n.+2 f -> IsEquiv f
apply isequiv_pathsplit.
H: Funext n: nat A, B: Type f: A -> B
IsEquiv f -> PathSplit n.+2 f
intros ?; exact (center _).Defined.(** Path-splitness transfers across commutative squares of equivalences. *)
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n f <~> PathSplit n g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n f <~> PathSplit n g
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit 0 f <~> PathSplit 0 g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n.+1 f <~> PathSplit n.+1 g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n.+1 f <~> PathSplit n.+1 g
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit 1 f <~> PathSplit 1 g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n.+2 f <~> PathSplit n.+2 g
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit 1 f <~> PathSplit 1 g
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
(foralla : B, hfiber f a) * (A -> A -> Unit) <~>
(foralla : D, hfiber g a) * (C -> C -> Unit)
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
(foralla : B, hfiber f a) <~>
(foralla : D, hfiber g a)
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f d: D
hfiber f (k^-1%equiv d) <~> hfiber g d
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f d: D
{x : A & f x = k^-1%equiv d} <~> {x : C & g x = d}
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f d: D a: A
f a = k^-1%equiv d <~> g (h a) = d
H: Funext A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f d: D a: A
f a = k^-1%equiv d <~> k (f a) = d
simpl; apply equiv_moveR_equiv_M.
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
PathSplit n.+2 f <~> PathSplit n.+2 g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
IsEquiv f <~> PathSplit n.+2 g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f
IsEquiv f <~> IsEquiv g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f e: IsEquiv f
IsEquiv g
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f e: IsEquiv g
IsEquiv f
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f e: IsEquiv f
IsEquiv g
exact (isequiv_commsq f g h k (funa => (p a)^)).
H: Funext n: nat A, B, C, D: Type f: A -> B g: C -> D h: A <~> C k: B <~> D p: g o h == k o f e: IsEquiv g
IsEquiv f
exact (isequiv_commsq' f g h k p).Defined.(** A map is oo-path-split if it is n-path-split for all n. This is also equivalent to being an equivalence. *)DefinitionooPathSplit `(f : A -> B) : Type
:= foralln, PathSplit n f.Definitionisequiv_oopathsplit `{f : A -> B}
: ooPathSplit f -> IsEquiv f
:= funps => isequiv_pathsplit 0 (ps 2).
H: Funext A, B: Type f: A -> B H0: IsEquiv f
Contr (ooPathSplit f)
H: Funext A, B: Type f: A -> B H0: IsEquiv f
Contr (ooPathSplit f)
exact contr_forall.Defined.
H: Funext A, B: Type f: A -> B
IsHProp (ooPathSplit f)
H: Funext A, B: Type f: A -> B
IsHProp (ooPathSplit f)
H: Funext A, B: Type f: A -> B ps: ooPathSplit f
Contr (ooPathSplit f)
H: Funext A, B: Type f: A -> B ps: ooPathSplit f i:= isequiv_oopathsplit ps: IsEquiv f