Theorem: Con.conGen_eq
File: Mathlib/GroupTheory/Congruence.lean

tactic: apply ConGen.Rel.recOn (motive := fun x y _ => s.r x y) hxy
state_before: M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ Setoid.r x y

tactic: . exact fun x y h => hs x y h
state_before: case of
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ (x y : M), r x y → Setoid.r x y

case refl
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ (x : M), Setoid.r x x

case symm
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y : M}, ConGen.Rel r x y → Setoid.r x y → Setoid.r y x

case trans
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y z : M}, ConGen.Rel r x y → ConGen.Rel r y z → Setoid.r x y → Setoid.r y z → Setoid.r x z

case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)

tactic: . exact s.refl'
state_before: case refl
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ (x : M), Setoid.r x x

case symm
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y : M}, ConGen.Rel r x y → Setoid.r x y → Setoid.r y x

case trans
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y z : M}, ConGen.Rel r x y → ConGen.Rel r y z → Setoid.r x y → Setoid.r y z → Setoid.r x z

case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)

tactic: . exact fun _ => s.symm'
state_before: case symm
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y : M}, ConGen.Rel r x y → Setoid.r x y → Setoid.r y x

case trans
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y z : M}, ConGen.Rel r x y → ConGen.Rel r y z → Setoid.r x y → Setoid.r y z → Setoid.r x z

case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)

tactic: . exact fun _ _ => s.trans'
state_before: case trans
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y z : M}, ConGen.Rel r x y → ConGen.Rel r y z → Setoid.r x y → Setoid.r y z → Setoid.r x z

case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)

tactic: . exact fun _ _ => s.mul
state_before: case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)

tactic: exact fun x y h => hs x y h
state_before: case of
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ (x y : M), r x y → Setoid.r x y

tactic: exact s.refl'
state_before: case refl
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ (x : M), Setoid.r x x

tactic: exact fun _ => s.symm'
state_before: case symm
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y : M}, ConGen.Rel r x y → Setoid.r x y → Setoid.r y x

tactic: exact fun _ _ => s.trans'
state_before: case trans
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {x y z : M}, ConGen.Rel r x y → ConGen.Rel r y z → Setoid.r x y → Setoid.r y z → Setoid.r x z

tactic: exact fun _ _ => s.mul
state_before: case mul
M : Type u_1
N : Type ?u.26074
P : Type ?u.26077
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
r : M → M → Prop
s : Con M
hs : s ∈ {s | ∀ (x y : M), r x y → ↑s x y}
x y : M
hxy : Setoid.r x y
⊢ ∀ {w x y z : M}, ConGen.Rel r w x → ConGen.Rel r y z → Setoid.r w x → Setoid.r y z → Setoid.r (w * y) (x * z)