Theorem: QuadraticForm.nonneg_pi_iff
File: Mathlib/LinearAlgebra/QuadraticForm/Prod.lean

tactic: simp_rw [pi, sum_apply, comp_apply, LinearMap.proj_apply]
state_before: ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
⊢ (∀ (x : (i : ι) → Mᵢ i), 0 ≤ ↑(pi Q) x) ↔ ∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x

tactic: dsimp only
state_before: ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
⊢ (∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)) ↔ ∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x

tactic: constructor
state_before: ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
⊢ (∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)) ↔ ∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x

tactic: intro h i x
state_before: case mp
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
⊢ (∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)) → ∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x

tactic: classical
convert h (Pi.single i x) using 1
rw [Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hji => ?_, Pi.single_eq_same]
rw [Pi.single_eq_of_ne hji, map_zero]
state_before: case mp
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
h : ∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)
i : ι
x : Mᵢ i
⊢ 0 ≤ ↑(Q i) x

tactic: convert h (Pi.single i x) using 1
state_before: case mp
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
h : ∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)
i : ι
x : Mᵢ i
⊢ 0 ≤ ↑(Q i) x

tactic: rw [Finset.sum_eq_single_of_mem i (Finset.mem_univ _) fun j _ hji => ?_, Pi.single_eq_same]
state_before: case h.e'_4
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
h : ∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)
i : ι
x : Mᵢ i
⊢ ↑(Q i) x = ∑ x_1 : ι, ↑(Q x_1) (Pi.single i x x_1)

tactic: rw [Pi.single_eq_of_ne hji, map_zero]
state_before: ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
h : ∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)
i : ι
x : Mᵢ i
j : ι
x✝ : j ∈ Finset.univ
hji : j ≠ i
⊢ ↑(Q j) (Pi.single i x j) = 0

tactic: rintro h x
state_before: case mpr
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
⊢ (∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x) → ∀ (x : (i : ι) → Mᵢ i), 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)

tactic: exact Finset.sum_nonneg fun i _ => h i (x i)
state_before: case mpr
ι : Type u_1
R✝ : Type ?u.75510
M₁ : Type ?u.75513
M₂ : Type ?u.75516
N₁ : Type ?u.75519
N₂ : Type ?u.75522
Mᵢ : ι → Type u_3
Nᵢ : ι → Type ?u.75532
inst✝¹⁵ : Semiring R✝
inst✝¹⁴ : AddCommMonoid M₁
inst✝¹³ : AddCommMonoid M₂
inst✝¹² : AddCommMonoid N₁
inst✝¹¹ : AddCommMonoid N₂
inst✝¹⁰ : Module R✝ M₁
inst✝⁹ : Module R✝ M₂
inst✝⁸ : Module R✝ N₁
inst✝⁷ : Module R✝ N₂
inst✝⁶ : (i : ι) → AddCommMonoid (Mᵢ i)
inst✝⁵ : (i : ι) → AddCommMonoid (Nᵢ i)
inst✝⁴ : (i : ι) → Module R✝ (Mᵢ i)
inst✝³ : (i : ι) → Module R✝ (Nᵢ i)
inst✝² : Fintype ι
R : Type u_2
inst✝¹ : OrderedRing R
inst✝ : (i : ι) → Module R (Mᵢ i)
Q : (i : ι) → QuadraticForm R (Mᵢ i)
h : ∀ (i : ι) (x : Mᵢ i), 0 ≤ ↑(Q i) x
x : (i : ι) → Mᵢ i
⊢ 0 ≤ ∑ x_1 : ι, ↑(Q x_1) (x x_1)