mathlib documentation

group_theory.order_of_element

Order of an element #

This file defines the order of an element of a finite group. For a finite group G the order of x ∈ G is the minimal n ≥ 1 such that x ^ n = 1.

Main definitions #

Tags #

order of an element

theorem is_periodic_pt_add_iff_nsmul_eq_zero {A : Type v} {n : } [add_monoid A] (a : A) :
theorem is_periodic_pt_mul_iff_pow_eq_one {G : Type u} {n : } [monoid G] (x : G) :
def is_of_fin_add_order {A : Type v} [add_monoid A] (a : A) :
Prop

is_of_fin_add_order is a predicate on an element a of an additive monoid to be of finite order, i.e. there exists n ≥ 1 such that n • a = 0.

Equations
def is_of_fin_order {G : Type u} [monoid G] (x : G) :
Prop

is_of_fin_order is a predicate on an element x of a monoid to be of finite order, i.e. there exists n ≥ 1 such that x ^ n = 1.

Equations
theorem is_of_fin_add_order_iff_nsmul_eq_zero {A : Type v} [add_monoid A] (a : A) :
is_of_fin_add_order a ∃ (n : ), 0 < n n a = 0
theorem is_of_fin_order_iff_pow_eq_one {G : Type u} [monoid G] (x : G) :
is_of_fin_order x ∃ (n : ), 0 < n x ^ n = 1
def add_order_of {A : Type v} [add_monoid A] (a : A) :

add_order_of a is the order of the element a, i.e. the n ≥ 1, s.t. n • a = 0 if it exists. Otherwise, i.e. if a is of infinite order, then add_order_of a is 0 by convention.

Equations
def order_of {G : Type u} [monoid G] (x : G) :

order_of x is the order of the element x, i.e. the n ≥ 1, s.t. x ^ n = 1 if it exists. Otherwise, i.e. if x is of infinite order, then order_of x is 0 by convention.

Equations
theorem commute.order_of_mul_dvd_lcm {G : Type u} {x y : G} [monoid G] (h : commute x y) :
theorem add_commute.order_of_add_dvd_lcm {G : Type u} {x y : G} [add_monoid G] (h : add_commute x y) :
@[simp]
theorem add_order_of_pos' {G : Type u} {x : G} [add_monoid G] (h : is_of_fin_add_order x) :
theorem order_of_pos' {G : Type u} {x : G} [monoid G] (h : is_of_fin_order x) :
theorem pow_order_of_eq_one {G : Type u} [monoid G] (x : G) :
x ^ order_of x = 1
theorem add_order_of_nsmul_eq_zero {A : Type v} [add_monoid A] (a : A) :
theorem order_of_eq_zero {G : Type u} {x : G} [monoid G] (h : ¬is_of_fin_order x) :
theorem add_order_of_eq_zero {G : Type u} {x : G} [add_monoid G] (h : ¬is_of_fin_add_order x) :
theorem nsmul_ne_zero_of_lt_add_order_of' {A : Type v} {a : A} {n : } [add_monoid A] (n0 : n 0) (h : n < add_order_of a) :
n a 0
theorem pow_eq_one_of_lt_order_of' {G : Type u} {x : G} {n : } [monoid G] (n0 : n 0) (h : n < order_of x) :
x ^ n 1
theorem add_order_of_le_of_nsmul_eq_zero {A : Type v} {a : A} {n : } [add_monoid A] (hn : 0 < n) (h : n a = 0) :
theorem order_of_le_of_pow_eq_one {G : Type u} {x : G} {n : } [monoid G] (hn : 0 < n) (h : x ^ n = 1) :
@[simp]
theorem order_of_one {G : Type u} [monoid G] :
@[simp]
theorem add_order_of_zero {A : Type v} [add_monoid A] :
@[simp]
theorem order_of_eq_one_iff {G : Type u} {x : G} [monoid G] :
order_of x = 1 x = 1
@[simp]
theorem add_order_of_eq_one_iff {A : Type v} {a : A} [add_monoid A] :
theorem pow_eq_mod_order_of {G : Type u} {x : G} [monoid G] {n : } :
x ^ n = x ^ (n % order_of x)
theorem nsmul_eq_mod_add_order_of {A : Type v} {a : A} [add_monoid A] {n : } :
n a = (n % add_order_of a) a
theorem order_of_dvd_of_pow_eq_one {G : Type u} {x : G} {n : } [monoid G] (h : x ^ n = 1) :
theorem add_order_of_dvd_of_nsmul_eq_zero {A : Type v} {a : A} {n : } [add_monoid A] (h : n a = 0) :
theorem add_order_of_dvd_iff_nsmul_eq_zero {A : Type v} {a : A} [add_monoid A] {n : } :
theorem order_of_dvd_iff_pow_eq_one {G : Type u} {x : G} [monoid G] {n : } :
order_of x n x ^ n = 1
theorem exists_pow_eq_self_of_coprime {G : Type u} {x : G} {n : } [monoid G] (h : n.coprime (order_of x)) :
∃ (m : ), (x ^ n) ^ m = x
theorem exists_nsmul_eq_self_of_coprime {A : Type v} {n : } [add_monoid A] (a : A) (h : n.coprime (add_order_of a)) :
∃ (m : ), m n a = a
theorem add_order_of_eq_add_order_of_iff {A : Type v} {a : A} [add_monoid A] {B : Type u_1} [add_monoid B] {b : B} :
add_order_of a = add_order_of b ∀ (n : ), n a = 0 n b = 0
theorem order_of_eq_order_of_iff {G : Type u} {x : G} [monoid G] {H : Type u_1} [monoid H] {y : H} :
order_of x = order_of y ∀ (n : ), x ^ n = 1 y ^ n = 1
theorem add_order_of_injective {A : Type v} [add_monoid A] {B : Type u_1} [add_monoid B] (f : A →+ B) (hf : function.injective f) (a : A) :
theorem order_of_injective {G : Type u} [monoid G] {H : Type u_1} [monoid H] (f : G →* H) (hf : function.injective f) (x : G) :
@[simp]
theorem order_of_submonoid {G : Type u} [monoid G] {H : submonoid G} (y : H) :
@[simp]
theorem order_of_add_submonoid {G : Type u} [add_monoid G] {H : add_submonoid G} (y : H) :
theorem order_of_pow' {G : Type u} (x : G) {n : } [monoid G] (h : n 0) :
order_of (x ^ n) = order_of x / (order_of x).gcd n
theorem add_order_of_nsmul' {A : Type v} (a : A) {n : } [add_monoid A] (h : n 0) :
theorem order_of_pow'' {G : Type u} (x : G) (n : ) [monoid G] (h : is_of_fin_order x) :
order_of (x ^ n) = order_of x / (order_of x).gcd n
theorem add_order_of_nsmul'' {A : Type v} (a : A) (n : ) [add_monoid A] (h : is_of_fin_add_order a) :
theorem add_order_of_eq_prime {A : Type v} {a : A} [add_monoid A] {p : } [hp : fact (nat.prime p)] (hg : p a = 0) (hg1 : a 0) :
theorem order_of_eq_prime {G : Type u} {x : G} [monoid G] {p : } [hp : fact (nat.prime p)] (hg : x ^ p = 1) (hg1 : x 1) :
theorem add_order_of_eq_prime_pow {A : Type v} {a : A} {n : } [add_monoid A] {p : } [hp : fact (nat.prime p)] (hnot : ¬p ^ n a = 0) (hfin : p ^ (n + 1) a = 0) :
add_order_of a = p ^ (n + 1)
theorem order_of_eq_prime_pow {G : Type u} {x : G} {n : } [monoid G] {p : } [hp : fact (nat.prime p)] (hnot : ¬x ^ p ^ n = 1) (hfin : x ^ p ^ (n + 1) = 1) :
order_of x = p ^ (n + 1)
theorem pow_injective_aux {G : Type u} (x : G) {n m : } [left_cancel_monoid G] (h : n m) (hm : m < order_of x) (eq : x ^ n = x ^ m) :
n = m
theorem nsmul_injective_aux {A : Type v} (a : A) [add_left_cancel_monoid A] {n m : } (h : n m) (hm : m < add_order_of a) (eq : n a = m a) :
n = m
theorem nsmul_injective_of_lt_add_order_of {A : Type v} (a : A) [add_left_cancel_monoid A] {n m : } (hn : n < add_order_of a) (hm : m < add_order_of a) (eq : n a = m a) :
n = m
theorem pow_injective_of_lt_order_of {G : Type u} (x : G) {n m : } [left_cancel_monoid G] (hn : n < order_of x) (hm : m < order_of x) (eq : x ^ n = x ^ m) :
n = m
@[simp]
theorem order_of_add_subgroup {G : Type u} [add_group G] {H : add_subgroup G} (y : H) :
@[simp]
theorem order_of_subgroup {G : Type u} [group G] {H : subgroup G} (y : H) :
theorem gpow_eq_mod_order_of {G : Type u} {x : G} [group G] {i : } :
x ^ i = x ^ (i % (order_of x))
theorem gsmul_eq_mod_add_order_of {A : Type v} {a : A} [add_group A] {i : } :
i a = (i % (add_order_of a)) a
theorem sum_card_add_order_of_eq_card_nsmul_eq_zero {A : Type v} {n : } [fintype A] [add_monoid A] [decidable_eq A] (hn : 0 < n) :
∑ (m : ) in finset.filter (λ (_x : ), _x n) (finset.range n.succ), (finset.filter (λ (a : A), add_order_of a = m) finset.univ).card = (finset.filter (λ (a : A), n a = 0) finset.univ).card
theorem sum_card_order_of_eq_card_pow_eq_one {G : Type u} {n : } [fintype G] [monoid G] [decidable_eq G] (hn : 0 < n) :
∑ (m : ) in finset.filter (λ (_x : ), _x n) (finset.range n.succ), (finset.filter (λ (x : G), order_of x = m) finset.univ).card = (finset.filter (λ (x : G), x ^ n = 1) finset.univ).card
theorem exists_pow_eq_one {G : Type u} [fintype G] [left_cancel_monoid G] (x : G) :
theorem order_of_le_card_univ {G : Type u} {x : G} [fintype G] [left_cancel_monoid G] :
theorem add_order_of_pos {A : Type v} [fintype A] [add_left_cancel_monoid A] (a : A) :

This is the same as `add_order_of_pos' but with one fewer explicit assumption since this is automatic in case of a finite cancellative additive monoid.

theorem order_of_pos {G : Type u} [fintype G] [left_cancel_monoid G] (x : G) :

This is the same as `order_of_pos' but with one fewer explicit assumption since this is automatic in case of a finite cancellative monoid.

theorem add_order_of_nsmul {A : Type v} {n : } [fintype A] [add_left_cancel_monoid A] (a : A) :

This is the same as add_order_of_nsmul' and add_order_of_nsmul but with one assumption less which is automatic in the case of a finite cancellative additive monoid.

theorem order_of_pow {G : Type u} {n : } [fintype G] [left_cancel_monoid G] (x : G) :
order_of (x ^ n) = order_of x / (order_of x).gcd n

This is the same as order_of_pow' and order_of_pow'' but with one assumption less which is automatic in the case of a finite cancellative monoid.

@[instance]
def decidable_multiples {A : Type v} {a : A} [fintype A] [add_left_cancel_monoid A] [decidable_eq A] :
Equations
@[instance]
def decidable_powers {G : Type u} {x : G} [fintype G] [left_cancel_monoid G] [decidable_eq G] :
decidable_pred (λ (_x : G), _x submonoid.powers x)
Equations
def fin_equiv_powers {G : Type u} [fintype G] [left_cancel_monoid G] (x : G) :

The equivalence between fin (order_of x) and submonoid.powers x, sending i to x ^ i.

Equations

The equivalence between fin (add_order_of a) and add_submonoid.multiples a, sending i to i • a."

Equations
@[simp]
theorem fin_equiv_powers_apply {G : Type u} [fintype G] [left_cancel_monoid G] {x : G} {n : fin (order_of x)} :
(fin_equiv_powers x) n = x ^ n, _⟩
@[simp]
theorem fin_equiv_multiples_apply {A : Type v} [fintype A] [add_left_cancel_monoid A] {a : A} {n : fin (add_order_of a)} :
@[simp]
theorem fin_equiv_powers_symm_apply {G : Type u} [fintype G] [left_cancel_monoid G] (x : G) (n : ) {hn : ∃ (m : ), x ^ m = x ^ n} :
((fin_equiv_powers x).symm) x ^ n, hn⟩ = n % order_of x, _⟩
@[simp]
theorem fin_equiv_multiples_symm_apply {A : Type v} [fintype A] [add_left_cancel_monoid A] (a : A) (n : ) {hn : ∃ (m : ), m a = n a} :

The equivalence between submonoid.powers of two elements x, y of the same order, mapping x ^ i to y ^ i.

Equations

The equivalence between submonoid.multiples of two elements a, b of the same additive order, mapping i • a to i • b.

Equations
@[simp]
theorem powers_equiv_powers_apply {G : Type u} {x y : G} [fintype G] [left_cancel_monoid G] (h : order_of x = order_of y) (n : ) :
(powers_equiv_powers h) x ^ n, _⟩ = y ^ n, _⟩
@[simp]
theorem multiples_equiv_multiples_apply {A : Type v} {a b : A} [fintype A] [add_left_cancel_monoid A] (h : add_order_of a = add_order_of b) (n : ) :
theorem exists_gpow_eq_one {G : Type u} [fintype G] [group G] (x : G) :
∃ (i : ) (H : i 0), x ^ i = 1
theorem exists_gsmul_eq_zero {A : Type v} [fintype A] [add_group A] (a : A) :
∃ (i : ) (H : i 0), i a = 0
theorem mem_powers_iff_mem_gpowers {G : Type u} {x y : G} [fintype G] [group G] :
theorem powers_eq_gpowers {G : Type u} [fintype G] [group G] (x : G) :
@[instance]
def decidable_gmultiples {A : Type v} {a : A} [fintype A] [add_group A] [decidable_eq A] :
Equations
@[instance]
def decidable_gpowers {G : Type u} {x : G} [fintype G] [group G] [decidable_eq G] :
decidable_pred (λ (_x : G), _x subgroup.gpowers x)
Equations
def fin_equiv_gpowers {G : Type u} [fintype G] [group G] (x : G) :

The equivalence between fin (order_of x) and subgroup.gpowers x, sending i to x ^ i.

Equations

The equivalence between fin (add_order_of a) and subgroup.gmultiples a, sending i to i • a.

Equations
@[simp]
theorem fin_equiv_gpowers_apply {G : Type u} {x : G} [fintype G] [group G] {n : fin (order_of x)} :
@[simp]
theorem fin_equiv_gmultiples_apply {A : Type v} {a : A} [fintype A] [add_group A] {n : fin (add_order_of a)} :
@[simp]
theorem fin_equiv_gpowers_symm_apply {G : Type u} [fintype G] [group G] (x : G) (n : ) {hn : ∃ (m : ), x ^ m = x ^ n} :
((fin_equiv_gpowers x).symm) x ^ n, hn⟩ = n % order_of x, _⟩
@[simp]
theorem fin_equiv_gmultiples_symm_apply {A : Type v} [fintype A] [add_group A] (a : A) (n : ) {hn : ∃ (m : ), m a = n a} :
def gpowers_equiv_gpowers {G : Type u} {x y : G} [fintype G] [group G] (h : order_of x = order_of y) :

The equivalence between subgroup.gpowers of two elements x, y of the same order, mapping x ^ i to y ^ i.

Equations

The equivalence between subgroup.gmultiples of two elements a, b of the same additive order, mapping i • a to i • b.

Equations
@[simp]
theorem gpowers_equiv_gpowers_apply {G : Type u} {x y : G} [fintype G] [group G] (h : order_of x = order_of y) (n : ) :
(gpowers_equiv_gpowers h) x ^ n, _⟩ = y ^ n, _⟩
@[simp]
theorem gmultiples_equiv_gmultiples_apply {A : Type v} {a b : A} [fintype A] [add_group A] (h : add_order_of a = add_order_of b) (n : ) :
theorem order_of_dvd_card_univ {G : Type u} {x : G} [fintype G] [group G] :
theorem add_order_of_dvd_card_univ {A : Type v} {a : A} [fintype A] [add_group A] :
@[simp]
theorem pow_card_eq_one {G : Type u} {x : G} [fintype G] [group G] :
@[simp]
theorem card_nsmul_eq_zero {A : Type v} [fintype A] [add_group A] {a : A} :
theorem nsmul_eq_mod_card {G : Type u} {x : G} [fintype G] [add_group G] (n : ) :
n x = (n % fintype.card G) x
theorem pow_eq_mod_card {G : Type u} {x : G} [fintype G] [group G] (n : ) :
x ^ n = x ^ (n % fintype.card G)
theorem gsmul_eq_mod_card {G : Type u} {x : G} [fintype G] [add_group G] (n : ) :
n x = (n % (fintype.card G)) x
theorem gpow_eq_mod_card {G : Type u} {x : G} [fintype G] [group G] (n : ) :
x ^ n = x ^ (n % (fintype.card G))
@[simp]
theorem pow_coprime_symm_apply {G : Type u} {n : } [fintype G] [group G] (h : (fintype.card G).coprime n) (g : G) :
def pow_coprime {G : Type u} {n : } [fintype G] [group G] (h : (fintype.card G).coprime n) :
G G

If gcd(|G|,n)=1 then the nth power map is a bijection

Equations
@[simp]
theorem pow_coprime_apply {G : Type u} {n : } [fintype G] [group G] (h : (fintype.card G).coprime n) (g : G) :
(pow_coprime h) g = g ^ n
@[simp]
theorem pow_coprime_one {G : Type u} {n : } [fintype G] [group G] (h : (fintype.card G).coprime n) :
@[simp]
theorem pow_coprime_inv {G : Type u} {n : } [fintype G] [group G] (h : (fintype.card G).coprime n) {g : G} :
theorem inf_eq_bot_of_coprime {G : Type u_1} [group G] {H K : subgroup G} [fintype H] [fintype K] (h : (fintype.card H).coprime (fintype.card K)) :
H K =
theorem image_range_order_of {G : Type u} {x : G} [fintype G] [group G] [decidable_eq G] :

TODO: Generalise to submonoid.powers.

theorem gcd_nsmul_card_eq_zero_iff {A : Type v} (a : A) {n : } [fintype A] [add_group A] :
n a = 0 n.gcd (fintype.card A) a = 0
theorem pow_gcd_card_eq_one_iff {G : Type u} {x : G} {n : } [fintype G] [group G] :
x ^ n = 1 x ^ n.gcd (fintype.card G) = 1

TODO: Generalise to finite_cancel_monoid.

def submonoid_of_idempotent {M : Type u_1} [left_cancel_monoid M] [fintype M] (S : set M) (hS1 : S.nonempty) (hS2 : S * S = S) :

A nonempty idempotent subset of a finite cancellative monoid is a submonoid

Equations
def subgroup_of_idempotent {G : Type u_1} [group G] [fintype G] (S : set G) (hS1 : S.nonempty) (hS2 : S * S = S) :

A nonempty idempotent subset of a finite group is a subgroup

Equations
def pow_card_subgroup {G : Type u_1} [group G] [fintype G] (S : set G) (hS : S.nonempty) :

If S is a nonempty subset of a finite group G, then S ^ |G| is a subgroup

Equations