Theorem: exists_nontrivial_relation_sum_zero_of_not_affine_ind
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

tactic: classical
  rw [affineIndependent_iff_of_fintype] at h
  simp only [exists_prop, not_forall] at h
  obtain ⟨w, hw, hwt, i, hi⟩ := h
  simp only [Finset.weightedVSub_eq_weightedVSubOfPoint_of_sum_eq_zero _ w ((↑) : t → V) hw 0,
    vsub_eq_sub, Finset.weightedVSubOfPoint_apply, sub_zero] at hwt
  let f : ∀ x : V, x ∈ t → k := fun x hx => w ⟨x, hx⟩
  refine' ⟨fun x => if hx : x ∈ t then f x hx else (0 : k), _, _, by use i; simp [hi]⟩
  suffices (∑ e : V in t, dite (e ∈ t) (fun hx => f e hx • e) fun _ => 0) = 0 by
    convert this
    rename V => x
    by_cases hx : x ∈ t <;> simp [hx]
  all_goals
    simp only [Finset.sum_dite_of_true fun _ h => h, Finset.mk_coe, hwt, hw]
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
h : ¬AffineIndependent k Subtype.val
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: rw [affineIndependent_iff_of_fintype] at h
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
h : ¬AffineIndependent k Subtype.val
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: simp only [exists_prop, not_forall] at h
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
h :
  ¬∀ (w : { x // x ∈ t } → k),
      ∑ i : { x // x ∈ t }, w i = 0 →
        ↑(Finset.weightedVSub Finset.univ Subtype.val) w = 0 → ∀ (i : { x // x ∈ t }), w i = 0
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: obtain ⟨w, hw, hwt, i, hi⟩ := h
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
h : ∃ x, ∑ i : { x // x ∈ t }, x i = 0 ∧ ↑(Finset.weightedVSub Finset.univ Subtype.val) x = 0 ∧ ∃ x_1, ¬x x_1 = 0
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: simp only [Finset.weightedVSub_eq_weightedVSubOfPoint_of_sum_eq_zero _ w ((↑) : t → V) hw 0,
  vsub_eq_sub, Finset.weightedVSubOfPoint_apply, sub_zero] at hwt
state_before: case intro.intro.intro.intro
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
hwt : ↑(Finset.weightedVSub Finset.univ Subtype.val) w = 0
i : { x // x ∈ t }
hi : ¬w i = 0
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: let f : ∀ x : V, x ∈ t → k := fun x hx => w ⟨x, hx⟩
state_before: case intro.intro.intro.intro
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: refine' ⟨fun x => if hx : x ∈ t then f x hx else (0 : k), _, _, by use i; simp [hi]⟩
state_before: case intro.intro.intro.intro
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∃ f, ∑ e in t, f e • e = 0 ∧ ∑ e in t, f e = 0 ∧ ∃ x, x ∈ t ∧ f x ≠ 0

tactic: suffices (∑ e : V in t, dite (e ∈ t) (fun hx => f e hx • e) fun _ => 0) = 0 by
  convert this
  rename V => x
  by_cases hx : x ∈ t <;> simp [hx]
state_before: case intro.intro.intro.intro.refine'_1
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∑ e in t, (fun x => if hx : x ∈ t then f x hx else 0) e • e = 0

case intro.intro.intro.intro.refine'_2
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∑ e in t, (fun x => if hx : x ∈ t then f x hx else 0) e = 0

tactic: all_goals
  simp only [Finset.sum_dite_of_true fun _ h => h, Finset.mk_coe, hwt, hw]
state_before: case intro.intro.intro.intro.refine'_1
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ (∑ e in t, if hx : e ∈ t then f e hx • e else 0) = 0

case intro.intro.intro.intro.refine'_2
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∑ e in t, (fun x => if hx : x ∈ t then f x hx else 0) e = 0

tactic: use i
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∃ x, x ∈ t ∧ (fun x => if hx : x ∈ t then f x hx else 0) x ≠ 0

tactic: simp [hi]
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ↑i ∈ t ∧ (fun x => if hx : x ∈ t then f x hx else 0) ↑i ≠ 0

tactic: convert this
state_before: k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
this : (∑ e in t, if hx : e ∈ t then f e hx • e else 0) = 0
⊢ ∑ e in t, (fun x => if hx : x ∈ t then f x hx else 0) e • e = 0

tactic: rename V => x
state_before: case h.e'_2.a
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
this : (∑ e in t, if hx : e ∈ t then f e hx • e else 0) = 0
x✝ : V
a✝ : x✝ ∈ t
⊢ (fun x => if hx : x ∈ t then f x hx else 0) x✝ • x✝ = if hx : x✝ ∈ t then f x✝ hx • x✝ else 0

tactic: by_cases hx : x ∈ t <;> simp [hx]
state_before: case h.e'_2.a
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
this : (∑ e in t, if hx : e ∈ t then f e hx • e else 0) = 0
x : V
a✝ : x ∈ t
⊢ (fun x => if hx : x ∈ t then f x hx else 0) x • x = if hx : x ∈ t then f x hx • x else 0

tactic: simp only [Finset.sum_dite_of_true fun _ h => h, Finset.mk_coe, hwt, hw]
state_before: case intro.intro.intro.intro.refine'_2
k : Type u_2
V : Type u_1
P : Type ?u.344524
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.345174
t : Finset V
w : { x // x ∈ t } → k
hw : ∑ i : { x // x ∈ t }, w i = 0
i : { x // x ∈ t }
hi : ¬w i = 0
hwt : ∑ x : { x // x ∈ t }, w x • ↑x = 0
f : (x : V) → x ∈ t → k := fun x hx => w { val := x, property := hx }
⊢ ∑ e in t, (fun x => if hx : x ∈ t then f x hx else 0) e = 0