Theorem: UniformSpace.Completion.continuous_inner
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: let inner' : E →+ E →+ 𝕜 :=
  { toFun := fun x => (innerₛₗ 𝕜 x).toAddMonoidHom
    map_zero' := by ext x; exact inner_zero_left _
    map_add' := fun x y => by ext z; exact inner_add_left _ _ _ }
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
⊢ Continuous (uncurry inner)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
⊢ Continuous (uncurry inner)

tactic: have : Continuous fun p : E × E => inner' p.1 p.2 := continuous_inner
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
⊢ Continuous (uncurry inner)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (uncurry inner)

tactic: rw [Completion.toInner, inner, uncurry_curry _]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (uncurry inner)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (⋯.extend (uncurry inner))

tactic: change
  Continuous
    (((denseInducing_toCompl E).prod (denseInducing_toCompl E)).extend fun p : E × E =>
      inner' p.1 p.2)
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (⋯.extend (uncurry inner))
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (⋯.extend fun p => (inner' p.1) p.2)

tactic: exact (denseInducing_toCompl E).extend_Z_bilin (denseInducing_toCompl E) this
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
inner' : E →+ E →+ 𝕜 := { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
this : Continuous fun p => (inner' p.1) p.2
⊢ Continuous (⋯.extend fun p => (inner' p.1) p.2)
state_after: no goals

tactic: ext x
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
⊢ (fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom) 0 = 0
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x : E
⊢ ((fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom) 0) x = 0 x

tactic: exact inner_zero_left _
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x : E
⊢ ((fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom) 0) x = 0 x
state_after: no goals

tactic: ext z
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : E
⊢ { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun (x + y) =
    { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun x +
      { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun y
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y z : E
⊢ ({ toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun (x + y)) z =
    ({ toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun x +
        { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun y)
      z

tactic: exact inner_add_left _ _ _
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y z : E
⊢ ({ toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun (x + y)) z =
    ({ toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun x +
        { toFun := fun x => ((innerₛₗ 𝕜) x).toAddMonoidHom, map_zero' := ⋯ }.toFun y)
      z
state_after: no goals