Theorem: AddEquiv.addMonoidHomCongr_apply
File: Mathlib/Algebra/Group/Equiv/Basic.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h : M →* P
⊢ (fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom))
      ((fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom)) h) =
    h
state_after: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h : M →* P
x✝ : M
⊢ ((fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom))
        ((fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom)) h))
      x✝ =
    h x✝
tactic: ext
state_before: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h : M →* P
x✝ : M
⊢ ((fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom))
        ((fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom)) h))
      x✝ =
    h x✝
state_after: no goals
tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
k : N →* Q
⊢ (fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom))
      ((fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom)) k) =
    k
state_after: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
k : N →* Q
x✝ : N
⊢ ((fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom))
        ((fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom)) k))
      x✝ =
    k x✝
tactic: ext
state_before: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
k : N →* Q
x✝ : N
⊢ ((fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom))
        ((fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom)) k))
      x✝ =
    k x✝
state_after: no goals
tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h k : M →* P
⊢ { toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
          invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
      (h * k) =
    { toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
            invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
        h *
      { toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
            invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
        k
state_after: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h k : M →* P
x✝ : N
⊢ ({ toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
            invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
        (h * k))
      x✝ =
    ({ toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
              invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
          h *
        { toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
              invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
          k)
      x✝
tactic: ext
state_before: case h
F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M✝ : Type u_6
N✝ : Type u_7
P✝ : Type u_8
Q✝ : Type u_9
G : Type u_10
H : Type u_11
inst✝⁴ : EquivLike F α β
M : Type ?u.43696
N : Type ?u.43699
P : Type ?u.43702
Q : Type ?u.43705
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : CommMonoid P
inst✝ : CommMonoid Q
f : M ≃* N
g : P ≃* Q
h k : M →* P
x✝ : N
⊢ ({ toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
            invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
        (h * k))
      x✝ =
    ({ toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
              invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
          h *
        { toFun := fun h => g.toMonoidHom.comp (h.comp f.symm.toMonoidHom),
              invFun := fun k => g.symm.toMonoidHom.comp (k.comp f.toMonoidHom), left_inv := ⋯, right_inv := ⋯ }.toFun
          k)
      x✝
state_after: no goals
tactic: simp