Theorem: Finset.attach_affineCombination_of_injective
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

tactic: simp only [affineCombination, weightedVSubOfPoint_apply, id, vadd_right_cancel_iff,
  Function.comp_apply, AffineMap.coe_mk]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
⊢ (affineCombination k s.attach f) (w ∘ f) = (affineCombination k (image f univ) id) w
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)

tactic: let g₁ : s → V := fun i => w (f i) • (f i -ᵥ Classical.choice S.nonempty)
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)

tactic: let g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice S.nonempty)
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)

tactic: change univ.sum g₁ = (image f univ).sum g₂
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
⊢ ∑ x ∈ s.attach, w (f x) • (f x -ᵥ Classical.choice ⋯) = ∑ x ∈ image f univ, w x • (x -ᵥ Classical.choice ⋯)
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
⊢ univ.sum g₁ = (image f univ).sum g₂

tactic: have hgf : g₁ = g₂ ∘ f := by
  ext
  simp
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
⊢ univ.sum g₁ = (image f univ).sum g₂
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ univ.sum g₁ = (image f univ).sum g₂

tactic: rw [hgf, sum_image]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ univ.sum g₁ = (image f univ).sum g₂
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ univ.sum (g₂ ∘ f) = ∑ x : { x // x ∈ s }, w (f x) • (f x -ᵥ Classical.choice ⋯)

k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ ∀ x ∈ univ, ∀ y ∈ univ, f x = f y → x = y

tactic: ext
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
⊢ g₁ = g₂ ∘ f
state_after: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
x✝ : { x // x ∈ s }
⊢ g₁ x✝ = (g₂ ∘ f) x✝

tactic: simp
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
x✝ : { x // x ∈ s }
⊢ g₁ x✝ = (g₂ ∘ f) x✝
state_after: no goals

tactic: simp only [Function.comp_apply]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ univ.sum (g₂ ∘ f) = ∑ x : { x // x ∈ s }, w (f x) • (f x -ᵥ Classical.choice ⋯)
state_after: no goals

tactic: exact fun _ _ _ _ hxy => hf hxy
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s✝ : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq P
s : Finset P
w : P → k
f : { x // x ∈ s } → P
hf : Function.Injective f
g₁ : { x // x ∈ s } → V := fun i => w (f i) • (f i -ᵥ Classical.choice ⋯)
g₂ : P → V := fun i => w i • (i -ᵥ Classical.choice ⋯)
hgf : g₁ = g₂ ∘ f
⊢ ∀ x ∈ univ, ∀ y ∈ univ, f x = f y → x = y
state_after: no goals