Theorem: MvPolynomial.map_restrict_dom_evalₗ
File: Mathlib/FieldTheory/Finite/Polynomial.lean

tactic: cases nonempty_fintype σ
state_before: K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
⊢ Submodule.map (evalₗ K σ) (restrictDegree σ K (Fintype.card K - 1)) = ⊤

tactic: refine' top_unique (SetLike.le_def.2 fun e _ => mem_map.2 _)
state_before: case intro
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
⊢ Submodule.map (evalₗ K σ) (restrictDegree σ K (Fintype.card K - 1)) = ⊤

tactic: refine' ⟨∑ n : σ → K, e n • indicator n, _, _⟩
state_before: case intro
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
⊢ ∃ y, y ∈ restrictDegree σ K (Fintype.card K - 1) ∧ ↑(evalₗ K σ) y = e

tactic: exact sum_mem fun c _ => smul_mem _ _ (indicator_mem_restrictDegree _)
state_before: case intro.refine'_1
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
⊢ ∑ n : σ → K, e n • indicator n ∈ restrictDegree σ K (Fintype.card K - 1)

tactic: ext n
state_before: case intro.refine'_2
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
⊢ ↑(evalₗ K σ) (∑ n : σ → K, e n • indicator n) = e

tactic: simp only [LinearMap.map_sum, @Finset.sum_apply (σ → K) (fun _ => K) _ _ _ _ _, Pi.smul_apply,
  LinearMap.map_smul]
state_before: case intro.refine'_2.h
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ↑(evalₗ K σ) (∑ n : σ → K, e n • indicator n) n = e n

tactic: simp only [evalₗ_apply]
state_before: case intro.refine'_2.h
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ∑ x : σ → K, e x • ↑(evalₗ K σ) (indicator x) n = e n

tactic: trans
state_before: case intro.refine'_2.h
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ∑ x : σ → K, e x • ↑(eval n) (indicator x) = e n

tactic: refine' Finset.sum_eq_single n (fun b _ h => _) _
state_before: K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ∑ x : σ → K, e x • ↑(eval n) (indicator x) = ?m.279586

K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ?m.279586 = e n

K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ K

tactic: rw [eval_indicator_apply_eq_zero _ _ h.symm, smul_zero]
state_before: case refine'_1
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝¹ : e ∈ ⊤
n b : σ → K
x✝ : b ∈ Finset.univ
h : b ≠ n
⊢ e b • ↑(eval n) (indicator b) = 0

tactic: exact fun h => (h <| Finset.mem_univ n).elim
state_before: case refine'_2
K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ ¬n ∈ Finset.univ → e n • ↑(eval n) (indicator n) = 0

tactic: rw [eval_indicator_apply_eq_one, smul_eq_mul, mul_one]
state_before: K : Type u_1
σ : Type u_2
inst✝² : Field K
inst✝¹ : Fintype K
inst✝ : Finite σ
val✝ : Fintype σ
e : (σ → K) → K
x✝ : e ∈ ⊤
n : σ → K
⊢ e n • ↑(eval n) (indicator n) = e n