Theorem: FreeModule.zero_coeffs (UnitConjecture/FreeModule.lean)

State before:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
⊢ 0 • x = Quotient.mk (formalSumSetoid R X) []
Tactic:
apply @Quotient.ind (motive := fun x : R[X] => 
  (0 : R) • x =  ⟦ [] ⟧)
State after:
case a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
⊢ ∀ (a : FormalSum R X), 0 • Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) []

State before:
case a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
⊢ ∀ (a : FormalSum R X), 0 • Quotient.mk (formalSumSetoid R X) a = Quotient.mk (formalSumSetoid R X) []
Tactic:
intro s
State after:
case a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ 0 • Quotient.mk (formalSumSetoid R X) s = Quotient.mk (formalSumSetoid R X) []

State before:
case a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ 0 • Quotient.mk (formalSumSetoid R X) s = Quotient.mk (formalSumSetoid R X) []
Tactic:
apply Quotient.sound
State after:
case a.a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ scmul 0 s ≈ []

State before:
case a.a
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ scmul 0 s ≈ []
Tactic:
apply funext
State after:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ ∀ (x : X), coords (scmul 0 s) x = coords [] x

State before:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
⊢ ∀ (x : X), coords (scmul 0 s) x = coords [] x
Tactic:
intro x₀
State after:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
⊢ coords (scmul 0 s) x₀ = coords [] x₀

State before:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
⊢ coords (scmul 0 s) x₀ = coords [] x₀
Tactic:
let l := scmul_coords 0 s x₀
State after:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
l : 0 * coords s x₀ = coords (scmul 0 s) x₀ := scmul_coords 0 s x₀
⊢ coords (scmul 0 s) x₀ = coords [] x₀

State before:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
l : 0 * coords s x₀ = coords (scmul 0 s) x₀ := scmul_coords 0 s x₀
⊢ coords (scmul 0 s) x₀ = coords [] x₀
Tactic:
rw [← l]
State after:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
l : 0 * coords s x₀ = coords (scmul 0 s) x₀ := scmul_coords 0 s x₀
⊢ 0 * coords s x₀ = coords [] x₀

State before:
case a.a.h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
x : R[X]
s : FormalSum R X
x₀ : X
l : 0 * coords s x₀ = coords (scmul 0 s) x₀ := scmul_coords 0 s x₀
⊢ 0 * coords s x₀ = coords [] x₀
Tactic:
simp [coords]
State after:
no goals