Skip to main content

ApproximationSubspace

Trait ApproximationSubspace 

Source
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 the in_subspace / jet bodies — silently returning false would be a worse footgun than no impl at all (ADR-0073 §“Rationale”).
  • in_subspace returns bool (minimal predicate surface).
  • jet writes to &mut [Self::S] (zero-alloc slice, per ADR-0041 pattern).

Required Methods§

Source

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.

Source

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

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

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.

Source§

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.

Source§

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).

Source§

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.

Source§

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_bound is Some(_) (caller-asserted a ∈ C^4_b).
Source§

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_bound is Some(_) (caller-asserted a ∈ C^6_b).
Source§

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.

Source§

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_bound is Some(_) (caller-asserted a ∈ 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.

Source§

impl<C: SemiflowComplex, const M: usize> ApproximationSubspace<2, <C as SemiflowComplex>::Real> for MatrixDiffusionChernoffComplex<C, M>

Source§

impl<C: SemiflowComplex> ApproximationSubspace<2, <C as SemiflowComplex>::Real> for SchrödingerChernoffComplex<C>

Source§

impl<F: SemiflowFloat, const D: usize> ApproximationSubspace<2, F> for AnisotropicShiftChernoffND<F, D>

Source§

impl<F: SemiflowFloat, const M: usize> ApproximationSubspace<2, F> for MatrixDiffusionChernoff<F, M>