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- Total refined evaluation for a supported expressionLeanCert.Internal.Refined.evalDualUnchecked- 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.
Strict refined interval evaluation.
Unsupported partial operations return none, and compound expressions return
none if a required subexpression fails.
Equations
- One or more equations did not get rendered due to their size.
- LeanCert.Engine.evalIntervalRefined? (LeanCert.Core.Expr.const q) ρ = some (LeanCert.Core.IntervalRat.singleton q)
- LeanCert.Engine.evalIntervalRefined? (LeanCert.Core.Expr.var i) ρ = some (ρ i)
- LeanCert.Engine.evalIntervalRefined? e_2.neg ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some I.neg | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.inv ρ = none
- LeanCert.Engine.evalIntervalRefined? e_2.sin ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.sinIntervalRefined I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.cos ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.cosIntervalRefined I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.exp ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.expIntervalRefined I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.log ρ = none
- LeanCert.Engine.evalIntervalRefined? e_2.atan ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.atanInterval I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.arsinh ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.arsinhInterval I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.atanh ρ = none
- LeanCert.Engine.evalIntervalRefined? e_2.sinc ρ = some { lo := -1, hi := 1, le := LeanCert.Engine.evalIntervalRefined?._proof_1 }
- LeanCert.Engine.evalIntervalRefined? e_2.erf ρ = some { lo := -1, hi := 1, le := LeanCert.Engine.evalIntervalRefined?._proof_1 }
- LeanCert.Engine.evalIntervalRefined? e_2.sinh ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.sinhInterval I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.cosh ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.coshInterval I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.tanh ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some (LeanCert.Engine.tanhInterval I) | none => none
- LeanCert.Engine.evalIntervalRefined? e_2.sqrt ρ = match LeanCert.Engine.evalIntervalRefined? e_2 ρ with | some I => some I.sqrtInterval | none => none
- LeanCert.Engine.evalIntervalRefined? (LeanCert.Core.Expr.namedConst c) ρ = some c.interval
Instances For
Strict single-variable refined interval evaluation.
Equations
- LeanCert.Engine.evalIntervalRefined1? e I = LeanCert.Engine.evalIntervalRefined? e fun (x : ℕ) => I
Instances For
A supported expression always succeeds in the strict refined evaluator.
Refined evaluation with failure ruled out by the supported-expression proof.
Equations
- LeanCert.Engine.evalIntervalRefined e hsupp ρ = Classical.choose ⋯
Instances For
Single-variable refined evaluation with an explicit support proof.
Equations
- LeanCert.Engine.evalIntervalRefined1 e hsupp I = LeanCert.Engine.evalIntervalRefined e hsupp fun (x : ℕ) => I
Instances For
Strict refined interval evaluation is correct whenever it returns an interval.
Strict single-variable refined interval evaluation is correct.
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.Internal.Refined.evalDualUnchecked (LeanCert.Core.Expr.const q) ρ = LeanCert.Engine.DualInterval.const q
- LeanCert.Internal.Refined.evalDualUnchecked (LeanCert.Core.Expr.var i) ρ = ρ i
- LeanCert.Internal.Refined.evalDualUnchecked (e₁.add e₂) ρ = (LeanCert.Internal.Refined.evalDualUnchecked e₁ ρ).add (LeanCert.Internal.Refined.evalDualUnchecked e₂ ρ)
- LeanCert.Internal.Refined.evalDualUnchecked (e₁.mul e₂) ρ = (LeanCert.Internal.Refined.evalDualUnchecked e₁ ρ).mul (LeanCert.Internal.Refined.evalDualUnchecked e₂ ρ)
- LeanCert.Internal.Refined.evalDualUnchecked e_2.neg ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).neg
- LeanCert.Internal.Refined.evalDualUnchecked e_2.inv ρ = default
- LeanCert.Internal.Refined.evalDualUnchecked e_2.sin ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).sinRefined
- LeanCert.Internal.Refined.evalDualUnchecked e_2.cos ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).cosRefined
- LeanCert.Internal.Refined.evalDualUnchecked e_2.exp ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).expRefined
- LeanCert.Internal.Refined.evalDualUnchecked e_2.log ρ = default
- LeanCert.Internal.Refined.evalDualUnchecked e_2.atan ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).atan
- LeanCert.Internal.Refined.evalDualUnchecked e_2.arsinh ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).arsinh
- LeanCert.Internal.Refined.evalDualUnchecked e_2.atanh ρ = default
- LeanCert.Internal.Refined.evalDualUnchecked e_2.sinc ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).sinc
- LeanCert.Internal.Refined.evalDualUnchecked e_2.erf ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).erf
- LeanCert.Internal.Refined.evalDualUnchecked e_2.sinh ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).sinh
- LeanCert.Internal.Refined.evalDualUnchecked e_2.cosh ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).cosh
- LeanCert.Internal.Refined.evalDualUnchecked e_2.tanh ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).tanh
- LeanCert.Internal.Refined.evalDualUnchecked e_2.sqrt ρ = (LeanCert.Internal.Refined.evalDualUnchecked e_2 ρ).sqrt
- LeanCert.Internal.Refined.evalDualUnchecked (LeanCert.Core.Expr.namedConst c) ρ = LeanCert.Engine.DualInterval.ofMathConst c
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