File: Mathlib/Analysis/InnerProductSpace/OfNorm.lean

full_name: InnerProductSpaceable
code: /-- Predicate for the parallelogram identity to hold in a normed group. This is a scalar-less
version of `InnerProductSpace`. If you have an `InnerProductSpaceable` assumption, you can
locally upgrade that to `InnerProductSpace 𝕜 E` using `casesI nonempty_innerProductSpace 𝕜 E`.
-/
class InnerProductSpaceable : Prop where
  parallelogram_identity :
    ∀ x y : E, ‖x + y‖ * ‖x + y‖ + ‖x - y‖ * ‖x - y‖ = 2 * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)
goal: Prop

full_name: InnerProductSpaceable.parallelogram_identity
code: /-- Predicate for the parallelogram identity to hold in a normed group. This is a scalar-less
version of `InnerProductSpace`. If you have an `InnerProductSpaceable` assumption, you can
locally upgrade that to `InnerProductSpace 𝕜 E` using `casesI nonempty_innerProductSpace 𝕜 E`.
-/
class InnerProductSpaceable : Prop where
  parallelogram_identity :
    ∀ x y : E, ‖x + y‖ * ‖x + y‖ + ‖x - y‖ * ‖x - y‖ = 2 * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)
goal: ‖x + y‖ * ‖x + y‖ + ‖x - y‖ * ‖x - y‖ = 2 * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)

full_name: InnerProductSpace.toInnerProductSpaceable
code: theorem InnerProductSpace.toInnerProductSpaceable [InnerProductSpace 𝕜 E] :
    InnerProductSpaceable E 
goal: InnerProductSpaceable E

full_name: InnerProductSpace.toInnerProductSpaceable_ofReal
code: instance (priority := 100) InnerProductSpace.toInnerProductSpaceable_ofReal
    [InnerProductSpace ℝ E] : InnerProductSpaceable E 
goal: InnerProductSpaceable E

full_name: _aux_Mathlib_Analysis_InnerProductSpace_OfNorm___unexpand_algebraMap_1
code: local notation "𝓚" => algebraMap ℝ 𝕜
goal: Lean.PrettyPrinter.Unexpander

full_name: _aux_Mathlib_Analysis_InnerProductSpace_OfNorm___macroRules_term𝓚_1
code: local notation "𝓚" => algebraMap ℝ 𝕜
goal: Lean.Macro

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.inner_
code: /-- Auxiliary definition of the inner product derived from the norm. -/
private noncomputable def inner_ (x y : E) : 𝕜 
goal: 𝕜

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.innerProp'
code: /-- Auxiliary definition for the `add_left` property. -/
private def innerProp' (r : 𝕜) : Prop 
goal: Prop

full_name: InnerProductSpaceable.innerProp_neg_one
code: theorem innerProp_neg_one : innerProp' E ((-1 : ℤ) : 𝕜) 
goal: InnerProductSpaceable.innerProp' E ↑(-1)

full_name: Continuous.inner_
code: theorem _root_.Continuous.inner_ {f g : ℝ → E} (hf : Continuous f) (hg : Continuous g) :
    Continuous fun x => inner_ 𝕜 (f x) (g x) 
goal: Continuous fun x => inner_ 𝕜 (f x) (g x)

full_name: InnerProductSpaceable.inner_.norm_sq
code: theorem inner_.norm_sq (x : E) : ‖x‖ ^ 2 = re (inner_ 𝕜 x x) 
goal: ‖x‖ ^ 2 = RCLike.re (inner_ 𝕜 x x)

full_name: InnerProductSpaceable.inner_.conj_symm
code: theorem inner_.conj_symm (x y : E) : conj (inner_ 𝕜 y x) = inner_ 𝕜 x y 
goal: (starRingEnd 𝕜) (inner_ 𝕜 y x) = inner_ 𝕜 x y

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux1
code: private theorem add_left_aux1 (x y z : E) : ‖x + y + z‖ * ‖x + y + z‖ =
    (‖2 • x + y‖ * ‖2 • x + y‖ + ‖2 • z + y‖ * ‖2 • z + y‖) / 2 - ‖x - z‖ * ‖x - z‖ 
goal: ‖x + y + z‖ * ‖x + y + z‖ = (‖2 • x + y‖ * ‖2 • x + y‖ + ‖2 • z + y‖ * ‖2 • z + y‖) / 2 - ‖x - z‖ * ‖x - z‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux2
code: private theorem add_left_aux2 (x y z : E) : ‖x + y - z‖ * ‖x + y - z‖ =
    (‖2 • x + y‖ * ‖2 • x + y‖ + ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 - ‖x + z‖ * ‖x + z‖ 
goal: ‖x + y - z‖ * ‖x + y - z‖ = (‖2 • x + y‖ * ‖2 • x + y‖ + ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 - ‖x + z‖ * ‖x + z‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux2'
code: private theorem add_left_aux2' (x y z : E) :
    ‖x + y + z‖ * ‖x + y + z‖ - ‖x + y - z‖ * ‖x + y - z‖ =
    ‖x + z‖ * ‖x + z‖ - ‖x - z‖ * ‖x - z‖ +
    (‖2 • z + y‖ * ‖2 • z + y‖ - ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 
goal: ‖x + y + z‖ * ‖x + y + z‖ - ‖x + y - z‖ * ‖x + y - z‖ =
  ‖x + z‖ * ‖x + z‖ - ‖x - z‖ * ‖x - z‖ + (‖2 • z + y‖ * ‖2 • z + y‖ - ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux3
code: private theorem add_left_aux3 (y z : E) :
    ‖2 • z + y‖ * ‖2 • z + y‖ = 2 * (‖y + z‖ * ‖y + z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖ 
goal: ‖2 • z + y‖ * ‖2 • z + y‖ = 2 * (‖y + z‖ * ‖y + z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux4
code: private theorem add_left_aux4 (y z : E) :
    ‖y - 2 • z‖ * ‖y - 2 • z‖ = 2 * (‖y - z‖ * ‖y - z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖ 
goal: ‖y - 2 • z‖ * ‖y - 2 • z‖ = 2 * (‖y - z‖ * ‖y - z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux4'
code: private theorem add_left_aux4' (y z : E) :
    (‖2 • z + y‖ * ‖2 • z + y‖ - ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 =
    ‖y + z‖ * ‖y + z‖ - ‖y - z‖ * ‖y - z‖ 
goal: (‖2 • z + y‖ * ‖2 • z + y‖ - ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 = ‖y + z‖ * ‖y + z‖ - ‖y - z‖ * ‖y - z‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux5
code: private theorem add_left_aux5 (x y z : E) :
    ‖(I : 𝕜) • (x + y) + z‖ * ‖(I : 𝕜) • (x + y) + z‖ =
    (‖(I : 𝕜) • (2 • x + y)‖ * ‖(I : 𝕜) • (2 • x + y)‖ +
    ‖(I : 𝕜) • y + 2 • z‖ * ‖(I : 𝕜) • y + 2 • z‖) / 2 -
    ‖(I : 𝕜) • x - z‖ * ‖(I : 𝕜) • x - z‖ 
goal: ‖RCLike.I • (x + y) + z‖ * ‖RCLike.I • (x + y) + z‖ =
  (‖RCLike.I • (2 • x + y)‖ * ‖RCLike.I • (2 • x + y)‖ + ‖RCLike.I • y + 2 • z‖ * ‖RCLike.I • y + 2 • z‖) / 2 -
    ‖RCLike.I • x - z‖ * ‖RCLike.I • x - z‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux6
code: private theorem add_left_aux6 (x y z : E) :
    ‖(I : 𝕜) • (x + y) - z‖ * ‖(I : 𝕜) • (x + y) - z‖ =
    (‖(I : 𝕜) • (2 • x + y)‖ * ‖(I : 𝕜) • (2 • x + y)‖ +
    ‖(I : 𝕜) • y - 2 • z‖ * ‖(I : 𝕜) • y - 2 • z‖) / 2 -
    ‖(I : 𝕜) • x + z‖ * ‖(I : 𝕜) • x + z‖ 
goal: ‖RCLike.I • (x + y) - z‖ * ‖RCLike.I • (x + y) - z‖ =
  (‖RCLike.I • (2 • x + y)‖ * ‖RCLike.I • (2 • x + y)‖ + ‖RCLike.I • y - 2 • z‖ * ‖RCLike.I • y - 2 • z‖) / 2 -
    ‖RCLike.I • x + z‖ * ‖RCLike.I • x + z‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux7
code: private theorem add_left_aux7 (y z : E) :
    ‖(I : 𝕜) • y + 2 • z‖ * ‖(I : 𝕜) • y + 2 • z‖ =
    2 * (‖(I : 𝕜) • y + z‖ * ‖(I : 𝕜) • y + z‖ + ‖z‖ * ‖z‖) - ‖(I : 𝕜) • y‖ * ‖(I : 𝕜) • y‖ 
goal: ‖RCLike.I • y + 2 • z‖ * ‖RCLike.I • y + 2 • z‖ =
  2 * (‖RCLike.I • y + z‖ * ‖RCLike.I • y + z‖ + ‖z‖ * ‖z‖) - ‖RCLike.I • y‖ * ‖RCLike.I • y‖

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux8
code: private theorem add_left_aux8 (y z : E) :
    ‖(I : 𝕜) • y - 2 • z‖ * ‖(I : 𝕜) • y - 2 • z‖ =
    2 * (‖(I : 𝕜) • y - z‖ * ‖(I : 𝕜) • y - z‖ + ‖z‖ * ‖z‖) - ‖(I : 𝕜) • y‖ * ‖(I : 𝕜) • y‖ 
goal: ‖RCLike.I • y - 2 • z‖ * ‖RCLike.I • y - 2 • z‖ =
  2 * (‖RCLike.I • y - z‖ * ‖RCLike.I • y - z‖ + ‖z‖ * ‖z‖) - ‖RCLike.I • y‖ * ‖RCLike.I • y‖

full_name: InnerProductSpaceable.add_left
code: theorem add_left (x y z : E) : inner_ 𝕜 (x + y) z = inner_ 𝕜 x z + inner_ 𝕜 y z 
goal: inner_ 𝕜 (x + y) z = inner_ 𝕜 x z + inner_ 𝕜 y z

full_name: InnerProductSpaceable.nat
code: theorem nat (n : ℕ) (x y : E) : inner_ 𝕜 ((n : 𝕜) • x) y = (n : 𝕜) * inner_ 𝕜 x y 
goal: inner_ 𝕜 (↑n • x) y = ↑n * inner_ 𝕜 x y

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.nat_prop
code: private theorem nat_prop (r : ℕ) : innerProp' E (r : 𝕜) 
goal: InnerProductSpaceable.innerProp' E ↑r

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.int_prop
code: private theorem int_prop (n : ℤ) : innerProp' E (n : 𝕜) 
goal: InnerProductSpaceable.innerProp' E ↑n

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.rat_prop
code: private theorem rat_prop (r : ℚ) : innerProp' E (r : 𝕜) 
goal: InnerProductSpaceable.innerProp' E ↑r

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.real_prop
code: private theorem real_prop (r : ℝ) : innerProp' E (r : 𝕜) 
goal: InnerProductSpaceable.innerProp' E ↑r

full_name: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.I_prop
code: private theorem I_prop : innerProp' E (I : 𝕜) 
goal: InnerProductSpaceable.innerProp' E RCLike.I

full_name: InnerProductSpaceable.innerProp
code: theorem innerProp (r : 𝕜) : innerProp' E r 
goal: InnerProductSpaceable.innerProp' E r

full_name: InnerProductSpace.ofNorm
code: /-- **Fréchet–von Neumann–Jordan Theorem**. A normed space `E` whose norm satisfies the
parallelogram identity can be given a compatible inner product. -/
noncomputable def InnerProductSpace.ofNorm
    (h : ∀ x y : E, ‖x + y‖ * ‖x + y‖ + ‖x - y‖ * ‖x - y‖ = 2 * (‖x‖ * ‖x‖ + ‖y‖ * ‖y‖)) :
    InnerProductSpace 𝕜 E 
goal: InnerProductSpace 𝕜 E

full_name: nonempty_innerProductSpace
code: /-- **Fréchet–von Neumann–Jordan Theorem**. A normed space `E` whose norm satisfies the
parallelogram identity can be given a compatible inner product. Do
`casesI nonempty_innerProductSpace 𝕜 E` to locally upgrade `InnerProductSpaceable E` to
`InnerProductSpace 𝕜 E`. -/
theorem nonempty_innerProductSpace : Nonempty (InnerProductSpace 𝕜 E) 
goal: Nonempty (InnerProductSpace 𝕜 E)

full_name: InnerProductSpaceable.to_uniformConvexSpace
code: instance (priority := 100) InnerProductSpaceable.to_uniformConvexSpace : UniformConvexSpace E 
goal: UniformConvexSpace E