ScaleApprox #
Scale-aware approximation helpers.
This module adds an optional layer that tracks a per-tensor "scale bound" (a nonnegative bound
on linfNorm) alongside the existing eps error bounds.
An absolute budget eps and a reference magnitude B give an abs-plus-rel tolerance whose
relative coefficient is eps / B (zero when B = 0). The full absolute budget is retained, so this
conversion weakens the tolerance; it does not establish a relative-only error bound. Its soundness
does not require a magnitude proof. Actual magnitude propagation uses the separate scaleTensor
and scaleCtx predicates.
PyTorch correspondence / citations #
This is the proof-oriented analogue of reasoning with a magnitude/scale estimate (e.g. ‖x‖∞ ≤ B)
to turn an absolute error budget into an rtol-style relative tolerance.
https://pytorch.org/docs/stable/generated/torch.allclose.html
Scale vectors aligned with contexts #
Nonnegative scale bounds aligned with a context shape list.
- nil : BList []
- cons {s : Spec.Shape} {ss : List Spec.Shape} : NNReal → BList ss → BList (s :: ss)
Instances For
Transport a BList along an equality of the underlying shape lists.
Instances For
Transporting along rfl is the identity.
Append one additional scale bound at the end of a BList.
Instances For
Split a BList (ss ++ [τ]) into its prefix and the last bound.
Instances For
Scale predicates (single tensor and contexts) #
A scale bound says both spec and runtime (mapped to spec) norms are bounded by B.
Instances For
Default scale predicate on tensors (uses linfNorm).
Instances For
Context-level scale predicate aligned with a BList.
Instances For
The context scale predicate survives transporting all three arguments along the same equality.
Appending a tensor with a known scale bound extends the context predicate.
Conversely, a predicate on an extended context splits into the prefix part and the last entry.
Every entry of a context satisfying scaleCtx satisfies its own scale bound.
Derive abs+rel tolerances from (eps, scale) #
A derived tolerance from an absolute error eps and a scale bound B.
We always keep the absolute component (abs = eps) for safety. The relative component is
computed as eps / B (with a B = 0 guard) and then clamped to be nonnegative via toNNReal
inside ApproxTol.ofReal.
Instances For
tolFromEpsScale is at least as permissive as the absolute-only tolerance in every field.
An absolute tensor bound upgrades to the abs-plus-rel tolerance derived from a scale bound.
Per-entry form of the upgrade: each context slot gets the tolerance derived from its own eps
and its own scale bound.
As in approxTensorWithTol_from_scale, no scale hypothesis is needed: the derived tolerance is
reached purely by weakening the absolute bound. A magnitude proof can justify the chosen reference
scale, but an upper magnitude bound does not imply a relative-only error guarantee.