Theorem: Unitization.val_inv_unitsFstOne_mulEquiv_quasiregular_apply
File: Mathlib/Algebra/Algebra/Quasispectrum.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : ↥(unitsFstOne R A)
⊢ equiv.symm (equiv (↑↑x).snd * equiv (↑↑x⁻¹).snd) = equiv.symm 1
state_after: no goals
tactic: simpa [-Units.mul_inv] using congr(snd $(x.val.mul_inv))
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : ↥(unitsFstOne R A)
⊢ equiv.symm (equiv (↑↑x⁻¹).snd * equiv (↑↑x).snd) = equiv.symm 1
state_after: no goals
tactic: simpa [-Units.inv_mul] using congr(snd $(x.val.inv_mul))
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ (1 + ↑(equiv.symm ↑x)) * (1 + ↑(equiv.symm ↑x⁻¹)) = 1
state_after: case h.e'_2
R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ (1 + ↑(equiv.symm ↑x)) * (1 + ↑(equiv.symm ↑x⁻¹)) = 1 + ↑((↑x⁻¹).val + (↑x).val + (↑x).val * (↑x⁻¹).val)

case h.e'_3
R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ 1 = 1 + ↑0
tactic: convert congr((1 + $(inv_add_add_mul_eq_zero x) : Unitization R A)) using 1
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ (1 + ↑(equiv.symm ↑x⁻¹)) * (1 + ↑(equiv.symm ↑x)) = 1
state_after: case h.e'_2
R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ (1 + ↑(equiv.symm ↑x⁻¹)) * (1 + ↑(equiv.symm ↑x)) = 1 + ↑((↑x).val + (↑x⁻¹).val + (↑x⁻¹).val * (↑x).val)

case h.e'_3
R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ 1 = 1 + ↑0
tactic: convert congr((1 + $(add_inv_add_mul_eq_zero x) : Unitization R A)) using 1
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ { val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ } ∈ unitsFstOne R A
state_after: no goals
tactic: simp
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : ↥(unitsFstOne R A)
⊢ ↑↑((fun x => ⟨{ val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ }, ⋯⟩)
          ((fun x => { val := equiv (↑↑x).snd, inv := equiv (↑↑x⁻¹).snd, val_inv := ⋯, inv_val := ⋯ }) x)) =
    ↑↑x
state_after: no goals
tactic: simpa using x.val.val.inl_fst_add_inr_snd_eq
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x : (PreQuasiregular A)ˣ
⊢ ↑((fun x => { val := equiv (↑↑x).snd, inv := equiv (↑↑x⁻¹).snd, val_inv := ⋯, inv_val := ⋯ })
        ((fun x => ⟨{ val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ }, ⋯⟩)
          x)) =
    ↑x
state_after: no goals
tactic: simp [-equiv_symm_apply]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : NonUnitalSemiring A
inst✝² : Module R A
inst✝¹ : IsScalarTower R A A
inst✝ : SMulCommClass R A A
x y : ↥(unitsFstOne R A)
⊢ equiv.symm
      ↑({ toFun := fun x => { val := equiv (↑↑x).snd, inv := equiv (↑↑x⁻¹).snd, val_inv := ⋯, inv_val := ⋯ },
              invFun := fun x =>
                ⟨{ val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ }, ⋯⟩,
              left_inv := ⋯, right_inv := ⋯ }.toFun
          (x * y)) =
    equiv.symm
      ↑({ toFun := fun x => { val := equiv (↑↑x).snd, inv := equiv (↑↑x⁻¹).snd, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x =>
                  ⟨{ val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ }, ⋯⟩,
                left_inv := ⋯, right_inv := ⋯ }.toFun
            x *
          { toFun := fun x => { val := equiv (↑↑x).snd, inv := equiv (↑↑x⁻¹).snd, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x =>
                  ⟨{ val := 1 + ↑(equiv.symm ↑x), inv := 1 + ↑(equiv.symm ↑x⁻¹), val_inv := ⋯, inv_val := ⋯ }, ⋯⟩,
                left_inv := ⋯, right_inv := ⋯ }.toFun
            y)
state_after: no goals
tactic: simp