# Fibered involutions ```agda module foundation.fibered-involutions where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.fibered-maps open import foundation.involutions open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.equivalences open import foundation-core.function-types open import foundation-core.homotopies ``` </details> ## Idea A fibered involution is a fibered map ```text h A -------> A | | f| |g | | ∨ ∨ X -------> X i ``` such that both `i` and `h` are involutions. ## Definition ```agda involution-over : {l1 l2 l3 : Level} {A : UU l1} {X : UU l2} {Y : UU l3} → (A → X) → (A → Y) → (X → Y) → UU (l1 ⊔ l3) involution-over {A = A} f g i = Σ (involution A) (is-map-over f g i ∘ map-involution) fibered-involution : {l1 l2 : Level} {A : UU l1} {X : UU l2} → (A → X) → (A → X) → UU (l1 ⊔ l2) fibered-involution {X = X} f g = Σ (involution X) (involution-over f g ∘ map-involution) is-fiberwise-involution : {l1 l2 : Level} {X : UU l1} {P : X → UU l2} → ((x : X) → P x → P x) → UU (l1 ⊔ l2) is-fiberwise-involution {X = X} f = (x : X) → is-involution (f x) fam-involution : {l1 l2 : Level} {X : UU l1} (P : X → UU l2) → UU (l1 ⊔ l2) fam-involution {X = X} P = (x : X) → involution (P x) ``` ```agda module _ {l1 l2 : Level} {A : UU l1} {X : UU l2} (f g : A → X) where is-fibered-involution-fibered-map : fibered-map f g → UU (l1 ⊔ l2) is-fibered-involution-fibered-map (i , h , H) = is-involution i × is-involution h map-Σ-is-fibered-involution-fibered-map-fibered-involution : (fibered-involution f g) → Σ (fibered-map f g) (is-fibered-involution-fibered-map) pr1 (pr1 (map-Σ-is-fibered-involution-fibered-map-fibered-involution ((i , is-involution-i) , (h , is-involution-h) , H))) = i pr1 (pr2 (pr1 (map-Σ-is-fibered-involution-fibered-map-fibered-involution ((i , is-involution-i) , (h , is-involution-h) , H)))) = h pr2 (pr2 (pr1 (map-Σ-is-fibered-involution-fibered-map-fibered-involution ((i , is-involution-i) , (h , is-involution-h) , H)))) = H pr1 (pr2 (map-Σ-is-fibered-involution-fibered-map-fibered-involution ((i , is-involution-i) , (h , is-involution-h) , H))) = is-involution-i pr2 (pr2 (map-Σ-is-fibered-involution-fibered-map-fibered-involution ((i , is-involution-i) , (h , is-involution-h) , H))) = is-involution-h map-fibered-involution-Σ-is-fibered-involution-fibered-map : Σ (fibered-map f g) (is-fibered-involution-fibered-map) → fibered-involution f g pr1 (pr1 (map-fibered-involution-Σ-is-fibered-involution-fibered-map ((i , h , H) , is-involution-i , is-involution-h))) = i pr2 (pr1 (map-fibered-involution-Σ-is-fibered-involution-fibered-map ((i , h , H) , is-involution-i , is-involution-h))) = is-involution-i pr1 (pr1 (pr2 (map-fibered-involution-Σ-is-fibered-involution-fibered-map ((i , h , H) , is-involution-i , is-involution-h)))) = h pr2 (pr1 (pr2 (map-fibered-involution-Σ-is-fibered-involution-fibered-map ((i , h , H) , is-involution-i , is-involution-h)))) = is-involution-h pr2 (pr2 (map-fibered-involution-Σ-is-fibered-involution-fibered-map ((i , h , H) , is-involution-i , is-involution-h))) = H is-equiv-map-Σ-is-fibered-involution-fibered-map-fibered-involution : is-equiv (map-Σ-is-fibered-involution-fibered-map-fibered-involution) is-equiv-map-Σ-is-fibered-involution-fibered-map-fibered-involution = is-equiv-is-invertible ( map-fibered-involution-Σ-is-fibered-involution-fibered-map) ( refl-htpy) ( refl-htpy) equiv-Σ-is-fibered-involution-fibered-map-fibered-involution : ( fibered-involution f g) ≃ ( Σ (fibered-map f g) (is-fibered-involution-fibered-map)) pr1 equiv-Σ-is-fibered-involution-fibered-map-fibered-involution = map-Σ-is-fibered-involution-fibered-map-fibered-involution pr2 equiv-Σ-is-fibered-involution-fibered-map-fibered-involution = is-equiv-map-Σ-is-fibered-involution-fibered-map-fibered-involution is-equiv-map-fibered-involution-Σ-is-fibered-involution-fibered-map : is-equiv (map-fibered-involution-Σ-is-fibered-involution-fibered-map) is-equiv-map-fibered-involution-Σ-is-fibered-involution-fibered-map = is-equiv-is-invertible ( map-Σ-is-fibered-involution-fibered-map-fibered-involution) ( refl-htpy) ( refl-htpy) equiv-fibered-involution-Σ-is-fibered-involution-fibered-map : ( Σ (fibered-map f g) (is-fibered-involution-fibered-map)) ≃ ( fibered-involution f g) pr1 equiv-fibered-involution-Σ-is-fibered-involution-fibered-map = map-fibered-involution-Σ-is-fibered-involution-fibered-map pr2 equiv-fibered-involution-Σ-is-fibered-involution-fibered-map = is-equiv-map-fibered-involution-Σ-is-fibered-involution-fibered-map ``` ## Examples ```agda self-fibered-involution : {l1 l2 : Level} {A : UU l1} → involution A → fibered-involution id id pr1 (self-fibered-involution e) = e pr1 (pr2 (self-fibered-involution e)) = e pr2 (pr2 (self-fibered-involution e)) = refl-htpy module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where id-fibered-involution : (f : A → B) → fibered-involution f f pr1 (id-fibered-involution f) = id-involution pr1 (pr2 (id-fibered-involution f)) = id-involution pr2 (pr2 (id-fibered-involution f)) = refl-htpy id-fibered-involution-htpy : (f g : A → B) → f ~ g → fibered-involution f g pr1 (id-fibered-involution-htpy f g H) = id-involution pr1 (pr2 (id-fibered-involution-htpy f g H)) = id-involution pr2 (pr2 (id-fibered-involution-htpy f g H)) = H ```