KuhnInterpolation #
Ported from scottnarmstrong/Superdiffusion at 7f20476385d4af418f110303085ad0740c9eba46. Module imports, support namespace and local option directives adapted for Lean Pool.
The Kuhn-cell affine interpolant #
This module provides a proved local carrier-level implementation for ABK26's
l.piecewise.affine.approx: the operation "assign a value at each vertex, then
extend affinely to the simplex" of the lemma's Step 1, together with the Step-2
gradient computation.
On a Kuhn cell T -- one triadic simplex of e.simplex.def, with the d + 1
vertices V(△) represented by KuhnCell.vertex -- the affine function
agreeing with a datum g : Vec d → ℝ at those vertices is unique, and its
gradient is the vector of Kuhn-edge difference quotients. This file defines
that gradient (kuhnSlope) and that affine function (kuhnInterp) and proves
the characterizing A:
kuhnInterp_vertex-- the interpolant agrees withgat every vertex;kuhnInterp_sub/kuhnInterp_apply-- the interpolant is affine on all ofVec d, with constant gradientkuhnSlope T g;kuhnInterp_congr-- the interpolant depends on the vertex datum only through itsd + 1vertex values. Together withkuhnInterp_vertexthis pinskuhnInterpas the affine extension of vertex data. A uniqueness statement against an arbitrary competitor in the coordinate presentationc + v·xis not among the statements below: the manuscript's "affine on the simplex" reading would additionally needaffineSpan ℝ T.vertexSet = ⊤, which the edge chainv_{d-r} - v_{d-r-1} = 3^{scale}·e_{π(r)}supplies but which is not recorded here;kuhnSlope_apply/kuhnSlope_order-- the gradient formula in terms of vertex differences,∂_{π(r)} = (g(v_{d-r}) − g(v_{d-r-1})) / 3^{scale};vertex_kuhnEdge_sub_apply-- the Kuhn edge chain: consecutive vertices differ by one cube side in one coordinate direction, the chain running from the lower to the upper corner of the support cube;kuhnInterpAffine-- the same function bundled as aVec d →ᵃ[ℝ] ℝ, whose only purpose iskuhnInterpAffine_eqOn_affineSpan_inter_vertexSet: two cells interpolating one global vertex datum agree on the affine span of the vertices they share. That is the well-definedness instrument for a global interpolant assembled cell by cell, and it assumes no face-to-face property ofSW(□_m).
What of the manuscript this file already carries #
e.hat.linear.linearityat the cell level:kuhnSlope_add,kuhnSlope_smul,kuhnInterp_add.- Clause 1 of
e.hat.linear.propertiesat the cell level:kuhnSlope_eq_zero_of_vertex_const,kuhnSlope_eq_zero_of_eqOn_vertexSet-- a competitor whose vertex values are all equal has vanishing gradient on the cell. This is the manuscript's "inside𝒞_j, all coarse vertices receive the same value⨍_{𝒞_j} ℓ_e, so∇ℓ̂_e = 0there". - Clause 3 of
e.hat.linear.properties((clause 3; the cases-end line asserts nothing —, format)) at the cell level:kuhnSlope_linearFn,kuhnInterp_linearFn,kuhnSlope_eq_of_eqOn_vertexSet,kuhnInterp_eq_linearFn_of_eqOn_vertexSet-- if the vertex datum isℓ_ponV(△)then the interpolant isℓ_pand its gradient isp. - Step 2's gradient display:
abs_kuhnSlope_sub_le_of_vertex_oscillation,vecNormSq_kuhnSlope_sub_le_of_vertex_oscillationand its pointwise-vertex formsvecNormSq_kuhnSlope_sub_le_of_vertex_bound,vecNormSq_kuhnSlope_sub_le_of_vertexSet_boundare|∇ℓ̂_e − e|_{L^∞(𝔰)} ≤ (C / diam 𝔰) · max_{v,w ∈ V(𝔰)} |(ℓ̂_e − ℓ_e)(v) − (ℓ̂_e − ℓ_e)(w)|with the explicit constants of this implementation: the per-coordinate constant is1against the cube side3^{scale}, and the Euclidean form carries√d.
Scope: what this file does NOT do #
This file is the cell-level carrier only. It does not construct the global
ℓ̂_p of l.piecewise.affine.approx, does not mention bad cubes, components,
neighborhoods, layers, or the collar, and asserts nothing about how cells of
different scales meet. In particular:
- (the neighborhood
𝒩(𝒞_j)spans three layers, not two) (neighborhoods of distinct components are not disjoint): no layer window and no disjointness statement occurs here. - What it provides is the per-cell input to either reading -- the exact
gradient of one affine piece in terms of its own vertex data -- so it is
neutral with respect to the layer count and the overlap. *: no face-to-face
or simplicial-complex property of
SW(□_m)is used or asserted.kuhnInterp_eqOn_inter_vertexSetcompares two cells only at points that are vertices of both. - : no slope-square or collar constant enters.
- (ruled): not consumed -- no connectivity or cluster geometry appears.
References #
- ABK26, (
l.piecewise.affine.approxwithe.hat.linear.properties), (its proof, Steps 1 and 2), (e.simplex.def,V(△)), (ℓ_e(x) = e · x), (e.hat.linear.linearity).
The linear function ℓ_p #
ABK26 ℓ_p: "we let ℓ_e(x) = e · x denote the linear function with slope
e ∈ ℝ^d".
Equations
Instances For
Elementary vecDot algebra #
The Kuhn edge chain #
The lower endpoint of the r-th edge of the Kuhn vertex chain of a cell:
the vertex v_{d-r-1} of KuhnCell.vertex.
Instances For
The Kuhn edge chain. Consecutive vertices of a Kuhn cell differ in
exactly one coordinate, by exactly one cube side: the r-th edge points along
the coordinate direction T.order r. This is the geometric fact that makes
the vertex list of KuhnCell.vertex a monotone lattice path from the lower to
the upper corner of the support cube.
The slope of the interpolant #
The gradient of the affine interpolant on a Kuhn cell. Along the
coordinate direction T.order r the cell has exactly one edge, from
v_{d-r-1} to v_{d-r}, of length 3^{scale}; the gradient coordinate is the
corresponding difference quotient. This is the "∇ℓ̂_e is constant on each
coarse simplex" made explicit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The gradient formula, indexed in the ambient coordinate order.
The gradient formula, indexed in the cell's own edge order.
The gradient depends on the vertex datum only through its d + 1 vertex
values.
e.hat.linear.linearity at the cell level: the interpolant's gradient is
additive in the vertex datum.
Clause 1 of e.hat.linear.properties at the cell level, as the manuscript
proves it: if every vertex of the cell receives the same value, the interpolant
has vanishing gradient there.
Clause 3 of e.hat.linear.properties ((clause 3; the cases-end line
asserts nothing —, format)) at the cell level, as the manuscript proves it: the
vertex datum ℓ_p has interpolant gradient exactly p.
The interpolant #
The affine interpolant of vertex data on a Kuhn cell, the object of Step 1
of the proof of l.piecewise.affine.approx: the affine function anchored at
the cell's lower corner v_0 with gradient kuhnSlope T g.
kuhnInterp_vertex shows it agrees with g at all d + 1 vertices, and
eq_kuhnInterp_of_vertex_eq shows it is the only affine function that does; so
this is the manuscript's "extend affinely" of the vertex datum g. It is
defined, and affine, on all of Vec d; the manuscript uses its restriction to
the cell.
Equations
- Algsuperdiff.Section3.Provider.Affine.kuhnInterp T g x = g (T.vertex 0) + HCPolySupport.vecDot (Algsuperdiff.Section3.Provider.Affine.kuhnSlope T g) (x - T.vertex 0)
Instances For
e.hat.linear.2 at the cell level: kuhnInterp T g is affine, with
constant gradient kuhnSlope T g.
e.hat.linear.linearity at the cell level.
Agreement at the vertices #
The interpolant agrees with the vertex datum at every vertex. This is the defining property of Step 1's "extend affinely".
Two cells interpolating the same global vertex datum agree at every point that is a vertex of both. No face-to-face property of the partition is used or asserted.
The bundled affine map #
kuhnInterp T g bundled as an affine map on Vec d, with linear part v ↦ (∇ℓ̂) · v. The bundling exists for exactly one purpose: it makes
kuhnInterpAffine_eqOn_affineSpan_inter_vertexSet available, which is the
well-definedness instrument for a global interpolant assembled cell by cell
(the manuscript's "since adjacent coarse simplices share complete faces, this
extension is well-defined and continuous"; the mesh-interior half ---). No
face-to-face property is assumed anywhere: the statement is about the affine
span of whatever vertices two cells happen to share.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Two cells interpolating the same global vertex datum agree on the affine
span of the vertices they share. Nothing here asserts that any two cells of
SW(□_m) do share a face.
Determination by the vertex values #
The interpolant of the vertex datum ℓ_p is ℓ_p itself: clause 3 of
e.hat.linear.properties ((clause 3; the cases-end line asserts nothing —,
format)) at the cell level.
The interpolant depends on the vertex datum only through its d + 1 vertex
values.
The Set.EqOn interface of clauses 1 and 3 #
These are the shapes that the global competitor of l.piecewise.affine.approx
feeds to Multiscale.sum_of_a_decomp (SubadditiveDecomposition.lean), whose
hbadF/hbadG carry clause 1 and whose hoffF/hoffG carry clause 3 as
statements about the per-cell gradient value. Each is the corresponding vertex
statement above, restated over V(△).
Clause 1 of e.hat.linear.properties in the vertex-set form: a competitor
whose vertex datum is constant on V(△) has zero gradient on the cell.
Clause 3 of e.hat.linear.properties ((clause 3; the cases-end line
asserts nothing —, format)) in the vertex-set form: a competitor whose vertex
datum agrees with ℓ_p on V(△) has gradient exactly p on the cell.
The function form of kuhnSlope_eq_of_eqOn_vertexSet: a competitor whose
vertex datum agrees with ℓ_p on V(△) is ℓ_p on the cell.
Step 2: the gradient estimate #
Step 2 of the proof of l.piecewise.affine.approx, in the coordinate form.
If the vertex values of ℓ̂ − ℓ_p oscillate by at most B over the vertices
of the cell, then each coordinate of ∇ℓ̂ − p is at most B over the cube
side 3^{scale}. This is the printed |∇ℓ̂_e − e|_{L^∞(𝔰)} ≤ (C / diam 𝔰) · max_{v,w ∈ V(𝔰)} |(ℓ̂_e − ℓ_e)(v) − (ℓ̂_e − ℓ_e)(w)| with C = 1 against the
cube side.
Step 2 of the proof of l.piecewise.affine.approx, in the Euclidean form
used downstream: the squared Euclidean norm of ∇ℓ̂ − p on the cell is at most
d · (B / 3^{scale})². Against the cube side 3^{scale} the constant is
√d; the printed display normalizes by diam(𝔰) = √d·3^{scale}, so the
printed C(d) is d, not √d.
The form of Step 2 that the manuscript actually feeds: a pointwise vertex
bound |ℓ̂ − ℓ_p| ≤ B at the vertices of the cell gives the gradient bound
with the oscillation replaced by 2B.
Step 2 in the vertex-set form: this is the shape a global competitor feeds,
since the manuscript's Step-2 vertex bound |ℓ̂_e(v) − ℓ_e(v)| ≤ |e| diam(𝒞_j) 1_{v ∈ V(𝒞_j)} is a statement about the points of V(△).