Transpositions at isolated elements
Content created by Egbert Rijke and Louis Wasserman.
Created on 2026-05-05.
Last modified on 2026-05-05.
module foundation.transpositions-isolated-elements where
Imports
open import foundation.action-on-identifications-functions open import foundation.automorphisms open import foundation.coproduct-types open import foundation.decidable-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.full-subtypes open import foundation.function-types open import foundation.homotopies open import foundation.involutions open import foundation.isolated-elements open import foundation.negated-equality open import foundation.negation open import foundation.transposition-identifications-along-equivalences open import foundation.transposition-identifications-along-involutions open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.equivalences open import foundation-core.identity-types open import foundation-core.propositions open import foundation-core.subtypes
Idea
Consider a type A equipped with two
isolated elements a and b. Then we define
an equivalence A ≃ A which swaps a and
b and leaves all the other elements fixed. This equivalence is called the
transposition¶
at a and b. Since the transposition at a and b swaps a and b and
leaves all the other elements fixed, it is an
involution.
Definitions
Any two distinct isolated elements in a type determine a transposition
module _ {l1 : Level} {A : UU l1} ((a , d) (b , e) : isolated-element A) (H : a ≠ b) where is-in-split-full-subtype-distinct-isolated-elements : A → UU l1 is-in-split-full-subtype-distinct-isolated-elements x = (a = x) + (b = x) + (a ≠ x) × (b ≠ x) abstract is-prop-is-in-split-full-subtype-distinct-isolated-elements : (x : A) → is-prop (is-in-split-full-subtype-distinct-isolated-elements x) is-prop-is-in-split-full-subtype-distinct-isolated-elements x = is-prop-coproduct ( λ p → rec-coproduct ( λ q → H (p ∙ inv q)) ( λ (f , g) → f p)) ( is-prop-eq-isolated-element a d x) ( is-prop-coproduct ( λ q (f , g) → g q) ( is-prop-eq-isolated-element b e x) ( is-prop-product is-prop-neg is-prop-neg)) split-full-subtype-distinct-isolated-elements : subtype l1 A pr1 (split-full-subtype-distinct-isolated-elements x) = is-in-split-full-subtype-distinct-isolated-elements x pr2 (split-full-subtype-distinct-isolated-elements x) = is-prop-is-in-split-full-subtype-distinct-isolated-elements x inclusion-split-full-subtype-distinct-isolated-elements : type-subtype split-full-subtype-distinct-isolated-elements → A inclusion-split-full-subtype-distinct-isolated-elements = inclusion-subtype split-full-subtype-distinct-isolated-elements is-full-split-full-subtype-distinct-isolated-elements : is-full-subtype split-full-subtype-distinct-isolated-elements is-full-split-full-subtype-distinct-isolated-elements x = rec-coproduct ( λ p → inl p) ( λ f → rec-coproduct ( λ q → inr (inl q)) ( λ g → inr (inr (f , g))) ( e x)) ( d x) compute-type-split-full-subtype-distinct-isolated-elements : type-subtype split-full-subtype-distinct-isolated-elements ≃ A compute-type-split-full-subtype-distinct-isolated-elements = equiv-inclusion-is-full-subtype split-full-subtype-distinct-isolated-elements is-full-split-full-subtype-distinct-isolated-elements inv-compute-type-split-full-subtype-distinct-isolated-elements : A ≃ type-subtype split-full-subtype-distinct-isolated-elements inv-compute-type-split-full-subtype-distinct-isolated-elements = inv-equiv-inclusion-is-full-subtype split-full-subtype-distinct-isolated-elements is-full-split-full-subtype-distinct-isolated-elements map-inv-compute-type-split-full-subtype-distinct-isolated-elements : A → type-subtype split-full-subtype-distinct-isolated-elements map-inv-compute-type-split-full-subtype-distinct-isolated-elements = map-equiv inv-compute-type-split-full-subtype-distinct-isolated-elements compute-inv-compute-type-split-full-subtype-distinct-isolated-elements : (x : A) (u : is-in-split-full-subtype-distinct-isolated-elements x) → map-inv-compute-type-split-full-subtype-distinct-isolated-elements x = (x , u) compute-inv-compute-type-split-full-subtype-distinct-isolated-elements x u = eq-type-subtype ( split-full-subtype-distinct-isolated-elements) ( is-section-map-inv-equiv compute-type-split-full-subtype-distinct-isolated-elements x) map-transposition-distinct-isolated-elements' : type-subtype split-full-subtype-distinct-isolated-elements → type-subtype split-full-subtype-distinct-isolated-elements map-transposition-distinct-isolated-elements' (x , inl p) = ( b , inr (inl refl)) map-transposition-distinct-isolated-elements' (x , inr (inl q)) = ( a , inl refl) map-transposition-distinct-isolated-elements' (x , inr (inr H)) = ( x , inr (inr H)) compute-first-value-transposition-distinct-isolated-elements' : (u : is-in-split-full-subtype-distinct-isolated-elements a) (v : is-in-split-full-subtype-distinct-isolated-elements b) → map-transposition-distinct-isolated-elements' (a , u) = (b , v) compute-first-value-transposition-distinct-isolated-elements' (inl p) v = eq-type-subtype split-full-subtype-distinct-isolated-elements refl compute-first-value-transposition-distinct-isolated-elements' ( inr (inl q)) v = ex-falso (H (inv q)) compute-first-value-transposition-distinct-isolated-elements' (inr (inr (f , g))) v = ex-falso (f refl) compute-second-value-transposition-distinct-isolated-elements' : (u : is-in-split-full-subtype-distinct-isolated-elements a) (v : is-in-split-full-subtype-distinct-isolated-elements b) → map-transposition-distinct-isolated-elements' (b , v) = (a , u) compute-second-value-transposition-distinct-isolated-elements' u (inl p) = ex-falso (H p) compute-second-value-transposition-distinct-isolated-elements' u ( inr (inl q)) = eq-type-subtype split-full-subtype-distinct-isolated-elements refl compute-second-value-transposition-distinct-isolated-elements' u (inr (inr (f , g))) = ex-falso (g refl) is-involution-transposition-distinct-isolated-elements' : is-involution map-transposition-distinct-isolated-elements' is-involution-transposition-distinct-isolated-elements' (x , inl refl) = eq-type-subtype split-full-subtype-distinct-isolated-elements refl is-involution-transposition-distinct-isolated-elements' (x , inr (inl refl)) = eq-type-subtype split-full-subtype-distinct-isolated-elements refl is-involution-transposition-distinct-isolated-elements' (x , inr (inr H)) = eq-type-subtype split-full-subtype-distinct-isolated-elements refl is-equiv-transposition-distinct-isolated-elements' : is-equiv map-transposition-distinct-isolated-elements' is-equiv-transposition-distinct-isolated-elements' = is-equiv-is-involution is-involution-transposition-distinct-isolated-elements' transposition-distinct-isolated-elements' : type-subtype split-full-subtype-distinct-isolated-elements ≃ type-subtype split-full-subtype-distinct-isolated-elements pr1 transposition-distinct-isolated-elements' = map-transposition-distinct-isolated-elements' pr2 transposition-distinct-isolated-elements' = is-equiv-transposition-distinct-isolated-elements' transposition-distinct-isolated-elements : A ≃ A transposition-distinct-isolated-elements = map-conjugation-aut compute-type-split-full-subtype-distinct-isolated-elements transposition-distinct-isolated-elements' map-transposition-distinct-isolated-elements : A → A map-transposition-distinct-isolated-elements = map-equiv transposition-distinct-isolated-elements is-involution-transposition-distinct-isolated-elements : is-involution map-transposition-distinct-isolated-elements is-involution-transposition-distinct-isolated-elements = is-involution-conjugation compute-type-split-full-subtype-distinct-isolated-elements map-transposition-distinct-isolated-elements' is-involution-transposition-distinct-isolated-elements' compute-first-value-transposition-distinct-isolated-elements : map-transposition-distinct-isolated-elements a = b compute-first-value-transposition-distinct-isolated-elements = compute-value-conjugation-aut ( compute-type-split-full-subtype-distinct-isolated-elements) ( transposition-distinct-isolated-elements') ( a , inl refl) ( refl) ( refl) ( compute-first-value-transposition-distinct-isolated-elements' ( inl refl) ( inr (inl refl))) compute-second-value-transposition-distinct-isolated-elements : map-transposition-distinct-isolated-elements b = a compute-second-value-transposition-distinct-isolated-elements = compute-value-conjugation-aut ( compute-type-split-full-subtype-distinct-isolated-elements) ( transposition-distinct-isolated-elements') ( b , inr (inl refl)) ( refl) ( refl) ( compute-second-value-transposition-distinct-isolated-elements' ( inl refl) ( inr (inl refl)))
Any two isolated elements in a type determine a transposition
module _ {l1 : Level} {A : UU l1} ((a , d) (b , e) : isolated-element A) where cases-transposition-isolated-elements : is-decidable (a = b) → A ≃ A cases-transposition-isolated-elements (inl p) = id-equiv cases-transposition-isolated-elements (inr f) = transposition-distinct-isolated-elements (a , d) (b , e) f transposition-isolated-elements : A ≃ A transposition-isolated-elements = cases-transposition-isolated-elements (d b) map-transposition-isolated-elements : A → A map-transposition-isolated-elements = map-equiv transposition-isolated-elements cases-is-involution-transposition-isolated-elements : (u : is-decidable (a = b)) → is-involution (map-equiv (cases-transposition-isolated-elements u)) cases-is-involution-transposition-isolated-elements (inl p) = is-involution-id cases-is-involution-transposition-isolated-elements (inr f) = is-involution-transposition-distinct-isolated-elements (a , d) (b , e) f is-involution-transposition-isolated-elements : is-involution map-transposition-isolated-elements is-involution-transposition-isolated-elements = cases-is-involution-transposition-isolated-elements (d b) cases-compute-first-value-transposition-isolated-elements : (u : is-decidable (a = b)) → map-equiv (cases-transposition-isolated-elements u) a = b cases-compute-first-value-transposition-isolated-elements (inl p) = p cases-compute-first-value-transposition-isolated-elements (inr n) = compute-first-value-transposition-distinct-isolated-elements ( a , d) ( b , e) ( n) compute-first-value-transposition-isolated-elements : map-transposition-isolated-elements a = b compute-first-value-transposition-isolated-elements = cases-compute-first-value-transposition-isolated-elements (d b) cases-compute-second-value-transposition-isolated-elements : (u : is-decidable (a = b)) → map-equiv (cases-transposition-isolated-elements u) b = a cases-compute-second-value-transposition-isolated-elements (inl p) = inv p cases-compute-second-value-transposition-isolated-elements (inr n) = compute-second-value-transposition-distinct-isolated-elements ( a , d) ( b , e) ( n) compute-second-value-transposition-isolated-elements : map-transposition-isolated-elements b = a compute-second-value-transposition-isolated-elements = cases-compute-second-value-transposition-isolated-elements (d b)
Properties
Transpositions at identical isolated elements are homotopic
module _ {l1 : Level} {A : UU l1} ((a , d) (a' , d') (b , e) (b' , e') : isolated-element A) where htpy-transposition-isolated-elements' : ((a , d) = (a' , d')) → ((b , e) = (b' , e')) → map-transposition-isolated-elements (a , d) (b , e) ~ map-transposition-isolated-elements (a' , d') (b' , e') htpy-transposition-isolated-elements' refl refl = refl-htpy htpy-transposition-isolated-elements : (a = a') → (b = b') → map-transposition-isolated-elements (a , d) (b , e) ~ map-transposition-isolated-elements (a' , d') (b' , e') htpy-transposition-isolated-elements p q = htpy-transposition-isolated-elements' ( eq-type-subtype is-isolated-Prop p) ( eq-type-subtype is-isolated-Prop q)
Recent changes
- 2026-05-05. Louis Wasserman and Egbert Rijke. The type of permutations on n elements is finite with cardinality n! (#1936).