Built with Alectryon. 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.
Require Import HoTT.Basics HoTT.Types.Require Import HoTT.Basics HoTT.Types.Require Import Spaces.Int Spaces.Circle.Require Import Colimits.Coeq HIT.Flattening Truncations.Core Truncations.Connectedness.LocalOpen Scope path_scope.(** * Quotients by free actions of [Int] *)(** We will show that if [Int] acts freely on a set, then the set-quotient of that action can be defined without a 0-truncation, giving it a universal property for mapping into all types. *)SectionFreeIntAction.Context `{Univalence}.Context (R : Type) `{IsHSet R}.(** A free action by [Int] is the same as a single auto-equivalence [f] (the action of [1]) whose iterates are all pointwise distinct. *)Context (f : R <~> R)
(f_free : forall (r : R) (nm : Int),
(int_iter f n r = int_iter f m r) -> (n = m)).(** We can then define the quotient to be the coequalizer of [f] and the identity map. This gives it the desired universal property for all types; it remains to show that this definition gives a set. *)LetRmodZ := Coeq f idmap.(** Together, [R] and [f] define a fibration over [Circle]. By the flattening lemma, its total space is equivalent to the quotient. *)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
IsHSet RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
IsHSet RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) <~> RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
{z : Circle & Circle_rec Type R (path_universe f) z} <~>
{w : Coeq idmap idmap &
Coeq_rec Type (unit_name R) (unit_name (path_universe f)) w}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
IsHSet {z : Circle & Circle_rec Type R (path_universe f) z}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) <~> RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) -> RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
RmodZ -> Wtil Unit Unit idmap idmap (unit_name R) (unit_name f)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
(funx : RmodZ => ?Goal4 (?Goal5 x)) == idmap
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
(funx : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
?Goal5 (?Goal4 x)) ==
idmap
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) -> RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
foralla : Unit, unit_name R a -> RmodZ
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (b : Unit) (y : unit_name R (idmap b)),
?cct' (idmap b) y = ?cct' (idmap b) (unit_name f b y)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
foralla : Unit, unit_name R a -> RmodZ
intros u r; exact (coeq r).
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (b : Unit) (y : unit_name R (idmap b)),
(fun (u : Unit) (r : unit_name R u) => coeq r) (idmap b) y =
(fun (u : Unit) (r : unit_name R u) => coeq r) (idmap b) (unit_name f b y)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type u: Unit r: unit_name R (idmap u)
coeq r = coeq (f r)
exact ((cglue r)^).
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
RmodZ -> Wtil Unit Unit idmap idmap (unit_name R) (unit_name f)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
R -> Wtil Unit Unit idmap idmap (unit_name R) (unit_name f)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forallb : R, ?coeq' (f b) = ?coeq' (idmap b)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
R -> Wtil Unit Unit idmap idmap (unit_name R) (unit_name f)
exact (cct tt).
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forallb : R, cct tt (f b) = cct tt (idmap b)
intros r; exact ((ppt tt r)^).
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
(funx : RmodZ =>
Wtil_rec RmodZ (fun (u : Unit) (r : unit_name R u) => coeq r)
(fun (u : Unit) (r : unit_name R (idmap u)) =>
(cglue r)^
:
(fun (u0 : Unit) (r0 : unit_name R u0) => coeq r0) (idmap u) r =
(fun (u0 : Unit) (r0 : unit_name R u0) => coeq r0)
(idmap u) (unit_name f u r))
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) x)) ==
idmap
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
transport
(funw : Coeq f idmap =>
Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^))
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) w) =
w)
(cglue b) 1 =
1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
(ap
(funx : Coeq f idmap =>
Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^))
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) x))
(cglue b))^ @
cglue b = 1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
cglue b =
ap
(funx : Coeq f idmap =>
Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^))
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) x))
(cglue b)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
cglue b =
ap
(Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^)))
(ap
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^))
(cglue b))
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
cglue b =
ap
(Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^)))
(ppt tt b)^
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type b: R
(ap
(Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^)))
(ppt tt b))^ =
cglue b
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
(funx : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^)
(Wtil_rec RmodZ (fun (u : Unit) (r : unit_name R u) => coeq r)
(fun (u : Unit) (r : unit_name R (idmap u)) =>
(cglue r)^
:
(fun (u0 : Unit) (r0 : unit_name R u0) => coeq r0) (idmap u) r =
(fun (u0 : Unit) (r0 : unit_name R u0) => coeq r0)
(idmap u) (unit_name f u r))
x)) ==
idmap
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (a : Unit) (x : R),
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) (coeq x) =
cct a x
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (b : Unit) (y : R),
transport
(funw : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^)
(Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^)) w) =
w)
(ppt b y) (?Goal4 b y) =
?Goal4 b (f y)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (a : Unit) (x : R),
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) (coeq x) =
cct a x
intros [] ?; reflexivity.
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
forall (b : Unit) (y : R),
transport
(funw : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^)
(Wtil_rec RmodZ (unit_name (funr : R => coeq r))
(unit_name (funr : R => (cglue r)^)) w) =
w)
(ppt b y)
((funa : Unit =>
match
a as u
return
(forallx : R,
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) (coeq x) =
cct u x)
with
| tt => funx : R => 1end) b y) =
(funa : Unit =>
match
a as u
return
(forallx : R,
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr : R => (ppt tt r)^) (coeq x) =
cct u x)
with
| tt => funx : R => 1end) b (f y)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
transport
(funw : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^)
(Wtil_rec RmodZ (unit_name (funr0 : R => coeq r0))
(unit_name (funr0 : R => (cglue r0)^)) w) =
w)
(ppt tt r) 1 =
1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
(ap
(funx : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^)
(Wtil_rec RmodZ (unit_name (funr0 : R => coeq r0))
(unit_name (funr0 : R => (cglue r0)^)) x))
(ppt tt r))^ @
ppt tt r = 1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
ppt tt r =
ap
(funx : Wtil Unit Unit idmap idmap (unit_name R) (unit_name f) =>
Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^)
(Wtil_rec RmodZ (unit_name (funr0 : R => coeq r0))
(unit_name (funr0 : R => (cglue r0)^)) x))
(ppt tt r)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
ppt tt r =
ap
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^))
(ap
(Wtil_rec RmodZ (unit_name (funr0 : R => coeq r0))
(unit_name (funr0 : R => (cglue r0)^)))
(ppt tt r))
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
ppt tt r =
ap
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^))
(cglue r)^
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
ppt tt r =
(ap
(Coeq_rec (Wtil Unit Unit idmap idmap (unit_name R) (unit_name f))
(cct tt) (funr0 : R => (ppt tt r0)^))
(cglue r))^
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type r: R
ppt tt r = ((ppt tt r)^)^
symmetry; apply inv_V.
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
{z : Circle & Circle_rec Type R (path_universe f) z} <~>
{w : Coeq idmap idmap &
Coeq_rec Type (unit_name R) (unit_name (path_universe f)) w}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle
Circle_rec Type R (path_universe f) x <~>
Coeq_rec Type (unit_name R) (unit_name (path_universe f)) x
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle
Circle_rec Type R (path_universe f) x =
Coeq_rec Type (unit_name R) (unit_name (path_universe f)) x
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
transport
(funx : Circle =>
Circle_rec Type R (path_universe f) x =
Coeq_rec Type (unit_name R) (unit_name (path_universe f)) x)
loop 1 =
1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
(ap (funx : Circle => Circle_rec Type R (path_universe f) x) loop)^ @
ap (Coeq_rec Type (unit_name R) (unit_name (path_universe f))) loop = 1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
ap (Coeq_rec Type (unit_name R) (unit_name (path_universe f))) loop =
ap (funx : Circle => Circle_rec Type R (path_universe f) x) loop
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
ap (Coeq_rec Type (unit_name R) (unit_name (path_universe f))) loop =
path_universe f
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
ap (Coeq_rec Type (unit_name R) (unit_name (path_universe f))) (cglue tt) =
path_universe f
exact (Coeq_rec_beta_cglue _ _ _ _).
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
IsHSet {z : Circle & Circle_rec Type R (path_universe f) z}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type
is_mere_relation {z : Circle & Circle_rec Type R (path_universe f) z} paths
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type xu, yv: {z : Circle & Circle_rec Type R (path_universe f) z}
IsHProp (xu = yv)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type xu, yv: {z : Circle & Circle_rec Type R (path_universe f) z}
IsHProp
{p : xu.1 = yv.1 &
transport (funz : Circle => Circle_rec Type R (path_universe f) z) p xu.2 =
yv.2}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle u: Circle_rec Type R (path_universe f) x y: Circle v: Circle_rec Type R (path_universe f) y
IsHProp
{p : x = y &
transport (funz : Circle => Circle_rec Type R (path_universe f) z) p u = v}
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle u: Circle_rec Type R (path_universe f) x y: Circle v: Circle_rec Type R (path_universe f) y
forallx0y0 : {p : x = y &
transport (funz : Circle => Circle_rec Type R (path_universe f) z) p u =
v},
x0 = y0
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle u: Circle_rec Type R (path_universe f) x y: Circle v: Circle_rec Type R (path_universe f) y p: x = y r: transport (funz : Circle => Circle_rec Type R (path_universe f) z) p u = v q: x = y s: transport (funz : Circle => Circle_rec Type R (path_universe f) z) q u = v
(p; r) = (q; s)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
(p; r) = (q; s)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
forallz : Circle, IsHSet (P z)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v X: forallz : Circle, IsHSet (P z)
(p; r) = (q; s)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
forallz : Circle, IsHSet (P z)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
IsHSet (P base)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
transport (funx0 : Circle => IsHSet (P x0)) loop ?Goal1 = ?Goal1
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
IsHSet (P base)
exact _.
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v
transport (funx0 : Circle => IsHSet (P x0)) loop IsHSet0 = IsHSet0
apply path_ishprop.
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v X: forallz : Circle, IsHSet (P z)
(p; r) = (q; s)
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r0 : R) (nm : Int), int_iter f n r0 = int_iter f m r0 -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p: x = y r: transport (funz : Circle => P z) p u = v q: x = y s: transport (funz : Circle => P z) q u = v X: forallz : Circle, IsHSet (P z)
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p, q: x = y X: forallz : Circle, IsHSet (P z) t: transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p, q: x = y X: forallz : Circle, IsHSet (P z) t: transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u xb: merely (base = x)
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p, q: x = y X: forallz : Circle, IsHSet (P z) t: transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u xb: merely (base = x) yb: merely (base = y)
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type x: Circle P:= Circle_rec Type R (path_universe f): Circle -> Type u: P x y: Circle v: P y p, q: x = y X: forallz : Circle, IsHSet (P z) t: transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u yb: base = y xb: base = x
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type P:= Circle_rec Type R (path_universe f): Circle -> Type u, v: P base p, q: base = base X: forallz : Circle, IsHSet (P z) t: transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (nm : Int), int_iter f n r = int_iter f m r -> n = m RmodZ:= Coeq f idmap: Type P:= Circle_rec Type R (path_universe f): Circle -> Type u, v: P base X: forallz : Circle, IsHSet (P z)
forallpq : base = base,
transport (funz : Circle => P z) p u = transport (funz : Circle => P z) q u ->
p = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m : Int), int_iter f n0 r = int_iter f m r -> n0 = m RmodZ:= Coeq f idmap: Type P:= Circle_rec Type R (path_universe f): Circle -> Type u, v: P base X: forallz : Circle, IsHSet (P z) n: Int
forallq : base = base,
transport (funz : Circle => P z) (equiv_loopCircle_int^-1 n) u =
transport (funz : Circle => P z) q u -> equiv_loopCircle_int^-1 n = q
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m0 : Int), int_iter f n0 r = int_iter f m0 r -> n0 = m0 RmodZ:= Coeq f idmap: Type P:= Circle_rec Type R (path_universe f): Circle -> Type u, v: P base X: forallz : Circle, IsHSet (P z) n, m: Int
transport (funz : Circle => P z) (equiv_loopCircle_int^-1 n) u =
transport (funz : Circle => P z) (equiv_loopCircle_int^-1 m) u ->
equiv_loopCircle_int^-1 n = equiv_loopCircle_int^-1 m
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m0 : Int), int_iter f n0 r = int_iter f m0 r -> n0 = m0 RmodZ:= Coeq f idmap: Type u, v: Circle_rec Type R (path_universe f) base X: forallz : Circle, IsHSet (Circle_rec Type R (path_universe f) z) n, m: Int
transport (funz : Circle => Circle_rec Type R (path_universe f) z)
(equiv_loopCircle_int^-1 n) u =
transport (funz : Circle => Circle_rec Type R (path_universe f) z)
(equiv_loopCircle_int^-1 m) u ->
equiv_loopCircle_int^-1 n = equiv_loopCircle_int^-1 m
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m0 : Int), int_iter f n0 r = int_iter f m0 r -> n0 = m0 RmodZ:= Coeq f idmap: Type u, v: Circle_rec Type R (path_universe f) base X: forallz : Circle, IsHSet (Circle_rec Type R (path_universe f) z) n, m: Int
int_iter f n u = int_iter f m u ->
equiv_loopCircle_int^-1 n = equiv_loopCircle_int^-1 m
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m0 : Int), int_iter f n0 r = int_iter f m0 r -> n0 = m0 RmodZ:= Coeq f idmap: Type u, v: Circle_rec Type R (path_universe f) base X: forallz : Circle, IsHSet (Circle_rec Type R (path_universe f) z) n, m: Int p: int_iter f n u = int_iter f m u
equiv_loopCircle_int^-1 n = equiv_loopCircle_int^-1 m
H: Univalence R: Type IsHSet0: IsHSet R f: R <~> R f_free: forall (r : R) (n0m0 : Int), int_iter f n0 r = int_iter f m0 r -> n0 = m0 RmodZ:= Coeq f idmap: Type u, v: Circle_rec Type R (path_universe f) base X: forallz : Circle, IsHSet (Circle_rec Type R (path_universe f) z) n, m: Int p: int_iter f n u = int_iter f m u
n = m
exact (f_free u n m p).Qed.(** TODO: Prove that this [RmodZ] is equivalent to the set-quotient of [R] by a suitably defined equivalence relation. *)EndFreeIntAction.