Theorem fast_truncation Kernel checkedAs recorded L98–153
Namespace Notebook.BurgersFronts.Decided_fast_truncation
u is the stream the Burgers circuit at viscosity 1 rebuilds from the t = 0 slice of the Cole–Hopf front −2ν φ_x/φ of the potential Σ cᵢ·e^(aᵢx) given by the pairs (cᵢ, aᵢ), u_t its other output; its series converges on the box, and its window (16, 16) is within 1/1000000 of the sum there. The stream decider proved it. Goal (stream): stream burgers viscosity 1 interpretation analytic-tail basis ogf potential exponentials [1, 0], [1, -1] truncation u window 16, 16 radius 1/12, 1/16 epsilon 1/1000000
Assumptions: propext, Classical.choice, Quot.sound
Lean source & proof · 56 lines
/-- u is the stream the Burgers circuit at viscosity 1 rebuilds from the t = 0 slice of the Cole–Hopf front −2ν φ_x/φ of the potential Σ cᵢ·e^(aᵢx) given by the pairs (cᵢ, aᵢ), u_t its other output; its series converges on the box, and its window (16, 16) is within 1/1000000 of the sum there. The stream decider proved it. Goal (stream): stream burgers viscosity 1 interpretation analytic-tail basis ogf potential exponentials [1, 0], [1, -1] truncation u window 16, 16 radius 1/12, 1/16 epsilon 1/1000000 -/ theorem fast_truncation : have circuit := Gimle.Asgard.Streams.Burgers.circuit .ogf 1 have slice := Gimle.Asgard.Streams.ColeHopf.zeroSlice (Gimle.Asgard.Streams.ColeHopf.front 1 [(1, 0), (1, -1)]) (∃ u unused u_t : Gimle.Asgard.Streams.Stream 2, circuit.Rel ![u, slice, unused] ![u_t, u]) ∧ ∀ u unused u_t : Gimle.Asgard.Streams.Stream 2, circuit.Rel ![u, slice, unused] ![u_t, u] → ∀ t x : ℝ, |t| ≤ 1/12 ∧ |x| ≤ 1/16 → HasSum (Gimle.Asgard.Streams.seriesTerm .ogf u ![t, x]) (Gimle.Asgard.Streams.analyticField .ogf u ![t, x]) ∧ |Gimle.Asgard.Streams.analyticField .ogf u ![t, x] - Gimle.Asgard.Streams.windowField .ogf ![16, 16] u ![t, x]| ≤ 1/1000000 := by have root : forsetiRoot := by unfold forsetiRoot refine ⟨⟨_, 0, _, Gimle.Asgard.Streams.ColeHopf.circuit_front ((mkRat (1) 1) : ℚ) [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] (show Gimle.Asgard.Streams.ColeHopf.constantTerm [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] ≠ 0 by decide +kernel) 0⟩, fun a unused v rel => ⟨fun x hx => ?_, ?_⟩⟩ · have hc : MvPowerSeries.constantCoeff (Gimle.Asgard.Streams.ColeHopf.expSumHeat ((mkRat (1) 1) : ℚ) [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))]) ≠ 0 := by rw [Gimle.Asgard.Streams.ColeHopf.constantCoeff_expSumHeat] decide +kernel simp only [Gimle.Asgard.Streams.ColeHopf.front] at rel rw [Gimle.Asgard.Streams.ColeHopf.candidate_quotient ((mkRat (1) 1) : ℚ) _ hc (Gimle.Asgard.Streams.ColeHopf.heatSeries_pde ((mkRat (1) 1) : ℚ) _) a unused v rel] exact (Gimle.Asgard.Streams.ColeHopf.certificate (show (0 : ℚ) < ((mkRat (1) 1) : ℚ) by decide +kernel) (show (0 : ℚ) < ((mkRat (1) 1) : ℚ) by decide +kernel) [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] (by decide +kernel) (r := forsetiRadii) (by decide +kernel) (by decide +kernel) (by decide +kernel) forsetiBox (by decide +kernel)).hasSum hx · exact Gimle.Asgard.Streams.ColeHopf.front_truncation (show (0 : ℚ) < ((mkRat (1) 1) : ℚ) by decide +kernel) (show (0 : ℚ) < ((mkRat (1) 1) : ℚ) by decide +kernel) [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] (show Gimle.Asgard.Streams.ColeHopf.constantTerm [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] ≠ 0 by decide +kernel) (by decide +kernel) (r := forsetiRadii) (by decide +kernel) (by decide +kernel) (by decide +kernel) forsetiBox (by decide +kernel) ![16, 16] (by decide +kernel) a unused v rel have forsetiFront : Gimle.Asgard.Streams.ColeHopf.front (mkRat (1) 1) [((mkRat (1) 1), (mkRat (0) 1)), ((mkRat (1) 1), (mkRat (-1) 1))] = Gimle.Asgard.Streams.ColeHopf.front 1 [(1, 0), (1, -1)] := by norm_num [Rat.mkRat_eq_div] have forsetiCircuit : Gimle.Asgard.Streams.Burgers.circuit .ogf (mkRat (1) 1) = Gimle.Asgard.Streams.Burgers.circuit .ogf 1 := by norm_num [Rat.mkRat_eq_div] have forsetiInside : ∀ t x : ℝ, forsetiBox.Mem ![t, x] ↔ |t| ≤ 1/12 ∧ |x| ≤ 1/16 := by intro t x norm_num [Gimle.Asgard.Streams.Box.Mem, Fin.forall_fin_two, forsetiBox, Rat.mkRat_eq_div] have forsetiCast0 : (((mkRat (1) 1000000) : ℚ) : ℝ) = (1/1000000) := by norm_num [Rat.mkRat_eq_div] refine (fun (bridge : _ ↔ forsetiRoot) => bridge.mpr root) ?_ constructor · intro claim dsimp only at claim unfold forsetiRoot rw [forsetiFront, forsetiCircuit] obtain ⟨realized, every⟩ := claim refine ⟨realized, fun u unused u_t rel => ⟨fun z inside => ?_, fun z inside => ?_⟩⟩ all_goals have point : ![z 0, z 1] = z := by funext i; fin_cases i <;> rfl have holds := every u unused u_t rel (z 0) (z 1) ((forsetiInside _ _).mp (point ▸ inside)) rw [point] at holds · exact holds.1 · rw [forsetiCast0] exact holds.2 · intro lane unfold forsetiRoot at lane rw [forsetiFront, forsetiCircuit] at lane dsimp only obtain ⟨realized, every⟩ := lane refine ⟨realized, fun u unused u_t rel t x inside => ?_⟩ obtain ⟨sums, bound⟩ := every u unused u_t rel have mem := (forsetiInside t x).mpr inside have close := bound _ mem rw [forsetiCast0] at close exact ⟨sums _ mem, close⟩