l3lab/ntp-mathlib huggingface dataset:
/-- If we fix a background basis `e`, then for any other basis `v`, we can characterise the
coordinates provided by `v` in terms of determinants relative to `e`. -/
theorem Basis.det_smul_mk_coord_eq_det_update {v : ι → M} (hli : LinearIndependent R v)
    (hsp : ⊤ ≤ span R (range v)) (i : ι) :
    e.det v • (Basis.mk hli hsp).coord i = e.det.toMultilinearMap.toLinearMap v i := by
  apply (Basis.mk hli hsp).ext
  intro k
  rcases eq_or_ne k i with (rfl | hik) <;>
    simp only [Algebra.id.smul_eq_mul, Basis.coe_mk, LinearMap.smul_apply, LinearMap.coe_mk,
      MultilinearMap.toLinearMap_apply]
  · rw [Basis.mk_coord_apply_eq, mul_one, update_eq_self]
    congr
  · rw [Basis.mk_coord_apply_ne hik, mul_zero, eq_comm]
    

Proof state:
case inr
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
v : ι → M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i k : ι
hik : k ≠ i
⊢ ↑(det e) (update v i (v k)) = 0

Next tactic:
exact e.det.map_eq_zero_of_eq _ (by simp [hik, Function.update_apply]) hik
/-- If we fix a background basis `e`, then for any other basis `v`, we can characterise the
coordinates provided by `v` in terms of determinants relative to `e`. -/
theorem Basis.det_smul_mk_coord_eq_det_update {v : ι → M} (hli : LinearIndependent R v)
    (hsp : ⊤ ≤ span R (range v)) (i : ι) :
    e.det v • (Basis.mk hli hsp).coord i = e.det.toMultilinearMap.toLinearMap v i := by
  apply (Basis.mk hli hsp).ext
  intro k
  rcases eq_or_ne k i with (rfl | hik) <;>
    simp only [Algebra.id.smul_eq_mul, Basis.coe_mk, LinearMap.smul_apply, LinearMap.coe_mk,
      MultilinearMap.toLinearMap_apply]
  · rw [Basis.mk_coord_apply_eq, mul_one, update_eq_self]
    congr
  · rw [Basis.mk_coord_apply_ne hik, mul_zero, eq_comm]
    exact e.det.map_eq_zero_of_eq _ (by 

Proof state:
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
v : ι → M
hli : LinearIndependent R v
hsp : ⊤ ≤ span R (Set.range v)
i k : ι
hik : k ≠ i
⊢ update v i (v k) k = update v i (v k) i

Next tactic:
simp [hik, Function.update_apply]
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  

Proof state:
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
⊢ det (unitsSMul e w) = ↑(∏ i : ι, w i)⁻¹ • det e

Next tactic:
ext f
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  ext f
  

Proof state:
case H
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
f : ι → M
⊢ (det (unitsSMul e w)) f = (↑(∏ i : ι, w i)⁻¹ • det e) f

Next tactic:
change
    (Matrix.det fun i j => (e.unitsSMul w).repr (f j) i) =
      (↑(∏ i, w i)⁻¹ : R) • Matrix.det fun i j => e.repr (f j) i
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  ext f
  change
    (Matrix.det fun i j => (e.unitsSMul w).repr (f j) i) =
      (↑(∏ i, w i)⁻¹ : R) • Matrix.det fun i j => e.repr (f j) i
  

Proof state:
case H
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
f : ι → M
⊢ (Matrix.det fun i j => ((unitsSMul e w).repr (f j)) i) = ↑(∏ i : ι, w i)⁻¹ • Matrix.det fun i j => (e.repr (f j)) i

Next tactic:
simp only [e.repr_unitsSMul]
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  ext f
  change
    (Matrix.det fun i j => (e.unitsSMul w).repr (f j) i) =
      (↑(∏ i, w i)⁻¹ : R) • Matrix.det fun i j => e.repr (f j) i
  simp only [e.repr_unitsSMul]
  

Proof state:
case H
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
f : ι → M
⊢ (Matrix.det fun i j => (w i)⁻¹ • (e.repr (f j)) i) = ↑(∏ i : ι, w i)⁻¹ • Matrix.det fun i j => (e.repr (f j)) i

Next tactic:
convert Matrix.det_mul_column (fun i => (↑(w i)⁻¹ : R)) fun i j => e.repr (f j) i
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  ext f
  change
    (Matrix.det fun i j => (e.unitsSMul w).repr (f j) i) =
      (↑(∏ i, w i)⁻¹ : R) • Matrix.det fun i j => e.repr (f j) i
  simp only [e.repr_unitsSMul]
  convert Matrix.det_mul_column (fun i => (↑(w i)⁻¹ : R)) fun i j => e.repr (f j) i
  

Proof state:
case h.e'_3.h.e'_1
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
f : ι → M
⊢ ↑(∏ i : ι, w i)⁻¹ = ∏ i : ι, ↑(w i)⁻¹

Next tactic:
simp only [← Finset.prod_inv_distrib]
/-- If a basis is multiplied columnwise by scalars `w : ι → Rˣ`, then the determinant with respect
to this basis is multiplied by the product of the inverse of these scalars. -/
theorem Basis.det_unitsSMul (e : Basis ι R M) (w : ι → Rˣ) :
    (e.unitsSMul w).det = (↑(∏ i, w i)⁻¹ : R) • e.det := by
  ext f
  change
    (Matrix.det fun i j => (e.unitsSMul w).repr (f j) i) =
      (↑(∏ i, w i)⁻¹ : R) • Matrix.det fun i j => e.repr (f j) i
  simp only [e.repr_unitsSMul]
  convert Matrix.det_mul_column (fun i => (↑(w i)⁻¹ : R)) fun i j => e.repr (f j) i
  simp only [← Finset.prod_inv_distrib] -- Porting note: was `simp [← Finset.prod_inv_distrib]`
  

Proof state:
case h.e'_3.h.e'_1
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e✝ : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
e : Basis ι R M
w : ι → Rˣ
f : ι → M
⊢ ↑(∏ x : ι, (w x)⁻¹) = ∏ i : ι, ↑(w i)⁻¹

Next tactic:
norm_cast
/-- The determinant of a basis constructed by `unitsSMul` is the product of the given units. -/
@[simp]
theorem Basis.det_unitsSMul_self (w : ι → Rˣ) : e.det (e.unitsSMul w) = ∏ i, (w i : R) := by
  

Proof state:
R : Type u_1
inst✝⁸ : CommRing R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
M' : Type u_3
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M'
ι : Type u_4
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
e : Basis ι R M
A : Type u_5
inst✝¹ : CommRing A
inst✝ : Module A M
w : ι → Rˣ
⊢ (det e) ⇑(unitsSMul e w) = ∏ i : ι, ↑(w i)

Next tactic:
simp [Basis.det_apply]
/-- The uniform structure associated with `ContinuousLinearMap.strongTopology`. We make sure
that this has nice definitional properties. -/
def strongUniformity [UniformSpace F] [UniformAddGroup F] (𝔖 : Set (Set E)) :
    UniformSpace (E →SL[σ] F) :=
  @UniformSpace.replaceTopology _ (strongTopology σ F 𝔖)
    ((UniformOnFun.uniformSpace E F 𝔖).comap (FunLike.coe : (E →SL[σ] F) → (E →ᵤ[𝔖] F)))
    (by 

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : UniformSpace F
inst✝ : UniformAddGroup F
𝔖 : Set (Set E)
⊢ strongTopology σ F 𝔖 = UniformSpace.toTopologicalSpace

Next tactic:
rw [strongTopology, UniformAddGroup.toUniformSpace_eq]
/-- The uniform structure associated with `ContinuousLinearMap.strongTopology`. We make sure
that this has nice definitional properties. -/
def strongUniformity [UniformSpace F] [UniformAddGroup F] (𝔖 : Set (Set E)) :
    UniformSpace (E →SL[σ] F) :=
  @UniformSpace.replaceTopology _ (strongTopology σ F 𝔖)
    ((UniformOnFun.uniformSpace E F 𝔖).comap (FunLike.coe : (E →SL[σ] F) → (E →ᵤ[𝔖] F)))
    (by rw [strongTopology, UniformAddGroup.toUniformSpace_eq]; 

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : UniformSpace F
inst✝ : UniformAddGroup F
𝔖 : Set (Set E)
⊢ TopologicalSpace.induced FunLike.coe (UniformOnFun.topologicalSpace E F 𝔖) = UniformSpace.toTopologicalSpace

Next tactic:
rfl
theorem strongUniformity.uniformAddGroup [UniformSpace F] [UniformAddGroup F] (𝔖 : Set (Set E)) :
    @UniformAddGroup (E →SL[σ] F) (strongUniformity σ F 𝔖) _ := by
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : UniformSpace F
inst✝ : UniformAddGroup F
𝔖 : Set (Set E)
⊢ UniformAddGroup (E →SL[σ] F)

Next tactic:
letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
theorem strongUniformity.uniformAddGroup [UniformSpace F] [UniformAddGroup F] (𝔖 : Set (Set E)) :
    @UniformAddGroup (E →SL[σ] F) (strongUniformity σ F 𝔖) _ := by
  letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : UniformSpace F
inst✝ : UniformAddGroup F
𝔖 : Set (Set E)
this : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
⊢ UniformAddGroup (E →SL[σ] F)

Next tactic:
let φ : (E →SL[σ] F) →+ E →ᵤ[𝔖] F :=
    ⟨⟨(FunLike.coe : (E →SL[σ] F) → E →ᵤ[𝔖] F), rfl⟩, fun _ _ => rfl⟩
theorem strongUniformity.uniformAddGroup [UniformSpace F] [UniformAddGroup F] (𝔖 : Set (Set E)) :
    @UniformAddGroup (E →SL[σ] F) (strongUniformity σ F 𝔖) _ := by
  letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
  let φ : (E →SL[σ] F) →+ E →ᵤ[𝔖] F :=
    ⟨⟨(FunLike.coe : (E →SL[σ] F) → E →ᵤ[𝔖] F), rfl⟩, fun _ _ => rfl⟩
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : UniformSpace F
inst✝ : UniformAddGroup F
𝔖 : Set (Set E)
this : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
φ : (E →SL[σ] F) →+ E →ᵤ[𝔖] F :=
  { toZeroHom := { toFun := FunLike.coe, map_zero' := (_ : ⇑0 = ⇑0) },
    map_add' :=
      (_ :
        ∀ (x x_1 : E →SL[σ] F),
          ZeroHom.toFun { toFun := FunLike.coe, map_zero' := (_ : ⇑0 = ⇑0) } (x + x_1) =
            ZeroHom.toFun { toFun := FunLike.coe, map_zero' := (_ : ⇑0 = ⇑0) } (x + x_1)) }
⊢ UniformAddGroup (E →SL[σ] F)

Next tactic:
exact (strongUniformity.uniformEmbedding_coeFn _ _ _).uniformAddGroup φ
theorem strongTopology.topologicalAddGroup [TopologicalSpace F] [TopologicalAddGroup F]
    (𝔖 : Set (Set E)) : @TopologicalAddGroup (E →SL[σ] F) (strongTopology σ F 𝔖) _ := by
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : TopologicalSpace F
inst✝ : TopologicalAddGroup F
𝔖 : Set (Set E)
⊢ TopologicalAddGroup (E →SL[σ] F)

Next tactic:
letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
theorem strongTopology.topologicalAddGroup [TopologicalSpace F] [TopologicalAddGroup F]
    (𝔖 : Set (Set E)) : @TopologicalAddGroup (E →SL[σ] F) (strongTopology σ F 𝔖) _ := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : TopologicalSpace F
inst✝ : TopologicalAddGroup F
𝔖 : Set (Set E)
this : UniformSpace F := TopologicalAddGroup.toUniformSpace F
⊢ TopologicalAddGroup (E →SL[σ] F)

Next tactic:
haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
theorem strongTopology.topologicalAddGroup [TopologicalSpace F] [TopologicalAddGroup F]
    (𝔖 : Set (Set E)) : @TopologicalAddGroup (E →SL[σ] F) (strongTopology σ F 𝔖) _ := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : TopologicalSpace F
inst✝ : TopologicalAddGroup F
𝔖 : Set (Set E)
this✝ : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this : UniformAddGroup F
⊢ TopologicalAddGroup (E →SL[σ] F)

Next tactic:
letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
theorem strongTopology.topologicalAddGroup [TopologicalSpace F] [TopologicalAddGroup F]
    (𝔖 : Set (Set E)) : @TopologicalAddGroup (E →SL[σ] F) (strongTopology σ F 𝔖) _ := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : TopologicalSpace F
inst✝ : TopologicalAddGroup F
𝔖 : Set (Set E)
this✝¹ : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this✝ : UniformAddGroup F
this : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
⊢ TopologicalAddGroup (E →SL[σ] F)

Next tactic:
haveI : UniformAddGroup (E →SL[σ] F) := strongUniformity.uniformAddGroup σ F 𝔖
theorem strongTopology.topologicalAddGroup [TopologicalSpace F] [TopologicalAddGroup F]
    (𝔖 : Set (Set E)) : @TopologicalAddGroup (E →SL[σ] F) (strongTopology σ F 𝔖) _ := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  letI : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
  haveI : UniformAddGroup (E →SL[σ] F) := strongUniformity.uniformAddGroup σ F 𝔖
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹³ : NormedField 𝕜₁
inst✝¹² : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹¹ : AddCommGroup E
inst✝¹⁰ : Module 𝕜₁ E
inst✝⁹ : AddCommGroup E'
inst✝⁸ : Module ℝ E'
inst✝⁷ : AddCommGroup F
inst✝⁶ : Module 𝕜₂ F
inst✝⁵ : AddCommGroup F'
inst✝⁴ : Module ℝ F'
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace E'
inst✝¹ : TopologicalSpace F
inst✝ : TopologicalAddGroup F
𝔖 : Set (Set E)
this✝² : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this✝¹ : UniformAddGroup F
this✝ : UniformSpace (E →SL[σ] F) := strongUniformity σ F 𝔖
this : UniformAddGroup (E →SL[σ] F)
⊢ TopologicalAddGroup (E →SL[σ] F)

Next tactic:
infer_instance
theorem strongTopology.t2Space [TopologicalSpace F] [TopologicalAddGroup F] [T2Space F]
    (𝔖 : Set (Set E)) (h𝔖 : ⋃₀ 𝔖 = Set.univ) : @T2Space (E →SL[σ] F) (strongTopology σ F 𝔖) := by
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹⁴ : NormedField 𝕜₁
inst✝¹³ : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹² : AddCommGroup E
inst✝¹¹ : Module 𝕜₁ E
inst✝¹⁰ : AddCommGroup E'
inst✝⁹ : Module ℝ E'
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜₂ F
inst✝⁶ : AddCommGroup F'
inst✝⁵ : Module ℝ F'
inst✝⁴ : TopologicalSpace E
inst✝³ : TopologicalSpace E'
inst✝² : TopologicalSpace F
inst✝¹ : TopologicalAddGroup F
inst✝ : T2Space F
𝔖 : Set (Set E)
h𝔖 : ⋃₀ 𝔖 = Set.univ
⊢ T2Space (E →SL[σ] F)

Next tactic:
letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
theorem strongTopology.t2Space [TopologicalSpace F] [TopologicalAddGroup F] [T2Space F]
    (𝔖 : Set (Set E)) (h𝔖 : ⋃₀ 𝔖 = Set.univ) : @T2Space (E →SL[σ] F) (strongTopology σ F 𝔖) := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹⁴ : NormedField 𝕜₁
inst✝¹³ : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹² : AddCommGroup E
inst✝¹¹ : Module 𝕜₁ E
inst✝¹⁰ : AddCommGroup E'
inst✝⁹ : Module ℝ E'
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜₂ F
inst✝⁶ : AddCommGroup F'
inst✝⁵ : Module ℝ F'
inst✝⁴ : TopologicalSpace E
inst✝³ : TopologicalSpace E'
inst✝² : TopologicalSpace F
inst✝¹ : TopologicalAddGroup F
inst✝ : T2Space F
𝔖 : Set (Set E)
h𝔖 : ⋃₀ 𝔖 = Set.univ
this : UniformSpace F := TopologicalAddGroup.toUniformSpace F
⊢ T2Space (E →SL[σ] F)

Next tactic:
haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
theorem strongTopology.t2Space [TopologicalSpace F] [TopologicalAddGroup F] [T2Space F]
    (𝔖 : Set (Set E)) (h𝔖 : ⋃₀ 𝔖 = Set.univ) : @T2Space (E →SL[σ] F) (strongTopology σ F 𝔖) := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹⁴ : NormedField 𝕜₁
inst✝¹³ : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹² : AddCommGroup E
inst✝¹¹ : Module 𝕜₁ E
inst✝¹⁰ : AddCommGroup E'
inst✝⁹ : Module ℝ E'
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜₂ F
inst✝⁶ : AddCommGroup F'
inst✝⁵ : Module ℝ F'
inst✝⁴ : TopologicalSpace E
inst✝³ : TopologicalSpace E'
inst✝² : TopologicalSpace F
inst✝¹ : TopologicalAddGroup F
inst✝ : T2Space F
𝔖 : Set (Set E)
h𝔖 : ⋃₀ 𝔖 = Set.univ
this✝ : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this : UniformAddGroup F
⊢ T2Space (E →SL[σ] F)

Next tactic:
letI : TopologicalSpace (E →SL[σ] F) := strongTopology σ F 𝔖
theorem strongTopology.t2Space [TopologicalSpace F] [TopologicalAddGroup F] [T2Space F]
    (𝔖 : Set (Set E)) (h𝔖 : ⋃₀ 𝔖 = Set.univ) : @T2Space (E →SL[σ] F) (strongTopology σ F 𝔖) := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  letI : TopologicalSpace (E →SL[σ] F) := strongTopology σ F 𝔖
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹⁴ : NormedField 𝕜₁
inst✝¹³ : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹² : AddCommGroup E
inst✝¹¹ : Module 𝕜₁ E
inst✝¹⁰ : AddCommGroup E'
inst✝⁹ : Module ℝ E'
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜₂ F
inst✝⁶ : AddCommGroup F'
inst✝⁵ : Module ℝ F'
inst✝⁴ : TopologicalSpace E
inst✝³ : TopologicalSpace E'
inst✝² : TopologicalSpace F
inst✝¹ : TopologicalAddGroup F
inst✝ : T2Space F
𝔖 : Set (Set E)
h𝔖 : ⋃₀ 𝔖 = Set.univ
this✝¹ : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this✝ : UniformAddGroup F
this : TopologicalSpace (E →SL[σ] F) := strongTopology σ F 𝔖
⊢ T2Space (E →SL[σ] F)

Next tactic:
haveI : T2Space (E →ᵤ[𝔖] F) := UniformOnFun.t2Space_of_covering h𝔖
theorem strongTopology.t2Space [TopologicalSpace F] [TopologicalAddGroup F] [T2Space F]
    (𝔖 : Set (Set E)) (h𝔖 : ⋃₀ 𝔖 = Set.univ) : @T2Space (E →SL[σ] F) (strongTopology σ F 𝔖) := by
  letI : UniformSpace F := TopologicalAddGroup.toUniformSpace F
  haveI : UniformAddGroup F := comm_topologicalAddGroup_is_uniform
  letI : TopologicalSpace (E →SL[σ] F) := strongTopology σ F 𝔖
  haveI : T2Space (E →ᵤ[𝔖] F) := UniformOnFun.t2Space_of_covering h𝔖
  

Proof state:
𝕜₁ : Type u_1
𝕜₂ : Type u_2
inst✝¹⁴ : NormedField 𝕜₁
inst✝¹³ : NormedField 𝕜₂
σ : 𝕜₁ →+* 𝕜₂
E : Type u_3
E' : Type u_4
F : Type u_5
F' : Type u_6
inst✝¹² : AddCommGroup E
inst✝¹¹ : Module 𝕜₁ E
inst✝¹⁰ : AddCommGroup E'
inst✝⁹ : Module ℝ E'
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜₂ F
inst✝⁶ : AddCommGroup F'
inst✝⁵ : Module ℝ F'
inst✝⁴ : TopologicalSpace E
inst✝³ : TopologicalSpace E'
inst✝² : TopologicalSpace F
inst✝¹ : TopologicalAddGroup F
inst✝ : T2Space F
𝔖 : Set (Set E)
h𝔖 : ⋃₀ 𝔖 = Set.univ
this✝² : UniformSpace F := TopologicalAddGroup.toUniformSpace F
this✝¹ : UniformAddGroup F
this✝ : TopologicalSpace (E →SL[σ] F) := strongTopology σ F 𝔖
this : T2Space (E →ᵤ[𝔖] F)
⊢ T2Space (E →SL[σ] F)

Next tactic:
exact (strongTopology.embedding_coeFn σ F 𝔖).t2Space