awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
⊢ a * c * (b / c) = a * b
have rw : a * (c * (b / c)) = a * b
Tactic: rw [mul_assoc, mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : a * (c * (b / c)) = a * b
⊢ a * c * (b / c) = a * b
have rw₁ : a * b = a * b
Tactic: rw [mul_assoc, mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
⊢ a / c * (b * c) = a * b
have rw : b * (a / c * c) = a * b
Tactic: rw [mul_left_comm, div_mul_cancel, mul_comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : b * (a / c * c) = a * b
⊢ a / c * (b * c) = a * b
have rw₁ : b * a = a * b
Tactic: rw [mul_left_comm, div_mul_cancel, mul_comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : b * (a / c * c) = a * b
rw₁ : b * a = a * b
⊢ a / c * (b * c) = a * b
have rw₂ : a * b = a * b
Tactic: rw [mul_left_comm, div_mul_cancel, mul_comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
⊢ a / b * (c / a) = c / b
have rw : c / a * (a / b) = c / b
Tactic: rw [mul_comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
⊢ a * b / (a / c) = b * c
have rw : a * b / a * c = b * c
Tactic: rw [← div_mul, mul_div_cancel_left]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : a * b / a * c = b * c
⊢ a * b / (a / c) = b * c
have rw₁ : b * c = b * c
Tactic: rw [← div_mul, mul_div_cancel_left]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
⊢ c / a / (c / b) = b / a
have rw : c / a / (b / c)⁻¹ = b / a
Tactic: rw [← inv_div b c, div_inv_eq_mul, mul_comm, div_mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : c / a / (b / c)⁻¹ = b / a
⊢ c / a / (c / b) = b / a
have rw₁ : c / a * (b / c) = b / a
Tactic: rw [← inv_div b c, div_inv_eq_mul, mul_comm, div_mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : c / a / (b / c)⁻¹ = b / a
rw₁ : c / a * (b / c) = b / a
⊢ c / a / (c / b) = b / a
have rw₂ : b / c * (c / a) = b / a
Tactic: rw [← inv_div b c, div_inv_eq_mul, mul_comm, div_mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c : G
rw : c / a / (b / c)⁻¹ = b / a
rw₁ : c / a * (b / c) = b / a
rw₂ : b / c * (c / a) = b / a
⊢ c / a / (c / b) = b / a
have rw₃ : b / a = b / a
Tactic: rw [← inv_div b c, div_inv_eq_mul, mul_comm, div_mul_div_cancel]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
⊢ a / b = c / d ↔ a * d = c * b
have rw : c * b = d * a ↔ a * d = c * b
Tactic: rw [div_eq_iff_eq_mul, div_mul_eq_mul_div, eq_comm, div_eq_iff_eq_mul']
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
⊢ a * b⁻¹ = c * d⁻¹ ↔ a * d = c * b
have rw : a / b = c * d⁻¹ ↔ a * d = c * b
Tactic: rw [← div_eq_mul_inv, ← div_eq_mul_inv, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a / b = c * d⁻¹ ↔ a * d = c * b
⊢ a * b⁻¹ = c * d⁻¹ ↔ a * d = c * b
have rw₁ : a / b = c / d ↔ a * d = c * b
Tactic: rw [← div_eq_mul_inv, ← div_eq_mul_inv, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a / b = c * d⁻¹ ↔ a * d = c * b
rw₁ : a / b = c / d ↔ a * d = c * b
⊢ a * b⁻¹ = c * d⁻¹ ↔ a * d = c * b
have rw₂ : a * d = c * b ↔ a * d = c * b
Tactic: rw [← div_eq_mul_inv, ← div_eq_mul_inv, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
⊢ b⁻¹ * a = d⁻¹ * c ↔ a * d = c * b
have rw : a / b = d⁻¹ * c ↔ a * d = c * b
Tactic: rw [← div_eq_inv_mul, ← div_eq_inv_mul, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a / b = d⁻¹ * c ↔ a * d = c * b
⊢ b⁻¹ * a = d⁻¹ * c ↔ a * d = c * b
have rw₁ : a / b = c / d ↔ a * d = c * b
Tactic: rw [← div_eq_inv_mul, ← div_eq_inv_mul, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a / b = d⁻¹ * c ↔ a * d = c * b
rw₁ : a / b = c / d ↔ a * d = c * b
⊢ b⁻¹ * a = d⁻¹ * c ↔ a * d = c * b
have rw₂ : a * d = c * b ↔ a * d = c * b
Tactic: rw [← div_eq_inv_mul, ← div_eq_inv_mul, div_eq_div_iff_mul_eq_mul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
⊢ a / b = c / d ↔ a / c = b / d
have rw : a = c / d * b ↔ a / c = b / d
Tactic: rw [div_eq_iff_eq_mul, div_mul_eq_mul_div, div_eq_iff_eq_mul', mul_div_assoc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a = c / d * b ↔ a / c = b / d
⊢ a / b = c / d ↔ a / c = b / d
have rw₁ : a = c * b / d ↔ a / c = b / d
Tactic: rw [div_eq_iff_eq_mul, div_mul_eq_mul_div, div_eq_iff_eq_mul', mul_div_assoc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a = c / d * b ↔ a / c = b / d
rw₁ : a = c * b / d ↔ a / c = b / d
⊢ a / b = c / d ↔ a / c = b / d
have rw₂ : a = c * b / d ↔ a = c * (b / d)
Tactic: rw [div_eq_iff_eq_mul, div_mul_eq_mul_div, div_eq_iff_eq_mul', mul_div_assoc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
G : Type u_3
inst : CommGroup G
a b c d : G
rw : a = c / d * b ↔ a / c = b / d
rw₁ : a = c * b / d ↔ a / c = b / d
rw₂ : a = c * b / d ↔ a = c * (b / d)
⊢ a / b = c / d ↔ a / c = b / d
have rw₃ : a = c * (b / d) ↔ a = c * (b / d)
Tactic: rw [div_eq_iff_eq_mul, div_mul_eq_mul_div, div_eq_iff_eq_mul', mul_div_assoc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
⊢ f a c = f a b * f b c
have inl : ∀ (rab : r a b), f a c = f a b * f b c
Tactic: obtain rab | rba := total_of r a b
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
inl : ∀ (rab : r a b), f a c = f a b * f b c
⊢ f a c = f a b * f b c
have inr : ∀ (rba : r b a), f a c = f a b * f b c
Tactic: obtain rab | rba := total_of r a b
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
⊢ f a c = f a b * f b c
have inr : f a b * (f b a * f a c) = f a b * f b c
Tactic: rw [← one_mul (f a c), ← hf_swap pab, mul_assoc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr : ∀ (rac : r a c), f a b * (f b a * f a c) = f a b * f b c
Tactic: obtain rac | rca := total_of r a c
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
inr : ∀ (rac : r a c), f a b * (f b a * f a c) = f a b * f b c
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr₁ : ∀ (rca : r c a), f a b * (f b a * f a c) = f a b * f b c
Tactic: obtain rac | rca := total_of r a c
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
rac : r a c
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr : f a b * (f b a * f a c) = f a b * (f b a * f a c)
Tactic: rw [hmul rba rac (hsymm pab) pac pbc]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
rca : r c a
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr : f a b * (f b c * f c a * f a c) = f a b * f b c
Tactic: rw [hmul rbc rca pbc (hsymm pac) (hsymm pab), mul_assoc, hf_swap (hsymm pac), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
rca : r c a
inr : f a b * (f b c * f c a * f a c) = f a b * f b c
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr₁ : f a b * (f b c * (f c a * f a c)) = f a b * f b c
Tactic: rw [hmul rbc rca pbc (hsymm pac) (hsymm pab), mul_assoc, hf_swap (hsymm pac), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
rca : r c a
inr : f a b * (f b c * f c a * f a c) = f a b * f b c
inr₁ : f a b * (f b c * (f c a * f a c)) = f a b * f b c
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr₂ : f a b * (f b c * 1) = f a b * f b c
Tactic: rw [hmul rbc rca pbc (hsymm pac) (hsymm pab), mul_assoc, hf_swap (hsymm pac), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b_1 c_1 : α
pab_1 : p a b_1
pbc_1 : p b_1 c_1
pac_1 : p a c_1
b c : α
rbc : r b c
pab : p a b
pbc : p b c
pac : p a c
rba : r b a
rca : r c a
inr : f a b * (f b c * f c a * f a c) = f a b * f b c
inr₁ : f a b * (f b c * (f c a * f a c)) = f a b * f b c
inr₂ : f a b * (f b c * 1) = f a b * f b c
⊢ f a b * (f b a * f a c) = f a b * f b c
have inr₃ : f a b * f b c = f a b * f b c
Tactic: rw [hmul rbc rca pbc (hsymm pac) (hsymm pab), mul_assoc, hf_swap (hsymm pac), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (hypothesis)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
⊢ f a c = f a b * f b c
have hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
Tactic: have hmul' : ∀ {b c}, r b c → p a b → p b c → p a c → f a c = f a b * f b c := by
    intro b c rbc pab pbc pac
    obtain rab | rba := total_of r a b
    · exact hmul rab rbc pab pbc pac
    rw [← one_mul (f a c), ← hf_swap pab, mul_assoc]
    obtain rac | rca := total_of r a c
    · rw [hmul rba rac (hsymm pab) pac pbc]
    · rw [hmul rbc rca pbc (hsymm pac) (hsymm pab), mul_assoc, hf_swap (hsymm pac), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
⊢ f a c = f a b * f b c
have inl : ∀ (rbc : r b c), f a c = f a b * f b c
Tactic: obtain rbc | rcb := total_of r b c
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
inl : ∀ (rbc : r b c), f a c = f a b * f b c
⊢ f a c = f a b * f b c
have inr : ∀ (rcb : r c b), f a c = f a b * f b c
Tactic: obtain rbc | rcb := total_of r b c
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
rcb : r c b
⊢ f a c = f a b * f b c
have inr : f a c = f a c * f c b * f b c
Tactic: rw [hmul' rcb pac (hsymm pbc) pab, mul_assoc, hf_swap (hsymm pbc), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
rcb : r c b
inr : f a c = f a c * f c b * f b c
⊢ f a c = f a b * f b c
have inr₁ : f a c = f a c * (f c b * f b c)
Tactic: rw [hmul' rcb pac (hsymm pbc) pab, mul_assoc, hf_swap (hsymm pbc), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
rcb : r c b
inr : f a c = f a c * f c b * f b c
inr₁ : f a c = f a c * (f c b * f b c)
⊢ f a c = f a b * f b c
have inr₂ : f a c = f a c * 1
Tactic: rw [hmul' rcb pac (hsymm pbc) pab, mul_assoc, hf_swap (hsymm pbc), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
p r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
hsymm : Symmetric p
hf_swap : ∀ {a b : α}, p a b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a b → p b c → p a c → f a c = f a b * f b c
a b c : α
pab : p a b
pbc : p b c
pac : p a c
hmul' : ∀ {b c : α}, r b c → p a b → p b c → p a c → f a c = f a b * f b c
rcb : r c b
inr : f a c = f a c * f c b * f b c
inr₁ : f a c = f a c * (f c b * f b c)
inr₂ : f a c = f a c * 1
⊢ f a c = f a b * f b c
have inr₃ : f a c = f a c
Tactic: rw [hmul' rcb pac (hsymm pbc) pab, mul_assoc, hf_swap (hsymm pbc), mul_one]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
p : α → Prop
hswap : ∀ {a b : α}, p a → p b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a → p b → p c → f a c = f a b * f b c
a b c : α
pa : p a
pb : p b
pc : p c
⊢ f a c = f a b * f b c
have hf_swap : ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
Tactic: apply multiplicative_of_symmetric_of_total (fun a b => p a ∧ p b) r f fun _ _ => And.symm
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
p : α → Prop
hswap : ∀ {a b : α}, p a → p b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a → p b → p c → f a c = f a b * f b c
a b c : α
pa : p a
pb : p b
pc : p c
hf_swap : ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
⊢ f a c = f a b * f b c
have hmul₁ : ∀ {a b c : α}, r a b → r b c → p a ∧ p b → p b ∧ p c → p a ∧ p c → f a c = f a b * f b c
Tactic: apply multiplicative_of_symmetric_of_total (fun a b => p a ∧ p b) r f fun _ _ => And.symm
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
p : α → Prop
hswap : ∀ {a b : α}, p a → p b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a → p b → p c → f a c = f a b * f b c
a b c : α
pa : p a
pb : p b
pc : p c
hf_swap : ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
hmul₁ : ∀ {a b c : α}, r a b → r b c → p a ∧ p b → p b ∧ p c → p a ∧ p c → f a c = f a b * f b c
⊢ f a c = f a b * f b c
have pab : p a ∧ p b
Tactic: apply multiplicative_of_symmetric_of_total (fun a b => p a ∧ p b) r f fun _ _ => And.symm
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
p : α → Prop
hswap : ∀ {a b : α}, p a → p b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a → p b → p c → f a c = f a b * f b c
a b c : α
pa : p a
pb : p b
pc : p c
hf_swap : ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
hmul₁ : ∀ {a b c : α}, r a b → r b c → p a ∧ p b → p b ∧ p c → p a ∧ p c → f a c = f a b * f b c
pab : p a ∧ p b
⊢ f a c = f a b * f b c
have pbc : p b ∧ p c
Tactic: apply multiplicative_of_symmetric_of_total (fun a b => p a ∧ p b) r f fun _ _ => And.symm
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α : Type u_1
β : Type u_2
inst : Monoid β
r : α → α → Prop
inst_1 : Std.Total r
f : α → α → β
p : α → Prop
hswap : ∀ {a b : α}, p a → p b → f a b * f b a = 1
hmul : ∀ {a b c : α}, r a b → r b c → p a → p b → p c → f a c = f a b * f b c
a b c : α
pa : p a
pb : p b
pc : p c
hf_swap : ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
hmul₁ : ∀ {a b c : α}, r a b → r b c → p a ∧ p b → p b ∧ p c → p a ∧ p c → f a c = f a b * f b c
pab : p a ∧ p b
pbc : p b ∧ p c
⊢ f a c = f a b * f b c
have pac : p a ∧ p c
Tactic: apply multiplicative_of_symmetric_of_total (fun a b => p a ∧ p b) r f fun _ _ => And.symm
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
M : Type u_4
F : Type u_5
inst : Monoid F
c : F → M → M
h1 : c 1 = id
hmul : ∀ (f g : F), c (f * g) = c f ∘ c g
f : F
⊢ c (HPow.hPow (β := ℕ) f 0) = (c f)^[0]
have rw : id = (c f)^[0]
Tactic: rw [pow_zero, h1]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
M : Type u_4
F : Type u_5
inst : Monoid F
c : F → M → M
h1 : c 1 = id
hmul : ∀ (f g : F), c (f * g) = c f ∘ c g
f : F
n : ℕ
⊢ c (f ^ (n + 1)) = (c f)^[n + 1]
have rw : c (f ^ n * f) = (c f)^[n + 1]
Tactic: rw [pow_succ, iterate_succ, hmul, hom_coe_pow c h1 hmul f n]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
M : Type u_4
F : Type u_5
inst : Monoid F
c : F → M → M
h1 : c 1 = id
hmul : ∀ (f g : F), c (f * g) = c f ∘ c g
f : F
n : ℕ
rw : c (f ^ n * f) = (c f)^[n + 1]
⊢ c (f ^ (n + 1)) = (c f)^[n + 1]
have rw₁ : c (f ^ n * f) = (c f)^[n] ∘ c f
Tactic: rw [pow_succ, iterate_succ, hmul, hom_coe_pow c h1 hmul f n]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
M : Type u_4
F : Type u_5
inst : Monoid F
c : F → M → M
h1 : c 1 = id
hmul : ∀ (f g : F), c (f * g) = c f ∘ c g
f : F
n : ℕ
rw : c (f ^ n * f) = (c f)^[n + 1]
rw₁ : c (f ^ n * f) = (c f)^[n] ∘ c f
⊢ c (f ^ (n + 1)) = (c f)^[n + 1]
have rw₂ : c (f ^ n) ∘ c f = (c f)^[n] ∘ c f
Tactic: rw [pow_succ, iterate_succ, hmul, hom_coe_pow c h1 hmul f n]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
M : Type u_4
F : Type u_5
inst : Monoid F
c : F → M → M
h1 : c 1 = id
hmul : ∀ (f g : F), c (f * g) = c f ∘ c g
f : F
n : ℕ
rw : c (f ^ n * f) = (c f)^[n + 1]
rw₁ : c (f ^ n * f) = (c f)^[n] ∘ c f
rw₂ : c (f ^ n) ∘ c f = (c f)^[n] ∘ c f
⊢ c (f ^ (n + 1)) = (c f)^[n + 1]
have rw₃ : (c f)^[n] ∘ c f = (c f)^[n] ∘ c f
Tactic: rw [pow_succ, iterate_succ, hmul, hom_coe_pow c h1 hmul f n]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α_1 : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
α : Type u_5
s : AddCommMonoid α
n : ℕ
a : α
⊢ (n + 1) • a = n • a + a
have rw : n • a + HSMul.hSMul (α := ℕ) 1 a = n • a + a
Tactic: rw [add_nsmul, one_nsmul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Basic (goal)
Goal:
α_1 : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
α : Type u_5
s : AddCommMonoid α
n : ℕ
a : α
rw : n • a + HSMul.hSMul (α := ℕ) 1 a = n • a + a
⊢ (n + 1) • a = n • a + a
have rw₁ : n • a + a = n • a + a
Tactic: rw [add_nsmul, one_nsmul]
-- Lean 4 proof step from Mathlib.Algebra.Group.Center (goal)
Goal:
M : Type u_1
inst : Mul M
z : M
h : IsMulCentral z
a c : M
⊢ a * z * c = a * (z * c)
have rw : a * z * c = a * (c * z)
Tactic: rw [h.comm, ← h.right_assoc, ← h.comm, ← h.left_assoc, h.comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Center (goal)
Goal:
M : Type u_1
inst : Mul M
z : M
h : IsMulCentral z
a c : M
rw : a * z * c = a * (c * z)
⊢ a * z * c = a * (z * c)
have rw₁ : a * z * c = a * c * z
Tactic: rw [h.comm, ← h.right_assoc, ← h.comm, ← h.left_assoc, h.comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Center (goal)
Goal:
M : Type u_1
inst : Mul M
z : M
h : IsMulCentral z
a c : M
rw : a * z * c = a * (c * z)
rw₁ : a * z * c = a * c * z
⊢ a * z * c = a * (z * c)
have rw₂ : z * a * c = a * c * z
Tactic: rw [h.comm, ← h.right_assoc, ← h.comm, ← h.left_assoc, h.comm]
-- Lean 4 proof step from Mathlib.Algebra.Group.Center (goal)
Goal:
M : Type u_1
inst : Mul M
z : M
h : IsMulCentral z
a c : M
rw : a * z * c = a * (c * z)
rw₁ : a * z * c = a * c * z
rw₂ : z * a * c = a * c * z
⊢ a * z * c = a * (z * c)
have rw₃ : z * (a * c) = a * c * z
Tactic: rw [h.comm, ← h.right_assoc, ← h.comm, ← h.left_assoc, h.comm]