Wiki Agenda Contact English version

Floating-point computations with trigonometric functions

These are examples of floating-point computations involving trigonometric functions. They are presented in details in the technical report Generating and Certifying Accuracy Properties of Floating-Point Programs.


Auteurs: Claude Marché / Paul Bonnot

Catégories: Floating-Point Computations / Non-linear Arithmetic

Outils: Why3

see also the index (by topic, by tool, by reference, by year)


download ZIP archive
The following provides the WhyML code where the programs are specified and implemented. After are given the prover results on each verification conditions.
module SinCosSingle
  use real.RealInfix
  use real.Abs
  use ufloat.USingle
  use ufloat.USingleLemmas
  use real.Trigonometry

  constant sin_rel_err:real
  axiom sin_rel_err_range : 0.0 <=. sin_rel_err
  constant sin_abs_err:real
  axiom sin_abs_err_range : 0. <=. sin_abs_err
  constant sin_max:real
  axiom sin_max_range : 0.0 <=. sin_max
  val sin_approx (x:usingle) : usingle
    requires { abs (to_real x) <=. sin_max }
    ensures {
      abs (to_real result -. sin (to_real x)) <=.
         sin_rel_err *. abs (sin (to_real x)) +. sin_abs_err
    }

  constant cos_rel_err:real
  axiom cos_rel_err_range : 0. <=. cos_rel_err
  constant cos_abs_err:real
  axiom cos_abs_err_range : 0. <=. cos_abs_err
  constant cos_max:real
  axiom cos_max_range : 0.0 <=. cos_max

  val cos_approx (x:usingle) : usingle
    requires { abs (to_real x) <=. cos_max }
    ensures {
      abs (to_real result -. cos (to_real x)) <=.
        cos_rel_err *. abs (cos (to_real x))  +. cos_abs_err
    }

  let sin_simple_example (a b :usingle)
    requires { abs (to_real a) <=. 0.25 *. sin_max }
    requires { abs (to_real b) <=. 0.25 *. sin_max }
    ensures {
      abs (to_real result -. sin(to_real a +. to_real b))
      <=. sin_rel_err *. abs (sin (to_real a +. to_real b))
       +. eps *. abs (to_real a +. to_real b) *. (1. +. sin_rel_err)
       +. sin_abs_err
    }
  = sin_approx(a ++. b)

  let cos_simple_example (a b :usingle)
   requires { abs (to_real a) <=. 0.25 *. cos_max }
   requires { abs (to_real b) <=. 0.25 *. cos_max }
   ensures {
      abs (to_real result -. cos(to_real a -. to_real b))
      <=. cos_rel_err *. abs (cos (to_real a -. to_real b))
       +. eps *. abs (to_real a -. to_real b) *. (1. +. cos_rel_err)
       +. cos_abs_err
    }
  = cos_approx(a --. b)

  (* Example from the report *)
  let r_cos_theta (r theta : usingle)
     (ghost r_exact theta_exact r_err theta_err :real)
     requires { cos_max >=. 3.1416 }
     requires { 0.0 <=. to_real r <=. 1.0 }
     requires { 0.0 <=. r_exact <=. 1.0 }
     requires { -3.1416 <=. to_real theta <=. 3.1416 }
     requires { -3.1416 <=. theta_exact <=. 3.1416 }
     requires { abs(to_real r -. r_exact) <=. r_err }
     requires { abs(to_real theta -. theta_exact) <=. theta_err }
     ensures {
       let t1 = 1.0 +. eps in
       let t3 = theta_err *. (1.0 +. cos_rel_err) +. cos_abs_err in
       abs (to_real result -. r_exact *. cos theta_exact) <=.
          (* relative error *)
          (eps +. cos_rel_err *. t1) *. abs (r_exact *. cos theta_exact) +.
          (* absolute error *)
           (t3 *. abs r_exact
            +. (r_err +. r_err *. cos_rel_err) *. abs (cos theta_exact)
            +. r_err *. t3)  *. t1
           +. eta }
   = r **. cos_approx theta

  lemma cos_square_plus_sine_square : forall x. cos x *. cos x +. sin x *. sin x = 1.

  let cos_and_sine_example (a :usingle)
    requires { abs (to_real a) <=. sin_max }
    requires { abs (to_real a) <=. cos_max }
    ensures {
    let a = to_real a in let sa = sin a in let ca = cos a in
    let t = 1.0 +. eps in
    let s2a = sa *. sa in
    let c2a = ca *. ca in
    let crerr = eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. t) in
    let srerr = eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. t) in
    let ccerr = (t *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs ca in
    let scerr = (t *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs sa  in
    abs (to_real result -. 1.0)
    <=. ((((crerr +. srerr) +. eps) *. (abs c2a +. abs s2a))
         +. (((t +. srerr)
              *. ((2.0 *. ccerr +. (t *. (cos_abs_err *. cos_abs_err)))
                  +. eta))
             +. ((t +. crerr)
                 *. ((2.0 *. scerr
                      +. (t *. (sin_abs_err *. sin_abs_err)))
                     +. eta))))
      }
  = cos_approx a **. cos_approx a ++. sin_approx a **. sin_approx a

val exact_cte (x:real) : usingle
  ensures { to_real result = x }

(* Kinematics example *)

let kinematics (theta1 theta2:usingle)
  requires { abs (to_real theta1) <=. 0.25 *. sin_max }
  requires { abs (to_real theta2) <=. 0.25 *. sin_max }
  ensures {
    let theta1 = to_real theta1 in
    let theta2 = to_real theta2 in
    let t1 = 1.0 +. eps in
    let t2 = eps +. sin_rel_err *. t1 in
    abs (to_real result -.
         (0.5 *. sin theta1 +. 2.5 *. sin (theta1 +. theta2)))
    <=.
    (* Relative part of the error *)
    (2.0 *. t2 +. eps) *.
       (0.5 *. abs (sin theta1) +. 2.5 *. abs (sin (theta1 +. theta2)))
    (* Absolute part of the error *)
    +. (t1 +. t2) *.
         (t1 *. (0.5 *. sin_abs_err
                 +. 2.5 *. (eps *. abs (theta1 +. theta2) *. (1.0 +. sin_rel_err)
                            +. sin_abs_err))
          +. 2.0 *. eta)
  }
= exact_cte 0.5 **. sin_approx (theta1)
  ++. exact_cte 2.5 **. sin_approx(theta1 ++. theta2)

(* Raytracer example *)

let raytracer (theta phi nx ny nz:usingle)
  requires { abs (to_real phi) <=. sin_max }
  requires { abs (to_real phi) <=. cos_max }
  requires { abs (to_real theta) <=. sin_max }
  requires { abs (to_real theta) <=. cos_max }
  ensures {
    let nz = to_real nz in
    let ny = to_real ny in
    let nx = to_real nx in
    let phi = to_real phi in
    let theta = to_real theta in
    let t1 = 1.0 +. eps in
    let t2c = eps +. cos_rel_err *. t1 in
    let t2s = eps +. sin_rel_err *. t1 in
    let t3c = eps +. (t2c +. cos_rel_err +. t2c *. cos_rel_err) *. t1 in
    let t3s = eps +. (t2c +. sin_rel_err +. t2c *. sin_rel_err) *. t1 in
    let t4 = t3c +. t2s +. eps in
    abs (to_real result -.
         (nx *. cos theta *. cos phi +. ny *. sin theta +. nz *. cos theta *. sin phi))
    <=.
        (* Relative part of the error *)
        (t4 +. t3s +. eps) *.
        (abs (nx *. cos theta *. cos phi) +.
                    abs (ny *. sin theta) +. abs (nz *. cos theta *. sin phi))
        (* Absolute part of the error *)
        +. (t1 +. t3s)
            *. ((t1 +. t2s)
                 *. (t1 *. (cos_abs_err *. (1.0 +. t2c) *. abs (nx *. cos theta)
                            +. (t1 *. cos_abs_err *. abs nx +. eta) *.
                               ((1.0 +. cos_rel_err) *. abs (cos phi) +. cos_abs_err))
                     +. eta)
                +. (t1 +. t3c) *. (t1 *. sin_abs_err *. abs ny +. eta))
         +. (t1 +. t4)
            *. (t1 *. (sin_abs_err *. (1.0 +. t2c) *. abs (nz *. cos theta)
                       +. (t1 *. cos_abs_err *. abs nz +. eta) *.
                          ((1.0 +. sin_rel_err) *. abs (sin phi) +. sin_abs_err))
                +. eta)
  }
=
  nx **. cos_approx theta **. cos_approx phi
  ++. ny **. sin_approx theta
  ++. nz **. cos_approx theta **. sin_approx phi

end

module SinCosDouble
  use real.RealInfix
  use real.Abs
  use ufloat.UDouble
  use ufloat.UDoubleLemmas
  use real.Trigonometry

  constant sin_rel_err:real
  axiom sin_rel_err_range : 0.0 <=. sin_rel_err
  constant sin_abs_err:real
  axiom sin_abs_err_range : 0. <=. sin_abs_err
  constant sin_max:real
  axiom sin_max_range : 0.0 <=. sin_max
  val sin_approx (x:udouble) : udouble
    requires { abs (to_real x) <=. sin_max }
    ensures {
      abs (to_real result -. sin (to_real x)) <=.
         sin_rel_err *. abs (sin (to_real x)) +. sin_abs_err
    }

  constant cos_rel_err:real
  axiom cos_rel_err_range : 0. <=. cos_rel_err
  constant cos_abs_err:real
  axiom cos_abs_err_range : 0. <=. cos_abs_err
  constant cos_max:real
  axiom cos_max_range : 0.0 <=. cos_max

  val cos_approx (x:udouble) : udouble
    requires { abs (to_real x) <=. cos_max }
    ensures {
      abs (to_real result -. cos (to_real x)) <=.
        cos_rel_err *. abs (cos (to_real x))  +. cos_abs_err
    }

  let sin_simple_example (a b :udouble)
    requires { abs (to_real a) <=. 0.25 *. sin_max }
    requires { abs (to_real b) <=. 0.25 *. sin_max }
    ensures {
      abs (to_real result -. sin(to_real a +. to_real b))
      <=. sin_rel_err *. abs (sin (to_real a +. to_real b))
       +. eps *. abs (to_real a +. to_real b) *. (1. +. sin_rel_err)
       +. sin_abs_err
    }
  = sin_approx(a ++. b)

  let cos_simple_example (a b :udouble)
   requires { abs (to_real a) <=. 0.25 *. cos_max }
   requires { abs (to_real b) <=. 0.25 *. cos_max }
   ensures {
      abs (to_real result -. cos(to_real a -. to_real b))
      <=. cos_rel_err *. abs (cos (to_real a -. to_real b))
       +. eps *. abs (to_real a -. to_real b) *. (1. +. cos_rel_err)
       +. cos_abs_err
    }
  = cos_approx(a --. b)

  let cos_and_sine_example (a :udouble)
    requires { abs (to_real a) <=. sin_max }
    requires { abs (to_real a) <=. cos_max }
    ensures {
    let a = to_real a in
    let t = 1.0 +. eps in
    let crel = eps +. cos_rel_err *. (2.0 +. cos_rel_err) *. t in
    let srel = eps +. sin_rel_err *. (2.0 +. sin_rel_err) *. t in
    abs (to_real result -. 1.0) <=. crel +. srel +. eps +.
      (t +. srel) *.
        (t *. cos_abs_err *. (2.0 *. (1.0 +. cos_rel_err) *. abs (cos a)
            +. cos_abs_err) +. eta) +.
      (t +. crel) *.
        (t *. sin_abs_err *. (2.0 *. (1.0 +. sin_rel_err) *. abs (sin a)
            +. sin_abs_err) +. eta)
      by cos a *. cos a +. sin a *. sin a = 1.0
      so abs (cos a *. cos a) +. abs (sin a *. sin a) = 1.0
      so (crel +. srel +. eps) *.
           (abs (sin a *. sin a) +. abs (cos a *. cos a))
         = crel +. srel +. eps
      }
  = cos_approx a **. cos_approx a ++. sin_approx a **. sin_approx a

val exact_cte (x:real) : udouble
  ensures { to_real result = x }

(* Kinematics example *)

let kinematics (theta1 theta2:udouble)
  requires { abs (to_real theta1) <=. 0.25 *. sin_max }
  requires { abs (to_real theta2) <=. 0.25 *. sin_max }
  ensures {
    let theta1 = to_real theta1 in
    let theta2 = to_real theta2 in
    let t1 = 1.0 +. eps in
    let t2 = eps +. sin_rel_err *. t1 in
    abs (to_real result -.
         (0.5 *. sin theta1 +. 2.5 *. sin (theta1 +. theta2)))
    <=.
    (* Relative part of the error *)
    (2.0 *. t2 +. eps) *.
       (0.5 *. abs (sin theta1) +. 2.5 *. abs (sin (theta1 +. theta2)))
    (* Absolute part of the error *)
    +. (t1 +. t2) *.
         (t1 *. (0.5 *. sin_abs_err
                 +. 2.5 *. (eps *. abs (theta1 +. theta2) *. (1.0 +. sin_rel_err)
                            +. sin_abs_err))
          +. 2.0 *. eta)
  }
= exact_cte 0.5 **. sin_approx (theta1)
  ++. exact_cte 2.5 **. sin_approx(theta1 ++. theta2)

(* Raytracer example *)

let raytracer (theta phi nx ny nz:udouble)
  requires { abs (to_real phi) <=. sin_max }
  requires { abs (to_real phi) <=. cos_max }
  requires { abs (to_real theta) <=. sin_max }
  requires { abs (to_real theta) <=. cos_max }
  ensures {
    let nz = to_real nz in
    let ny = to_real ny in
    let nx = to_real nx in
    let phi = to_real phi in
    let theta = to_real theta in
    let t1 = 1.0 +. eps in
    let t2c = eps +. cos_rel_err *. t1 in
    let t2s = eps +. sin_rel_err *. t1 in
    let t3c = eps +. (t2c +. cos_rel_err +. t2c *. cos_rel_err) *. t1 in
    let t3s = eps +. (t2c +. sin_rel_err +. t2c *. sin_rel_err) *. t1 in
    let t4 = t3c +. t2s +. eps in
    abs (to_real result -.
         (nx *. cos theta *. cos phi +. ny *. sin theta +. nz *. cos theta *. sin phi))
    <=.
        (* Relative part of the error *)
        (t4 +. t3s +. eps) *.
        (abs (nx *. cos theta *. cos phi) +.
                    abs (ny *. sin theta) +. abs (nz *. cos theta *. sin phi))
        (* Absolute part of the error *)
        +. (t1 +. t3s)
            *. ((t1 +. t2s)
                 *. (t1 *. (cos_abs_err *. (1.0 +. t2c) *. abs (nx *. cos theta)
                            +. (t1 *. cos_abs_err *. abs nx +. eta) *.
                               ((1.0 +. cos_rel_err) *. abs (cos phi) +. cos_abs_err))
                     +. eta)
                +. (t1 +. t3c) *. (t1 *. sin_abs_err *. abs ny +. eta))
         +. (t1 +. t4)
            *. (t1 *. (sin_abs_err *. (1.0 +. t2c) *. abs (nz *. cos theta)
                       +. (t1 *. cos_abs_err *. abs nz +. eta) *.
                          ((1.0 +. sin_rel_err) *. abs (sin phi) +. sin_abs_err))
                +. eta)
  }
=
  nx **. cos_approx theta **. cos_approx phi
  ++. ny **. sin_approx theta
  ++. nz **. cos_approx theta **. sin_approx phi

end

The following table lists all the verification conditions generated and tell which prover proved which.

Why3 Proof Results for Project "sin_cos"

Theory "sin_cos.SinCosSingle": fully verified

ObligationsAlt-Ergo 2.5.4Alt-Ergo 2.5.4 (FPA)CVC4 1.8CVC5 1.0.5Z3 4.12.2
VC for sin_simple_example---------------
split_vc
precondition---0.21---------
postcondition---------------
assert let t = to_real a +. to_real b in let t1 = sin t in abs (to_real result -. t1) <=. ((abs t1 *. sin_rel_err) +. (((eps *. abs t) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula---------------
assert abs (to_real result -. sin (to_real a +. to_real b)) <=. ((abs (sin (to_real a +. to_real b)) *. sin_rel_err) +. (((eps *. abs (to_real a +. to_real b)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula---------------
assert abs (to_real result -. sin (to_real a +. to_real b)) <=. ((sin_rel_err *. abs (sin (to_real a +. to_real b))) +. ((((eps *. abs (to_real a +. to_real b)) +. 0.0) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula---------------
apply sin_single_error_propagation with a ++. b
apply premises---------------
assert abs (to_real (a ++. b) -. (to_real a +. to_real b)) <=. (eps *. abs (to_real a +. to_real b))
asserted formula0.22------------
apply premises------0.07------
apply premises------------0.02
apply premises---------0.07---
apply premises------0.07------
asserted formula------------0.02
asserted formula---------0.08---
postcondition---------0.08---
VC for cos_simple_example---------------
split_vc
precondition---0.16---------
postcondition---------------
assert let t = to_real a -. to_real b in let t1 = cos t in abs (to_real result -. t1) <=. ((abs t1 *. cos_rel_err) +. (((eps *. abs t) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula---------------
assert abs (to_real result -. cos (to_real a -. to_real b)) <=. ((abs (cos (to_real a -. to_real b)) *. cos_rel_err) +. (((eps *. abs (to_real a -. to_real b)) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula---------------
assert abs (to_real result -. cos (to_real a -. to_real b)) <=. ((cos_rel_err *. abs (cos (to_real a -. to_real b))) +. ((((eps *. abs (to_real a -. to_real b)) +. 0.0) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula---------------
apply cos_single_error_propagation with a --. b
apply premises---------------
assert abs (to_real (a --. b) -. (to_real a -. to_real b)) <=. (eps *. abs (to_real a -. to_real b))
asserted formula0.22------------
apply premises------------0.03
apply premises---------0.07---
apply premises0.04------------
apply premises------0.06------
asserted formula------------0.02
asserted formula---------0.07---
postcondition---------0.07---
VC for r_cos_theta---------------
split_vc
precondition------0.08------
postcondition---------------
assert let t = cos theta_exact in let t1 = 1.0 +. eps in let t2 = r_exact *. t in let t3 = (theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err in abs (to_real result -. t2) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. t1)) *. abs t2) +. ((((((t3 +. (t3 *. 0.0)) *. abs r_exact) +. ((r_err +. (r_err *. cos_rel_err)) *. abs t)) +. (r_err *. t3)) *. t1) +. eta))
asserted formula---------------
assert abs (to_real result -. (r_exact *. cos theta_exact)) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. abs (r_exact *. cos theta_exact)) +. ((((((((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err) +. (((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err) *. 0.0)) *. abs r_exact) +. ((r_err +. (r_err *. cos_rel_err)) *. abs (cos theta_exact))) +. (r_err *. ((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real result -. (r_exact *. cos theta_exact)) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. (abs r_exact *. abs (cos theta_exact))) +. ((((((((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err) +. (((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err) *. 0.0)) *. abs r_exact) +. ((r_err +. (r_err *. cos_rel_err)) *. abs (cos theta_exact))) +. (r_err *. ((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with r,o
apply premises------------0.03
apply premises---------------
assert abs (to_real o -. cos theta_exact) <=. ((abs (cos theta_exact) *. cos_rel_err) +. ((theta_err *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula---------------
assert abs (to_real o -. cos theta_exact) <=. ((cos_rel_err *. abs (cos theta_exact)) +. ((((0.0 *. abs theta_exact) +. theta_err) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula---------------
apply cos_single_error_propagation with theta
apply premises0.05------------
apply premises---------0.09---
apply premises---------0.10---
apply premises------------0.02
asserted formula------0.06------
apply premises---------0.08---
apply premises------0.06------
apply premises---------0.09---
apply premises------------0.02
apply premises---------0.08---
apply premises---------0.15---
apply premises0.05------------
apply premises------0.07------
asserted formula0.13------------
asserted formula---------0.08---
postcondition------------0.02
cos_square_plus_sine_square---1.73---------
VC for cos_and_sine_example---------------
split_vc
precondition---0.05---------
precondition---0.05---------
precondition---0.04---------
precondition---0.05---------
postcondition---------------
assert let t1 = to_real a1 in let t2 = sin t1 in let t3 = cos t1 in let t4 = 1.0 +. eps in let t5 = t2 *. t2 in let t6 = t3 *. t3 in let t7 = eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. t4) in let t8 = eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. t4) in let t9 = (t4 *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs t3 in let t10 = (t4 *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs t2 in abs (to_real result -. (t6 +. t5)) <=. ((((t7 +. t8) +. eps) *. (abs t6 +. abs t5)) +. (((t4 +. t8) *. (((t9 +. t9) +. (t4 *. (cos_abs_err *. cos_abs_err))) +. eta)) +. ((t4 +. t7) *. (((t10 +. t10) +. (t4 *. (sin_abs_err *. sin_abs_err))) +. eta))))
asserted formula---------------
assert abs (to_real result -. ((cos (to_real a1) *. cos (to_real a1)) +. (sin (to_real a1) *. sin (to_real a1)))) <=. (((((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps)))) +. eps) *. (abs (cos (to_real a1) *. cos (to_real a1)) +. abs (sin (to_real a1) *. sin (to_real a1)))) +. ((((1.0 +. eps) +. (eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs (cos (to_real a1))) +. (((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs (cos (to_real a1)))) +. ((1.0 +. eps) *. (cos_abs_err *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs (sin (to_real a1))) +. (((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs (sin (to_real a1)))) +. ((1.0 +. eps) *. (sin_abs_err *. sin_abs_err))) +. eta))))
asserted formula---------------
apply uadd_single_error_propagation with o **. o1,o2 **. o3
apply premises---------------
assert abs (to_real (o **. o1) -. (cos (to_real a1) *. cos (to_real a1))) <=. (((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) *. abs (cos (to_real a1) *. cos (to_real a1))) +. ((((((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1))) +. ((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1)))) +. (cos_abs_err *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (o **. o1) -. (cos (to_real a1) *. cos (to_real a1))) <=. (((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (cos (to_real a1)) *. abs (cos (to_real a1)))) +. ((((((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1))) +. ((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1)))) +. (cos_abs_err *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with o,o1
apply premises------0.06------
apply premises---------0.07---
apply premises---------0.11---
apply premises0.03------------
apply premises------0.07------
apply premises---------0.13---
apply premises---------0.13---
apply premises------0.08------
apply premises---------0.08---
asserted formula0.15------------
apply premises------0.09------
apply premises---------------
assert abs (to_real (o2 **. o3) -. (sin (to_real a1) *. sin (to_real a1))) <=. (((eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps))) *. abs (sin (to_real a1) *. sin (to_real a1))) +. ((((((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1))) +. ((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1)))) +. (sin_abs_err *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (o2 **. o3) -. (sin (to_real a1) *. sin (to_real a1))) <=. (((eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (sin (to_real a1)) *. abs (sin (to_real a1)))) +. ((((((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1))) +. ((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1)))) +. (sin_abs_err *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with o2,o3
apply premises------0.09------
apply premises------0.06------
apply premises------------0.02
apply premises------------0.03
apply premises------0.09------
apply premises------------0.02
apply premises0.04------------
apply premises------------0.03
apply premises------------0.03
asserted formula0.08------------
apply premises------------0.03
apply premises0.04------------
apply premises0.03------------
apply premises0.05------------
apply premises0.03------------
apply premises0.07------------
apply premises0.04------------
apply premises------0.07------
asserted formula------------0.02
postcondition---------4.20---
VC for kinematics---------------
split_vc
precondition---0.18---------
precondition---0.05---------
postcondition---------------
assert let t = to_real o in let t3 = to_real o2 in let t4 = to_real theta11 in let t5 = 1.0 +. eps in let t6 = t4 +. to_real theta21 in let t7 = t *. sin t4 in let t8 = eps +. (sin_rel_err *. t5) in let t9 = t3 *. sin t6 in let t10 = t5 +. t8 in abs (to_real result -. (t7 +. t9)) <=. ((((t8 +. t8) +. eps) *. (abs t7 +. abs t9)) +. ((t10 *. (((t5 *. sin_abs_err) *. abs t) +. eta)) +. (t10 *. (((t5 *. (((eps *. abs t6) *. (1.0 +. sin_rel_err)) +. sin_abs_err)) *. abs t3) +. eta))))
asserted formula---------------
assert abs (to_real result -. ((to_real o *. sin (to_real theta11)) +. (to_real o2 *. sin (to_real theta11 +. to_real theta21)))) <=. (((((eps +. (sin_rel_err *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) *. (abs (to_real o *. sin (to_real theta11)) +. abs (to_real o2 *. sin (to_real theta11 +. to_real theta21)))) +. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real o)) +. eta)) +. (((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err)) *. abs (to_real o2)) +. eta))))
asserted formula---------------
apply uadd_single_error_propagation with o **. o1,o2 **. o3
apply premises---------------
assert abs (to_real (o **. o1) -. (to_real o *. sin (to_real theta11))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real o *. sin (to_real theta11))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real o)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (o **. o1) -. (to_real o *. sin (to_real theta11))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real o) *. abs (sin (to_real theta11)))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real o)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with o,o1
apply premises---------0.08---
apply premises------------0.04
apply premises0.03------------
apply premises0.03------------
apply premises0.03------------
apply premises0.03------------
apply premises------0.09------
apply premises------------0.03
apply premises------0.09------
asserted formula0.05------------
apply premises---------0.08---
apply premises---------------
assert abs (to_real (o2 **. o3) -. (to_real o2 *. sin (to_real theta11 +. to_real theta21))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real o2 *. sin (to_real theta11 +. to_real theta21))) +. (((((((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) *. 0.0)) *. abs (to_real o2)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (0.0 *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (o2 **. o3) -. (to_real o2 *. sin (to_real theta11 +. to_real theta21))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real o2) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (((((((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) *. 0.0)) *. abs (to_real o2)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (0.0 *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with o2,o3
apply premises------------0.03
apply premises---------------
assert abs (to_real o3 -. sin (to_real theta11 +. to_real theta21)) <=. ((abs (sin (to_real theta11 +. to_real theta21)) *. sin_rel_err) +. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula---------------
assert abs (to_real o3 -. sin (to_real theta11 +. to_real theta21)) <=. ((sin_rel_err *. abs (sin (to_real theta11 +. to_real theta21))) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) +. 0.0) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula---------------
apply sin_single_error_propagation with theta11 ++. theta21
apply premises---------------
assert abs (to_real (theta11 ++. theta21) -. (to_real theta11 +. to_real theta21)) <=. (eps *. abs (to_real theta11 +. to_real theta21))
asserted formula0.41------------
apply premises---------0.08---
apply premises------------0.02
apply premises---------0.15---
apply premises------------0.02
asserted formula---------0.08---
apply premises------------0.02
apply premises------------0.02
apply premises0.03------------
apply premises------0.06------
apply premises------------0.02
apply premises---------0.07---
apply premises0.03------------
apply premises------------0.04
asserted formula0.11------------
apply premises------0.06------
apply premises------------0.02
apply premises------0.07------
apply premises------0.08------
apply premises---------0.08---
apply premises0.05------------
apply premises0.05------------
apply premises0.04------------
asserted formula------0.08------
postcondition0.41------------
VC for raytracer---------------
split_vc
precondition---0.04---------
precondition---0.04---------
precondition---0.05---------
precondition---0.05---------
precondition---0.04---------
postcondition---------------
assert let t = to_real nz1 in let t2 = to_real ny1 in let t3 = to_real nx1 in let t5 = to_real phi1 in let t6 = to_real theta1 in let t7 = sin t5 in let t8 = cos t5 in let t9 = cos t6 in let t10 = 1.0 +. eps in let t11 = t10 *. cos_abs_err in let t12 = t *. t9 in let t13 = t2 *. sin t6 in let t14 = t3 *. t9 in let t15 = eps +. (cos_rel_err *. t10) in let t16 = eps +. (sin_rel_err *. t10) in let t17 = t12 *. t7 in let t18 = t14 *. t8 in let t19 = (t11 *. abs t) +. eta in let t20 = (t11 *. abs t3) +. eta in let t21 = eps +. (((t15 +. cos_rel_err) +. (t15 *. cos_rel_err)) *. t10) in let t22 = eps +. (((t15 +. sin_rel_err) +. (t15 *. sin_rel_err)) *. t10) in let t23 = (t21 +. t16) +. eps in abs (to_real result -. ((t18 +. t13) +. t17)) <=. ((((t23 +. t22) +. eps) *. ((abs t18 +. abs t13) +. abs t17)) +. (((t10 +. t22) *. (((t10 +. t16) *. (((((t10 *. (cos_abs_err +. (cos_abs_err *. t15))) *. abs t14) +. ((t10 *. (t20 +. (t20 *. cos_rel_err))) *. abs t8)) +. (t10 *. (t20 *. cos_abs_err))) +. eta)) +. ((t10 +. t21) *. (((t10 *. sin_abs_err) *. abs t2) +. eta)))) +. ((t10 +. t23) *. (((((t10 *. (sin_abs_err +. (sin_abs_err *. t15))) *. abs t12) +. ((t10 *. (t19 +. (t19 *. sin_rel_err))) *. abs t7)) +. (t10 *. (t19 *. sin_abs_err))) +. eta))))
asserted formula---------------
assert abs (to_real result -. ((((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. (to_real ny1 *. sin (to_real theta1))) +. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1)))) <=. (((((((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps)))) +. eps) *. ((abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. abs (to_real ny1 *. sin (to_real theta1))) +. abs ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1)))) +. ((((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err))) *. abs (cos (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real ny1)) +. eta)))) +. (((1.0 +. eps) +. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps)) *. ((((((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err))) *. abs (sin (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err))) +. eta))))
asserted formula---------------
apply uadd_single_error_propagation with ((nx1 **. o) **. o1) ++. (ny1 **. o2),(nz1 **. o3) **. o4
apply premises---------------
assert abs (to_real (((nx1 **. o) **. o1) ++. (ny1 **. o2)) -. (((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. (to_real ny1 *. sin (to_real theta1)))) <=. (((((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) *. (abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. abs (to_real ny1 *. sin (to_real theta1)))) +. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err))) *. abs (cos (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real ny1)) +. eta))))
asserted formula---------------
apply uadd_single_error_propagation with (nx1 **. o) **. o1,ny1 **. o2
apply premises---------------
assert abs (to_real ((nx1 **. o) **. o1) -. ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) *. abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) +. ((((((cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err)) *. abs (cos (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real ((nx1 **. o) **. o1) -. ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nx1 *. cos (to_real theta1)) *. abs (cos (to_real phi1)))) +. ((((((cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err)) *. abs (cos (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with nx1 **. o,o1
apply premises---------------
assert abs (to_real (nx1 **. o) -. (to_real nx1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nx1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (nx1 **. o) -. (to_real nx1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nx1) *. abs (cos (to_real theta1)))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nx1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with nx1,o
apply premises0.04------------
apply premises0.05------------
apply premises------0.11------
apply premises---------0.08---
apply premises------------0.02
apply premises0.03------------
apply premises---------0.08---
apply premises------------0.02
apply premises0.02------------
asserted formula0.17------------
apply premises------------0.03
apply premises------0.06------
apply premises------------0.02
apply premises0.03------------
apply premises0.04------------
apply premises---------0.10---
apply premises0.04------------
apply premises0.06------------
apply premises0.05------------
asserted formula1.28------------
apply premises------0.07------
apply premises---------------
assert abs (to_real (ny1 **. o2) -. (to_real ny1 *. sin (to_real theta1))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real ny1 *. sin (to_real theta1))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real ny1)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta1)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (ny1 **. o2) -. (to_real ny1 *. sin (to_real theta1))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real ny1) *. abs (sin (to_real theta1)))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real ny1)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta1)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with ny1,o2
apply premises------0.07------
apply premises------------0.02
apply premises------------0.01
apply premises------------0.01
apply premises------0.08------
apply premises0.04------------
apply premises---------0.07---
apply premises------------0.02
apply premises0.03------------
asserted formula0.09------------
apply premises------------0.01
apply premises0.06------------
apply premises------0.06------
apply premises0.05------------
apply premises------------0.04
apply premises0.26------------
apply premises0.03------------
apply premises------------0.02
apply premises------------0.02
apply premises---------------
assert abs (to_real ((nz1 **. o3) **. o4) -. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps))) *. abs ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) +. ((((((sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err)) *. abs (sin (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real ((nz1 **. o3) **. o4) -. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nz1 *. cos (to_real theta1)) *. abs (sin (to_real phi1)))) +. ((((((sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err)) *. abs (sin (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with nz1 **. o3,o4
apply premises---------------
assert abs (to_real (nz1 **. o3) -. (to_real nz1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nz1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
assert abs (to_real (nz1 **. o3) -. (to_real nz1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nz1) *. abs (cos (to_real theta1)))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nz1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula---------------
apply umul_single_error_propagation with nz1,o3
apply premises---------0.08---
apply premises------0.06------
apply premises0.04------------
apply premises---------0.07---
apply premises---------0.07---
apply premises------------0.03
apply premises0.05------------
apply premises---------0.07---
apply premises0.03------------
asserted formula0.17------------
apply premises------0.07------
apply premises---------0.07---
apply premises0.04------------
apply premises------------0.04
apply premises0.04------------
apply premises------------0.01
apply premises0.04------------
apply premises------------0.02
apply premises------0.06------
asserted formula1.40------------
apply premises---------0.14---
apply premises------0.11------
apply premises------------0.03
apply premises0.05------------
apply premises0.06------------
apply premises1.02------------
apply premises0.26------------
apply premises---------0.11---
asserted formula------0.09------
postcondition------------0.05

Theory "sin_cos.SinCosDouble": fully verified

ObligationsAlt-Ergo 2.5.4CVC4 1.8CVC5 1.0.5Z3 4.12.2
VC for sin_simple_example------------
split_vc
precondition0.15---------
postcondition------------
assert let t = to_real a +. to_real b in let t1 = sin t in abs (to_real result -. t1) <=. ((abs t1 *. sin_rel_err) +. (((eps *. abs t) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula------------
assert abs (to_real result -. sin (to_real a +. to_real b)) <=. ((abs (sin (to_real a +. to_real b)) *. sin_rel_err) +. (((eps *. abs (to_real a +. to_real b)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula------------
assert abs (to_real result -. sin (to_real a +. to_real b)) <=. ((sin_rel_err *. abs (sin (to_real a +. to_real b))) +. ((((eps *. abs (to_real a +. to_real b)) +. 0.0) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula------------
apply sin_double_error_propagation with a ++. b
apply premises------------
assert abs (to_real (a ++. b) -. (to_real a +. to_real b)) <=. (eps *. abs (to_real a +. to_real b))
asserted formula0.21---------
apply premises---------0.02
apply premises---------0.02
apply premises------0.08---
apply premises---------0.03
asserted formula------0.13---
asserted formula------0.11---
postcondition0.05---------
VC for cos_simple_example------------
split_vc
precondition0.17---------
postcondition------------
assert let t = to_real a -. to_real b in let t1 = cos t in abs (to_real result -. t1) <=. ((abs t1 *. cos_rel_err) +. (((eps *. abs t) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula------------
assert abs (to_real result -. cos (to_real a -. to_real b)) <=. ((abs (cos (to_real a -. to_real b)) *. cos_rel_err) +. (((eps *. abs (to_real a -. to_real b)) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula------------
assert abs (to_real result -. cos (to_real a -. to_real b)) <=. ((cos_rel_err *. abs (cos (to_real a -. to_real b))) +. ((((eps *. abs (to_real a -. to_real b)) +. 0.0) *. (1.0 +. cos_rel_err)) +. cos_abs_err))
asserted formula------------
apply cos_double_error_propagation with a --. b
apply premises------------
assert abs (to_real (a --. b) -. (to_real a -. to_real b)) <=. (eps *. abs (to_real a -. to_real b))
asserted formula0.23---------
apply premises0.04---------
apply premises---------0.03
apply premises0.04---------
apply premises---------0.03
asserted formula0.04---------
asserted formula---0.06------
postcondition0.06---------
VC for cos_and_sine_example------------
split_vc
precondition------0.09---
precondition------0.09---
precondition------0.09---
precondition---0.06------
postcondition------------
split_vc
postcondition---------0.13
VC for cos_and_sine_example0.03---------
VC for cos_and_sine_example0.04---------
VC for cos_and_sine_example------------
assert let t1 = to_real a1 in let t2 = sin t1 in let t3 = cos t1 in let t4 = 1.0 +. eps in let t5 = t2 *. t2 in let t6 = t3 *. t3 in let t7 = eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. t4) in let t8 = eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. t4) in let t9 = (t4 *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs t3 in let t10 = (t4 *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs t2 in abs (to_real result -. (t6 +. t5)) <=. ((((t7 +. t8) +. eps) *. (abs t6 +. abs t5)) +. (((t4 +. t8) *. (((t9 +. t9) +. (t4 *. (cos_abs_err *. cos_abs_err))) +. eta)) +. ((t4 +. t7) *. (((t10 +. t10) +. (t4 *. (sin_abs_err *. sin_abs_err))) +. eta))))
asserted formula------------
assert abs (to_real result -. ((cos (to_real a1) *. cos (to_real a1)) +. (sin (to_real a1) *. sin (to_real a1)))) <=. (((((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps)))) +. eps) *. (abs (cos (to_real a1) *. cos (to_real a1)) +. abs (sin (to_real a1) *. sin (to_real a1)))) +. ((((1.0 +. eps) +. (eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs (cos (to_real a1))) +. (((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. cos_rel_err))) *. abs (cos (to_real a1)))) +. ((1.0 +. eps) *. (cos_abs_err *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs (sin (to_real a1))) +. (((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. sin_rel_err))) *. abs (sin (to_real a1)))) +. ((1.0 +. eps) *. (sin_abs_err *. sin_abs_err))) +. eta))))
asserted formula------------
apply uadd_double_error_propagation with o **. o1,o2 **. o3
apply premises------------
assert abs (to_real (o **. o1) -. (cos (to_real a1) *. cos (to_real a1))) <=. (((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) *. abs (cos (to_real a1) *. cos (to_real a1))) +. ((((((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1))) +. ((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1)))) +. (cos_abs_err *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (o **. o1) -. (cos (to_real a1) *. cos (to_real a1))) <=. (((eps +. (((cos_rel_err +. cos_rel_err) +. (cos_rel_err *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (cos (to_real a1)) *. abs (cos (to_real a1)))) +. ((((((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1))) +. ((cos_abs_err +. (cos_abs_err *. cos_rel_err)) *. abs (cos (to_real a1)))) +. (cos_abs_err *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with o,o1
apply premises---------0.04
apply premises---0.07------
apply premises---------0.03
apply premises------0.11---
apply premises---0.06------
apply premises---------0.02
apply premises---------0.02
apply premises---------0.02
apply premises---0.06------
asserted formula0.18---------
apply premises------0.11---
apply premises------------
assert abs (to_real (o2 **. o3) -. (sin (to_real a1) *. sin (to_real a1))) <=. (((eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps))) *. abs (sin (to_real a1) *. sin (to_real a1))) +. ((((((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1))) +. ((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1)))) +. (sin_abs_err *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (o2 **. o3) -. (sin (to_real a1) *. sin (to_real a1))) <=. (((eps +. (((sin_rel_err +. sin_rel_err) +. (sin_rel_err *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (sin (to_real a1)) *. abs (sin (to_real a1)))) +. ((((((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1))) +. ((sin_abs_err +. (sin_abs_err *. sin_rel_err)) *. abs (sin (to_real a1)))) +. (sin_abs_err *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with o2,o3
apply premises------0.08---
apply premises---------0.02
apply premises---------0.03
apply premises0.04---------
apply premises---------0.02
apply premises0.06---------
apply premises0.06---------
apply premises---------0.02
apply premises---------0.04
asserted formula0.09---------
apply premises------0.17---
apply premises------0.11---
apply premises---------0.02
apply premises0.06---------
apply premises0.05---------
apply premises0.10---------
apply premises0.06---------
apply premises---------0.02
asserted formula---0.06------
VC for cos_and_sine_example---0.09------
VC for kinematics------------
split_vc
precondition0.15---------
precondition---------0.04
postcondition------------
assert let t = to_real o in let t3 = to_real o2 in let t4 = to_real theta11 in let t5 = 1.0 +. eps in let t6 = t4 +. to_real theta21 in let t7 = t *. sin t4 in let t8 = eps +. (sin_rel_err *. t5) in let t9 = t3 *. sin t6 in let t10 = t5 +. t8 in abs (to_real result -. (t7 +. t9)) <=. ((((t8 +. t8) +. eps) *. (abs t7 +. abs t9)) +. ((t10 *. (((t5 *. sin_abs_err) *. abs t) +. eta)) +. (t10 *. (((t5 *. (((eps *. abs t6) *. (1.0 +. sin_rel_err)) +. sin_abs_err)) *. abs t3) +. eta))))
asserted formula------------
assert abs (to_real result -. ((to_real o *. sin (to_real theta11)) +. (to_real o2 *. sin (to_real theta11 +. to_real theta21)))) <=. (((((eps +. (sin_rel_err *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) *. (abs (to_real o *. sin (to_real theta11)) +. abs (to_real o2 *. sin (to_real theta11 +. to_real theta21)))) +. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real o)) +. eta)) +. (((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err)) *. abs (to_real o2)) +. eta))))
asserted formula------------
apply uadd_double_error_propagation with o **. o1,o2 **. o3
apply premises------------
assert abs (to_real (o **. o1) -. (to_real o *. sin (to_real theta11))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real o *. sin (to_real theta11))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real o)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (o **. o1) -. (to_real o *. sin (to_real theta11))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real o) *. abs (sin (to_real theta11)))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real o)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with o,o1
apply premises---------0.06
apply premises0.06---------
apply premises0.05---------
apply premises---------0.02
apply premises---0.08------
apply premises0.03---------
apply premises------0.11---
apply premises---0.10------
apply premises------0.08---
asserted formula0.08---------
apply premises---0.07------
apply premises------------
assert abs (to_real (o2 **. o3) -. (to_real o2 *. sin (to_real theta11 +. to_real theta21))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real o2 *. sin (to_real theta11 +. to_real theta21))) +. (((((((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) *. 0.0)) *. abs (to_real o2)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (0.0 *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (o2 **. o3) -. (to_real o2 *. sin (to_real theta11 +. to_real theta21))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real o2) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (((((((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err) *. 0.0)) *. abs (to_real o2)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta11 +. to_real theta21)))) +. (0.0 *. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with o2,o3
apply premises---------0.02
apply premises------------
assert abs (to_real o3 -. sin (to_real theta11 +. to_real theta21)) <=. ((abs (sin (to_real theta11 +. to_real theta21)) *. sin_rel_err) +. (((eps *. abs (to_real theta11 +. to_real theta21)) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula------------
assert abs (to_real o3 -. sin (to_real theta11 +. to_real theta21)) <=. ((sin_rel_err *. abs (sin (to_real theta11 +. to_real theta21))) +. ((((eps *. abs (to_real theta11 +. to_real theta21)) +. 0.0) *. (1.0 +. sin_rel_err)) +. sin_abs_err))
asserted formula------------
apply sin_double_error_propagation with theta11 ++. theta21
apply premises------------
assert abs (to_real (theta11 ++. theta21) -. (to_real theta11 +. to_real theta21)) <=. (eps *. abs (to_real theta11 +. to_real theta21))
asserted formula0.39---------
apply premises---------0.03
apply premises---------0.02
apply premises---0.06------
apply premises------0.08---
asserted formula------0.13---
apply premises---0.06------
apply premises0.05---------
apply premises---0.11------
apply premises0.03---------
apply premises---------0.03
apply premises------0.10---
apply premises0.05---------
apply premises------0.11---
asserted formula0.11---------
apply premises---0.07------
apply premises------0.08---
apply premises---------0.01
apply premises0.03---------
apply premises---------0.04
apply premises------0.08---
apply premises0.03---------
apply premises---------0.02
asserted formula---0.06------
postcondition0.47---------
VC for raytracer------------
split_vc
precondition------0.07---
precondition------0.08---
precondition------0.08---
precondition------0.08---
precondition------0.09---
postcondition------------
assert let t = to_real nz1 in let t2 = to_real ny1 in let t3 = to_real nx1 in let t5 = to_real phi1 in let t6 = to_real theta1 in let t7 = sin t5 in let t8 = cos t5 in let t9 = cos t6 in let t10 = 1.0 +. eps in let t11 = t10 *. cos_abs_err in let t12 = t *. t9 in let t13 = t2 *. sin t6 in let t14 = t3 *. t9 in let t15 = eps +. (cos_rel_err *. t10) in let t16 = eps +. (sin_rel_err *. t10) in let t17 = t12 *. t7 in let t18 = t14 *. t8 in let t19 = (t11 *. abs t) +. eta in let t20 = (t11 *. abs t3) +. eta in let t21 = eps +. (((t15 +. cos_rel_err) +. (t15 *. cos_rel_err)) *. t10) in let t22 = eps +. (((t15 +. sin_rel_err) +. (t15 *. sin_rel_err)) *. t10) in let t23 = (t21 +. t16) +. eps in abs (to_real result -. ((t18 +. t13) +. t17)) <=. ((((t23 +. t22) +. eps) *. ((abs t18 +. abs t13) +. abs t17)) +. (((t10 +. t22) *. (((t10 +. t16) *. (((((t10 *. (cos_abs_err +. (cos_abs_err *. t15))) *. abs t14) +. ((t10 *. (t20 +. (t20 *. cos_rel_err))) *. abs t8)) +. (t10 *. (t20 *. cos_abs_err))) +. eta)) +. ((t10 +. t21) *. (((t10 *. sin_abs_err) *. abs t2) +. eta)))) +. ((t10 +. t23) *. (((((t10 *. (sin_abs_err +. (sin_abs_err *. t15))) *. abs t12) +. ((t10 *. (t19 +. (t19 *. sin_rel_err))) *. abs t7)) +. (t10 *. (t19 *. sin_abs_err))) +. eta))))
asserted formula------------
assert abs (to_real result -. ((((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. (to_real ny1 *. sin (to_real theta1))) +. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1)))) <=. (((((((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps)))) +. eps) *. ((abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. abs (to_real ny1 *. sin (to_real theta1))) +. abs ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1)))) +. ((((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err))) *. abs (cos (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real ny1)) +. eta)))) +. (((1.0 +. eps) +. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps)) *. ((((((1.0 +. eps) *. (sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err))) *. abs (sin (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err))) +. eta))))
asserted formula------------
apply uadd_double_error_propagation with ((nx1 **. o) **. o1) ++. (ny1 **. o2),(nz1 **. o3) **. o4
apply premises------------
assert abs (to_real (((nx1 **. o) **. o1) ++. (ny1 **. o2)) -. (((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. (to_real ny1 *. sin (to_real theta1)))) <=. (((((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) +. eps) *. (abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1)) +. abs (to_real ny1 *. sin (to_real theta1)))) +. ((((1.0 +. eps) +. (eps +. (sin_rel_err *. (1.0 +. eps)))) *. ((((((1.0 +. eps) *. (cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps)))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. (((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err))) *. abs (cos (to_real phi1)))) +. ((1.0 +. eps) *. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err))) +. eta)) +. (((1.0 +. eps) +. (eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps)))) *. ((((1.0 +. eps) *. sin_abs_err) *. abs (to_real ny1)) +. eta))))
asserted formula------------
apply uadd_double_error_propagation with (nx1 **. o) **. o1,ny1 **. o2
apply premises------------
assert abs (to_real ((nx1 **. o) **. o1) -. ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) *. abs ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) +. ((((((cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err)) *. abs (cos (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real ((nx1 **. o) **. o1) -. ((to_real nx1 *. cos (to_real theta1)) *. cos (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. cos_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nx1 *. cos (to_real theta1)) *. abs (cos (to_real phi1)))) +. ((((((cos_abs_err +. (cos_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_rel_err)) *. abs (cos (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nx1)) +. eta) *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with nx1 **. o,o1
apply premises------------
assert abs (to_real (nx1 **. o) -. (to_real nx1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. abs (to_real nx1 *. cos (to_real theta1))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nx1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (nx1 **. o) -. (to_real nx1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nx1) *. abs (cos (to_real theta1)))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nx1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with nx1,o
apply premises---------0.03
apply premises0.04---------
apply premises---------0.03
apply premises0.05---------
apply premises------0.08---
apply premises0.03---------
apply premises0.06---------
apply premises------0.10---
apply premises0.04---------
asserted formula0.18---------
apply premises0.06---------
apply premises---0.09------
apply premises---------0.03
apply premises---0.09------
apply premises0.04---------
apply premises------0.09---
apply premises0.03---------
apply premises------0.10---
apply premises------0.11---
asserted formula1.36---------
apply premises---0.08------
apply premises------------
assert abs (to_real (ny1 **. o2) -. (to_real ny1 *. sin (to_real theta1))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. abs (to_real ny1 *. sin (to_real theta1))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real ny1)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta1)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (ny1 **. o2) -. (to_real ny1 *. sin (to_real theta1))) <=. (((eps +. (((0.0 +. sin_rel_err) +. (0.0 *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real ny1) *. abs (sin (to_real theta1)))) +. ((((((sin_abs_err +. (sin_abs_err *. 0.0)) *. abs (to_real ny1)) +. ((0.0 +. (0.0 *. sin_rel_err)) *. abs (sin (to_real theta1)))) +. (0.0 *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with ny1,o2
apply premises---0.06------
apply premises0.04---------
apply premises0.05---------
apply premises---------0.02
apply premises------0.07---
apply premises---------0.02
apply premises0.04---------
apply premises---------0.01
apply premises---------0.03
asserted formula0.10---------
apply premises---------0.04
apply premises---0.08------
apply premises0.04---------
apply premises0.05---------
apply premises------0.13---
apply premises0.26---------
apply premises0.06---------
apply premises0.06---------
apply premises---------0.02
apply premises------------
assert abs (to_real ((nz1 **. o3) **. o4) -. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps))) *. abs ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) +. ((((((sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err)) *. abs (sin (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real ((nz1 **. o3) **. o4) -. ((to_real nz1 *. cos (to_real theta1)) *. sin (to_real phi1))) <=. (((eps +. ((((eps +. (cos_rel_err *. (1.0 +. eps))) +. sin_rel_err) +. ((eps +. (cos_rel_err *. (1.0 +. eps))) *. sin_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nz1 *. cos (to_real theta1)) *. abs (sin (to_real phi1)))) +. ((((((sin_abs_err +. (sin_abs_err *. (eps +. (cos_rel_err *. (1.0 +. eps))))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_rel_err)) *. abs (sin (to_real phi1)))) +. (((((1.0 +. eps) *. cos_abs_err) *. abs (to_real nz1)) +. eta) *. sin_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with nz1 **. o3,o4
apply premises------------
assert abs (to_real (nz1 **. o3) -. (to_real nz1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. abs (to_real nz1 *. cos (to_real theta1))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nz1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
assert abs (to_real (nz1 **. o3) -. (to_real nz1 *. cos (to_real theta1))) <=. (((eps +. (((0.0 +. cos_rel_err) +. (0.0 *. cos_rel_err)) *. (1.0 +. eps))) *. (abs (to_real nz1) *. abs (cos (to_real theta1)))) +. ((((((cos_abs_err +. (cos_abs_err *. 0.0)) *. abs (to_real nz1)) +. ((0.0 +. (0.0 *. cos_rel_err)) *. abs (cos (to_real theta1)))) +. (0.0 *. cos_abs_err)) *. (1.0 +. eps)) +. eta))
asserted formula------------
apply umul_double_error_propagation with nz1,o3
apply premises------0.08---
apply premises---------0.02
apply premises------0.10---
apply premises0.04---------
apply premises0.04---------
apply premises0.04---------
apply premises---------0.02
apply premises---------0.03
apply premises0.02---------
asserted formula0.10---------
apply premises------0.08---
apply premises------0.11---
apply premises---------0.01
apply premises0.06---------
apply premises---------0.04
apply premises0.05---------
apply premises0.04---------
apply premises------0.09---
apply premises---0.08------
asserted formula1.39---------
apply premises---------0.03
apply premises---0.08------
apply premises---------0.02
apply premises0.05---------
apply premises0.06---------
apply premises1.10---------
apply premises0.29---------
apply premises---0.07------
asserted formula---0.11------
postcondition---0.07------