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.

Local Open Scope path_scope.

(** * An incoherent quasi-idempotent on [BAut (BAut Bool)]. *)

Section IncoherentQuasiIdempotent.
  Context `{Univalence}.

  (** We use the identity map, and the nontrivial 2-central element of [BAut (BAut Bool)]. *)
  Definition nontrivial_qidem_baut_baut_bool
  : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool)))
    := negb_center2_baut_baut_bool.

  Let ret := splitting_preidem_retractof_qidem (preidem_idmap (BAut (BAut Bool))).
  Let s := retract_sect ret.
  Let r := retract_retr ret.
  Let issect := 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: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) == idmap

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: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) == idmap
p: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) nontrivial_qidem_baut_baut_bool = idmap nontrivial_qidem_baut_baut_bool

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
p: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) nontrivial_qidem_baut_baut_bool = idmap nontrivial_qidem_baut_baut_bool
q: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) (isqidem_idmap (BAut (BAut Bool))) = idmap (isqidem_idmap (BAut (BAut Bool)))

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
p: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) nontrivial_qidem_baut_baut_bool = idmap nontrivial_qidem_baut_baut_bool
q: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) (isqidem_idmap (BAut (BAut Bool))) = idmap (isqidem_idmap (BAut (BAut Bool)))

negb_center2_baut_baut_bool = (fun Z : BAut (BAut Bool) => 1)
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
p: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) nontrivial_qidem_baut_baut_bool = idmap nontrivial_qidem_baut_baut_bool
q: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) (isqidem_idmap (BAut (BAut Bool))) = idmap (isqidem_idmap (BAut (BAut Bool)))

r nontrivial_qidem_baut_baut_bool = r (isqidem_idmap (BAut (BAut Bool)))
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
p: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) nontrivial_qidem_baut_baut_bool = idmap nontrivial_qidem_baut_baut_bool
q: (fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (r x)) (isqidem_idmap (BAut (BAut Bool))) = idmap (isqidem_idmap (BAut (BAut Bool)))
i:= contr_splitting_preidem_idmap (BAut (BAut Bool)): Contr (Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))))

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

~ (forall q : 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

~ (forall q : 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: forall q : 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: forall q : 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: forall q : 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: forall q : 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: forall q : 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: forall q : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))), {S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}

(fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (oops x).1) == 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: forall q : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))), {S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}
(fun x : retract_type ret => r (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: forall q : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))), {S : Splitting_PreIdempotent (preidem_idmap (BAut (BAut Bool))) & s S = q}

(fun x : IsQuasiIdempotent (preidem_idmap (BAut (BAut Bool))) => s (oops x).1) == idmap
exact (fun q => (oops q).2).
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: forall q : 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: forall q0 : 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: forall q0 : 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: forall q0 : 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]. *) End IncoherentQuasiIdempotent.