Documentation

LeanPool.HighContrastHomogenization.Entry.Multiscale.Global.RunStepsChange

High-contrast homogenization: Entry.Multiscale.Global.RunStepsChange #

Imported from the Apache-2.0 HighContrastHomogenization development at commit 7a13dbcd8d6609264a713373f5c69ceeac870472.

The change-of-geometry steps of the run #

R3b (Alternative 2, 𝔪₊ ≠ 𝔪⋆) and R3c (Alternative 2, 𝔪₊ = 𝔪⋆ with a failed determinant test) are the two clauses of SelectionData.Selects that move the metric. Each produces a successor run state on the updated metric and a strict decrease of the run gauge by c, the charge and the 2aC(h+2)log(1+δ) jump of the metric being paid out of the determinant reserve by the shared bookkeeping run_gauge_step. These are the change-of-geometry alternatives of p.global.selection.

theorem HCPolySupport.HighContrast.Multiscale.run_step_change {d : ℕ} (hd : 2 ≤ d) (γ : ℝ) (hγ : γ ∈ Set.Ico 0 1) (P : MeasureTheory.Measure (CoeffSpace d)) (E : BlockMat d) (Ψ : ℝ → ℝ) (K : ℝ) (Src : CoeffSpace d → ℝ) (hP : MeasureTheory.IsProbabilityMeasure P) (hst : IsStationaryLaw P) (hur : IsUnitRangeLaw P) (hce : CoarseEllipticityDagger P γ E Ψ K Src) (S : SelectionData) (ε σ B : ℝ) (hε : ε ∈ Set.Ioc 0 S.eps0) (hσ : σ ∈ Set.Ioc 0 ε) (H jStar : ℕ) (hjStar : 2 * d ≤ 3 ^ jStar) (n₀ : ℤ) (a c C w : ℝ) (hC : 1 ≤ C) (hCd : ↑d ≤ C) (ha1 : 1 ≤ a) (ha : ↑d ≤ a) (hw : w = a * C / ↑d) (hc : c = 1 / 2 * S.eta ε σ * Real.log (16 / 9)) (hh1 : 1 ≤ S.h) (hL1 : 1 ≤ S.L ε σ) (hweight : Real.log (1 + C * ↑S.h) + c ≤ a * ε / 2) (hcomp : 1 / 2 * Real.log ((1 + √ε * σ) / (1 - √ε * σ)) + 2 * C * (↑S.h + 2) * Real.log (1 + √ε * σ) ≤ ε / 2) (st : RunState P γ S ε σ B E H jStar n₀) (hlt : st.k < st.n) (hsmall : profile P γ (Geometry.explicitRoundedGrid jStar st.m) jStar st.k st.n + determinantDrift P γ (Geometry.explicitRoundedGrid jStar st.m) jStar st.n ≤ S.eta ε σ) (hne : geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) ≠ explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) (hfar : ε < projectiveDistance st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))))) (hbr₁ : BlockMatLoewnerLE (blockScale (1 - √ε * σ) (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) (adaptedMean P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ)))) (hbr₂ : BlockMatLoewnerLE (adaptedMean P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ))) (blockScale (1 + √ε * σ) (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))))) (hmono : BlockMatLoewnerLE (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))) (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) st.k)) (honeP : profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ)) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) ≤ 1) (heccP : 1 / 2 * Real.log (‖geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))))‖ * ‖(geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))⁻¹‖) ≤ ε / ↑(S.L ε σ) * (↑st.n + ↑(S.L ε σ) - ↑jStar - ↑⌈B * Real.logb 3 (2 + aspectRatio E)⌉)) (hspan : profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ) + ↑S.h) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ) + ↑S.h) ≤ C * ↑S.h * (profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ)) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) + (Real.exp (↑(bigQ d γ) * detIncrement P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ) + ↑S.h)) - 1))) (haQ : 4 * ↑(bigQ d γ) * max 1 C ≤ a * C / ↑d) :
∃ (st' : RunState P γ S ε σ B E H jStar n₀), st'.m = geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) ∧ st'.k = st.n + ↑(S.L ε σ) ∧ st'.n = st.n + ↑(S.L ε σ) + ↑S.h ∧ st'.i = st.i + 1 ∧ runGauge P γ jStar (S.eta ε σ) a w S.h st'.m st'.k st'.n - runGauge P γ jStar (S.eta ε σ) a w S.h st.m st.k st.n ≤ -c

(R3b) Alternative 2, change of geometry with 𝔪₊ ≠ 𝔪⋆ (SelectionData.lean, p.global.selection). One counted step contains the change and the following length-h start-up step, so the target is partial_change_decrease (PotentialDecreases.lean). Its premises: hcomp is the first branch of comparison_choice's min (ε/2) (Cσ/4) at δ = √ε σ (supplied by the ε chosen in global_run_of_gap, passed here as hcomp); hw is weight_choice_ge_d; hmet is partial_change_metric (PartialChangeMetric.lean), whose hsym/hpos/hsymP/ hposP are Recurrence.isSymmetricBlockMat_adaptedMean + run_adaptedMean_blockPosDef, whose hmono is the annealed order, whose hbr₁/hbr₂ are the bridge sandwich at δ = √ε σ (Entry.successful_short_bridge; passed here as hbr₁/hbr₂), and whose hfar is the case hypothesis hne; hxP1 is the tail clause honeP; hspan is the Alt-1 start-up clause of Selects applied at the new state (𝔪₊, n+L, n+L), weakened from C(x + e^{QΔ} − 1) to C·h·(x + e^{QΔ} − 1) using 1 ≤ S.h; the nonnegativities are tree facts. run_reserve_change pays the charge and the 2aC(h+2)log(1+δ) jump out of the reserve (run_energy_transfer with J = 2d(h+2)log(1+δ)). The step carries one hypothesis beyond the printed statement: haQ : 4 * bigQ d γ * max 1 C ≤ a * C / d, the third conjunct of weight_choice_ge_d. The proof uses it to apply partial_change_decrease.

theorem HCPolySupport.HighContrast.Multiscale.run_step_failed_test {d : ℕ} (hd : 2 ≤ d) (γ : ℝ) (hγ : γ ∈ Set.Ico 0 1) (P : MeasureTheory.Measure (CoeffSpace d)) (E : BlockMat d) (Ψ : ℝ → ℝ) (K : ℝ) (Src : CoeffSpace d → ℝ) (hP : MeasureTheory.IsProbabilityMeasure P) (hst : IsStationaryLaw P) (hur : IsUnitRangeLaw P) (hce : CoarseEllipticityDagger P γ E Ψ K Src) (S : SelectionData) (ε σ B : ℝ) (hε : ε ∈ Set.Ioc 0 S.eps0) (hσ : σ ∈ Set.Ioc 0 ε) (H jStar : ℕ) (hH : max 4 S.h ≤ H) (hjStar : 2 * d ≤ 3 ^ jStar) (n₀ : ℤ) (Csrc : ℝ) (hsrc : ⌈Csrc * Real.logb 3 (2 * K)⌉ ≤ ↑jStar) (a c C w : ℝ) (hC : 1 ≤ C) (ha1 : 1 ≤ a) (ha : ↑d ≤ a) (hw : w = a * C / ↑d) (hc : c = 1 / 2 * S.eta ε σ * Real.log (16 / 9)) (hL1 : 1 ≤ S.L ε σ) (hweight : 4 * (Real.log (1 + 2 * C * ↑(S.L ε σ)) + Real.log (1 + C * ↑H) + c) ≤ a * C * ε * σ) (hcomp : 1 / 2 * Real.log ((1 + √ε * σ) / (1 - √ε * σ)) + 2 * C * (↑S.h + 2) * Real.log (1 + √ε * σ) ≤ C * σ / 4) (st : RunState P γ S ε σ B E H jStar n₀) (hlt : st.k < st.n) (hsmall : profile P γ (Geometry.explicitRoundedGrid jStar st.m) jStar st.k st.n + determinantDrift P γ (Geometry.explicitRoundedGrid jStar st.m) jStar st.n ≤ S.eta ε σ) (heq : geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) = explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) (hbr₁ : BlockMatLoewnerLE (blockScale (1 - √ε * σ) (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) (adaptedMean P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ)))) (hbr₂ : BlockMatLoewnerLE (adaptedMean P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ))) (blockScale (1 + √ε * σ) (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))))) (honeP : profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ)) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) ≤ 1) (heccP : 1 / 2 * Real.log (‖geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ))))‖ * ‖(geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))⁻¹‖) ≤ ε / ↑(S.L ε σ) * (↑st.n + ↑(S.L ε σ) - ↑jStar - ↑⌈B * Real.logb 3 (2 + aspectRatio E)⌉)) (htest : ¬(↑d)⁻¹ * detIncrement P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ) + ↑H) < σ) (haQ : 4 * ↑(bigQ d γ) * max 1 C ≤ a * C / ↑d) (hspan : profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ) + ↑H) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ) + ↑H) ≤ C * ↑H * (profile P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ)) + determinantDrift P γ (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) jStar (st.n + ↑(S.L ε σ)) + (Real.exp (↑(bigQ d γ) * detIncrement P (Geometry.explicitRoundedGrid jStar (geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))))) (st.n + ↑(S.L ε σ)) (st.n + ↑(S.L ε σ) + ↑H)) - 1))) :
∃ (st' : RunState P γ S ε σ B E H jStar n₀), st'.m = geometryUpdate ε st.m (explicitCanonicalMetric (adaptedMean P (Geometry.explicitRoundedGrid jStar st.m) (st.n + 2 * ↑(S.L ε σ)))) ∧ st'.k = st.n + ↑(S.L ε σ) ∧ st'.n = st.n + ↑(S.L ε σ) + ↑H ∧ st'.i = st.i + 1 ∧ runGauge P γ jStar (S.eta ε σ) a w S.h st'.m st'.k st'.n - runGauge P γ jStar (S.eta ε σ) a w S.h st.m st.k st.n ≤ -c

(R3c) Alternative 2, 𝔪₊ = 𝔪⋆, failed test (p.global.selection). The target is failed_test_decrease (PotentialDecreases.lean). hcomp is the second branch of comparison_choice (≤ Cσ/4); hmet is the bridge half of partial_change_metric at the reached target (d_pr(𝔪₊, m(𝐀_{n+L,q₊})) ≤ ½log((1+δ)/(1−δ)) from explicitCanonicalMetric_projectiveDistance_le_of_deltaSandwich and hbr₁/hbr₂); hΔ' is the negated stop test through det_bridge_not_lt; hspan is conjunct 8 of fixed_geometry_one_grid_propagation_full at h := 2 * bigQ d γ (premise by rfl), L := (H : ℤ), guard branch m = n (here k' = n'), with 1 ≤ (H : ℤ) from 4 ≤ H — this branch has no S.h dependence. run_reserve_change again pays the charge. The step carries two hypotheses beyond the printed statement: haQ : 4 * bigQ d γ * max 1 C ≤ a * C / d (the third conjunct of weight_choice_ge_d) and hspan, the conjunct-8 instance of fixed_geometry_one_grid_propagation_full spelled at the statement's own C — the theorem Skolemizes its own constant, so the instance cannot be built from hsrc/hC.