Domain-aware automatic differentiation with Dyadic intervals #
This module is the bounded-denominator counterpart of AD.DomainChecked.
Polynomial dual arithmetic is performed with Dyadic endpoints and outward
rounding after every addition and multiplication. Transcendental values use
the same verified rational Taylor kernels as the Dyadic value evaluator and
are rounded back to Dyadic endpoints.
The public entry points are checked: unsupported syntax, invalid reciprocal or
logarithm domains, and positive rounding precisions return EvalError rather
than a finite interval.
A value interval and one directional derivative interval, both Dyadic.
- val : Core.IntervalDyadic
- der : Core.IntervalDyadic
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
An environment of Dyadic dual intervals.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- LeanCert.Engine.DualIntervalDyadic.varActive I = { val := I, der := LeanCert.Engine.DualIntervalDyadic.one✝ }
Instances For
Equations
- LeanCert.Engine.DualIntervalDyadic.varPassive I = { val := I, der := LeanCert.Engine.DualIntervalDyadic.zero✝ }
Instances For
Equations
Instances For
Equations
- a.mul b cfg = { val := a.val.mulRounded b.val cfg.precision, der := (a.der.mulRounded b.val cfg.precision).addRounded (a.val.mulRounded b.der cfg.precision) cfg.precision }
Instances For
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- a.exp cfg = { val := LeanCert.Engine.expIntervalDyadic a.val cfg, der := (LeanCert.Engine.expIntervalDyadic a.val cfg).mulRounded a.der cfg.precision }
Instances For
Equations
- a.sin cfg = { val := LeanCert.Engine.sinIntervalDyadic a.val cfg, der := (LeanCert.Engine.cosIntervalDyadic a.val cfg).mulRounded a.der cfg.precision }
Instances For
Equations
- a.cos cfg = { val := LeanCert.Engine.cosIntervalDyadic a.val cfg, der := (LeanCert.Engine.sinIntervalDyadic a.val cfg).neg.mulRounded a.der cfg.precision }
Instances For
Equations
- a.log cfg = { val := LeanCert.Engine.logIntervalDyadic a.val cfg, der := (LeanCert.Engine.invIntervalDyadic a.val cfg).mulRounded a.der cfg.precision }
Instances For
Total computational kernel. Sound public use goes through the checked entry points below.
Equations
- LeanCert.Internal.AD.Dyadic.evalTotal (LeanCert.Core.Expr.const q) rho cfg = LeanCert.Engine.DualIntervalDyadic.const q cfg
- LeanCert.Internal.AD.Dyadic.evalTotal (LeanCert.Core.Expr.var i) rho cfg = rho i
- LeanCert.Internal.AD.Dyadic.evalTotal (a.add b) rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).add (LeanCert.Internal.AD.Dyadic.evalTotal b rho cfg) cfg
- LeanCert.Internal.AD.Dyadic.evalTotal (a.mul b) rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).mul (LeanCert.Internal.AD.Dyadic.evalTotal b rho cfg) cfg
- LeanCert.Internal.AD.Dyadic.evalTotal a.neg rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).neg
- LeanCert.Internal.AD.Dyadic.evalTotal a.inv rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).inv cfg
- LeanCert.Internal.AD.Dyadic.evalTotal a.exp rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).exp cfg
- LeanCert.Internal.AD.Dyadic.evalTotal a.sin rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).sin cfg
- LeanCert.Internal.AD.Dyadic.evalTotal a.cos rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).cos cfg
- LeanCert.Internal.AD.Dyadic.evalTotal a.log rho cfg = (LeanCert.Internal.AD.Dyadic.evalTotal a rho cfg).log cfg
- LeanCert.Internal.AD.Dyadic.evalTotal e rho cfg = default
Instances For
Value projection of a Dyadic dual environment.
Instances For
Dual environment selecting coordinate idx.
Equations
- LeanCert.Engine.mkDualDyadicEnv rho idx i = if i = idx then LeanCert.Engine.DualIntervalDyadic.varActive (rho i) else LeanCert.Engine.DualIntervalDyadic.varPassive (rho i)
Instances For
The deliberately small v1 Dyadic AD fragment.
Equations
- LeanCert.Engine.checkDyadicADFragment (LeanCert.Core.Expr.const q) = true
- LeanCert.Engine.checkDyadicADFragment (LeanCert.Core.Expr.var i) = true
- LeanCert.Engine.checkDyadicADFragment (a.add b) = (LeanCert.Engine.checkDyadicADFragment a && LeanCert.Engine.checkDyadicADFragment b)
- LeanCert.Engine.checkDyadicADFragment (a.mul b) = (LeanCert.Engine.checkDyadicADFragment a && LeanCert.Engine.checkDyadicADFragment b)
- LeanCert.Engine.checkDyadicADFragment a.neg = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment a.inv = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment a.exp = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment a.sin = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment a.cos = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment a.log = LeanCert.Engine.checkDyadicADFragment a
- LeanCert.Engine.checkDyadicADFragment x✝ = false
Instances For
Box-dependent domain check for the Dyadic AD kernel.
Equations
- LeanCert.Engine.checkDyadicADDomain e rho cfg = (LeanCert.Engine.checkDyadicADFragment e && (LeanCert.Internal.Dyadic.evalCached e rho.values cfg).2)
Instances For
Explain the first failed support or domain check.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Checked Dyadic dual evaluation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Checked value-and-derivative evaluation along coordinate idx.
Equations
- LeanCert.Engine.evalWithDerivDyadicChecked e rho idx cfg = LeanCert.Engine.evalDualDyadicChecked e (LeanCert.Engine.mkDualDyadicEnv rho idx) cfg
Instances For
Checked Dyadic derivative enclosure along coordinate idx.
Equations
- LeanCert.Engine.derivIntervalDyadicChecked e rho idx cfg = do let __do_lift ← LeanCert.Engine.evalWithDerivDyadicChecked e rho idx cfg pure __do_lift.der
Instances For
Checked Dyadic derivative enclosure for a single-variable expression.
Equations
- LeanCert.Engine.derivIntervalDyadicChecked1 e I cfg = LeanCert.Engine.derivIntervalDyadicChecked e (fun (x : ℕ) => I) 0 cfg
Instances For
Convenience boundary for callers whose boxes use rational endpoints.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Single-variable rational-input convenience boundary.
Equations
- LeanCert.Engine.derivIntervalDyadicChecked1OfRat e I cfg = LeanCert.Engine.derivIntervalDyadicCheckedOfRat e (fun (x : ℕ) => I) 0 cfg
Instances For
The value projection of the dual kernel is exactly the ordinary Dyadic value kernel.
Golden theorem for successful checked Dyadic dual evaluation.
Successful checked Dyadic indexed AD proves differentiability throughout the selected input interval.
Golden theorem: successful checked Dyadic indexed AD encloses the true partial derivative.
Golden theorem for the derivative-only Dyadic API.
Golden theorem for rational input boxes converted to the Dyadic backend.
Compute the first n partial derivatives with the checked Dyadic backend.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Rational-input convenience boundary for the first n Dyadic partials.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Golden theorem for the checked Dyadic gradient API.
Golden theorem for checked Dyadic gradients over rational input boxes.