Theorem: FormalSum.append_equiv (UnitConjecture/FreeModule.lean)

State before:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
⊢ s₁ ≈ s₂ → t₁ ≈ t₂ → s₁ ++ t₁ ≈ s₂ ++ t₂
Tactic:
intro eqv₁ eqv₂
State after:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
⊢ s₁ ++ t₁ ≈ s₂ ++ t₂

State before:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
⊢ s₁ ++ t₁ ≈ s₂ ++ t₂
Tactic:
apply funext
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
⊢ ∀ (x : X), coords (s₁ ++ t₁) x = coords (s₂ ++ t₂) x

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
⊢ ∀ (x : X), coords (s₁ ++ t₁) x = coords (s₂ ++ t₂) x
Tactic:
intro x₀
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords (s₁ ++ t₁) x₀ = coords (s₂ ++ t₂) x₀

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords (s₁ ++ t₁) x₀ = coords (s₂ ++ t₂) x₀
Tactic:
rw [← append_coords]
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords s₁ x₀ + coords t₁ x₀ = coords (s₂ ++ t₂) x₀

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords s₁ x₀ + coords t₁ x₀ = coords (s₂ ++ t₂) x₀
Tactic:
rw [← append_coords]
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
Tactic:
have ls : coords s₁ x₀ = coords s₂ x₀ := by 
  apply congrFun eqv₁
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
ls : coords s₁ x₀ = coords s₂ x₀
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
ls : coords s₁ x₀ = coords s₂ x₀
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
Tactic:
have lt : coords t₁ x₀ = coords t₂ x₀ := by 
  apply congrFun eqv₂
State after:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
ls : coords s₁ x₀ = coords s₂ x₀
lt : coords t₁ x₀ = coords t₂ x₀
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀

State before:
case h
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
ls : coords s₁ x₀ = coords s₂ x₀
lt : coords t₁ x₀ = coords t₂ x₀
⊢ coords s₁ x₀ + coords t₁ x₀ = coords s₂ x₀ + coords t₂ x₀
Tactic:
rw [← ls, ← lt]
State after:
no goals

State before:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
⊢ coords s₁ x₀ = coords s₂ x₀
Tactic:
apply congrFun eqv₁
State after:
no goals

State before:
R : Type
inst✝² : Ring R
inst✝¹ : DecidableEq R
X : Type
inst✝ : DecidableEq X
s₁ s₂ t₁ t₂ : FormalSum R X
eqv₁ : s₁ ≈ s₂
eqv₂ : t₁ ≈ t₂
x₀ : X
ls : coords s₁ x₀ = coords s₂ x₀
⊢ coords t₁ x₀ = coords t₂ x₀
Tactic:
apply congrFun eqv₂
State after:
no goals