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]
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}
{g
: IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) ->
retract_type ret &
(funx : retract_type ret => g (s x)) == 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: 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: forallq : IsQuasiIdempotent
(preidem_idmap (BAut (BAut Bool))),
{S
: Splitting_PreIdempotent
(preidem_idmap (BAut (BAut Bool))) &
s S = q} 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: forallq : IsQuasiIdempotent
(preidem_idmap (BAut (BAut Bool))),
{S
: Splitting_PreIdempotent
(preidem_idmap (BAut (BAut Bool))) &
s S = q} 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: forallq : IsQuasiIdempotent
(preidem_idmap (BAut (BAut Bool))),
{S
: Splitting_PreIdempotent
(preidem_idmap (BAut (BAut Bool))) &
s S = q} 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.