Theorem: RingEquiv.op_apply_apply
File: Mathlib/Algebra/Ring/Equiv.lean

Proof steps:
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : α ≃+* β
⊢ (fun f =>
        let __src := AddEquiv.mulOp.symm f.toAddEquiv;
        let __src_1 := MulEquiv.op.symm f.toMulEquiv;
        { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
      ((fun f =>
          let __src := AddEquiv.mulOp f.toAddEquiv;
          let __src_1 := MulEquiv.op f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        f) =
    f
state_after: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : α ≃+* β
x✝ : α
⊢ ((fun f =>
          let __src := AddEquiv.mulOp.symm f.toAddEquiv;
          let __src_1 := MulEquiv.op.symm f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        ((fun f =>
            let __src := AddEquiv.mulOp f.toAddEquiv;
            let __src_1 := MulEquiv.op f.toMulEquiv;
            { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
          f))
      x✝ =
    f x✝
tactic: ext
state_before: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : α ≃+* β
x✝ : α
⊢ ((fun f =>
          let __src := AddEquiv.mulOp.symm f.toAddEquiv;
          let __src_1 := MulEquiv.op.symm f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        ((fun f =>
            let __src := AddEquiv.mulOp f.toAddEquiv;
            let __src_1 := MulEquiv.op f.toMulEquiv;
            { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
          f))
      x✝ =
    f x✝
state_after: no goals
tactic: rfl
state_before: F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : αᵐᵒᵖ ≃+* βᵐᵒᵖ
⊢ (fun f =>
        let __src := AddEquiv.mulOp f.toAddEquiv;
        let __src_1 := MulEquiv.op f.toMulEquiv;
        { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
      ((fun f =>
          let __src := AddEquiv.mulOp.symm f.toAddEquiv;
          let __src_1 := MulEquiv.op.symm f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        f) =
    f
state_after: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : αᵐᵒᵖ ≃+* βᵐᵒᵖ
x✝ : αᵐᵒᵖ
⊢ ((fun f =>
          let __src := AddEquiv.mulOp f.toAddEquiv;
          let __src_1 := MulEquiv.op f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        ((fun f =>
            let __src := AddEquiv.mulOp.symm f.toAddEquiv;
            let __src_1 := MulEquiv.op.symm f.toMulEquiv;
            { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
          f))
      x✝ =
    f x✝
tactic: ext
state_before: case h
F : Type u_1
α✝ : Type u_2
β✝ : Type u_3
R : Type u_4
S : Type u_5
S' : Type u_6
α : Type ?u.31636
β : Type ?u.31642
inst✝³ : Add α
inst✝² : Mul α
inst✝¹ : Add β
inst✝ : Mul β
f : αᵐᵒᵖ ≃+* βᵐᵒᵖ
x✝ : αᵐᵒᵖ
⊢ ((fun f =>
          let __src := AddEquiv.mulOp f.toAddEquiv;
          let __src_1 := MulEquiv.op f.toMulEquiv;
          { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
        ((fun f =>
            let __src := AddEquiv.mulOp.symm f.toAddEquiv;
            let __src_1 := MulEquiv.op.symm f.toMulEquiv;
            { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ })
          f))
      x✝ =
    f x✝
state_after: no goals
tactic: rfl