tactic.group

# group#

Normalizes expressions in the language of groups. The basic idea is to use the simplifier to put everything into a product of group powers (zpow which takes a group element and an integer), then simplify the exponents using the ring tactic. The process needs to be repeated since ring can normalize an exponent to zero, leading to a factor that can be removed before collecting exponents again. The simplifier step also uses some extra lemmas to avoid some ring invocations.

## Tags #

group_theory

theorem tactic.group.zsmul_trick {G : Type u_1} [add_group G] (a b : G) (n m : ) :
a + n b + m b = a + (n + m) b
theorem tactic.group.zpow_trick {G : Type u_1} [group G] (a b : G) (n m : ) :
a * b ^ n * b ^ m = a * b ^ (n + m)
theorem tactic.group.zpow_trick_one {G : Type u_1} [group G] (a b : G) (m : ) :
a * b * b ^ m = a * b ^ (m + 1)
theorem tactic.group.zsmul_trick_zero {G : Type u_1} [add_group G] (a b : G) (m : ) :
a + b + m b = a + (m + 1) b
theorem tactic.group.zpow_trick_one' {G : Type u_1} [group G] (a b : G) (n : ) :
a * b ^ n * b = a * b ^ (n + 1)
theorem tactic.group.zsmul_trick_zero' {G : Type u_1} [add_group G] (a b : G) (n : ) :
a + n b + b = a + (n + 1) b
theorem tactic.group.zsmul_trick_sub {G : Type u_1} [add_group G] (a b : G) (n m : ) :
a + n b + -m b = a + (n - m) b
theorem tactic.group.zpow_trick_sub {G : Type u_1} [group G] (a b : G) (n m : ) :
a * b ^ n * b ^ -m = a * b ^ (n - m)
meta def tactic.aux_group₁ (locat : interactive.loc) :

Auxiliary tactic for the group tactic. Calls the simplifier only.

meta def tactic.aux_group₂ (locat : interactive.loc) :

Auxiliary tactic for the group tactic. Calls ring_nf to normalize exponents.

Tactic for normalizing expressions in multiplicative groups, without assuming commutativity, using only the group axioms without any information about which group is manipulated.

(For additive commutative groups, use the abel tactic instead.)

Example:

example {G : Type} [group G] (a b c d : G) (h : c = (a*b^2)*((b*b)⁻¹*a⁻¹)*d) : a*c*d⁻¹ = a :=
begin
group at h, -- normalizes h which becomes h : c = d
rw h,       -- the goal is now a*d*d⁻¹ = a
group,      -- which then normalized and closed
end