Theorem: LinearRecurrence.sol_eq_of_eq_init
File: Mathlib/Algebra/LinearRecurrence.lean

tactic: refine Iff.intro (fun h x _ ↦ h ▸ rfl) ?_
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
⊢ u = v ↔ Set.EqOn u v ↑(range E.order)
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
⊢ Set.EqOn u v ↑(range E.order) → u = v

tactic: intro h
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
⊢ Set.EqOn u v ↑(range E.order) → u = v
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
⊢ u = v

tactic: set u' : ↥E.solSpace := ⟨u, hu⟩
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
⊢ u = v
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
⊢ u = v

tactic: set v' : ↥E.solSpace := ⟨v, hv⟩
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
⊢ u = v
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ u = v

tactic: change u'.val = v'.val
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ u = v
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ ↑u' = ↑v'

tactic: suffices h' : u' = v' from h' ▸ rfl
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ ↑u' = ↑v'
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ u' = v'

tactic: rw [← E.toInit.toEquiv.apply_eq_iff_eq, LinearEquiv.coe_toEquiv]
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ u' = v'
state_after: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ E.toInit u' = E.toInit v'

tactic: ext x
state_before: α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
⊢ E.toInit u' = E.toInit v'
state_after: case h
α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
x : Fin E.order
⊢ E.toInit u' x = E.toInit v' x

tactic: exact mod_cast h (mem_range.mpr x.2)
state_before: case h
α : Type u_1
inst✝ : CommSemiring α
E : LinearRecurrence α
u v : ℕ → α
hu : E.IsSolution u
hv : E.IsSolution v
h : Set.EqOn u v ↑(range E.order)
u' : ↥E.solSpace := ⟨u, hu⟩
v' : ↥E.solSpace := ⟨v, hv⟩
x : Fin E.order
⊢ E.toInit u' x = E.toInit v' x
state_after: no goals