pub trait ApproximationSubspace<const K: usize, F: SemiflowFloat = f64>: ChernoffFunction<F> {
// Required methods
fn in_subspace(&self, f: &Self::S) -> bool;
fn jet(&self, f: &Self::S, out: &mut [Self::S]) -> Result<(), SemiflowError>;
}Expand description
Opt-in marker super-trait: kernel declares order-K approximation subspace.
Witnesses the condition f ∈ D(A^K) required by Galkin-Remizov 2025 IJM
Theorem 3.1 for order-K Chernoff convergence. A type may implement this
for MULTIPLE values of K simultaneously (Example 4.2 multi-K co-witness).
§Design
- NOT default-bridged (unlike
TimedChernoffFunction). An impl must explicitly write thein_subspace/jetbodies — silently returningfalsewould be a worse footgun than no impl at all (ADR-0073 §“Rationale”). in_subspacereturnsbool(minimal predicate surface).jetwrites to&mut [Self::S](zero-alloc slice, per ADR-0041 pattern).
Required Methods§
Sourcefn in_subspace(&self, f: &Self::S) -> bool
fn in_subspace(&self, f: &Self::S) -> bool
Returns true if f lies in the order-K approximation subspace D(A^K).
Witnessing K-jet membership is a non-trivial claim; implementations
should check datum validity (finite values, sufficient grid resolution)
as a minimum. A true return licenses the order-K convergence claim
per Galkin-Remizov 2025 §3.1.
Sourcefn jet(&self, f: &Self::S, out: &mut [Self::S]) -> Result<(), SemiflowError>
fn jet(&self, f: &Self::S, out: &mut [Self::S]) -> Result<(), SemiflowError>
K-jet operator: writes [A^0 f, A^1 f, ..., A^K f] into out.
out MUST have length K + 1; out[0] = f (identity); out[K] = A^K f.
§Errors
SemiflowError::DomainViolationifout.len() != K + 1.- Any operator evaluation error propagates unchanged.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl ApproximationSubspace<2> for Diffusion4thChernoff<f64>
K=2 approximation subspace for the palindromic Strang K5 kernel.
Added v5.0 as a strict precondition for LadderRung<2, f64> (ADR-0100 AC2).
The K5 palindromic Strang is order-2 on D(A²) per math §13 (symmetric semigroup
splitting theorem); this impl witnesses that tangency formally.
in_subspace: requires ≥9 grid points (same as K=4 below — 5-point stencil
applied twice to produce A²f) and all values finite. Pragmatic FD proxy for
C²_b(Ω) condition from math.md §26.
jet: writes [f, Af, A²f] via 2 iterations of apply_divergence_form_op_d4.
Returns DomainViolation if out.len() != 3.
impl ApproximationSubspace<2> for DiffusionChernoff<f64>
K=2 approximation subspace for the ζ-A diffusion kernel.
in_subspace: f lies in D(A^2) when the grid has ≥5 points (required
for the 5-point central-difference stencil) and all values are finite.
This is a pragmatic Rust check; the full C^k_b condition from math.md §26
is verified up to finite-difference proxy — flagged as v3.x refinement.
jet: computes [f, Af, A²f] via 3-point (f’) and 5-point (f’’) central FD
applied iteratively through the discrete generator. Returns DomainViolation
if out.len() != 3.
impl ApproximationSubspace<2> for KolmogorovHypoelliptic<f64>
K=2 approximation subspace for the Kolmogorov hypoelliptic Chernoff kernel.
in_subspace: f lies in the K=2 domain when the 2D grid has ≥4 nodes on
each axis (required for Catmull-Rom interpolation) and all values are finite.
Full hypoelliptic C²-smoothness verification is a v3.x research item
(deferred per ADR-0077 §“Decision”).
jet: 2-jet computation for hypoelliptic operators requires
bracket-aware second derivatives — deferred to v3.x. Returns
Unsupported if called; v3.1 shippers satisfy the K=2 tangency
proof via the palindromic Strang-Hörmander construction (math.md §28.3).
impl ApproximationSubspace<4> for Diffusion4thChernoff<f64>
K=4 approximation subspace for the ζ⁴ 4th-order diffusion kernel.
in_subspace: requires ≥9 grid points (5-point stencil iterated 4×)
and all values finite. Pragmatic check; v3.x refinement per math.md §26.
jet: computes [f, Af, A²f, A³f, A⁴f] via repeated 5-point divergence-form
applications. Returns DomainViolation if out.len() != 5.
impl ApproximationSubspace<4> for Diffusion4thZeta4Chernoff<f64>
K=4 approximation subspace witness (ADR-0073, ADR-0086 §AC9).
Path β requires D(A^4) — the K=4 witness is necessary and sufficient.
The K=6 witness (ApproximationSubspace<6, F>) is REMOVED per ADR-0086 AC9:
Path β does not require the strict D(A^6) core. Callers who relied on the
K=6 witness must downgrade to K=4 (strictly more permissive — any K=4-OK datum
passes K=4 trivially). See docs/migration/v3-to-v4.md §“v4.1 G_zeta4 resolution”.
in_subspace: true when:
- grid has ≥ 17 points (4-iteration 9-point stencil minimum),
- all values are finite,
a_kth_boundisSome(_)(caller-asserteda ∈ C^4_b).
impl ApproximationSubspace<6> for Diffusion6thZeta6Chernoff<f64>
K=6 approximation subspace witness (ADR-0073, ADR-0088 Wave I).
Rung K=3 requires D(A^6) — the K=6 witness is necessary and sufficient.
in_subspace: true when:
- grid has ≥ 25 points (6-iteration 9-point stencil minimum: 4 K5 pts × 6),
- all values are finite,
a_kth_boundisSome(_)(caller-asserteda ∈ C^6_b).
impl ApproximationSubspace<6> for TruncatedExp4thDiffusionChernoff<f64>
K=6 approximation subspace for the truncated-exp K=4 diffusion kernel.
Though the type name contains “4th” (for the truncation order K=4 per ADR-0011 backward-compat naming), the subspace it witnesses is K=6 per math.md §27. This is the witness the ζ⁴ correction (ADR-0075) consumes.
in_subspace: requires ≥13 grid points (7-point stencil iterated 6×)
and all values finite.
jet: computes [f, Af, ..., A⁶f] via 6 repeated 5-point divergence-form
applications on the same discrete generator. Returns DomainViolation if
out.len() != 7.
impl ApproximationSubspace<8> for Diffusion8thZeta8Chernoff<f64>
K=8 approximation subspace witness (ADR-0088 Wave II).
in_subspace: true when:
- grid has ≥ 33 points (8-iteration 9-point stencil minimum),
- all values are finite,
a_kth_boundisSome(_)(caller-asserteda ∈ C^8_b).
jet: computes [f, Af, ..., A^8 f] via 8 repeated divergence-form
applications through the innermost K5 generator. Returns DomainViolation
if out.len() != 9.