Involutions
module foundation-core.involutions where
Imports
open import foundation-core.automorphisms open import foundation-core.dependent-pair-types open import foundation-core.equivalences open import foundation-core.functions open import foundation-core.homotopies open import foundation-core.truncated-types open import foundation-core.truncation-levels open import foundation-core.universe-levels open import structured-types.pointed-types
Idea
An involution on a type A
is a map (or an equivalence) f : A → A
such that
(f ∘ f) ~ id
Definition
module _ {l : Level} {A : UU l} where is-involution : (A → A) → UU l is-involution f = (f ∘ f) ~ id is-involution-aut : Aut A → UU l is-involution-aut e = is-involution (map-equiv e)
The type of involutions on A
involution : {l : Level} → UU l → UU l involution A = Σ (A → A) is-involution module _ {l : Level} {A : UU l} (f : involution A) where map-involution : A → A map-involution = pr1 f is-involution-map-involution : is-involution map-involution is-involution-map-involution = pr2 f
Properties
Any involution is an equivalence
is-equiv-is-involution : {l : Level} {A : UU l} {f : A → A} → is-involution f → is-equiv f is-equiv-is-involution {f = f} is-involution-f = is-equiv-has-inverse f is-involution-f is-involution-f equiv-is-involution : {l : Level} {A : UU l} {f : A → A} → is-involution f → A ≃ A pr1 (equiv-is-involution {f = f} is-involution-f) = f pr2 (equiv-is-involution is-involution-f) = is-equiv-is-involution is-involution-f
If A
is k
-truncated then the type of involutions is k
-truncated
is-trunc-is-involution : {l : Level} {A : UU l} (k : 𝕋) → is-trunc (succ-𝕋 k) A → (f : A → A) → is-trunc k (is-involution f) is-trunc-is-involution k is-trunc-A f = is-trunc-Π k λ x → is-trunc-A (f(f x)) x is-involution-Truncated-Type : {l : Level} {A : UU l} (k : 𝕋) → is-trunc (succ-𝕋 k) A → (A → A) → Truncated-Type l k pr1 (is-involution-Truncated-Type k is-trunc-A f) = is-involution f pr2 (is-involution-Truncated-Type k is-trunc-A f) = is-trunc-is-involution k is-trunc-A f is-trunc-involution : {l : Level} {A : UU l} (k : 𝕋) → is-trunc k A → is-trunc k (involution A) is-trunc-involution k is-trunc-A = is-trunc-Σ (is-trunc-function-type k is-trunc-A) (is-trunc-is-involution k (is-trunc-succ-is-trunc k is-trunc-A)) involution-Truncated-Type : {l : Level} {k : 𝕋} → Truncated-Type l k → Truncated-Type l k involution-Truncated-Type {k = k} (A , is-trunc-A) = involution A , is-trunc-involution k is-trunc-A
The identity function is an involution
is-involution-id : {l : Level} {A : UU l} → is-involution (id {A = A}) is-involution-id = refl-htpy id-involution : {l : Level} {A : UU l} → involution A pr1 id-involution = id pr2 id-involution = is-involution-id involution-Pointed-Type : {l : Level} (A : UU l) → Pointed-Type l pr1 (involution-Pointed-Type A) = involution A pr2 (involution-Pointed-Type A) = id-involution