Theorem: mem_affineSpan_iff_eq_weightedVSubOfPoint_vadd
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

tactic: constructor
state_before: k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
q : P
⊢ q ∈ affineSpan k (Set.range p) ↔ ∃ s w, q = ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j

tactic: intro hq
state_before: case mp
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
q : P
⊢ q ∈ affineSpan k (Set.range p) → ∃ s w, q = ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j

tactic: obtain ⟨s, w, hw, rfl⟩ := eq_affineCombination_of_mem_affineSpan hq
state_before: case mp
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
q : P
hq : q ∈ affineSpan k (Set.range p)
⊢ ∃ s w, q = ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j

tactic: exact ⟨s, w, s.affineCombination_eq_weightedVSubOfPoint_vadd_of_sum_eq_one w p hw (p j)⟩
state_before: case mp.intro.intro.intro
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
hw : ∑ i in s, w i = 1
hq : ↑(Finset.affineCombination k s p) w ∈ affineSpan k (Set.range p)
⊢ ∃ s_1 w_1, ↑(Finset.affineCombination k s p) w = ↑(Finset.weightedVSubOfPoint s_1 p (p j)) w_1 +ᵥ p j

tactic: rintro ⟨s, w, rfl⟩
state_before: case mpr
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
q : P
⊢ (∃ s w, q = ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j) → q ∈ affineSpan k (Set.range p)

tactic: let w' : ι → k := Function.update w j (1 - (s \ {j}).sum w)
state_before: case mpr.intro.intro
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
⊢ ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j ∈ affineSpan k (Set.range p)

tactic: have hww : ∀ i, i ≠ j → w i = w' i := by
  intro i hij
  simp [hij]
state_before: case mpr.intro.intro
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
h₁ : Finset.sum (insert j s) w' = 1
⊢ ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j ∈ affineSpan k (Set.range p)

tactic: rw [s.weightedVSubOfPoint_eq_of_weights_eq p j w w' hww, ←
  s.weightedVSubOfPoint_insert w' p j, ←
  (insert j s).affineCombination_eq_weightedVSubOfPoint_vadd_of_sum_eq_one w' p h₁ (p j)]
state_before: case mpr.intro.intro
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
h₁ : Finset.sum (insert j s) w' = 1
hww : ∀ (i : ι), i ≠ j → w i = w' i
⊢ ↑(Finset.weightedVSubOfPoint s p (p j)) w +ᵥ p j ∈ affineSpan k (Set.range p)

tactic: exact affineCombination_mem_affineSpan h₁ p
state_before: case mpr.intro.intro
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
h₁ : Finset.sum (insert j s) w' = 1
hww : ∀ (i : ι), i ≠ j → w i = w' i
⊢ ↑(Finset.affineCombination k (insert j s) p) w' ∈ affineSpan k (Set.range p)

tactic: by_cases hj : j ∈ s
state_before: k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
⊢ Finset.sum (insert j s) w' = 1

tactic: simp [Finset.sum_update_of_mem hj, Finset.insert_eq_of_mem hj]
state_before: case pos
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
hj : j ∈ s
⊢ Finset.sum (insert j s) w' = 1

tactic: simp [Finset.sum_insert hj, Finset.sum_update_of_not_mem hj, hj]
state_before: case neg
k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
hj : ¬j ∈ s
⊢ Finset.sum (insert j s) w' = 1

tactic: intro i hij
state_before: k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
h₁ : Finset.sum (insert j s) w' = 1
⊢ ∀ (i : ι), i ≠ j → w i = w' i

tactic: simp [hij]
state_before: k : Type u_2
V : Type u_4
P : Type u_3
inst✝⁴ : Ring k
inst✝³ : AddCommGroup V
inst✝² : Module k V
inst✝¹ : AffineSpace V P
ι : Type u_1
inst✝ : Nontrivial k
p : ι → P
j : ι
s : Finset ι
w : ι → k
w' : ι → k := Function.update w j (1 - Finset.sum (s \ {j}) w)
h₁ : Finset.sum (insert j s) w' = 1
i : ι
hij : i ≠ j
⊢ w i = w' i