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 Equiv.BiInv Idempotents.Require Import Universes.BAut Spaces.BAut.Bool.LocalOpen Scope path_scope.(** * An incoherent quasi-idempotent on [BAut (BAut Bool)]. *)SectionIncoherentQuasiIdempotent.Context `{Univalence}.(** We use the identity map, and the nontrivial 2-central element of [BAut (BAut Bool)]. *)Definitionnontrivial_qidem_baut_baut_bool
: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))
:= negb_center2_baut_baut_bool.Letret := splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))).Lets := retract_sect ret.Letr := retract_retr ret.Letissect := retract_issect ret : r o s == idmap.(** Since the space of splittings of the identity pre-idempotent is contractible, nontriviality of this 2-central element implies that not every quasi-idempotence witness of the identity is recoverable from its own splitting. *)
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap
~ (s o r == idmap)
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap
~ (s o r == idmap)
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: (funx : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) ==
idmap
r nontrivial_qidem_baut_baut_bool = r (isqidem_idmap (BAut (BAut Bool)))
apply path_contr.Defined.(** Therefore, not every quasi-idempotence witness is obtainable from *any* splitting, i.e. it may not have any coherentification. *)
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap
~
(forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q})
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap
~
(forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q})
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
Empty
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
IsEquiv s
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q} X: IsEquiv s
Empty
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
IsEquiv s
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
IsBiInv s
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q} X: IsEquiv s
Empty
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq0 : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q0} X: IsEquiv s q: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))
s (r q) = q
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq0 : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q0} X: IsEquiv s q: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))
s (r (s (s^-1 q))) = q
H: Univalence ret:= splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))): RetractOf (IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))) s:= retract_sect ret: retract_type ret -> IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) r:= retract_retr ret: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) -> retract_type ret issect:= retract_issect ret: r o s == idmap oops: forallq0 : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))),
{S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q0} X: IsEquiv s q: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))
s (s^-1 q) = q
apply eisretr.Defined.(** These results show only that not *every* quasi-idempotence witness is coherent. "Clearly" the nontrivial quasi-idempotence witness [nontrivial_qidem_baut_baut_bool] should be the one that is not coherent. To show this, we would probably need to show that [isqidem_idmap] *is* in the image of [s], and this seems rather annoying to do based on our construction of [splitting_preidem_retractof_qidem]. *)EndIncoherentQuasiIdempotent.