Lean source & proof · 37 lines
/-- The typed mild feedback circuit at viscosity 1/10 admits every input with the listed even, mean-zero initial vorticity; higher boundary coefficients are free. A unique formal output exists. On 0 ≤ t ≤ 1/5760, every output has absolute convergence, Fourier reconstruction, continuous spatial derivatives, and nonincreasing spectral energy and enstrophy. The time derivative, classical PDE and dissipation derivative identities hold in the interval's interior; the time derivative extends continuously to its endpoints, and a positive horizon also gives a right derivative at zero. The physical field remains in the requested band. The window counts interaction terms, each already a function of physical time. The stream decider proved it. Goal (stream): stream vorticity viscosity 1/10 interpretation mild-band basis interaction start modes [1, 0, 1/2], [-1, 0, 1/2], [1, 1, 1/2], [-1, -1, 1/2], [2, 1, 1/2], [-2, -1, 1/2] band u time 1/5760 : u >= -3519/1000 and u <= 3519/1000 -/
theorem band_decided :
Gimle.Forseti.Mild.Contract (Gimle.Asgard.Streams.Mild.mildCircuit (1/10))
(fun input => input 0 0 = Gimle.Asgard.Streams.Mild.embed (Gimle.Asgard.Streams.Torus.Table.toTrig [((1, 0), (1/2)), ((-1, 0), (1/2)), ((1, 1), (1/2)), ((-1, -1), (1/2)), ((2, 1), (1/2)), ((-2, -1), (1/2))]))
(fun output => Gimle.Forseti.MildVorticity.Certified (1/10) (Gimle.Asgard.Streams.Torus.Table.toTrig [((1, 0), (1/2)), ((-1, 0), (1/2)), ((1, 1), (1/2)), ((-1, -1), (1/2)), ((2, 1), (1/2)), ((-2, -1), (1/2))]) (1/5760) output ∧
(∀ t ∈ Set.Icc 0 (1/5760), ∀ x : ℝ × ℝ, (-3519/1000) ≤ Gimle.Asgard.Streams.Mild.analyticField (1/10) (output 0) t x ∧ Gimle.Asgard.Streams.Mild.analyticField (1/10) (output 0) t x ≤ (3519/1000))) := by
have root : forsetiRoot := by
have hs : Gimle.Asgard.Streams.Torus.SizeLE 3 forsetiP := by
exact Gimle.Asgard.Streams.Torus.Table.sizeLE_toTrig (by decide +kernel : ∀ e ∈ forsetiTable, Gimle.Asgard.Streams.Torus.size e.1 ≤ 3)
have hl : Gimle.Asgard.Streams.Torus.l1 forsetiP ≤ (mkRat (3) 1) := (Gimle.Asgard.Streams.Torus.Table.l1_le_absSum forsetiTable).trans (by decide +kernel : Gimle.Asgard.Streams.Torus.Table.absSum forsetiTable ≤ (mkRat (3) 1))
have hc : Gimle.Forseti.Mild.Contract (Gimle.Asgard.Streams.Mild.mildCircuit (1 / 10 : ℚ))
(fun input => input 0 0 = Gimle.Asgard.Streams.Mild.embed forsetiP)
(Gimle.Forseti.MildVorticity.Certified (1 / 10 : ℚ) forsetiP (((mkRat (1) 5760) : ℚ) : ℝ)) := by
exact Gimle.Forseti.MildVorticity.Table.catalan_contract forsetiTable (by decide +kernel) (by decide +kernel) (r := (mkRat (1) 24)) (by norm_num [Rat.mkRat_eq_div]) (K := 3) (by decide +kernel) (L := (mkRat (3) 1)) (by decide +kernel) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div])
unfold forsetiRoot forsetiPost
apply Gimle.Forseti.MildVorticity.contract_with forsetiP hc
have h := Gimle.Asgard.Streams.Mild.wild_catalan_band (ν := (1 / 10 : ℚ)) (r := (mkRat (1) 24)) (T := (((mkRat (1) 5760) : ℚ) : ℝ)) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div]) (by norm_num [Rat.mkRat_eq_div]) (Gimle.Forseti.MildVorticity.boundary forsetiP) forsetiP rfl (L := (mkRat (3) 1)) hl (by norm_num [Rat.mkRat_eq_div]) 8
intro t ht x
have hh := abs_le.mp (h t ht x)
exact ⟨le_trans (by exact_mod_cast (show (mkRat (-3519) 1000) ≤ -(Gimle.Asgard.Streams.Mild.catalanBand (mkRat (3) 1) (mkRat (1) 24) 8) by decide +kernel)) hh.1, le_trans hh.2 (by exact_mod_cast (show Gimle.Asgard.Streams.Mild.catalanBand (mkRat (3) 1) (mkRat (1) 24) 8 ≤ (mkRat (3519) 1000) by decide +kernel))⟩
have forsetiInitial : forsetiP = (Gimle.Asgard.Streams.Torus.Table.toTrig [((1, 0), (1/2)), ((-1, 0), (1/2)), ((1, 1), (1/2)), ((-1, -1), (1/2)), ((2, 1), (1/2)), ((-2, -1), (1/2))]) := by
unfold forsetiP forsetiTable
norm_num [Rat.mkRat_eq_div]
have forsetiViscosity : ((mkRat (1) 10) : ℚ) = (1/10) := by norm_num [Rat.mkRat_eq_div]
have forsetiCast0 : (((mkRat (1) 5760) : ℚ) : ℝ) = (1/5760) := by norm_num [Rat.mkRat_eq_div]
have forsetiCast1 : (((mkRat (-3519) 1000) : ℚ) : ℝ) = (-3519/1000) := by norm_num [Rat.mkRat_eq_div]
have forsetiCast2 : (((mkRat (3519) 1000) : ℚ) : ℝ) = (3519/1000) := by norm_num [Rat.mkRat_eq_div]
refine (fun (bridge : _ ↔ forsetiRoot) => bridge.mpr root) ?_
constructor
· intro claim
unfold forsetiRoot forsetiPost
set_option linter.unusedSimpArgs false in simp only [forsetiInitial, forsetiViscosity, forsetiCast0, forsetiCast1, forsetiCast2, Rat.cast_zero]
exact claim
· intro lane
unfold forsetiRoot forsetiPost at lane
set_option linter.unusedSimpArgs false in simp only [forsetiInitial, forsetiViscosity, forsetiCast0, forsetiCast1, forsetiCast2, Rat.cast_zero] at lane
exact lane