import KomorebiLSM.Normed import KomorebiLSM.Memory import Mathlib.Algebra.Field.GeomSum import Mathlib.Tactic.Ring import Mathlib.Tactic.FieldSimp /-! The one-step memory tail and unresolved-initial-state bounds in P10. These compare right-hand sides on the SAME history. They do not certify recursively generated approximate trajectories. -/ set_option autoImplicit false open scoped BigOperators namespace Komorebi.LSM universe u v w variable {๐•œ : Type u} [NontriviallyNormedField ๐•œ] variable {X : Type v} [NormedAddCommGroup X] [NormedSpace ๐•œ X] variable {Y : Type w} [NormedAddCommGroup Y] [NormedSpace ๐•œ Y] /-- The algebraic memory recurrence transported to continuous linear maps. -/ theorem continuous_exact_memory_lags (A : X โ†’L[๐•œ] X) (B : Y โ†’L[๐•œ] X) (C : X โ†’L[๐•œ] Y) (D : Y โ†’L[๐•œ] Y) (z : โ„• โ†’ X) (q : โ„• โ†’ Y) (zstep : โˆ€ t, z (t+1) = A (z t) + B (q t)) (qstep : โˆ€ t, q (t+1) = C (z t) + D (q t)) (t : โ„•) : z (t+1) = A (z t) + (โˆ‘ k โˆˆ Finset.range t, B ((D^k) (C (z (t-1-k))))) + B ((D^t) (q 0)) := by simpa only [โ† ContinuousLinearMap.toLinearMap_pow, ContinuousLinearMap.coe_coe] using exact_memory_lags A.toLinearMap B.toLinearMap C.toLinearMap D.toLinearMap z q zstep qstep t theorem iterate_norm_bound (D : Y โ†’L[๐•œ] Y) {rho : โ„} (hrho : 0 โ‰ค rho) (hD : โ€–Dโ€– โ‰ค rho) (y : Y) (k : โ„•) : โ€–(D^k) yโ€– โ‰ค rho^k * โ€–yโ€– := by induction k with | zero => simp | succ k ih => rw [pow_succ', mul_apply_eq_comp] calc โ€–D ((D^k) y)โ€– โ‰ค โ€–Dโ€– * โ€–(D^k) yโ€– := D.le_opNorm _ _ โ‰ค rho * โ€–(D^k) yโ€– := mul_le_mul_of_nonneg_right hD (norm_nonneg _) _ โ‰ค rho * (rho^k * โ€–yโ€–) := mul_le_mul_of_nonneg_left ih hrho _ = rho^(k+1) * โ€–yโ€– := by rw [pow_succ']; ring theorem geometric_interval_bound {rho : โ„} (hrho : 0 โ‰ค rho) (hsmall : rho < 1) (H t : โ„•) : (โˆ‘ k โˆˆ Finset.Ico H t, rho^k) โ‰ค rho^H / (1-rho) := by by_cases hHt : H โ‰ค t ยท have hid : (โˆ‘ k โˆˆ Finset.Ico H t, rho^k) * (1-rho) = rho^H-rho^t := by rw [geom_sum_Ico (ne_of_lt hsmall) hHt] have hn : rho-1 โ‰  0 := sub_ne_zero.mpr (ne_of_lt hsmall) field_simp ring apply (le_div_iffโ‚€ (sub_pos.mpr hsmall)).mpr rw [hid] exact sub_le_self _ (pow_nonneg hrho t) ยท rw [Finset.Ico_eq_empty_of_le (le_of_not_ge hHt)] simp only [Finset.sum_empty] exact div_nonneg (pow_nonneg hrho H) (sub_nonneg.mpr hsmall.le) theorem memory_kernel_bound (B : Y โ†’L[๐•œ] X) (C : X โ†’L[๐•œ] Y) (D : Y โ†’L[๐•œ] Y) {rho Z : โ„} (hrho : 0 โ‰ค rho) (hD : โ€–Dโ€– โ‰ค rho) (z : X) (hz : โ€–zโ€– โ‰ค Z) (k : โ„•) : โ€–B ((D^k) (C z))โ€– โ‰ค (โ€–Bโ€– * โ€–Cโ€– * Z) * rho^k := by calc โ€–B ((D^k) (C z))โ€– โ‰ค โ€–Bโ€– * โ€–(D^k) (C z)โ€– := B.le_opNorm _ _ โ‰ค โ€–Bโ€– * (rho^k * โ€–C zโ€–) := mul_le_mul_of_nonneg_left (iterate_norm_bound D hrho hD (C z) k) (norm_nonneg B) _ โ‰ค โ€–Bโ€– * (rho^k * (โ€–Cโ€– * โ€–zโ€–)) := by apply mul_le_mul_of_nonneg_left _ (norm_nonneg B) exact mul_le_mul_of_nonneg_left (C.le_opNorm z) (pow_nonneg hrho k) _ โ‰ค โ€–Bโ€– * (rho^k * (โ€–Cโ€– * Z)) := by apply mul_le_mul_of_nonneg_left _ (norm_nonneg B) apply mul_le_mul_of_nonneg_left _ (pow_nonneg hrho k) exact mul_le_mul_of_nonneg_left hz (norm_nonneg C) _ = _ := by ring theorem memory_tail_bound (B : Y โ†’L[๐•œ] X) (C : X โ†’L[๐•œ] Y) (D : Y โ†’L[๐•œ] Y) {rho Z : โ„} (hrho : 0 โ‰ค rho) (hsmall : rho < 1) (hD : โ€–Dโ€– โ‰ค rho) (hZ : 0 โ‰ค Z) (z : โ„• โ†’ X) (H t : โ„•) (bounded : โˆ€ k โˆˆ Finset.Ico H t, โ€–z (t-1-k)โ€– โ‰ค Z) : โ€–โˆ‘ k โˆˆ Finset.Ico H t, B ((D^k) (C (z (t-1-k))))โ€– โ‰ค (โ€–Bโ€– * โ€–Cโ€– * Z) * (rho^H / (1-rho)) := by calc โ€–โˆ‘ k โˆˆ Finset.Ico H t, B ((D^k) (C (z (t-1-k))))โ€– โ‰ค โˆ‘ k โˆˆ Finset.Ico H t, โ€–B ((D^k) (C (z (t-1-k))))โ€– := norm_sum_le _ _ _ โ‰ค โˆ‘ k โˆˆ Finset.Ico H t, (โ€–Bโ€– * โ€–Cโ€– * Z) * rho^k := by apply Finset.sum_le_sum intro k hk exact memory_kernel_bound B C D hrho hD _ (bounded k hk) k _ = (โ€–Bโ€– * โ€–Cโ€– * Z) * โˆ‘ k โˆˆ Finset.Ico H t, rho^k := by rw [Finset.mul_sum] _ โ‰ค _ := mul_le_mul_of_nonneg_left (geometric_interval_bound hrho hsmall H t) (mul_nonneg (mul_nonneg (norm_nonneg B) (norm_nonneg C)) hZ) /-- Actual full-minus-truncated memory sum, evaluated on one fixed history. -/ theorem memory_truncation_difference_bound (B : Y โ†’L[๐•œ] X) (C : X โ†’L[๐•œ] Y) (D : Y โ†’L[๐•œ] Y) {rho Z : โ„} (hrho : 0 โ‰ค rho) (hsmall : rho < 1) (hD : โ€–Dโ€– โ‰ค rho) (hZ : 0 โ‰ค Z) (z : โ„• โ†’ X) (H t : โ„•) (hHt : H โ‰ค t) (bounded : โˆ€ k โˆˆ Finset.Ico H t, โ€–z (t-1-k)โ€– โ‰ค Z) : โ€–(โˆ‘ k โˆˆ Finset.range t, B ((D^k) (C (z (t-1-k))))) - (โˆ‘ k โˆˆ Finset.range H, B ((D^k) (C (z (t-1-k)))))โ€– โ‰ค (โ€–Bโ€– * โ€–Cโ€– * Z) * (rho^H / (1-rho)) := by rw [โ† Finset.sum_Ico_eq_sub (fun k => B ((D^k) (C (z (t-1-k))))) hHt] exact memory_tail_bound B C D hrho hsmall hD hZ z H t bounded theorem unresolved_initial_bound (B : Y โ†’L[๐•œ] X) (D : Y โ†’L[๐•œ] Y) {rho : โ„} (hrho : 0 โ‰ค rho) (hD : โ€–Dโ€– โ‰ค rho) (q0 : Y) (t : โ„•) : โ€–B ((D^t) q0)โ€– โ‰ค โ€–Bโ€– * rho^t * โ€–q0โ€– := by calc โ€–B ((D^t) q0)โ€– โ‰ค โ€–Bโ€– * โ€–(D^t) q0โ€– := B.le_opNorm _ _ โ‰ค โ€–Bโ€– * (rho^t * โ€–q0โ€–) := mul_le_mul_of_nonneg_left (iterate_norm_bound D hrho hD q0 t) (norm_nonneg B) _ = _ := by ring end Komorebi.LSM