l3lab/ntp-mathlib huggingface dataset:
@[simp]
theorem add_comp [ContinuousAdd M₃] (g₁ g₂ : M₂ →SL[σ₂₃] M₃) (f : M₁ →SL[σ₁₂] M₂) :
    (g₁ + g₂).comp f = g₁.comp f + g₂.comp f := 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₃
σ₁₃ : R₁ →+* R₃
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✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝ : ContinuousAdd M₃
g₁ g₂ : M₂ →SL[σ₂₃] M₃
f : M₁ →SL[σ₁₂] M₂
⊢ comp (g₁ + g₂) f = comp g₁ f + comp g₂ f

Next tactic:
ext
@[simp]
theorem add_comp [ContinuousAdd M₃] (g₁ g₂ : M₂ →SL[σ₂₃] M₃) (f : M₁ →SL[σ₁₂] M₂) :
    (g₁ + g₂).comp f = g₁.comp f + g₂.comp f := by
  ext
  

Proof state:
case h
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₃
σ₁₃ : R₁ →+* R₃
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✝¹ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
inst✝ : ContinuousAdd M₃
g₁ g₂ : M₂ →SL[σ₂₃] M₃
f : M₁ →SL[σ₁₂] M₂
x✝ : M₁
⊢ (comp (g₁ + g₂) f) x✝ = (comp g₁ f + comp g₂ f) x✝

Next tactic:
simp
theorem coprod_inl_inr [ContinuousAdd M₁] [ContinuousAdd M'₁] :
    (ContinuousLinearMap.inl R₁ M₁ M'₁).coprod (ContinuousLinearMap.inr R₁ M₁ M'₁) =
      ContinuousLinearMap.id R₁ (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₃
σ₁₃ : R₁ →+* R₃
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✝² : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝¹ : ContinuousAdd M₁
inst✝ : ContinuousAdd M'₁
⊢ coprod (inl R₁ M₁ M'₁) (inr R₁ M₁ M'₁) = id R₁ (M₁ × M'₁)

Next tactic:
apply coe_injective
theorem coprod_inl_inr [ContinuousAdd M₁] [ContinuousAdd M'₁] :
    (ContinuousLinearMap.inl R₁ M₁ M'₁).coprod (ContinuousLinearMap.inr R₁ M₁ M'₁) =
      ContinuousLinearMap.id R₁ (M₁ × M'₁) := by
  apply coe_injective; 

Proof state:
case a
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₃
σ₁₃ : R₁ →+* R₃
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✝² : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝¹ : ContinuousAdd M₁
inst✝ : ContinuousAdd M'₁
⊢ ↑(coprod (inl R₁ M₁ M'₁) (inr R₁ M₁ M'₁)) = ↑(id R₁ (M₁ × M'₁))

Next tactic:
apply LinearMap.coprod_inl_inr
@[simp]
theorem smulRight_one_one (c : R₁ →L[R₁] M₂) : smulRight (1 : R₁ →L[R₁] R₁) (c 1) = c := 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₃
σ₁₃ : R₁ →+* R₃
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✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝² : Module R₁ M₂
inst✝¹ : TopologicalSpace R₁
inst✝ : ContinuousSMul R₁ M₂
c : R₁ →L[R₁] M₂
⊢ smulRight 1 (c 1) = c

Next tactic:
ext
@[simp]
theorem smulRight_one_one (c : R₁ →L[R₁] M₂) : smulRight (1 : R₁ →L[R₁] R₁) (c 1) = c := by
  ext
  

Proof state:
case h
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₃
σ₁₃ : R₁ →+* R₃
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✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝² : Module R₁ M₂
inst✝¹ : TopologicalSpace R₁
inst✝ : ContinuousSMul R₁ M₂
c : R₁ →L[R₁] M₂
⊢ (smulRight 1 (c 1)) 1 = c 1

Next tactic:
simp [← ContinuousLinearMap.map_smul_of_tower]
@[simp]
theorem smulRight_one_eq_iff {f f' : M₂} :
    smulRight (1 : R₁ →L[R₁] R₁) f = smulRight (1 : R₁ →L[R₁] R₁) f' ↔ f = f' := 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₃
σ₁₃ : R₁ →+* R₃
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✝³ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝² : Module R₁ M₂
inst✝¹ : TopologicalSpace R₁
inst✝ : ContinuousSMul R₁ M₂
f f' : M₂
⊢ smulRight 1 f = smulRight 1 f' ↔ f = f'

Next tactic:
simp only [ext_ring_iff, smulRight_apply, one_apply, one_smul]
theorem smulRight_comp [ContinuousMul R₁] {x : M₂} {c : R₁} :
    (smulRight (1 : R₁ →L[R₁] R₁) x).comp (smulRight (1 : R₁ →L[R₁] R₁) c) =
      smulRight (1 : R₁ →L[R₁] R₁) (c • 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₃
σ₁₃ : R₁ →+* R₃
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✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝³ : Module R₁ M₂
inst✝² : TopologicalSpace R₁
inst✝¹ : ContinuousSMul R₁ M₂
inst✝ : ContinuousMul R₁
x : M₂
c : R₁
⊢ comp (smulRight 1 x) (smulRight 1 c) = smulRight 1 (c • x)

Next tactic:
ext
theorem smulRight_comp [ContinuousMul R₁] {x : M₂} {c : R₁} :
    (smulRight (1 : R₁ →L[R₁] R₁) x).comp (smulRight (1 : R₁ →L[R₁] R₁) c) =
      smulRight (1 : R₁ →L[R₁] R₁) (c • x) := by
  ext
  

Proof state:
case h
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₃
σ₁₃ : R₁ →+* R₃
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✝⁴ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝³ : Module R₁ M₂
inst✝² : TopologicalSpace R₁
inst✝¹ : ContinuousSMul R₁ M₂
inst✝ : ContinuousMul R₁
x : M₂
c : R₁
⊢ (comp (smulRight 1 x) (smulRight 1 c)) 1 = (smulRight 1 (c • x)) 1

Next tactic:
simp [mul_smul]
theorem toSpanSingleton_add [ContinuousAdd M₁] (x y : M₁) :
    toSpanSingleton R₁ (x + y) = toSpanSingleton R₁ x + toSpanSingleton R₁ y := 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₃
σ₁₃ : R₁ →+* R₃
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✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁴ : Module R₁ M₂
inst✝³ : TopologicalSpace R₁
inst✝² : ContinuousSMul R₁ M₂
inst✝¹ : ContinuousSMul R₁ M₁
inst✝ : ContinuousAdd M₁
x y : M₁
⊢ toSpanSingleton R₁ (x + y) = toSpanSingleton R₁ x + toSpanSingleton R₁ y

Next tactic:
ext1
theorem toSpanSingleton_add [ContinuousAdd M₁] (x y : M₁) :
    toSpanSingleton R₁ (x + y) = toSpanSingleton R₁ x + toSpanSingleton R₁ y := by
  ext1; 

Proof state:
case h
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₃
σ₁₃ : R₁ →+* R₃
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✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁴ : Module R₁ M₂
inst✝³ : TopologicalSpace R₁
inst✝² : ContinuousSMul R₁ M₂
inst✝¹ : ContinuousSMul R₁ M₁
inst✝ : ContinuousAdd M₁
x y : M₁
⊢ (toSpanSingleton R₁ (x + y)) 1 = (toSpanSingleton R₁ x + toSpanSingleton R₁ y) 1

Next tactic:
simp [toSpanSingleton_apply]
theorem toSpanSingleton_smul' {α} [Monoid α] [DistribMulAction α M₁] [ContinuousConstSMul α M₁]
    [SMulCommClass R₁ α M₁] (c : α) (x : M₁) :
    toSpanSingleton R₁ (c • x) = c • toSpanSingleton R₁ 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₃
σ₁₃ : R₁ →+* R₃
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✝⁸ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁷ : Module R₁ M₂
inst✝⁶ : TopologicalSpace R₁
inst✝⁵ : ContinuousSMul R₁ M₂
inst✝⁴ : ContinuousSMul R₁ M₁
α : Type u_10
inst✝³ : Monoid α
inst✝² : DistribMulAction α M₁
inst✝¹ : ContinuousConstSMul α M₁
inst✝ : SMulCommClass R₁ α M₁
c : α
x : M₁
⊢ toSpanSingleton R₁ (c • x) = c • toSpanSingleton R₁ x

Next tactic:
ext1
theorem toSpanSingleton_smul' {α} [Monoid α] [DistribMulAction α M₁] [ContinuousConstSMul α M₁]
    [SMulCommClass R₁ α M₁] (c : α) (x : M₁) :
    toSpanSingleton R₁ (c • x) = c • toSpanSingleton R₁ x := by
  ext1; 

Proof state:
case h
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₃
σ₁₃ : R₁ →+* R₃
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✝⁸ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
F : Type u_9
inst✝⁷ : Module R₁ M₂
inst✝⁶ : TopologicalSpace R₁
inst✝⁵ : ContinuousSMul R₁ M₂
inst✝⁴ : ContinuousSMul R₁ M₁
α : Type u_10
inst✝³ : Monoid α
inst✝² : DistribMulAction α M₁
inst✝¹ : ContinuousConstSMul α M₁
inst✝ : SMulCommClass R₁ α M₁
c : α
x : M₁
⊢ (toSpanSingleton R₁ (c • x)) 1 = (c • toSpanSingleton R₁ x) 1

Next tactic:
rw [toSpanSingleton_apply, smul_apply, toSpanSingleton_apply, smul_comm]
theorem pi_eq_zero (f : ∀ i, M →L[R] φ i) : pi f = 0 ↔ ∀ i, f i = 0 := by
  

Proof state:
R : Type u_1
inst✝⁹ : Semiring R
M : Type u_2
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
M₂ : Type u_3
inst✝⁵ : TopologicalSpace M₂
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝² : (i : ι) → TopologicalSpace (φ i)
inst✝¹ : (i : ι) → AddCommMonoid (φ i)
inst✝ : (i : ι) → Module R (φ i)
f : (i : ι) → M →L[R] φ i
⊢ pi f = 0 ↔ ∀ (i : ι), f i = 0

Next tactic:
simp only [ext_iff, pi_apply, Function.funext_iff]
theorem pi_eq_zero (f : ∀ i, M →L[R] φ i) : pi f = 0 ↔ ∀ i, f i = 0 := by
  simp only [ext_iff, pi_apply, Function.funext_iff]
  

Proof state:
R : Type u_1
inst✝⁹ : Semiring R
M : Type u_2
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
M₂ : Type u_3
inst✝⁵ : TopologicalSpace M₂
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝² : (i : ι) → TopologicalSpace (φ i)
inst✝¹ : (i : ι) → AddCommMonoid (φ i)
inst✝ : (i : ι) → Module R (φ i)
f : (i : ι) → M →L[R] φ i
⊢ (∀ (x : M) (a : ι), (f a) x = 0 x a) ↔ ∀ (i : ι) (x : M), (f i) x = 0 x

Next tactic:
exact forall_swap
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ↑I
⊢ Continuous fun a => AddHom.toFun (↑(LinearMap.iInfKerProjEquiv R φ hd hu)).toAddHom a i

Next tactic:
have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
      

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ↑I
this : Continuous Subtype.val
⊢ Continuous fun a => AddHom.toFun (↑(LinearMap.iInfKerProjEquiv R φ hd hu)).toAddHom a i

Next tactic:
have := Continuous.comp (continuous_apply (π := φ) i) this
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
      have := Continuous.comp (continuous_apply (π := φ) i) this
      

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ↑I
this✝ : Continuous Subtype.val
this : Continuous ((fun p => p ↑i) ∘ Subtype.val)
⊢ Continuous fun a => AddHom.toFun (↑(LinearMap.iInfKerProjEquiv R φ hd hu)).toAddHom a i

Next tactic:
exact this
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
      have := Continuous.comp (continuous_apply (π := φ) i) this
      exact this
  continuous_invFun :=
    Continuous.subtype_mk
      (continuous_pi fun i => by
        -- Porting note: Was `dsimp`.
        

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ι
⊢ Continuous fun a => (LinearMap.pi fun i => if h : i ∈ I then LinearMap.proj { val := i, property := h } else 0) a i

Next tactic:
change
          Continuous (⇑(if h : i ∈ I then LinearMap.proj (R := R) (ι := ↥I)
            (φ := fun i : ↥I => φ i) ⟨i, h⟩ else
            (0 : ((i : I) → φ i) →ₗ[R] φ i)))
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
      have := Continuous.comp (continuous_apply (π := φ) i) this
      exact this
  continuous_invFun :=
    Continuous.subtype_mk
      (continuous_pi fun i => by
        -- Porting note: Was `dsimp`.
        change
          Continuous (⇑(if h : i ∈ I then LinearMap.proj (R := R) (ι := ↥I)
            (φ := fun i : ↥I => φ i) ⟨i, h⟩ else
            (0 : ((i : I) → φ i) →ₗ[R] φ i)))
        

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ι
⊢ Continuous ⇑(if h : i ∈ I then LinearMap.proj { val := i, property := h } else 0)

Next tactic:
split_ifs <;> [apply continuous_apply; exact continuous_zero]
/-- If `I` and `J` are complementary index sets, the product of the kernels of the `J`th projections
of `φ` is linearly equivalent to the product over `I`. -/
def iInfKerProjEquiv {I J : Set ι} [DecidablePred fun i => i ∈ I] (hd : Disjoint I J)
    (hu : Set.univ ⊆ I ∪ J) :
    (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i)) ≃L[R] ∀ i : I, φ i
    where
  toLinearEquiv := LinearMap.iInfKerProjEquiv R φ hd hu
  continuous_toFun :=
    continuous_pi fun i => by
      have :=
        @continuous_subtype_val _ _ fun x =>
          x ∈ (⨅ i ∈ J, ker (proj i : (∀ i, φ i) →L[R] φ i) : Submodule R (∀ i, φ i))
      have := Continuous.comp (continuous_apply (π := φ) i) this
      exact this
  continuous_invFun :=
    Continuous.subtype_mk
      (continuous_pi fun i => by
        -- Porting note: Was `dsimp`.
        change
          Continuous (⇑(if h : i ∈ I then LinearMap.proj (R := R) (ι := ↥I)
            (φ := fun i : ↥I => φ i) ⟨i, h⟩ else
            (0 : ((i : I) → φ i) →ₗ[R] φ i)))
        

Proof state:
R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : TopologicalSpace M
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
M₂ : Type u_3
inst✝⁶ : TopologicalSpace M₂
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
ι : Type u_4
φ : ι → Type u_5
inst✝³ : (i : ι) → TopologicalSpace (φ i)
inst✝² : (i : ι) → AddCommMonoid (φ i)
inst✝¹ : (i : ι) → Module R (φ i)
I J : Set ι
inst✝ : DecidablePred fun i => i ∈ I
hd : Disjoint I J
hu : Set.univ ⊆ I ∪ J
i : ι
⊢ Continuous ⇑(if h : i ∈ I then LinearMap.proj { val := i, property := h } else 0)

Next tactic:
split_ifs