Abelian groups
Content created by Fredrik Bakke.
Created on 2024-02-07.
Last modified on 2025-02-11.
module finite-group-theory.finite-abelian-groups where
Imports
open import finite-group-theory.finite-groups open import foundation.equivalences open import foundation.identity-types open import foundation.interchange-law open import foundation.propositions open import foundation.sets open import foundation.universe-levels open import group-theory.abelian-groups open import group-theory.conjugation open import group-theory.groups open import group-theory.monoids open import group-theory.semigroups open import univalent-combinatorics.dependent-function-types open import univalent-combinatorics.dependent-pair-types open import univalent-combinatorics.equality-finite-types open import univalent-combinatorics.finite-types
Idea
Abelian groups are groups of which the group operation is commutative
Definition
The condition of being an abelian group
is-abelian-prop-Finite-Group : {l : Level} → Finite-Group l → Prop l is-abelian-prop-Finite-Group G = is-abelian-prop-Group (group-Finite-Group G) is-abelian-Finite-Group : {l : Level} → Finite-Group l → UU l is-abelian-Finite-Group G = type-Prop (is-abelian-prop-Finite-Group G) is-prop-is-abelian-Finite-Group : {l : Level} (G : Finite-Group l) → is-prop (is-abelian-Finite-Group G) is-prop-is-abelian-Finite-Group G = is-prop-type-Prop (is-abelian-prop-Finite-Group G)
The type of abelian groups
Finite-Ab : (l : Level) → UU (lsuc l) Finite-Ab l = Σ (Finite-Group l) is-abelian-Finite-Group finite-abelian-group-is-finite-Ab : {l : Level} → (A : Ab l) → is-finite (type-Ab A) → Finite-Ab l pr1 (finite-abelian-group-is-finite-Ab A f) = finite-group-is-finite-Group (group-Ab A) f pr2 (finite-abelian-group-is-finite-Ab A f) = pr2 A module _ {l : Level} (A : Finite-Ab l) where finite-group-Finite-Ab : Finite-Group l finite-group-Finite-Ab = pr1 A group-Finite-Ab : Group l group-Finite-Ab = group-Finite-Group finite-group-Finite-Ab finite-type-Finite-Ab : Finite-Type l finite-type-Finite-Ab = finite-type-Finite-Group finite-group-Finite-Ab type-Finite-Ab : UU l type-Finite-Ab = type-Finite-Group finite-group-Finite-Ab is-finite-type-Finite-Ab : is-finite type-Finite-Ab is-finite-type-Finite-Ab = is-finite-type-Finite-Group finite-group-Finite-Ab set-Finite-Ab : Set l set-Finite-Ab = set-Group group-Finite-Ab is-set-type-Finite-Ab : is-set type-Finite-Ab is-set-type-Finite-Ab = is-set-type-Group group-Finite-Ab has-associative-add-Finite-Ab : has-associative-mul-Set set-Finite-Ab has-associative-add-Finite-Ab = has-associative-mul-Group group-Finite-Ab add-Finite-Ab : type-Finite-Ab → type-Finite-Ab → type-Finite-Ab add-Finite-Ab = mul-Group group-Finite-Ab add-Finite-Ab' : type-Finite-Ab → type-Finite-Ab → type-Finite-Ab add-Finite-Ab' = mul-Group' group-Finite-Ab commutative-add-Finite-Ab : (x y : type-Finite-Ab) → Id (add-Finite-Ab x y) (add-Finite-Ab y x) commutative-add-Finite-Ab = pr2 A ab-Finite-Ab : Ab l pr1 ab-Finite-Ab = group-Finite-Ab pr2 ab-Finite-Ab = commutative-add-Finite-Ab ap-add-Finite-Ab : {x y x' y' : type-Finite-Ab} → x = x' → y = y' → add-Finite-Ab x y = add-Finite-Ab x' y' ap-add-Finite-Ab = ap-add-Ab ab-Finite-Ab associative-add-Finite-Ab : (x y z : type-Finite-Ab) → add-Finite-Ab (add-Finite-Ab x y) z = add-Finite-Ab x (add-Finite-Ab y z) associative-add-Finite-Ab = associative-mul-Group group-Finite-Ab semigroup-Finite-Ab : Semigroup l semigroup-Finite-Ab = semigroup-Group group-Finite-Ab is-group-Finite-Ab : is-group-Semigroup semigroup-Finite-Ab is-group-Finite-Ab = is-group-Group group-Finite-Ab has-zero-Finite-Ab : is-unital-Semigroup semigroup-Finite-Ab has-zero-Finite-Ab = is-unital-Group group-Finite-Ab zero-Finite-Ab : type-Finite-Ab zero-Finite-Ab = unit-Group group-Finite-Ab is-zero-Finite-Ab : type-Finite-Ab → UU l is-zero-Finite-Ab = is-unit-Group group-Finite-Ab is-prop-is-zero-Finite-Ab : (x : type-Finite-Ab) → is-prop (is-zero-Finite-Ab x) is-prop-is-zero-Finite-Ab = is-prop-is-unit-Group group-Finite-Ab is-zero-prop-Finite-Ab : type-Finite-Ab → Prop l is-zero-prop-Finite-Ab = is-unit-prop-Group group-Finite-Ab left-unit-law-add-Finite-Ab : (x : type-Finite-Ab) → add-Finite-Ab zero-Finite-Ab x = x left-unit-law-add-Finite-Ab = left-unit-law-mul-Group group-Finite-Ab right-unit-law-add-Finite-Ab : (x : type-Finite-Ab) → add-Finite-Ab x zero-Finite-Ab = x right-unit-law-add-Finite-Ab = right-unit-law-mul-Group group-Finite-Ab has-negatives-Finite-Ab : is-group-is-unital-Semigroup semigroup-Finite-Ab has-zero-Finite-Ab has-negatives-Finite-Ab = has-inverses-Group group-Finite-Ab neg-Finite-Ab : type-Finite-Ab → type-Finite-Ab neg-Finite-Ab = inv-Group group-Finite-Ab left-inverse-law-add-Finite-Ab : (x : type-Finite-Ab) → add-Finite-Ab (neg-Finite-Ab x) x = zero-Finite-Ab left-inverse-law-add-Finite-Ab = left-inverse-law-mul-Group group-Finite-Ab right-inverse-law-add-Finite-Ab : (x : type-Finite-Ab) → add-Finite-Ab x (neg-Finite-Ab x) = zero-Finite-Ab right-inverse-law-add-Finite-Ab = right-inverse-law-mul-Group group-Finite-Ab interchange-add-add-Finite-Ab : (a b c d : type-Finite-Ab) → add-Finite-Ab (add-Finite-Ab a b) (add-Finite-Ab c d) = add-Finite-Ab (add-Finite-Ab a c) (add-Finite-Ab b d) interchange-add-add-Finite-Ab = interchange-law-commutative-and-associative add-Finite-Ab commutative-add-Finite-Ab associative-add-Finite-Ab right-swap-add-Finite-Ab : (a b c : type-Finite-Ab) → add-Finite-Ab (add-Finite-Ab a b) c = add-Finite-Ab (add-Finite-Ab a c) b right-swap-add-Finite-Ab = right-swap-add-Ab ab-Finite-Ab left-swap-add-Finite-Ab : (a b c : type-Finite-Ab) → add-Finite-Ab a (add-Finite-Ab b c) = add-Finite-Ab b (add-Finite-Ab a c) left-swap-add-Finite-Ab = left-swap-add-Ab ab-Finite-Ab distributive-neg-add-Finite-Ab : (x y : type-Finite-Ab) → neg-Finite-Ab (add-Finite-Ab x y) = add-Finite-Ab (neg-Finite-Ab x) (neg-Finite-Ab y) distributive-neg-add-Finite-Ab = distributive-neg-add-Ab ab-Finite-Ab neg-neg-Finite-Ab : (x : type-Finite-Ab) → neg-Finite-Ab (neg-Finite-Ab x) = x neg-neg-Finite-Ab = neg-neg-Ab ab-Finite-Ab neg-zero-Finite-Ab : neg-Finite-Ab zero-Finite-Ab = zero-Finite-Ab neg-zero-Finite-Ab = neg-zero-Ab ab-Finite-Ab
Conjugation in an abelian group
module _ {l : Level} (A : Finite-Ab l) where equiv-conjugation-Finite-Ab : (x : type-Finite-Ab A) → type-Finite-Ab A ≃ type-Finite-Ab A equiv-conjugation-Finite-Ab = equiv-conjugation-Group (group-Finite-Ab A) conjugation-Finite-Ab : (x : type-Finite-Ab A) → type-Finite-Ab A → type-Finite-Ab A conjugation-Finite-Ab = conjugation-Group (group-Finite-Ab A) equiv-conjugation-Finite-Ab' : (x : type-Finite-Ab A) → type-Finite-Ab A ≃ type-Finite-Ab A equiv-conjugation-Finite-Ab' = equiv-conjugation-Group' (group-Finite-Ab A) conjugation-Finite-Ab' : (x : type-Finite-Ab A) → type-Finite-Ab A → type-Finite-Ab A conjugation-Finite-Ab' = conjugation-Group' (group-Finite-Ab A)
Properties
There is a finite number of ways to equip a finite type with the structure of an abelian group
module _ {l : Level} (X : Finite-Type l) where structure-abelian-group-Finite-Type : UU l structure-abelian-group-Finite-Type = Σ ( structure-group-Finite-Type X) ( λ g → is-abelian-Finite-Group (finite-group-structure-group-Finite-Type X g)) finite-abelian-group-structure-abelian-group-Finite-Type : structure-abelian-group-Finite-Type → Finite-Ab l pr1 (finite-abelian-group-structure-abelian-group-Finite-Type (m , c)) = finite-group-structure-group-Finite-Type X m pr2 (finite-abelian-group-structure-abelian-group-Finite-Type (m , c)) = c is-finite-structure-abelian-group-Finite-Type : is-finite structure-abelian-group-Finite-Type is-finite-structure-abelian-group-Finite-Type = is-finite-Σ ( is-finite-structure-group-Finite-Type X) ( λ g → is-finite-Π ( is-finite-type-Finite-Type X) ( λ x → is-finite-Π ( is-finite-type-Finite-Type X) ( λ y → is-finite-eq-Finite-Type X)))
Recent changes
- 2025-02-11. Fredrik Bakke. Switch from
𝔽
toFinite-*
(#1312). - 2024-03-11. Fredrik Bakke. Refactor category theory to use strictly involutive identity types (#1052).
- 2024-02-07. Fredrik Bakke. Deduplicate definitions (#1022).