Documentation

LeanPool.Superdiffusion.Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.Step5Basket

Step5Basket #

Ported from scottnarmstrong/Superdiffusion at 7f20476385d4af418f110303085ad0740c9eba46. Module imports, support namespace and local option directives adapted for Lean Pool.

The Step-5 analytic basket: the gate, the re-sited gauge, and the defect binder #

Closure.JunctionDischargeStepFiveDisplay.step5GaugeEndpoint_of_correctors_gauge reduces Closure.Step5GaugeEndpoint to a list of named legs, read at a per-cube forcing gauge. Closure.StepProducers.step5GaugeEndpoint_closureFamilies_of_legs discharges, at the closure's own corrector families and at that per-cube gauge, the seven legs that are statements about those families rather than displays of the manuscript. This module

What is proved #

legcontentroute
hCdef0 <= Cdef at Cdef = step5CrossDefectConst d
Step5DefectGauge.step5CrossDefectConst_nonneg
hgatestep5CrossDefectConst d * cgamma^15 <= 2
step5CrossDefectConst_mul_gamma_pow_fifteen_le_two_of_regime: the regime's own C c⋆^{-1} <= E
and cgamma <= E^{-5}, at the d-dependent threshold step5GateConst d = 1 + d^3, exactly the
enlargement device of Closure.ClosureFinalArithmetic
hgauge0the gauge is nonnegativedischarged inline by Closure.StepProducers; also
available here as step5Gauge_nonneg
hmemGaugethe per-cube gauge is L^4 in the samplememLp_four_step5Gauge:
LocalizationOscillationDisplay.integrable_shellDerivNormSum_rpow_four on M.P, transported to
(cutoffSampleLaw M) along the measurable embedding
Provider.Stream.measurableEmbedding_cutoffSample_val and Cutoff.map_cutoffSampleLaw_val
hdefectthe per-cube step at the closure's gridstep5CrossDefect_le_step5Gauge:
Step5DefectGauge.step5CrossDefect_le_meshOscillationCell at R.scale = K - j = nmesh <= n
hD, hNe.def.w at the two closure familiesClosure.ClosureAssembly
hmemD, hintD, hsampN, hsampGthe four Dirichlet spatial/sample routes
Closure.StepProducers
hprod, hgrad0the Hoelder split on the grid
descendantsAverage_integral_vecNormSq_matVecMul_le: |A_R v_R|^2 <= ||A_R||^2 |v_R|^2,
Cauchy--Schwarz in the sample at the second moment, then Cauchy--Schwarz on the finite grid
hsampX, hsampSthe two remaining per-cube sample integrabilities
integrable_vecDot_matVecMul_of_memLp_four, integrable_vecNormSq_matVecMul_of_memLp_four, from
the same two fourth-moment legs plus measurability

The gate is the same device Closure.ClosureFinalArithmetic already uses for the two regime facts: step5CrossDefectConst d is dimensional and absolute, `E

= 2C/3andcgamma <= E^{-1}givecgamma^15 <= (2C/3)^{-1}, and C >= 1 + d^3 >= 2 step5CrossDefectConst dcloses it. No smallness of the manuscript is assumed: the threshold is *produced*, and it is consumed only inside `Closure.ClosureRegime`.

The residual basket #

step5GaugeEndpoint_closureFamilies_of_momentLegs still carries, as binders, exactly the legs that this lane did not reach:

Nothing below papers over any of them. In particular no Closure.ClosureStep5Input is produced by this module: the residual basket above is still carried as binders here.

The second reason previously given --- that Closure.ClosureStep5Input "is quantified over every d with NeZero d, whereas the re-sited oscillation endpoint. is available only for 2 <= d" --- is obsolete and was never an obstruction: Closure.ClosureFinal.ClosureStep5Input d is defined as 2 <= d ->., so the 2 <= d restriction of the Step-5 inputs is exactly the hypothesis that statement supplies. The residual basket, not the dimension quantifier, is the whole reason this module stops short; and that basket is itself discharged downstream, in Closure.Step5Input (nine legs) and Closure.Step5SampDef (the tenth), which together produce Closure.ClosureStep5Input d for every d with NeZero d.

References #

The gate Cdef cgamma^15 <= 2 #

The absolute, dimension-dependent threshold at which the manuscript's standing hypotheses C c⋆^{-1} <= E and cgamma <= E^{-5} already deliver the Step-5 defect gate. It is the Step-5 analogue of Closure.closureRegimeConst.

Equations
Instances For

    The geometric constant of the per-cube defect step is at most half the threshold.

    hgate, from the regime's own antecedents.

    Closure.ClosureRegime carries C c⋆^{-1} <= E and cgamma <= E^{-5}. At the absolute threshold step5GateConst d these already force Cdef cgamma^15 <= 2 for the geometric constant Cdef = step5CrossDefectConst d of the per-cube step. This is the same enlargement device Closure.gamma_le_exp_neg_one_of_regime and Closure.three_mul_switchBudget_le_one_of_regime use, with a d-dependent threshold in place of an absolute one.

    hmemGauge: the re-sited forcing gauge is L^4 in the sample #

    Unconditional. L^p membership transports from the shell-sequence law to the cutoff sample law along the sample inclusion, which is a measurable embedding pushing the sample law forward onto M.P.

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.memLp_four_shellDerivNormSum {d : ℕ} (M : ABKModel d) {lowScale highScale : ℤ} (hlt : lowScale < highScale) (z : HCPolySupport.Vec d) :
    MeasureTheory.MemLp (fun (omega : Cutoff.ShellSeq d) => shellDerivNormSum lowScale highScale z omega) 4 ↑M.P

    The forcing gauge of e.nablaw.oscillations is L^4 on the shell-sequence law: its fourth power is integrable by the weak-Orlicz tail e.nabla.km.kn.infty.

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.memLp_four_step5Gauge {d : ℕ} (M : ABKModel d) {lowScale highScale : ℤ} (hlt : lowScale < highScale) (nmesh : ℤ) (R : HCPolySupport.TriadicCube d) :
    MeasureTheory.MemLp (fun (omega : Cutoff.CutoffSample d) => 3 ^ ↑nmesh * shellDerivNormSum lowScale highScale (HCPolySupport.triadicCubeShift R) ↑omega) 4 ↑(Cutoff.cutoffSampleLaw M)

    hmemGauge at the re-sited gauge, on the closure's own sample carrier.

    hdefect at the closure's grid #

    hdefect at the mesh grid descendantsAtDepth cu_K j.

    Every cube of that grid has scale K - j; at nmesh = K - j <= n the per-cube step, proved in Closure.Step5DefectGauge, is literally the binder, the forcing gauge being read at each cube's own base point.

    The Step-5 endpoint at the closure families, at the re-sited gauge #

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.step5GaugeEndpoint_closureFamilies_of_gaugeLegs {d : ℕ} [NeZero d] (M : ABKModel d) (n : ℤ) (h K j : ℕ) {e : HCPolySupport.Vec d} (he : HCPolySupport.vecNormSq e = 1) {nmesh : ℤ} (hmesh : ↑K - ↑j = nmesh) (hsc : nmesh ≤ n) (hh : 0 < h) {C1 C2 shellMoment gradMoment : ℝ} (hgate : step5CrossDefectConst d * M.gamma ^ 15 ≤ 2) (hintP : ∀ (omega : Cutoff.ShellSeq d), MeasureTheory.IntegrableOn (fun (x : HCPolySupport.Vec d) => HCPolySupport.vecDot e (HCPolySupport.matVecMul ((Cutoff.finiteShellIncrement omega n (n + ↑h)).toFun x) ((alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) omega).grad x))) (HCPolySupport.cubeSet (HCPolySupport.originCube d ↑K)) MeasureTheory.volume) (hsampX : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.Integrable (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.vecDot e (HCPolySupport.matVecMul (freshShellCubeAverage R (↑omega) n (n + ↑h)) (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x))) ↑(Cutoff.cutoffSampleLaw M)) (hsampS : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.Integrable (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.vecNormSq (HCPolySupport.matVecMul (freshShellCubeAverage R (↑omega) n (n + ↑h)) (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x))) ↑(Cutoff.cutoffSampleLaw M)) (hsampDef : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.Integrable (fun (omega : Cutoff.CutoffSample d) => step5CrossDefect R (↑omega) n (n + ↑h) e fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) ↑(Cutoff.cutoffSampleLaw M)) (hmemOsc : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.MemLp (fun (omega : Cutoff.CutoffSample d) => meshOscillationCell nmesh (fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) R) 4 ↑(Cutoff.cutoffSampleLaw M)) (hosc : ((gridFourthMomentRoot (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => meshOscillationCell nmesh (fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) R) + (↑(Annealed.sigmaBar M n))⁻¹ * gridFourthMomentRoot (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => 3 ^ ↑nmesh * shellDerivNormSum n (n + ↑h) (HCPolySupport.triadicCubeShift R) ↑omega) ≤ M.gamma ^ 15) (hC1 : 0 ≤ C1) (hgrad0 : 0 ≤ gradMoment) (hprod : (HCPolySupport.descendantsAverage (HCPolySupport.originCube d ↑K) j fun (R : HCPolySupport.TriadicCube d) => ∫ (omega : Cutoff.CutoffSample d), HCPolySupport.vecNormSq (HCPolySupport.matVecMul (freshShellCubeAverage R (↑omega) n (n + ↑h)) (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x)) ∂↑(Cutoff.cutoffSampleLaw M)) ≤ shellMoment * gradMoment) (hshell : shellMoment ≤ C1 * ↑h * 3 ^ (2 * M.gamma * ↑(n + ↑h))) (hgradM : gradMoment ≤ C2 * (↑(Annealed.sigmaBar M n) ^ 2)⁻¹ * ↑h * 3 ^ (2 * M.gamma * ↑(n + ↑h))) :

    Closure.Step5GaugeEndpoint at the closure's own corrector families and at the per-cube forcing gauge, with nine legs discharged.

    This adds, to the seven family legs already discharged by Closure.StepProducers.step5GaugeEndpoint_closureFamilies_of_legs, the three legs hCdef, hdefect and hmemGauge, all proved: the gauge is sited at each cube's own base point, which is exactly what makes hdefect dischargeable.

    What remains are exactly the residual analytic legs listed in the module docstring. No smallness, no normalization and no bound of ABK26 is assumed here: hgate is supplied by the caller from step5CrossDefectConst_mul_gamma_pow_fifteen_le_two_of_regime, i.e. from Closure.ClosureRegime itself.

    hprod: the grid/sample Hoelder split #

    Closure.ShellProductControl does the scale bookkeeping once hprod is granted at some pair (shellMoment, gradMoment). The manuscript's own choice is Hoelder, which fixes the pair to the two grid fourth moments below; the three lemmas of this section carry that split out, so that hprod and hgrad0 are proved and the two moment binders that remain are literally e.km.kn.Lp and e.nablaw.in.L.eight read on the closure's grid.

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.memLp_two_rpow_two_of_memLp_four {Omega : Type u_1} [MeasurableSpace Omega] {mu : MeasureTheory.Measure Omega} {f : Omega → ℝ} (hf : ∀ (omega : Omega), 0 ≤ f omega) (hfm : MeasureTheory.MemLp f 4 mu) :
    MeasureTheory.MemLp (fun (omega : Omega) => f omega ^ 2) 2 mu

    The square of a nonnegative L^4 function is L^2.

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.integrable_rpow_two_of_memLp_four {Omega : Type u_1} [MeasurableSpace Omega] {mu : MeasureTheory.Measure Omega} [MeasureTheory.IsFiniteMeasure mu] {f : Omega → ℝ} (hf : ∀ (omega : Omega), 0 ≤ f omega) (hfm : MeasureTheory.MemLp f 4 mu) :
    MeasureTheory.Integrable (fun (omega : Omega) => f omega ^ 2) mu
    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.integral_rpow_two_mul_rpow_two_le {Omega : Type u_1} [MeasurableSpace Omega] (mu : MeasureTheory.Measure Omega) {a b : Omega → ℝ} (ha : ∀ (omega : Omega), 0 ≤ a omega) (hb : ∀ (omega : Omega), 0 ≤ b omega) (ham : MeasureTheory.MemLp a 4 mu) (hbm : MeasureTheory.MemLp b 4 mu) :
    ∫ (omega : Omega), a omega ^ 2 * b omega ^ 2 ∂mu ≤ (∫ (omega : Omega), a omega ^ 4 ∂mu) ^ 2⁻¹ * (∫ (omega : Omega), b omega ^ 4 ∂mu) ^ 2⁻¹

    Cauchy--Schwarz in the sample at the second moment, in the fourth-moment spelling.

    Hoelder on the grid at a pair of square roots.

    hprod, proved: the grid average of the sample mean of |A_R v_R|^2 is at most the product of the square roots of the two grid fourth moments, of the operator norms and of the vector norms. This is the Hoelder step, at the closure's grid carrier.

    hsampS and hsampX from the same two fourth-moment legs #

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.integrable_vecNormSq_matVecMul_of_memLp_four {d : ℕ} {Omega : Type u_1} [MeasurableSpace Omega] (mu : MeasureTheory.Measure Omega) {A : Omega → HCPolySupport.Mat d} {v : Omega → HCPolySupport.Vec d} (hA : MeasureTheory.MemLp (fun (omega : Omega) => HCPolySupport.Book.Ch02.matrixOperatorNorm (A omega)) 4 mu) (hv : MeasureTheory.MemLp (fun (omega : Omega) => HCPolySupport.Book.Ch02.vecNorm (v omega)) 4 mu) (hmeas : MeasureTheory.AEStronglyMeasurable (fun (omega : Omega) => HCPolySupport.vecNormSq (HCPolySupport.matVecMul (A omega) (v omega))) mu) :
    MeasureTheory.Integrable (fun (omega : Omega) => HCPolySupport.vecNormSq (HCPolySupport.matVecMul (A omega) (v omega))) mu

    hsampS, from the two fourth-moment legs and the measurability of the quantity itself.

    hsampX, from the two fourth-moment legs and the measurability of the quantity itself.

    The endpoint at the two grid fourth moments #

    theorem Algsuperdiff.Section3.Provider.Diffusivity.ApproximateRecurrence.Closure.step5GaugeEndpoint_closureFamilies_of_momentLegs {d : ℕ} [NeZero d] (M : ABKModel d) (n : ℤ) (h K j : ℕ) {e : HCPolySupport.Vec d} (he : HCPolySupport.vecNormSq e = 1) {nmesh : ℤ} (hmesh : ↑K - ↑j = nmesh) (hsc : nmesh ≤ n) (hh : 0 < h) {C1 C2 : ℝ} (hgate : step5CrossDefectConst d * M.gamma ^ 15 ≤ 2) (hintP : ∀ (omega : Cutoff.ShellSeq d), MeasureTheory.IntegrableOn (fun (x : HCPolySupport.Vec d) => HCPolySupport.vecDot e (HCPolySupport.matVecMul ((Cutoff.finiteShellIncrement omega n (n + ↑h)).toFun x) ((alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) omega).grad x))) (HCPolySupport.cubeSet (HCPolySupport.originCube d ↑K)) MeasureTheory.volume) (hmeasX : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.AEStronglyMeasurable (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.vecDot e (HCPolySupport.matVecMul (freshShellCubeAverage R (↑omega) n (n + ↑h)) (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x))) ↑(Cutoff.cutoffSampleLaw M)) (hmeasS : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.AEStronglyMeasurable (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.vecNormSq (HCPolySupport.matVecMul (freshShellCubeAverage R (↑omega) n (n + ↑h)) (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x))) ↑(Cutoff.cutoffSampleLaw M)) (hsampDef : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.Integrable (fun (omega : Cutoff.CutoffSample d) => step5CrossDefect R (↑omega) n (n + ↑h) e fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) ↑(Cutoff.cutoffSampleLaw M)) (hAmem : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.MemLp (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.Book.Ch02.matrixOperatorNorm (freshShellCubeAverage R (↑omega) n (n + ↑h))) 4 ↑(Cutoff.cutoffSampleLaw M)) (hvmem : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.MemLp (fun (omega : Cutoff.CutoffSample d) => HCPolySupport.Book.Ch02.vecNorm (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x)) 4 ↑(Cutoff.cutoffSampleLaw M)) (hmemOsc : ∀ R ∈ HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j, MeasureTheory.MemLp (fun (omega : Cutoff.CutoffSample d) => meshOscillationCell nmesh (fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) R) 4 ↑(Cutoff.cutoffSampleLaw M)) (hosc : ((gridFourthMomentRoot (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => meshOscillationCell nmesh (fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x) R) + (↑(Annealed.sigmaBar M n))⁻¹ * gridFourthMomentRoot (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => 3 ^ ↑nmesh * shellDerivNormSum n (n + ↑h) (HCPolySupport.triadicCubeShift R) ↑omega) ≤ M.gamma ^ 15) (hC1 : 0 ≤ C1) (hshell : (gridFourthMoment (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => HCPolySupport.Book.Ch02.matrixOperatorNorm (freshShellCubeAverage R (↑omega) n (n + ↑h))) ^ 2⁻¹ ≤ C1 * ↑h * 3 ^ (2 * M.gamma * ↑(n + ↑h))) (hgradM : (gridFourthMoment (↑(Cutoff.cutoffSampleLaw M)) (HCPolySupport.descendantsAtDepth (HCPolySupport.originCube d ↑K) j) fun (R : HCPolySupport.TriadicCube d) (omega : Cutoff.CutoffSample d) => HCPolySupport.Book.Ch02.vecNorm (HCPolySupport.cubeAverageVec R fun (x : HCPolySupport.Vec d) => (alongIncrementPath n h (closureDirichletFamily (↑(Annealed.sigmaBar M n))⁻¹ e K) ↑omega).grad x)) ^ 2⁻¹ ≤ C2 * (↑(Annealed.sigmaBar M n) ^ 2)⁻¹ * ↑h * 3 ^ (2 * M.gamma * ↑(n + ↑h))) :

    Closure.Step5GaugeEndpoint at the closure families, with the Hoelder split carried out.

    Relative to step5GaugeEndpoint_closureFamilies_of_gaugeLegs this discharges four more legs --- hprod, hgrad0, hsampX and hsampS --- from the two grid fourth-moment memberships hAmem, hvmem and two measurability side conditions, and restates hshell and hgradM at the explicit grid fourth moments the manuscript's Hoelder step produces:

    • hshell is e.km.kn.Lp read as (avsum_ ||(k_{n+h} - k_n)_R||^4)^{1/2} <= h 3^{2 cgamma (n+h)};
    • hgradM is e.nablaw.in.L.eight read as (avsum_ |(grad w_D)_R|^4)^{1/2} <= shom_n^{-2} h 3^{2 cgamma (n+h)}.

    The residual basket is therefore hintP, hsampDef, hmeasX, hmeasS, hAmem, hvmem, hmemOsc, hosc, hshell, hgradM.