Theorem: AffineBasis.surjective_coord
File: Mathlib/LinearAlgebra/AffineSpace/Basis.lean

tactic: classical
  intro x
  obtain ⟨j, hij⟩ := exists_ne i
  let s : Finset ι := {i, j}
  have hi : i ∈ s := by simp
  have _ : j ∈ s := by simp
  let w : ι → k := fun j' => if j' = i then x else 1 - x
  have hw : s.sum w = 1 := by
    simp [Finset.sum_ite, Finset.filter_insert, hij]
    erw [Finset.filter_eq']
    simp [hij.symm]
  use s.affineCombination k b w
  simp [b.coord_apply_combination_of_mem hi hw]
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s : Finset ι
i✝ j : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
⊢ Function.Surjective ↑(coord b i)

tactic: intro x
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s : Finset ι
i✝ j : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
⊢ Function.Surjective ↑(coord b i)

tactic: obtain ⟨j, hij⟩ := exists_ne i
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s : Finset ι
i✝ j : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
⊢ ∃ a, ↑(coord b i) a = x

tactic: let s : Finset ι := {i, j}
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
⊢ ∃ a, ↑(coord b i) a = x

tactic: have hi : i ∈ s := by simp
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
⊢ ∃ a, ↑(coord b i) a = x

tactic: have _ : j ∈ s := by simp
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
⊢ ∃ a, ↑(coord b i) a = x

tactic: let w : ι → k := fun j' => if j' = i then x else 1 - x
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
⊢ ∃ a, ↑(coord b i) a = x

tactic: have hw : s.sum w = 1 := by
  simp [Finset.sum_ite, Finset.filter_insert, hij]
  erw [Finset.filter_eq']
  simp [hij.symm]
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
⊢ ∃ a, ↑(coord b i) a = x

tactic: use s.affineCombination k b w
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
hw : Finset.sum s w = 1
⊢ ∃ a, ↑(coord b i) a = x

tactic: simp [b.coord_apply_combination_of_mem hi hw]
state_before: case intro
ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
hw : Finset.sum s w = 1
⊢ ↑(coord b i) (↑(Finset.affineCombination k s ↑b) w) = x

tactic: simp
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
⊢ i ∈ s

tactic: simp
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
⊢ j ∈ s

tactic: simp [Finset.sum_ite, Finset.filter_insert, hij]
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
⊢ Finset.sum s w = 1

tactic: erw [Finset.filter_eq']
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
⊢ ↑(Finset.card (insert i (Finset.filter (fun x => x = i) {j}))) * x + (1 - x) = 1

tactic: simp [hij.symm]
state_before: ι : Type u_1
ι' : Type ?u.141682
k : Type u_3
V : Type u_4
P : Type u_2
inst✝⁴ : AddCommGroup V
inst✝³ : AffineSpace V P
inst✝² : Ring k
inst✝¹ : Module k V
b : AffineBasis ι k P
s✝ : Finset ι
i✝ j✝ : ι
e : ι ≃ ι'
inst✝ : Nontrivial ι
i : ι
x : k
j : ι
hij : j ≠ i
s : Finset ι := {i, j}
hi : i ∈ s
x✝ : j ∈ s
w : ι → k := fun j' => if j' = i then x else 1 - x
⊢ ↑(Finset.card (insert i (if i ∈ {j} then {i} else ∅))) * x + (1 - x) = 1