File: Mathlib/LinearAlgebra/QuadraticForm/Prod.lean

full_name: QuadraticMap.prod
code: /-- Construct a quadratic form on a product of two modules from the quadratic form on each module.
-/
@[simps!]
def prod (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : QuadraticMap R (M₁ × M₂) P 
goal: QuadraticMap R (M₁ × M₂) P

full_name: QuadraticMap.prod_apply
code: /-- Construct a quadratic form on a product of two modules from the quadratic form on each module.
-/
@[simps!]
def prod (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : QuadraticMap R (M₁ × M₂) P 
goal: (Q₁.prod Q₂) a = Q₁ a.1 + Q₂ a.2

full_name: QuadraticMap.IsometryEquiv.prod_toLinearEquiv
code: /-- An isometry between quadratic forms generated by `QuadraticForm.prod` can be constructed
from a pair of isometries between the left and right parts. -/
@[simps toLinearEquiv]
def IsometryEquiv.prod
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    {Q₁' : QuadraticMap R N₁ P} {Q₂' : QuadraticMap R N₂ P}
    (e₁ : Q₁.IsometryEquiv Q₁') (e₂ : Q₂.IsometryEquiv Q₂') :
    (Q₁.prod Q₂).IsometryEquiv (Q₁'.prod Q₂') 
goal: (e₁.prod e₂).toLinearEquiv = e₁.prod e₂.toLinearEquiv

full_name: QuadraticMap.IsometryEquiv.prod
code: /-- An isometry between quadratic forms generated by `QuadraticForm.prod` can be constructed
from a pair of isometries between the left and right parts. -/
@[simps toLinearEquiv]
def IsometryEquiv.prod
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    {Q₁' : QuadraticMap R N₁ P} {Q₂' : QuadraticMap R N₂ P}
    (e₁ : Q₁.IsometryEquiv Q₁') (e₂ : Q₂.IsometryEquiv Q₂') :
    (Q₁.prod Q₂).IsometryEquiv (Q₁'.prod Q₂') 
goal: (Q₁.prod Q₂).IsometryEquiv (Q₁'.prod Q₂')

full_name: QuadraticMap.Isometry.inl
code: /-- `LinearMap.inl` as an isometry. -/
@[simps!]
def Isometry.inl (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : Q₁ →qᵢ (Q₁.prod Q₂) 
goal: Q₁ →qᵢ Q₁.prod Q₂

full_name: QuadraticMap.Isometry.inl_apply
code: /-- `LinearMap.inl` as an isometry. -/
@[simps!]
def Isometry.inl (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : Q₁ →qᵢ (Q₁.prod Q₂) 
goal: (QuadraticMap.Isometry.inl Q₁ Q₂) i = (i, 0)

full_name: QuadraticMap.Isometry.inr
code: /-- `LinearMap.inr` as an isometry. -/
@[simps!]
def Isometry.inr (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : Q₂ →qᵢ (Q₁.prod Q₂) 
goal: Q₂ →qᵢ Q₁.prod Q₂

full_name: QuadraticMap.Isometry.inr_apply
code: /-- `LinearMap.inr` as an isometry. -/
@[simps!]
def Isometry.inr (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) : Q₂ →qᵢ (Q₁.prod Q₂) 
goal: (QuadraticMap.Isometry.inr Q₁ Q₂) i = (0, i)

full_name: QuadraticMap.Isometry.fst_apply
code: /-- `LinearMap.fst` as an isometry, when the second space has the zero quadratic form. -/
@[simps!]
def Isometry.fst (Q₁ : QuadraticMap R M₁ P) : (Q₁.prod (0 : QuadraticMap R M₂ P)) →qᵢ Q₁ 
goal: (QuadraticMap.Isometry.fst M₂ Q₁) self = self.1

full_name: QuadraticMap.Isometry.fst
code: /-- `LinearMap.fst` as an isometry, when the second space has the zero quadratic form. -/
@[simps!]
def Isometry.fst (Q₁ : QuadraticMap R M₁ P) : (Q₁.prod (0 : QuadraticMap R M₂ P)) →qᵢ Q₁ 
goal: Q₁.prod 0 →qᵢ Q₁

full_name: QuadraticMap.Isometry.snd
code: /-- `LinearMap.snd` as an isometry, when the first space has the zero quadratic form. -/
@[simps!]
def Isometry.snd (Q₂ : QuadraticMap R M₂ P) : ((0 : QuadraticMap R M₁ P).prod Q₂) →qᵢ Q₂ 
goal: QuadraticMap.prod 0 Q₂ →qᵢ Q₂

full_name: QuadraticMap.Isometry.snd_apply
code: /-- `LinearMap.snd` as an isometry, when the first space has the zero quadratic form. -/
@[simps!]
def Isometry.snd (Q₂ : QuadraticMap R M₂ P) : ((0 : QuadraticMap R M₁ P).prod Q₂) →qᵢ Q₂ 
goal: (QuadraticMap.Isometry.snd M₁ Q₂) self = self.2

full_name: QuadraticMap.Isometry.fst_comp_inl
code: @[simp]
lemma Isometry.fst_comp_inl (Q₁ : QuadraticMap R M₁ P) :
    (fst M₂ Q₁).comp (inl Q₁ (0 : QuadraticMap R M₂ P)) = .id _ 
goal: (QuadraticMap.Isometry.fst M₂ Q₁).comp (QuadraticMap.Isometry.inl Q₁ 0) = QuadraticMap.Isometry.id Q₁

full_name: QuadraticMap.Isometry.snd_comp_inr
code: @[simp]
lemma Isometry.snd_comp_inr (Q₂ : QuadraticMap R M₂ P) :
    (snd M₁ Q₂).comp (inr (0 : QuadraticMap R M₁ P) Q₂) = .id _ 
goal: (QuadraticMap.Isometry.snd M₁ Q₂).comp (QuadraticMap.Isometry.inr 0 Q₂) = QuadraticMap.Isometry.id Q₂

full_name: QuadraticMap.Isometry.snd_comp_inl
code: @[simp]
lemma Isometry.snd_comp_inl (Q₂ : QuadraticMap R M₂ P) :
    (snd M₁ Q₂).comp (inl (0 : QuadraticMap R M₁ P) Q₂) = 0 
goal: (QuadraticMap.Isometry.snd M₁ Q₂).comp (QuadraticMap.Isometry.inl 0 Q₂) = 0

full_name: QuadraticMap.Isometry.fst_comp_inr
code: @[simp]
lemma Isometry.fst_comp_inr (Q₁ : QuadraticMap R M₁ P) :
    (fst M₂ Q₁).comp (inr Q₁ (0 : QuadraticMap R M₂ P)) = 0 
goal: (QuadraticMap.Isometry.fst M₂ Q₁).comp (QuadraticMap.Isometry.inr Q₁ 0) = 0

full_name: QuadraticMap.Equivalent.prod
code: theorem Equivalent.prod {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    {Q₁' : QuadraticMap R N₁ P} {Q₂' : QuadraticMap R N₂ P} (e₁ : Q₁.Equivalent Q₁')
    (e₂ : Q₂.Equivalent Q₂') : (Q₁.prod Q₂).Equivalent (Q₁'.prod Q₂') 
goal: (Q₁.prod Q₂).Equivalent (Q₁'.prod Q₂')

full_name: QuadraticMap.IsometryEquiv.prodComm
code: /-- `LinearEquiv.prodComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodComm (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) :
    (Q₁.prod Q₂).IsometryEquiv (Q₂.prod Q₁) 
goal: (Q₁.prod Q₂).IsometryEquiv (Q₂.prod Q₁)

full_name: QuadraticMap.IsometryEquiv.prodComm_invFun
code: /-- `LinearEquiv.prodComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodComm (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) :
    (Q₁.prod Q₂).IsometryEquiv (Q₂.prod Q₁) 
goal: ∀ (a : M₂ × M₁), (QuadraticMap.IsometryEquiv.prodComm Q₁ Q₂).invFun a = a.swap

full_name: QuadraticMap.IsometryEquiv.prodComm_toFun
code: /-- `LinearEquiv.prodComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodComm (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) :
    (Q₁.prod Q₂).IsometryEquiv (Q₂.prod Q₁) 
goal: ∀ (a : M₁ × M₂), (QuadraticMap.IsometryEquiv.prodComm Q₁ Q₂) a = a.swap

full_name: QuadraticMap.IsometryEquiv.prodProdProdComm_invFun
code: /-- `LinearEquiv.prodProdProdComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodProdProdComm
    (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P)
    (Q₃ : QuadraticMap R N₁ P) (Q₄ : QuadraticMap R N₂ P) :
    ((Q₁.prod Q₂).prod (Q₃.prod Q₄)).IsometryEquiv ((Q₁.prod Q₃).prod (Q₂.prod Q₄)) 
goal: (QuadraticMap.IsometryEquiv.prodProdProdComm Q₁ Q₂ Q₃ Q₄).invFun mmnn = ((mmnn.1.1, mmnn.2.1), mmnn.1.2, mmnn.2.2)

full_name: QuadraticMap.IsometryEquiv.prodProdProdComm_toFun
code: /-- `LinearEquiv.prodProdProdComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodProdProdComm
    (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P)
    (Q₃ : QuadraticMap R N₁ P) (Q₄ : QuadraticMap R N₂ P) :
    ((Q₁.prod Q₂).prod (Q₃.prod Q₄)).IsometryEquiv ((Q₁.prod Q₃).prod (Q₂.prod Q₄)) 
goal: (QuadraticMap.IsometryEquiv.prodProdProdComm Q₁ Q₂ Q₃ Q₄) mnmn = ((mnmn.1.1, mnmn.2.1), mnmn.1.2, mnmn.2.2)

full_name: QuadraticMap.IsometryEquiv.prodProdProdComm
code: /-- `LinearEquiv.prodProdProdComm` is isometric. -/
@[simps!]
def IsometryEquiv.prodProdProdComm
    (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P)
    (Q₃ : QuadraticMap R N₁ P) (Q₄ : QuadraticMap R N₂ P) :
    ((Q₁.prod Q₂).prod (Q₃.prod Q₄)).IsometryEquiv ((Q₁.prod Q₃).prod (Q₂.prod Q₄)) 
goal: ((Q₁.prod Q₂).prod (Q₃.prod Q₄)).IsometryEquiv ((Q₁.prod Q₃).prod (Q₂.prod Q₄))

full_name: QuadraticMap.anisotropic_of_prod
code: /-- If a product is anisotropic then its components must be. The converse is not true. -/
theorem anisotropic_of_prod
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P} (h : (Q₁.prod Q₂).Anisotropic) :
    Q₁.Anisotropic ∧ Q₂.Anisotropic 
goal: Q₁.Anisotropic ∧ Q₂.Anisotropic

full_name: QuadraticMap.nonneg_prod_iff
code: theorem nonneg_prod_iff [Preorder P] [CovariantClass P P (· + ·) (· ≤ ·)]
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P} :
    (∀ x, 0 ≤ (Q₁.prod Q₂) x) ↔ (∀ x, 0 ≤ Q₁ x) ∧ ∀ x, 0 ≤ Q₂ x 
goal: (∀ (x : M₁ × M₂), 0 ≤ (Q₁.prod Q₂) x) ↔ (∀ (x : M₁), 0 ≤ Q₁ x) ∧ ∀ (x : M₂), 0 ≤ Q₂ x

full_name: QuadraticMap.posDef_prod_iff
code: theorem posDef_prod_iff [PartialOrder P] [CovariantClass P P (· + ·) (· ≤ ·)]
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P} :
    (Q₁.prod Q₂).PosDef ↔ Q₁.PosDef ∧ Q₂.PosDef 
goal: (Q₁.prod Q₂).PosDef ↔ Q₁.PosDef ∧ Q₂.PosDef

full_name: QuadraticMap.PosDef.prod
code: theorem PosDef.prod [PartialOrder P] [CovariantClass P P (· + ·) (· ≤ ·)]
    {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P} (h₁ : Q₁.PosDef) (h₂ : Q₂.PosDef) :
    (Q₁.prod Q₂).PosDef 
goal: (Q₁.prod Q₂).PosDef

full_name: QuadraticMap.IsOrtho.prod
code: theorem IsOrtho.prod {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    {v w : M₁ × M₂} (h₁ : Q₁.IsOrtho v.1 w.1) (h₂ : Q₂.IsOrtho v.2 w.2) :
    (Q₁.prod Q₂).IsOrtho v w 
goal: (Q₁.prod Q₂).IsOrtho v w

full_name: QuadraticMap.IsOrtho.inl_inr
code: @[simp] theorem IsOrtho.inl_inr {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    (m₁ : M₁) (m₂ : M₂) :
    (Q₁.prod Q₂).IsOrtho (m₁, 0) (0, m₂) 
goal: (Q₁.prod Q₂).IsOrtho (m₁, 0) (0, m₂)

full_name: QuadraticMap.IsOrtho.inr_inl
code: @[simp] theorem IsOrtho.inr_inl {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    (m₁ : M₁) (m₂ : M₂) :
    (Q₁.prod Q₂).IsOrtho (0, m₂) (m₁, 0) 
goal: (Q₁.prod Q₂).IsOrtho (0, m₂) (m₁, 0)

full_name: QuadraticMap.isOrtho_inl_inl_iff
code: @[simp] theorem isOrtho_inl_inl_iff {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    (m₁ m₁' : M₁) :
    (Q₁.prod Q₂).IsOrtho (m₁, 0) (m₁', 0) ↔ Q₁.IsOrtho m₁ m₁' 
goal: (Q₁.prod Q₂).IsOrtho (m₁, 0) (m₁', 0) ↔ Q₁.IsOrtho m₁ m₁'

full_name: QuadraticMap.isOrtho_inr_inr_iff
code: @[simp] theorem isOrtho_inr_inr_iff {Q₁ : QuadraticMap R M₁ P} {Q₂ : QuadraticMap R M₂ P}
    (m₂ m₂' : M₂) :
    (Q₁.prod Q₂).IsOrtho (0, m₂) (0, m₂') ↔ Q₂.IsOrtho m₂ m₂' 
goal: (Q₁.prod Q₂).IsOrtho (0, m₂) (0, m₂') ↔ Q₂.IsOrtho m₂ m₂'

full_name: QuadraticMap.polar_prod
code: @[simp] theorem polar_prod (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) (x y : M₁ × M₂) :
    polar (Q₁.prod Q₂) x y = polar Q₁ x.1 y.1 + polar Q₂ x.2 y.2 
goal: QuadraticMap.polar (⇑(Q₁.prod Q₂)) x y = QuadraticMap.polar (⇑Q₁) x.1 y.1 + QuadraticMap.polar (⇑Q₂) x.2 y.2

full_name: QuadraticMap.polarBilin_prod
code: @[simp] theorem polarBilin_prod (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) :
    (Q₁.prod Q₂).polarBilin =
      Q₁.polarBilin.compl₁₂ (.fst R M₁ M₂) (.fst R M₁ M₂) +
      Q₂.polarBilin.compl₁₂ (.snd R M₁ M₂) (.snd R M₁ M₂) 
goal: (Q₁.prod Q₂).polarBilin =
  LinearMap.compl₁₂ Q₁.polarBilin (LinearMap.fst R M₁ M₂) (LinearMap.fst R M₁ M₂) +
    LinearMap.compl₁₂ Q₂.polarBilin (LinearMap.snd R M₁ M₂) (LinearMap.snd R M₁ M₂)

full_name: QuadraticMap.associated_prod
code: @[simp] theorem associated_prod [Invertible (2 : R)]
    (Q₁ : QuadraticMap R M₁ P) (Q₂ : QuadraticMap R M₂ P) :
    associated (Q₁.prod Q₂) =
      (associated Q₁).compl₁₂ (.fst R M₁ M₂) (.fst R M₁ M₂) +
      (associated Q₂).compl₁₂ (.snd R M₁ M₂) (.snd R M₁ M₂) 
goal: QuadraticMap.associated (Q₁.prod Q₂) =
  LinearMap.compl₁₂ (QuadraticMap.associated Q₁) (LinearMap.fst R M₁ M₂) (LinearMap.fst R M₁ M₂) +
    LinearMap.compl₁₂ (QuadraticMap.associated Q₂) (LinearMap.snd R M₁ M₂) (LinearMap.snd R M₁ M₂)

full_name: QuadraticMap.pi
code: /-- Construct a quadratic form on a family of modules from the quadratic form on each module. -/
def pi [Fintype ι] (Q : ∀ i, QuadraticMap R (Mᵢ i) P) : QuadraticMap R (∀ i, Mᵢ i) P 
goal: QuadraticMap R ((i : ι) → Mᵢ i) P

full_name: QuadraticMap.pi_apply
code: @[simp]
theorem pi_apply [Fintype ι] (Q : ∀ i, QuadraticMap R (Mᵢ i) P) (x : ∀ i, Mᵢ i) :
    pi Q x = ∑ i, Q i (x i) 
goal: (QuadraticMap.pi Q) x = ∑ i : ι, (Q i) (x i)

full_name: QuadraticMap.pi_apply_single
code: theorem pi_apply_single [Fintype ι] [DecidableEq ι]
    (Q : ∀ i, QuadraticMap R (Mᵢ i) P) (i : ι) (m : Mᵢ i) :
    pi Q (Pi.single i m) = Q i m 
goal: (QuadraticMap.pi Q) (Pi.single i m) = (Q i) m

full_name: QuadraticMap.IsometryEquiv.pi_toLinearEquiv
code: /-- An isometry between quadratic forms generated by `QuadraticMap.pi` can be constructed
from a pair of isometries between the left and right parts. -/
@[simps toLinearEquiv]
def IsometryEquiv.pi [Fintype ι]
    {Q : ∀ i, QuadraticMap R (Mᵢ i) P} {Q' : ∀ i, QuadraticMap R (Nᵢ i) P}
    (e : ∀ i, (Q i).IsometryEquiv (Q' i)) : (pi Q).IsometryEquiv (pi Q') 
goal: (QuadraticMap.IsometryEquiv.pi e).toLinearEquiv = LinearEquiv.piCongrRight fun i => (e i).toLinearEquiv

full_name: QuadraticMap.IsometryEquiv.pi
code: /-- An isometry between quadratic forms generated by `QuadraticMap.pi` can be constructed
from a pair of isometries between the left and right parts. -/
@[simps toLinearEquiv]
def IsometryEquiv.pi [Fintype ι]
    {Q : ∀ i, QuadraticMap R (Mᵢ i) P} {Q' : ∀ i, QuadraticMap R (Nᵢ i) P}
    (e : ∀ i, (Q i).IsometryEquiv (Q' i)) : (pi Q).IsometryEquiv (pi Q') 
goal: (QuadraticMap.pi Q).IsometryEquiv (QuadraticMap.pi Q')

full_name: QuadraticMap.Isometry.single_apply
code: /-- `LinearMap.single` as an isometry. -/
@[simps!]
def Isometry.single [Fintype ι] [DecidableEq ι] (Q : ∀ i, QuadraticMap R (Mᵢ i) P) (i : ι) :
    Q i →qᵢ pi Q 
goal: (QuadraticMap.Isometry.single Q i) x j = Pi.single i x j

full_name: QuadraticMap.Isometry.single
code: /-- `LinearMap.single` as an isometry. -/
@[simps!]
def Isometry.single [Fintype ι] [DecidableEq ι] (Q : ∀ i, QuadraticMap R (Mᵢ i) P) (i : ι) :
    Q i →qᵢ pi Q 
goal: Q i →qᵢ QuadraticMap.pi Q

full_name: QuadraticMap.Isometry.proj
code: /-- `LinearMap.proj` as an isometry, when all but one quadratic form is zero. -/
@[simps!]
def Isometry.proj [Fintype ι] [DecidableEq ι] (i : ι) (Q : QuadraticMap R (Mᵢ i) P) :
    pi (Pi.single i Q) →qᵢ Q 
goal: QuadraticMap.pi (Pi.single i Q) →qᵢ Q

full_name: QuadraticMap.Isometry.proj_apply
code: /-- `LinearMap.proj` as an isometry, when all but one quadratic form is zero. -/
@[simps!]
def Isometry.proj [Fintype ι] [DecidableEq ι] (i : ι) (Q : QuadraticMap R (Mᵢ i) P) :
    pi (Pi.single i Q) →qᵢ Q 
goal: (QuadraticMap.Isometry.proj i Q) f = f i

full_name: QuadraticMap.Isometry.proj_comp_single_of_same
code: /-- Note that `QuadraticMap.Isometry.id` would not be well-typed as the RHS. -/
@[simp, nolint simpNF]  -- ignore the bogus "Left-hand side does not simplify" lint error
theorem Isometry.proj_comp_single_of_same [Fintype ι] [DecidableEq ι]
    (i : ι) (Q : QuadraticMap R (Mᵢ i) P) :
    (proj i Q).comp (single _ i) = .ofEq (Pi.single_eq_same _ _) 
goal: (QuadraticMap.Isometry.proj i Q).comp (QuadraticMap.Isometry.single (Pi.single i Q) i) = QuadraticMap.Isometry.ofEq ⋯

full_name: QuadraticMap.Isometry.proj_comp_single_of_ne
code: /-- Note that `0 : 0 →qᵢ Q` alone would not be well-typed as the RHS. -/
@[simp]
theorem Isometry.proj_comp_single_of_ne [Fintype ι] [DecidableEq ι]
    {i j : ι} (h : i ≠ j) (Q : QuadraticMap R (Mᵢ i) P) :
    (proj i Q).comp (single _ j) = (0 : 0 →qᵢ Q).comp (ofEq (Pi.single_eq_of_ne h.symm _)) 
goal: (QuadraticMap.Isometry.proj i Q).comp (QuadraticMap.Isometry.single (Pi.single i Q) j) =
  QuadraticMap.Isometry.comp 0 (QuadraticMap.Isometry.ofEq ⋯)

full_name: QuadraticMap.Equivalent.pi
code: theorem Equivalent.pi [Fintype ι] {Q : ∀ i, QuadraticMap R (Mᵢ i) P}
    {Q' : ∀ i, QuadraticMap R (Nᵢ i) P} (e : ∀ i, (Q i).Equivalent (Q' i)) :
    (pi Q).Equivalent (pi Q') 
goal: (QuadraticMap.pi Q).Equivalent (QuadraticMap.pi Q')

full_name: QuadraticMap.anisotropic_of_pi
code: /-- If a family is anisotropic then its components must be. The converse is not true. -/
theorem anisotropic_of_pi [Fintype ι]
    {Q : ∀ i, QuadraticMap R (Mᵢ i) P} (h : (pi Q).Anisotropic) : ∀ i, (Q i).Anisotropic 
goal: (Q i).Anisotropic

full_name: QuadraticMap.nonneg_pi_iff
code: theorem nonneg_pi_iff {P} [Fintype ι] [OrderedAddCommMonoid P] [Module R P]
    {Q : ∀ i, QuadraticMap R (Mᵢ i) P} : (∀ x, 0 ≤ pi Q x) ↔ ∀ i x, 0 ≤ Q i x 
goal: (∀ (x : (i : ι) → Mᵢ i), 0 ≤ (QuadraticMap.pi Q) x) ↔ ∀ (i : ι) (x : Mᵢ i), 0 ≤ (Q i) x

full_name: QuadraticMap.posDef_pi_iff
code: theorem posDef_pi_iff {P} [Fintype ι] [OrderedAddCommMonoid P] [Module R P]
    {Q : ∀ i, QuadraticMap R (Mᵢ i) P} : (pi Q).PosDef ↔ ∀ i, (Q i).PosDef 
goal: (QuadraticMap.pi Q).PosDef ↔ ∀ (i : ι), (Q i).PosDef

full_name: QuadraticMap.Ring.polar_pi
code: @[simp] theorem polar_pi (Q : ∀ i, QuadraticMap R (Mᵢ i) P) (x y : ∀ i, Mᵢ i) :
    polar (pi Q) x y = ∑ i, polar (Q i) (x i) (y i) 
goal: QuadraticMap.polar (⇑(QuadraticMap.pi Q)) x y = ∑ i : ι, QuadraticMap.polar (⇑(Q i)) (x i) (y i)

full_name: QuadraticMap.Ring.polarBilin_pi
code: @[simp] theorem polarBilin_pi (Q : ∀ i, QuadraticMap R (Mᵢ i) P) :
    (pi Q).polarBilin = ∑ i, (Q i).polarBilin.compl₁₂ (.proj i) (.proj i) 
goal: (QuadraticMap.pi Q).polarBilin = ∑ i : ι, LinearMap.compl₁₂ (Q i).polarBilin (LinearMap.proj i) (LinearMap.proj i)

full_name: QuadraticMap.Ring.associated_pi
code: @[simp] theorem associated_pi [Invertible (2 : R)] (Q : ∀ i, QuadraticMap R (Mᵢ i) P) :
    associated (pi Q) = ∑ i, (Q i).associated.compl₁₂ (.proj i) (.proj i) 
goal: QuadraticMap.associated (QuadraticMap.pi Q) =
  ∑ i : ι, LinearMap.compl₁₂ (QuadraticMap.associated (Q i)) (LinearMap.proj i) (LinearMap.proj i)