Refined Interval Evaluation using Taylor Models #
This file provides interval evaluation functions that use Taylor-model-based bounds for transcendental functions (exp, sin, cos) when the interval is small, falling back to coarse bounds for larger intervals.
Main definitions #
sinIntervalRefined,cosIntervalRefined- Refined bounds using Taylor modelsevalIntervalRefined- Interval evaluation using refined boundsevalDualRefined- AD evaluation using refined bounds
Design #
The refined evaluators give tighter bounds on small intervals by using
Taylor approximations. For example, expIntervalRefined uses a degree-5
Taylor model when the interval width is ≤ 1, which gives much tighter bounds
than the monotonicity-based expInterval.
The correctness proofs follow directly from the Taylor model correctness
theorems (mem_expIntervalRefined, etc.).
Refined transcendental intervals #
We define refined versions of sin and cos intervals using Taylor models,
following the same pattern as expIntervalRefined.
Refined interval bound for sin using Taylor models. For small intervals (width ≤ 1), uses degree-5 Taylor model. For larger intervals, uses the global [-1, 1] bound.
Equations
Instances For
FTIA for refined sin: if x ∈ I, then sin(x) ∈ sinIntervalRefined I
Refined interval bound for cos using Taylor models. For small intervals (width ≤ 1), uses degree-5 Taylor model. For larger intervals, uses the global [-1, 1] bound.
Equations
Instances For
FTIA for refined cos: if x ∈ I, then cos(x) ∈ cosIntervalRefined I
Refined interval bound for log using Taylor models. For strictly positive intervals with width ≤ 1, uses degree-5 Taylor model. For larger intervals or non-positive intervals, falls back to coarse bound.
Equations
- One or more equations did not get rendered due to their size.
Instances For
FTIA for refined log: if x ∈ I and I is positive, then log(x) ∈ logIntervalRefined I
Refined interval bound for atanh using Taylor models. For small intervals with |x| < 1 and width ≤ 1, uses degree-5 Taylor model. For larger intervals, uses computed bound via monotonicity. Requires -1 < I.lo and I.hi < 1 for correctness.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Refined interval bound for atanh (version without proof arguments, falls back to default)
Equations
- LeanCert.Engine.atanhIntervalRefined I = if h : -1 < I.lo ∧ I.hi < 1 then LeanCert.Engine.atanhIntervalRefined' I ⋯ ⋯ else default
Instances For
FTIA for refined atanh: if x ∈ I and I ⊂ (-1, 1), then atanh(x) ∈ atanhIntervalRefined I
Refined interval evaluation #
Interval evaluation that uses Taylor-model-based bounds for transcendental functions when the interval is reasonably small.
Interval evaluation using refined bounds for transcendentals. Uses Taylor-model-based bounds for exp, sin, cos on small intervals. For partial functions (inv, log), returns default. Use evalInterval? instead.
Equations
- LeanCert.Engine.evalIntervalRefined (LeanCert.Core.Expr.const q) ρ = LeanCert.Core.IntervalRat.singleton q
- LeanCert.Engine.evalIntervalRefined (LeanCert.Core.Expr.var i) ρ = ρ i
- LeanCert.Engine.evalIntervalRefined (e₁.add e₂) ρ = (LeanCert.Engine.evalIntervalRefined e₁ ρ).add (LeanCert.Engine.evalIntervalRefined e₂ ρ)
- LeanCert.Engine.evalIntervalRefined (e₁.mul e₂) ρ = (LeanCert.Engine.evalIntervalRefined e₁ ρ).mul (LeanCert.Engine.evalIntervalRefined e₂ ρ)
- LeanCert.Engine.evalIntervalRefined e_2.neg ρ = (LeanCert.Engine.evalIntervalRefined e_2 ρ).neg
- LeanCert.Engine.evalIntervalRefined e_2.inv ρ = default
- LeanCert.Engine.evalIntervalRefined e_2.sin ρ = LeanCert.Engine.sinIntervalRefined (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.cos ρ = LeanCert.Engine.cosIntervalRefined (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.exp ρ = LeanCert.Engine.expIntervalRefined (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.log ρ = default
- LeanCert.Engine.evalIntervalRefined e_2.atan ρ = LeanCert.Engine.atanInterval (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.arsinh ρ = LeanCert.Engine.arsinhInterval (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.atanh ρ = default
- LeanCert.Engine.evalIntervalRefined e_2.sinc ρ = { lo := -1, hi := 1, le := LeanCert.Engine.evalIntervalRefined._proof_1 }
- LeanCert.Engine.evalIntervalRefined e_2.erf ρ = { lo := -1, hi := 1, le := LeanCert.Engine.evalIntervalRefined._proof_1 }
- LeanCert.Engine.evalIntervalRefined e_2.sinh ρ = LeanCert.Engine.sinhInterval (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.cosh ρ = LeanCert.Engine.coshInterval (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.tanh ρ = LeanCert.Engine.tanhInterval (LeanCert.Engine.evalIntervalRefined e_2 ρ)
- LeanCert.Engine.evalIntervalRefined e_2.sqrt ρ = (LeanCert.Engine.evalIntervalRefined e_2 ρ).sqrtInterval
- LeanCert.Engine.evalIntervalRefined LeanCert.Core.Expr.pi ρ = LeanCert.Engine.piInterval
Instances For
Single-variable refined interval evaluation
Equations
- LeanCert.Engine.evalIntervalRefined1 e I = LeanCert.Engine.evalIntervalRefined e fun (x : ℕ) => I
Instances For
Refined interval evaluation is correct for supported expressions
Single-variable refined evaluation is correct
Refined dual interval (AD) evaluation #
Automatic differentiation using refined interval bounds.
Refined dual interval for exp
Equations
- d.expRefined = { val := LeanCert.Engine.expIntervalRefined d.val, der := (LeanCert.Engine.expIntervalRefined d.val).mul d.der }
Instances For
Refined dual interval for sin: d/dx sin(f(x)) = cos(f(x)) * f'(x)
Equations
- d.sinRefined = { val := LeanCert.Engine.sinIntervalRefined d.val, der := (LeanCert.Engine.cosIntervalRefined d.val).mul d.der }
Instances For
Refined dual interval for cos: d/dx cos(f(x)) = -sin(f(x)) * f'(x)
Equations
- d.cosRefined = { val := LeanCert.Engine.cosIntervalRefined d.val, der := (LeanCert.Engine.sinIntervalRefined d.val).neg.mul d.der }
Instances For
Refined dual interval evaluation. For partial functions (inv, log), returns default.
Equations
- LeanCert.Engine.evalDualRefined (LeanCert.Core.Expr.const q) ρ = LeanCert.Engine.DualInterval.const q
- LeanCert.Engine.evalDualRefined (LeanCert.Core.Expr.var i) ρ = ρ i
- LeanCert.Engine.evalDualRefined (e₁.add e₂) ρ = (LeanCert.Engine.evalDualRefined e₁ ρ).add (LeanCert.Engine.evalDualRefined e₂ ρ)
- LeanCert.Engine.evalDualRefined (e₁.mul e₂) ρ = (LeanCert.Engine.evalDualRefined e₁ ρ).mul (LeanCert.Engine.evalDualRefined e₂ ρ)
- LeanCert.Engine.evalDualRefined e_2.neg ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).neg
- LeanCert.Engine.evalDualRefined e_2.inv ρ = default
- LeanCert.Engine.evalDualRefined e_2.sin ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).sinRefined
- LeanCert.Engine.evalDualRefined e_2.cos ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).cosRefined
- LeanCert.Engine.evalDualRefined e_2.exp ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).expRefined
- LeanCert.Engine.evalDualRefined e_2.log ρ = default
- LeanCert.Engine.evalDualRefined e_2.atan ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).atan
- LeanCert.Engine.evalDualRefined e_2.arsinh ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).arsinh
- LeanCert.Engine.evalDualRefined e_2.atanh ρ = default
- LeanCert.Engine.evalDualRefined e_2.sinc ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).sinc
- LeanCert.Engine.evalDualRefined e_2.erf ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).erf
- LeanCert.Engine.evalDualRefined e_2.sinh ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).sinh
- LeanCert.Engine.evalDualRefined e_2.cosh ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).cosh
- LeanCert.Engine.evalDualRefined e_2.tanh ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).tanh
- LeanCert.Engine.evalDualRefined e_2.sqrt ρ = (LeanCert.Engine.evalDualRefined e_2 ρ).sqrt
- LeanCert.Engine.evalDualRefined LeanCert.Core.Expr.pi ρ = LeanCert.Engine.DualInterval.piConst
Instances For
Single-variable refined dual evaluation
Equations
Instances For
Correctness of refined dual evaluation #
Refined exp preserves value correctness
Refined sin preserves value correctness
Refined cos preserves value correctness
atan preserves value correctness
arsinh preserves value correctness
Refined dual evaluation value is correct for supported expressions
Single-variable refined dual evaluation is correct for values