Theorem: multiplicative_of_isTotal
File: Mathlib/Algebra/Group/Basic.lean

tactic: apply multiplicative_of_symmetric_of_isTotal (fun a b => p a ∧ p b) r f fun _ _ => And.symm
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
state_after: case hf_swap
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1

case hmul
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {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

case pab
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p a ∧ p b

case pbc
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p b ∧ p c

case pac
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p a ∧ p c

tactic: exacts [⟨pa, pb⟩, ⟨pb, pc⟩, ⟨pa, pc⟩]
state_before: case pab
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p a ∧ p b

case pbc
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p b ∧ p c

case pac
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ p a ∧ p c
state_after: no goals

tactic: simp_rw [and_imp]
state_before: case hf_swap
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {a b : α}, p a ∧ p b → f a b * f b a = 1
state_after: case hf_swap
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {a b : α}, p a → p b → f a b * f b a = 1

tactic: exact @hswap
state_before: case hf_swap
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {a b : α}, p a → p b → f a b * f b a = 1
state_after: no goals

tactic: exact fun rab rbc pab _pbc pac => hmul rab rbc pab.1 pab.2 pac.2
state_before: case hmul
α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝¹ : Monoid β
p✝ r : α → α → Prop
inst✝ : IsTotal α 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
⊢ ∀ {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
state_after: no goals