l3lab/ntp-mathlib huggingface dataset:
/-- `ContinuousLinearMap.prod` as an `Equiv`. -/
@[simps apply]
def prodEquiv : (M →L[R] N₂) × (M →L[R] N₃) ≃ (M →L[R] N₂ × N₃) where
  toFun f := f.1.prod f.2
  invFun f := ⟨(fst _ _ _).comp f, (snd _ _ _).comp f⟩
  left_inv f := by ext <;> rfl
  right_inv f := by 

Proof state:
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
S : Type u_4
S₃ : Type u_5
inst✝²⁹ : Semiring R
inst✝²⁸ : Semiring R₂
inst✝²⁷ : Semiring R₃
inst✝²⁶ : Semiring S
inst✝²⁵ : Semiring S₃
M : Type u_6
inst✝²⁴ : TopologicalSpace M
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
M₂ : Type u_7
inst✝²¹ : TopologicalSpace M₂
inst✝²⁰ : AddCommMonoid M₂
inst✝¹⁹ : Module R₂ M₂
M₃ : Type u_8
inst✝¹⁸ : TopologicalSpace M₃
inst✝¹⁷ : AddCommMonoid M₃
inst✝¹⁶ : Module R₃ M₃
N₂ : Type u_9
inst✝¹⁵ : TopologicalSpace N₂
inst✝¹⁴ : AddCommMonoid N₂
inst✝¹³ : Module R N₂
N₃ : Type u_10
inst✝¹² : TopologicalSpace N₃
inst✝¹¹ : AddCommMonoid N₃
inst✝¹⁰ : Module R N₃
inst✝⁹ : Module S₃ M₃
inst✝⁸ : SMulCommClass R₃ S₃ M₃
inst✝⁷ : ContinuousConstSMul S₃ M₃
inst✝⁶ : Module S N₂
inst✝⁵ : ContinuousConstSMul S N₂
inst✝⁴ : SMulCommClass R S N₂
inst✝³ : Module S N₃
inst✝² : SMulCommClass R S N₃
inst✝¹ : ContinuousConstSMul S N₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
c : S
h : M₂ →SL[σ₂₃] M₃
f✝ g : M →SL[σ₁₂] M₂
x y z : M
f : M →L[R] N₂ × N₃
⊢ (fun f => ContinuousLinearMap.prod f.1 f.2) ((fun f => (comp (fst R N₂ N₃) f, comp (snd R N₂ N₃) f)) f) = f

Next tactic:
ext
/-- `ContinuousLinearMap.prod` as an `Equiv`. -/
@[simps apply]
def prodEquiv : (M →L[R] N₂) × (M →L[R] N₃) ≃ (M →L[R] N₂ × N₃) where
  toFun f := f.1.prod f.2
  invFun f := ⟨(fst _ _ _).comp f, (snd _ _ _).comp f⟩
  left_inv f := by ext <;> rfl
  right_inv f := by ext <;> 

Proof state:
case h.a
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
S : Type u_4
S₃ : Type u_5
inst✝²⁹ : Semiring R
inst✝²⁸ : Semiring R₂
inst✝²⁷ : Semiring R₃
inst✝²⁶ : Semiring S
inst✝²⁵ : Semiring S₃
M : Type u_6
inst✝²⁴ : TopologicalSpace M
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
M₂ : Type u_7
inst✝²¹ : TopologicalSpace M₂
inst✝²⁰ : AddCommMonoid M₂
inst✝¹⁹ : Module R₂ M₂
M₃ : Type u_8
inst✝¹⁸ : TopologicalSpace M₃
inst✝¹⁷ : AddCommMonoid M₃
inst✝¹⁶ : Module R₃ M₃
N₂ : Type u_9
inst✝¹⁵ : TopologicalSpace N₂
inst✝¹⁴ : AddCommMonoid N₂
inst✝¹³ : Module R N₂
N₃ : Type u_10
inst✝¹² : TopologicalSpace N₃
inst✝¹¹ : AddCommMonoid N₃
inst✝¹⁰ : Module R N₃
inst✝⁹ : Module S₃ M₃
inst✝⁸ : SMulCommClass R₃ S₃ M₃
inst✝⁷ : ContinuousConstSMul S₃ M₃
inst✝⁶ : Module S N₂
inst✝⁵ : ContinuousConstSMul S N₂
inst✝⁴ : SMulCommClass R S N₂
inst✝³ : Module S N₃
inst✝² : SMulCommClass R S N₃
inst✝¹ : ContinuousConstSMul S N₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
c : S
h : M₂ →SL[σ₂₃] M₃
f✝ g : M →SL[σ₁₂] M₂
x y z : M
f : M →L[R] N₂ × N₃
x✝ : M
⊢ (((fun f => ContinuousLinearMap.prod f.1 f.2) ((fun f => (comp (fst R N₂ N₃) f, comp (snd R N₂ N₃) f)) f)) x✝).1 =
    (f x✝).1

Next tactic:
rfl
/-- `ContinuousLinearMap.prod` as an `Equiv`. -/
@[simps apply]
def prodEquiv : (M →L[R] N₂) × (M →L[R] N₃) ≃ (M →L[R] N₂ × N₃) where
  toFun f := f.1.prod f.2
  invFun f := ⟨(fst _ _ _).comp f, (snd _ _ _).comp f⟩
  left_inv f := by ext <;> rfl
  right_inv f := by ext <;> 

Proof state:
case h.a
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
S : Type u_4
S₃ : Type u_5
inst✝²⁹ : Semiring R
inst✝²⁸ : Semiring R₂
inst✝²⁷ : Semiring R₃
inst✝²⁶ : Semiring S
inst✝²⁵ : Semiring S₃
M : Type u_6
inst✝²⁴ : TopologicalSpace M
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
M₂ : Type u_7
inst✝²¹ : TopologicalSpace M₂
inst✝²⁰ : AddCommMonoid M₂
inst✝¹⁹ : Module R₂ M₂
M₃ : Type u_8
inst✝¹⁸ : TopologicalSpace M₃
inst✝¹⁷ : AddCommMonoid M₃
inst✝¹⁶ : Module R₃ M₃
N₂ : Type u_9
inst✝¹⁵ : TopologicalSpace N₂
inst✝¹⁴ : AddCommMonoid N₂
inst✝¹³ : Module R N₂
N₃ : Type u_10
inst✝¹² : TopologicalSpace N₃
inst✝¹¹ : AddCommMonoid N₃
inst✝¹⁰ : Module R N₃
inst✝⁹ : Module S₃ M₃
inst✝⁸ : SMulCommClass R₃ S₃ M₃
inst✝⁷ : ContinuousConstSMul S₃ M₃
inst✝⁶ : Module S N₂
inst✝⁵ : ContinuousConstSMul S N₂
inst✝⁴ : SMulCommClass R S N₂
inst✝³ : Module S N₃
inst✝² : SMulCommClass R S N₃
inst✝¹ : ContinuousConstSMul S N₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
c : S
h : M₂ →SL[σ₂₃] M₃
f✝ g : M →SL[σ₁₂] M₂
x y z : M
f : M →L[R] N₂ × N₃
x✝ : M
⊢ (((fun f => ContinuousLinearMap.prod f.1 f.2) ((fun f => (comp (fst R N₂ N₃) f, comp (snd R N₂ N₃) f)) f)) x✝).2 =
    (f x✝).2

Next tactic:
rfl
theorem prod_ext_iff {f g : M × N₂ →L[R] N₃} :
    f = g ↔ f.comp (inl _ _ _) = g.comp (inl _ _ _) ∧ f.comp (inr _ _ _) = g.comp (inr _ _ _) := by
  

Proof state:
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
S : Type u_4
S₃ : Type u_5
inst✝²⁹ : Semiring R
inst✝²⁸ : Semiring R₂
inst✝²⁷ : Semiring R₃
inst✝²⁶ : Semiring S
inst✝²⁵ : Semiring S₃
M : Type u_6
inst✝²⁴ : TopologicalSpace M
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
M₂ : Type u_7
inst✝²¹ : TopologicalSpace M₂
inst✝²⁰ : AddCommMonoid M₂
inst✝¹⁹ : Module R₂ M₂
M₃ : Type u_8
inst✝¹⁸ : TopologicalSpace M₃
inst✝¹⁷ : AddCommMonoid M₃
inst✝¹⁶ : Module R₃ M₃
N₂ : Type u_9
inst✝¹⁵ : TopologicalSpace N₂
inst✝¹⁴ : AddCommMonoid N₂
inst✝¹³ : Module R N₂
N₃ : Type u_10
inst✝¹² : TopologicalSpace N₃
inst✝¹¹ : AddCommMonoid N₃
inst✝¹⁰ : Module R N₃
inst✝⁹ : Module S₃ M₃
inst✝⁸ : SMulCommClass R₃ S₃ M₃
inst✝⁷ : ContinuousConstSMul S₃ M₃
inst✝⁶ : Module S N₂
inst✝⁵ : ContinuousConstSMul S N₂
inst✝⁴ : SMulCommClass R S N₂
inst✝³ : Module S N₃
inst✝² : SMulCommClass R S N₃
inst✝¹ : ContinuousConstSMul S N₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
c : S
h : M₂ →SL[σ₂₃] M₃
f✝ g✝ : M →SL[σ₁₂] M₂
x y z : M
f g : M × N₂ →L[R] N₃
⊢ f = g ↔ comp f (inl R M N₂) = comp g (inl R M N₂) ∧ comp f (inr R M N₂) = comp g (inr R M N₂)

Next tactic:
simp only [← coe_inj, LinearMap.prod_ext_iff]
theorem prod_ext_iff {f g : M × N₂ →L[R] N₃} :
    f = g ↔ f.comp (inl _ _ _) = g.comp (inl _ _ _) ∧ f.comp (inr _ _ _) = g.comp (inr _ _ _) := by
  simp only [← coe_inj, LinearMap.prod_ext_iff]
  

Proof state:
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
S : Type u_4
S₃ : Type u_5
inst✝²⁹ : Semiring R
inst✝²⁸ : Semiring R₂
inst✝²⁷ : Semiring R₃
inst✝²⁶ : Semiring S
inst✝²⁵ : Semiring S₃
M : Type u_6
inst✝²⁴ : TopologicalSpace M
inst✝²³ : AddCommMonoid M
inst✝²² : Module R M
M₂ : Type u_7
inst✝²¹ : TopologicalSpace M₂
inst✝²⁰ : AddCommMonoid M₂
inst✝¹⁹ : Module R₂ M₂
M₃ : Type u_8
inst✝¹⁸ : TopologicalSpace M₃
inst✝¹⁷ : AddCommMonoid M₃
inst✝¹⁶ : Module R₃ M₃
N₂ : Type u_9
inst✝¹⁵ : TopologicalSpace N₂
inst✝¹⁴ : AddCommMonoid N₂
inst✝¹³ : Module R N₂
N₃ : Type u_10
inst✝¹² : TopologicalSpace N₃
inst✝¹¹ : AddCommMonoid N₃
inst✝¹⁰ : Module R N₃
inst✝⁹ : Module S₃ M₃
inst✝⁸ : SMulCommClass R₃ S₃ M₃
inst✝⁷ : ContinuousConstSMul S₃ M₃
inst✝⁶ : Module S N₂
inst✝⁵ : ContinuousConstSMul S N₂
inst✝⁴ : SMulCommClass R S N₂
inst✝³ : Module S N₃
inst✝² : SMulCommClass R S N₃
inst✝¹ : ContinuousConstSMul S N₃
σ₁₂ : R →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R →+* R₃
inst✝ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
c : S
h : M₂ →SL[σ₂₃] M₃
f✝ g✝ : M →SL[σ₁₂] M₂
x y z : M
f g : M × N₂ →L[R] N₃
⊢ ↑f ∘ₗ LinearMap.inl R M N₂ = ↑g ∘ₗ LinearMap.inl R M N₂ ∧ ↑f ∘ₗ LinearMap.inr R M N₂ = ↑g ∘ₗ LinearMap.inr R M N₂ ↔
    ↑(comp f (inl R M N₂)) = ↑(comp g (inl R M N₂)) ∧ ↑(comp f (inr R M N₂)) = ↑(comp g (inr R M N₂))

Next tactic:
rfl
/-- Given `c : E →L[𝕜] 𝕜`, `c.smulRightₗ` is the linear map from `F` to `E →L[𝕜] F`
sending `f` to `fun e => c e • f`. See also `ContinuousLinearMap.smulRightL`. -/
def smulRightₗ (c : M →L[R] S) : M₂ →ₗ[T] M →L[R] M₂ where
  toFun := c.smulRight
  map_add' x y := by
    

Proof state:
R : Type u_1
S : Type u_2
T : Type u_3
M : Type u_4
M₂ : Type u_5
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring S
inst✝¹⁶ : Semiring T
inst✝¹⁵ : Module R S
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R M₂
inst✝¹² : Module S M₂
inst✝¹¹ : IsScalarTower R S M₂
inst✝¹⁰ : TopologicalSpace S
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : ContinuousSMul S M₂
inst✝⁷ : TopologicalSpace M
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : ContinuousAdd M₂
inst✝³ : Module T M₂
inst✝² : ContinuousConstSMul T M₂
inst✝¹ : SMulCommClass R T M₂
inst✝ : SMulCommClass S T M₂
c : M →L[R] S
x y : M₂
⊢ smulRight c (x + y) = smulRight c x + smulRight c y

Next tactic:
ext e
/-- Given `c : E →L[𝕜] 𝕜`, `c.smulRightₗ` is the linear map from `F` to `E →L[𝕜] F`
sending `f` to `fun e => c e • f`. See also `ContinuousLinearMap.smulRightL`. -/
def smulRightₗ (c : M →L[R] S) : M₂ →ₗ[T] M →L[R] M₂ where
  toFun := c.smulRight
  map_add' x y := by
    ext e
    

Proof state:
case h
R : Type u_1
S : Type u_2
T : Type u_3
M : Type u_4
M₂ : Type u_5
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring S
inst✝¹⁶ : Semiring T
inst✝¹⁵ : Module R S
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R M₂
inst✝¹² : Module S M₂
inst✝¹¹ : IsScalarTower R S M₂
inst✝¹⁰ : TopologicalSpace S
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : ContinuousSMul S M₂
inst✝⁷ : TopologicalSpace M
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : ContinuousAdd M₂
inst✝³ : Module T M₂
inst✝² : ContinuousConstSMul T M₂
inst✝¹ : SMulCommClass R T M₂
inst✝ : SMulCommClass S T M₂
c : M →L[R] S
x y : M₂
e : M
⊢ (smulRight c (x + y)) e = (smulRight c x + smulRight c y) e

Next tactic:
apply smul_add
/-- Given `c : E →L[𝕜] 𝕜`, `c.smulRightₗ` is the linear map from `F` to `E →L[𝕜] F`
sending `f` to `fun e => c e • f`. See also `ContinuousLinearMap.smulRightL`. -/
def smulRightₗ (c : M →L[R] S) : M₂ →ₗ[T] M →L[R] M₂ where
  toFun := c.smulRight
  map_add' x y := by
    ext e
    apply smul_add
  map_smul' a x := by
    

Proof state:
R : Type u_1
S : Type u_2
T : Type u_3
M : Type u_4
M₂ : Type u_5
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring S
inst✝¹⁶ : Semiring T
inst✝¹⁵ : Module R S
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R M₂
inst✝¹² : Module S M₂
inst✝¹¹ : IsScalarTower R S M₂
inst✝¹⁰ : TopologicalSpace S
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : ContinuousSMul S M₂
inst✝⁷ : TopologicalSpace M
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : ContinuousAdd M₂
inst✝³ : Module T M₂
inst✝² : ContinuousConstSMul T M₂
inst✝¹ : SMulCommClass R T M₂
inst✝ : SMulCommClass S T M₂
c : M →L[R] S
a : T
x : M₂
⊢ AddHom.toFun
      { toFun := smulRight c, map_add' := (_ : ∀ (x y : M₂), smulRight c (x + y) = smulRight c x + smulRight c y) }
      (a • x) =
    (RingHom.id T) a •
      AddHom.toFun
        { toFun := smulRight c, map_add' := (_ : ∀ (x y : M₂), smulRight c (x + y) = smulRight c x + smulRight c y) } x

Next tactic:
ext e
/-- Given `c : E →L[𝕜] 𝕜`, `c.smulRightₗ` is the linear map from `F` to `E →L[𝕜] F`
sending `f` to `fun e => c e • f`. See also `ContinuousLinearMap.smulRightL`. -/
def smulRightₗ (c : M →L[R] S) : M₂ →ₗ[T] M →L[R] M₂ where
  toFun := c.smulRight
  map_add' x y := by
    ext e
    apply smul_add
  map_smul' a x := by
    ext e
    

Proof state:
case h
R : Type u_1
S : Type u_2
T : Type u_3
M : Type u_4
M₂ : Type u_5
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring S
inst✝¹⁶ : Semiring T
inst✝¹⁵ : Module R S
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R M₂
inst✝¹² : Module S M₂
inst✝¹¹ : IsScalarTower R S M₂
inst✝¹⁰ : TopologicalSpace S
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : ContinuousSMul S M₂
inst✝⁷ : TopologicalSpace M
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : ContinuousAdd M₂
inst✝³ : Module T M₂
inst✝² : ContinuousConstSMul T M₂
inst✝¹ : SMulCommClass R T M₂
inst✝ : SMulCommClass S T M₂
c : M →L[R] S
a : T
x : M₂
e : M
⊢ (AddHom.toFun
        { toFun := smulRight c, map_add' := (_ : ∀ (x y : M₂), smulRight c (x + y) = smulRight c x + smulRight c y) }
        (a • x))
      e =
    ((RingHom.id T) a •
        AddHom.toFun
          { toFun := smulRight c, map_add' := (_ : ∀ (x y : M₂), smulRight c (x + y) = smulRight c x + smulRight c y) }
          x)
      e

Next tactic:
dsimp
/-- Given `c : E →L[𝕜] 𝕜`, `c.smulRightₗ` is the linear map from `F` to `E →L[𝕜] F`
sending `f` to `fun e => c e • f`. See also `ContinuousLinearMap.smulRightL`. -/
def smulRightₗ (c : M →L[R] S) : M₂ →ₗ[T] M →L[R] M₂ where
  toFun := c.smulRight
  map_add' x y := by
    ext e
    apply smul_add
  map_smul' a x := by
    ext e
    dsimp
    

Proof state:
case h
R : Type u_1
S : Type u_2
T : Type u_3
M : Type u_4
M₂ : Type u_5
inst✝¹⁸ : Semiring R
inst✝¹⁷ : Semiring S
inst✝¹⁶ : Semiring T
inst✝¹⁵ : Module R S
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R M₂
inst✝¹² : Module S M₂
inst✝¹¹ : IsScalarTower R S M₂
inst✝¹⁰ : TopologicalSpace S
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : ContinuousSMul S M₂
inst✝⁷ : TopologicalSpace M
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
inst✝⁴ : ContinuousAdd M₂
inst✝³ : Module T M₂
inst✝² : ContinuousConstSMul T M₂
inst✝¹ : SMulCommClass R T M₂
inst✝ : SMulCommClass S T M₂
c : M →L[R] S
a : T
x : M₂
e : M
⊢ c e • a • x = a • c e • x

Next tactic:
apply smul_comm
instance continuousSemilinearEquivClass :
    ContinuousSemilinearEquivClass (M₁ ≃SL[σ₁₂] M₂) σ₁₂ M₁ M₂ where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' f g h₁ h₂ := by
    

Proof state:
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
f g : M₁ ≃SL[σ₁₂] M₂
h₁ : (fun f => f.toFun) f = (fun f => f.toFun) g
h₂ : (fun f => f.invFun) f = (fun f => f.invFun) g
⊢ f = g

Next tactic:
cases' f with f' _
instance continuousSemilinearEquivClass :
    ContinuousSemilinearEquivClass (M₁ ≃SL[σ₁₂] M₂) σ₁₂ M₁ M₂ where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' f g h₁ h₂ := by
    cases' f with f' _
    

Proof state:
case mk
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
g : M₁ ≃SL[σ₁₂] M₂
f' : M₁ ≃ₛₗ[σ₁₂] M₂
continuous_toFun✝ : Continuous f'.toFun
continuous_invFun✝ : Continuous f'.invFun
h₁ : (fun f => f.toFun) (mk f') = (fun f => f.toFun) g
h₂ : (fun f => f.invFun) (mk f') = (fun f => f.invFun) g
⊢ mk f' = g

Next tactic:
cases' g with g' _
instance continuousSemilinearEquivClass :
    ContinuousSemilinearEquivClass (M₁ ≃SL[σ₁₂] M₂) σ₁₂ M₁ M₂ where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' f g h₁ h₂ := by
    cases' f with f' _
    cases' g with g' _
    

Proof state:
case mk.mk
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
f' : M₁ ≃ₛₗ[σ₁₂] M₂
continuous_toFun✝¹ : Continuous f'.toFun
continuous_invFun✝¹ : Continuous f'.invFun
g' : M₁ ≃ₛₗ[σ₁₂] M₂
continuous_toFun✝ : Continuous g'.toFun
continuous_invFun✝ : Continuous g'.invFun
h₁ : (fun f => f.toFun) (mk f') = (fun f => f.toFun) (mk g')
h₂ : (fun f => f.invFun) (mk f') = (fun f => f.invFun) (mk g')
⊢ mk f' = mk g'

Next tactic:
rcases f' with ⟨⟨⟨_, _⟩, _⟩, _⟩
instance continuousSemilinearEquivClass :
    ContinuousSemilinearEquivClass (M₁ ≃SL[σ₁₂] M₂) σ₁₂ M₁ M₂ where
  coe f := f.toFun
  inv f := f.invFun
  coe_injective' f g h₁ h₂ := by
    cases' f with f' _
    cases' g with g' _
    rcases f' with ⟨⟨⟨_, _⟩, _⟩, _⟩
    

Proof state:
case mk.mk.mk.mk.mk
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
g' : M₁ ≃ₛₗ[σ₁₂] M₂
continuous_toFun✝¹ : Continuous g'.toFun
continuous_invFun✝¹ : Continuous g'.invFun
invFun✝ : M₂ → M₁
toFun✝ : M₁ → M₂
map_add'✝ : ∀ (x y : M₁), toFun✝ (x + y) = toFun✝ x + toFun✝ y
map_smul'✝ :
  ∀ (r : R₁) (x : M₁),
    AddHom.toFun { toFun := toFun✝, map_add' := map_add'✝ } (r • x) =
      σ₁₂ r • AddHom.toFun { toFun := toFun✝, map_add' := map_add'✝ } x
left_inv✝ :
  Function.LeftInverse invFun✝
    { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ }.toAddHom.toFun
right_inv✝ :
  Function.RightInverse invFun✝
    { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ }.toAddHom.toFun
continuous_toFun✝ :
  Continuous
    (↑{ toLinearMap := { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ },
            invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }).toAddHom.toFun
continuous_invFun✝ :
  Continuous
    { toLinearMap := { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ },
        invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }.invFun
h₁ :
  (fun f => f.toFun)
      (mk
        { toLinearMap := { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ },
          invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }) =
    (fun f => f.toFun) (mk g')
h₂ :
  (fun f => f.invFun)
      (mk
        { toLinearMap := { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ },
          invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ }) =
    (fun f => f.invFun) (mk g')
⊢ mk
      { toLinearMap := { toAddHom := { toFun := toFun✝, map_add' := map_add'✝ }, map_smul' := map_smul'✝ },
        invFun := invFun✝, left_inv := left_inv✝, right_inv := right_inv✝ } =
    mk g'

Next tactic:
rcases g' with ⟨⟨⟨_, _⟩, _⟩, _⟩
theorem toLinearEquiv_injective :
    Function.Injective (toLinearEquiv : (M₁ ≃SL[σ₁₂] M₂) → M₁ ≃ₛₗ[σ₁₂] M₂) := by
  

Proof state:
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
⊢ Function.Injective toLinearEquiv

Next tactic:
rintro ⟨e, _, _⟩ ⟨e', _, _⟩ rfl
theorem toLinearEquiv_injective :
    Function.Injective (toLinearEquiv : (M₁ ≃SL[σ₁₂] M₂) → M₁ ≃ₛₗ[σ₁₂] M₂) := by
  rintro ⟨e, _, _⟩ ⟨e', _, _⟩ rfl
  

Proof state:
case mk.mk
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁴ : Semiring R₁
inst✝²³ : Semiring R₂
inst✝²² : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²¹ : RingHomInvPair σ₁₂ σ₂₁
inst✝²⁰ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝¹⁹ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁸ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁷ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁶ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁴ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹³ : TopologicalSpace M₁
inst✝¹² : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹¹ : TopologicalSpace M'₁
inst✝¹⁰ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝⁹ : TopologicalSpace M₂
inst✝⁸ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁷ : TopologicalSpace M₃
inst✝⁶ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁵ : TopologicalSpace M₄
inst✝⁴ : AddCommMonoid M₄
inst✝³ : Module R₁ M₁
inst✝² : Module R₁ M'₁
inst✝¹ : Module R₂ M₂
inst✝ : Module R₃ M₃
e : M₁ ≃ₛₗ[σ₁₂] M₂
continuous_toFun✝¹ : Continuous e.toFun
continuous_invFun✝¹ : Continuous e.invFun
continuous_toFun✝ : Continuous (↑(mk e).toLinearEquiv).toAddHom.toFun
continuous_invFun✝ : Continuous (mk e).toLinearEquiv.invFun
⊢ mk e = mk (mk e).toLinearEquiv

Next tactic:
rfl
/-- An extensionality lemma for `R ≃L[R] M`. -/
theorem ext₁ [TopologicalSpace R₁] {f g : R₁ ≃L[R₁] M₁} (h : f 1 = g 1) : f = g :=
  ext <| funext fun x => mul_one x ▸ by 

Proof state:
R₁ : Type u_1
R₂ : Type u_2
R₃ : Type u_3
inst✝²⁵ : Semiring R₁
inst✝²⁴ : Semiring R₂
inst✝²³ : Semiring R₃
σ₁₂ : R₁ →+* R₂
σ₂₁ : R₂ →+* R₁
inst✝²² : RingHomInvPair σ₁₂ σ₂₁
inst✝²¹ : RingHomInvPair σ₂₁ σ₁₂
σ₂₃ : R₂ →+* R₃
σ₃₂ : R₃ →+* R₂
inst✝²⁰ : RingHomInvPair σ₂₃ σ₃₂
inst✝¹⁹ : RingHomInvPair σ₃₂ σ₂₃
σ₁₃ : R₁ →+* R₃
σ₃₁ : R₃ →+* R₁
inst✝¹⁸ : RingHomInvPair σ₁₃ σ₃₁
inst✝¹⁷ : RingHomInvPair σ₃₁ σ₁₃
inst✝¹⁶ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝¹⁵ : RingHomCompTriple σ₃₂ σ₂₁ σ₃₁
M₁ : Type u_4
inst✝¹⁴ : TopologicalSpace M₁
inst✝¹³ : AddCommMonoid M₁
M'₁ : Type u_5
inst✝¹² : TopologicalSpace M'₁
inst✝¹¹ : AddCommMonoid M'₁
M₂ : Type u_6
inst✝¹⁰ : TopologicalSpace M₂
inst✝⁹ : AddCommMonoid M₂
M₃ : Type u_7
inst✝⁸ : TopologicalSpace M₃
inst✝⁷ : AddCommMonoid M₃
M₄ : Type u_8
inst✝⁶ : TopologicalSpace M₄
inst✝⁵ : AddCommMonoid M₄
inst✝⁴ : Module R₁ M₁
inst✝³ : Module R₁ M'₁
inst✝² : Module R₂ M₂
inst✝¹ : Module R₃ M₃
inst✝ : TopologicalSpace R₁
f g : R₁ ≃L[R₁] M₁
h : f 1 = g 1
x : R₁
⊢ f (x * 1) = g (x * 1)

Next tactic:
rw [← smul_eq_mul, map_smul, h, map_smul]