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 Idempotents. Require Import HoTT.Truncations.Core Spaces.BAut Spaces.Cantor. Local Open Scope equiv_scope. Local Open Scope path_scope. (** * BAut(Cantor) *) (** ** A pre-idempotent on [BAut Cantor] that does not split *) (** We go into a non-exported module so that we can use short names for definitions without polluting the global namespace. *) Module BAut_Cantor_Idempotent. Section Assumptions. Context `{Univalence}.
H: Univalence

BAut Cantor -> BAut Cantor
H: Univalence

BAut Cantor -> BAut Cantor
H: Univalence
Z: BAut Cantor

BAut Cantor
(** Here is the important part of this definition. *)
H: Univalence
Z: BAut Cantor

merely (Z + Cantor = Cantor)
(** The rest is just a proof that [Z+Cantor] is again equivalent to [Cantor], using [cantor_fold] and the assumption that [Z] is equivalent to [Cantor]. *)
H: Univalence
Z: BAut Cantor
e: Tr (-1) (Z.1 = Cantor)

merely (Z + Cantor = Cantor)
H: Univalence
Z: BAut Cantor
e: Z.1 = Cantor

merely (Z + Cantor = Cantor)
H: Univalence
Z: BAut Cantor
e: Z.1 = Cantor

Z + Cantor = Cantor
H: Univalence
Z: BAut Cantor
e: Z.1 = Cantor

Z + Cantor <~> Cantor
H: Univalence
Z: BAut Cantor
e: Z.1 = Cantor

Z + Cantor <~> Cantor + Cantor
refine (equiv_path _ _ e +E 1). Defined. (** For the pre-idempotence of [f], the main point is again the existence of the equivalence [fold_cantor]. *)
H: Univalence

IsPreIdempotent f
H: Univalence

IsPreIdempotent f
H: Univalence
Z: BAut Cantor

f (f Z) = f Z
H: Univalence
Z: BAut Cantor

f (f Z) <~> f Z
H: Univalence
Z: BAut Cantor

Z + Cantor + Cantor <~> Z + Cantor
H: Univalence
Z: BAut Cantor

Z + (Cantor + Cantor) <~> Z + Cantor
apply (1 +E equiv_cantor_fold). Defined. (** We record how the action of [f] and [f o f] on paths corresponds to an action on equivalences. *)
H: Univalence
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (f Z).1 (f Z').1 (ap f p) ..1 = equiv_path Z Z' p ..1 +E 1
H: Univalence
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (f Z).1 (f Z').1 (ap f p) ..1 = equiv_path Z Z' p ..1 +E 1
H: Univalence
Z: BAut Cantor

equiv_path (f Z).1 (f Z).1 (ap f 1) ..1 = equiv_path Z Z 1 ..1 +E 1
H: Univalence
Z: BAut Cantor

equiv_path (f Z).1 (f Z).1 (ap f 1) ..1 == equiv_path Z Z 1 ..1 +E 1
intros [z|a]; reflexivity. Defined.
H: Univalence
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (f (f Z)).1 (f (f Z')).1 (ap (f o f) p) ..1 = equiv_path Z Z' p ..1 +E 1 +E 1
H: Univalence
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (f (f Z)).1 (f (f Z')).1 (ap (f o f) p) ..1 = equiv_path Z Z' p ..1 +E 1 +E 1
H: Univalence
Z: BAut Cantor

equiv_path (f (f Z)).1 (f (f Z)).1 (ap (fun x : BAut Cantor => f (f x)) 1) ..1 = equiv_path Z Z 1 ..1 +E 1 +E 1
H: Univalence
Z: BAut Cantor

equiv_path (f (f Z)).1 (f (f Z)).1 (ap (fun x : BAut Cantor => f (f x)) 1) ..1 == equiv_path Z Z 1 ..1 +E 1 +E 1
intros [[z|a]|a]; reflexivity. Defined. (** Now let's assume [f] is quasi-idempotent, but not necessarily using the same witness of pre-idempotency. *) Context (Ip : IsPreIdempotent f) (Jp : @IsQuasiIdempotent _ f Ip). Definition I (Z : BAut Cantor) : (Z + Cantor) + Cantor <~> Z + Cantor := equiv_path _ _ (Ip Z)..1. Definition I0 : Cantor + Cantor + Cantor + Cantor <~> Cantor + Cantor + Cantor := I (f (point (BAut Cantor))). (** We don't know much about [I0], but we can show that it maps the rightmost two summands to the rightmost one, using the naturality of [I]. Here is the naturality. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
e: Z <~> Z'

I Z' oE (e +E 1 +E 1) = (e +E 1) oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
e: Z <~> Z'

I Z' oE (e +E 1 +E 1) = (e +E 1) oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
q: Z = Z'

I Z' oE (equiv_path Z Z' q +E 1 +E 1) = (equiv_path Z Z' q +E 1) oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

I Z' oE (equiv_path Z Z' ((equiv_path_sigma_hprop Z Z')^-1 p) +E 1 +E 1) = (equiv_path Z Z' ((equiv_path_sigma_hprop Z Z')^-1 p) +E 1) oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

I Z' oE (equiv_path Z Z' p ..1 +E 1 +E 1) = (equiv_path Z Z' p ..1 +E 1) oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

I Z' oE equiv_path (f (f Z)).1 (f (f Z')).1 (ap (fun x : BAut Cantor => f (f x)) p) ..1 = equiv_path (f Z).1 (f Z').1 (ap f p) ..1 oE I Z
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (f (f Z')).1 (f Z').1 (Ip Z') ..1 oE equiv_path (f (f Z)).1 (f (f Z')).1 (ap (fun x : BAut Cantor => f (f x)) p) ..1 = equiv_path (f Z).1 (f Z').1 (ap f p) ..1 oE equiv_path (f (f Z)).1 (f Z).1 (Ip Z) ..1
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

equiv_path (Z + Cantor + Cantor) (Z' + Cantor) ((ap (fun x : BAut Cantor => f (f x)) p) ..1 @ (Ip Z') ..1) = equiv_path (Z + Cantor + Cantor) (Z' + Cantor) ((Ip Z) ..1 @ (ap f p) ..1)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

(ap (fun x : BAut Cantor => f (f x)) p) ..1 @ (Ip Z') ..1 = (Ip Z) ..1 @ (ap f p) ..1
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

(ap (fun x : BAut Cantor => f (f x)) p @ Ip Z') ..1 = (Ip Z @ ap f p) ..1
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z, Z': BAut Cantor
p: Z = Z'

ap (fun x : BAut Cantor => f (f x)) p @ Ip Z' = Ip Z @ ap f p
apply (concat_Ap Ip). Qed. (** To show our claim about the action of [I0], we will apply this naturality to the flip automorphism of [Cantor + Cantor]. Here are the images of that automorphism under [f] and [f o f]. *) Definition f_flip := equiv_sum_symm Cantor Cantor +E equiv_idmap Cantor. Definition ff_flip := (equiv_sum_symm Cantor Cantor +E equiv_idmap Cantor) +E (equiv_idmap Cantor). (** The naturality of [I] implies that [I0] commutes with these images of the flip. *) Definition I0nat_flip (x : ((Cantor + Cantor) + Cantor) + Cantor) : I0 (ff_flip x) = f_flip (I0 x) := ap10_equiv (Inat (f (point (BAut Cantor))) (f (point (BAut Cantor))) (equiv_sum_symm Cantor Cantor)) x. (** The value of this is that we can detect which summand an element is in depending on whether or not it is fixed by [f_flip] or [ff_flip]. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor

f_flip x = x <-> is_inr x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor

f_flip x = x <-> is_inr x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inr c) = inl (inl c)

is_inr (inl (inl c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl c) = inl (inr c)
is_inr (inl (inr c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inr c
is_inr (inr c)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty
f_flip (inl (inl c)) = inl (inl c)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty
f_flip (inl (inr c)) = inl (inr c)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Unit
f_flip (inr c) = inr c
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inr c) = inl (inl c)

is_inr (inl (inl c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inl c

is_inr (inl (inl c))
elim (inl_ne_inr _ _ p^).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl c) = inl (inr c)

is_inr (inl (inr c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl c = inr c

is_inr (inl (inr c))
elim (inl_ne_inr _ _ p).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inr c

is_inr (inr c)
exact tt.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty

f_flip (inl (inl c)) = inl (inl c)
elim p.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty

f_flip (inl (inr c)) = inl (inr c)
elim p.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Unit

f_flip (inr c) = inr c
reflexivity. Defined.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

ff_flip x = x <-> is_inr x + is_inl_and is_inr x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

ff_flip x = x <-> is_inr x + is_inl_and is_inr x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl (inr c)) = inl (inl (inl c))

is_inr (inl (inl (inl c))) + is_inl_and is_inr (inl (inl (inl c)))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl (inl c)) = inl (inl (inr c))
is_inr (inl (inl (inr c))) + is_inl_and is_inr (inl (inl (inr c)))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inr c) = inl (inr c)
is_inr (inl (inr c)) + is_inl_and is_inr (inl (inr c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inr c
is_inr (inr c) + is_inl_and is_inr (inr c)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Empty
ff_flip (inl (inl (inl c))) = inl (inl (inl c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Empty
ff_flip (inl (inl (inr c))) = inl (inl (inr c))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Unit
ff_flip (inl (inr c)) = inl (inr c)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Unit + Empty
ff_flip (inr c) = inr c
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl (inr c)) = inl (inl (inl c))

is_inr (inl (inl (inl c))) + is_inl_and is_inr (inl (inl (inl c)))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inl c

is_inr (inl (inl (inl c))) + is_inl_and is_inr (inl (inl (inl c)))
elim (inl_ne_inr _ _ p^).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inl (inl c)) = inl (inl (inr c))

is_inr (inl (inl (inr c))) + is_inl_and is_inr (inl (inl (inr c)))
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl c = inr c

is_inr (inl (inl (inr c))) + is_inl_and is_inr (inl (inl (inr c)))
elim (inl_ne_inr _ _ p).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inl (inr c) = inl (inr c)

is_inr (inl (inr c)) + is_inl_and is_inr (inl (inr c))
exact (inr tt).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: inr c = inr c

is_inr (inr c) + is_inl_and is_inr (inr c)
exact (inl tt).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Empty

ff_flip (inl (inl (inl c))) = inl (inl (inl c))
destruct p as [e|e]; elim e.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Empty

ff_flip (inl (inl (inr c))) = inl (inl (inr c))
destruct p as [e|e]; elim e.
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Empty + Unit

ff_flip (inl (inr c)) = inl (inr c)
destruct p as [e|_]; [ elim e | reflexivity ].
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
c: Cantor
p: Unit + Empty

ff_flip (inr c) = inr c
destruct p as [_|e]; [ reflexivity | elim e ]. Defined. (** And the naturality guarantees that [I0] preserves fixed points. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

ff_flip x = x <-> f_flip (I0 x) = I0 x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

ff_flip x = x <-> f_flip (I0 x) = I0 x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor
p: ff_flip x = x

f_flip (I0 x) = I0 x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor
p: f_flip (I0 x) = I0 x
ff_flip x = x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor
p: ff_flip x = x

f_flip (I0 x) = I0 x
refine ((I0nat_flip x)^ @ ap I0 p).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor
p: f_flip (I0 x) = I0 x

ff_flip x = x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor
p: f_flip (I0 x) = I0 x

I0 (ff_flip x) = I0 x
refine (I0nat_flip x @ p). Defined. (** Putting it all together, here is the proof of our claim about [I0]. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

is_inr x + is_inl_and is_inr x <-> is_inr (I0 x)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

is_inr x + is_inl_and is_inr x <-> is_inr (I0 x)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

is_inr x + is_inl_and is_inr x <-> f_flip (I0 x) = I0 x
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x: Cantor + Cantor + Cantor + Cantor

is_inr x + is_inl_and is_inr x <-> ff_flip x = x
apply iff_inverse, ff_flip_fixed_iff_inr. Defined. (** Now we bring quasi-idempotence into play. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z: BAut Cantor

I Z +E 1 = I (f Z)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z: BAut Cantor

I Z +E 1 = I (f Z)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z: BAut Cantor

equiv_path (Z + Cantor + Cantor) (Z + Cantor) (Ip Z) ..1 +E 1 = equiv_path (Z + Cantor + Cantor + Cantor) (Z + Cantor + Cantor) (Ip (f Z)) ..1
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z: BAut Cantor

equiv_path (f (f (f Z))).1 (f (f Z)).1 (ap f (Ip Z)) ..1 = equiv_path (Z + Cantor + Cantor + Cantor) (Z + Cantor + Cantor) (Ip (f Z)) ..1
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
Z: BAut Cantor

ap f (Ip Z) = Ip (f Z)
apply Jp. Defined. (** We reach a contradiction by showing that the two maps which [J] claims are equal send elements of the third summand of the domain into different summands of the codomain. *)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f

Empty
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f

Empty
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x:= inl (inr (fun _ : nat => true)) : f (point (BAut Cantor)) + Cantor + Cantor: f (point (BAut Cantor)) + Cantor + Cantor

Empty
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x:= inl (inr (fun _ : nat => true)) : f (point (BAut Cantor)) + Cantor + Cantor: f (point (BAut Cantor)) + Cantor + Cantor

is_inl (I (f (point (BAut Cantor))) x)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x:= inl (inr (fun _ : nat => true)) : f (point (BAut Cantor)) + Cantor + Cantor: f (point (BAut Cantor)) + Cantor + Cantor
is_inr (I (f (point (BAut Cantor))) x)
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x:= inl (inr (fun _ : nat => true)) : f (point (BAut Cantor)) + Cantor + Cantor: f (point (BAut Cantor)) + Cantor + Cantor

is_inl (I (f (point (BAut Cantor))) x)
exact (transport is_inl (ap10_equiv (J (point (BAut Cantor))) x) tt).
H: Univalence
Ip: IsPreIdempotent f
Jp: IsQuasiIdempotent f
x:= inl (inr (fun _ : nat => true)) : f (point (BAut Cantor)) + Cantor + Cantor: f (point (BAut Cantor)) + Cantor + Cantor

is_inr (I (f (point (BAut Cantor))) x)
exact (fst (I0_preserves_inr x) (inr tt)). Defined. End Assumptions. End BAut_Cantor_Idempotent. (** Let's make the important conclusions available globally. *) Definition baut_cantor_idem `{Univalence} : BAut Cantor -> BAut Cantor := BAut_Cantor_Idempotent.f. Definition preidem_baut_cantor_idem `{Univalence} : IsPreIdempotent baut_cantor_idem := BAut_Cantor_Idempotent.preidem_f. Definition not_qidem_baut_cantor_idem `{Univalence} : ~ { I : IsPreIdempotent baut_cantor_idem & IsQuasiIdempotent baut_cantor_idem } := fun IJ => BAut_Cantor_Idempotent.impossible IJ.1 IJ.2.