diff --git a/.ocamlformat b/.ocamlformat
index 8fa71c162ea3feebcc61fc98509325cc21d2c39f..d4d1b6a3629ffc0c4e4db95826f2257466a7e5d2 100644
--- a/.ocamlformat
+++ b/.ocamlformat
@@ -1 +1,4 @@
 version=0.19.0
+exp-grouping=preserve
+if-then-else=keyword-first
+max-indent=2
diff --git a/config/provers_autodetection.conf b/config/caisar.conf
similarity index 100%
rename from config/provers_autodetection.conf
rename to config/caisar.conf
diff --git a/config/dune b/config/dune
index 1aabdf75ad87b38d9be62f9e82b4d5859a2f7a81..2599259423220dce7e9bed4a2f48208a45d25fc7 100644
--- a/config/dune
+++ b/config/dune
@@ -1,4 +1,4 @@
 (install
  (section (site (caisar config)))
- (files provers_autodetection.conf)
+ (files caisar.conf)
 (package caisar))
diff --git a/dune-project b/dune-project
index 610e405cc8bb2069908819f343798e4d909bb84b..7f51a78afd27666dcab27405f5cba6215f63bfcb 100644
--- a/dune-project
+++ b/dune-project
@@ -27,7 +27,10 @@
    (ppx_deriving_yojson (>= 3.6.1))
    (csv (>= 2.4))
   )
-  (sites (share stdlib)(share config))
+  (sites
+   (share stdlib)
+   (share config)
+  )
 )
 
 (package
diff --git a/lib/nnet/dune b/lib/nnet/dune
index fb2c5ec74be4294d311033bf92eed89bf913e5da..c6303823209277875d7941fc93eb07b3fd69a643 100644
--- a/lib/nnet/dune
+++ b/lib/nnet/dune
@@ -1,5 +1,5 @@
 (library
- (name        nnet)
+ (name nnet)
  (public_name nnet)
  (libraries base csv)
  (synopsis "NNet parser"))
diff --git a/lib/nnet/nnet.ml b/lib/nnet/nnet.ml
index 8b626b36d2000e4ad99f078616ce80c0d70d9523..3ef39126ee3d41b1568e7063189fdd1f1f2d54f9 100644
--- a/lib/nnet/nnet.ml
+++ b/lib/nnet/nnet.ml
@@ -42,24 +42,24 @@ let skip_nnet_header filename in_channel =
   try
     while true do
       let line = Stdlib.input_line in_channel in
-      if not (Str.string_match (Str.regexp "//") line 0) then
-        raise End_of_header
+      if not (Str.string_match (Str.regexp "//") line 0)
+      then raise End_of_header
       else pos_in := Stdlib.pos_in in_channel
     done;
     assert false
   with
   | End_of_header ->
-      (* At this point we have read one line past the header part: seek back. *)
-      Stdlib.seek_in in_channel !pos_in;
-      Ok ()
+    (* At this point we have read one line past the header part: seek back. *)
+    Stdlib.seek_in in_channel !pos_in;
+    Ok ()
   | End_of_file ->
-      Error (Format.sprintf "NNet model not found in file `%s'." filename)
+    Error (Format.sprintf "NNet model not found in file `%s'." filename)
 
 (* Retrieve number of layers, inputs, outputs and maximum layer size. *)
 let handle_nnet_basic_info in_channel =
   match handle_nnet_line ~f:Int.of_string in_channel with
   | [ n_layers; n_inputs; n_outputs; max_layer_size ] ->
-      Ok (n_layers, n_inputs, n_outputs, max_layer_size)
+    Ok (n_layers, n_inputs, n_outputs, max_layer_size)
   | _ -> nnet_format_error "second"
   | exception End_of_file -> nnet_format_error "second"
 
@@ -67,7 +67,8 @@ let handle_nnet_basic_info in_channel =
 let handle_nnet_layer_sizes n_layers in_channel =
   try
     let layer_sizes = handle_nnet_line ~f:Int.of_string in_channel in
-    if List.length layer_sizes = n_layers + 1 then Ok layer_sizes
+    if List.length layer_sizes = n_layers + 1
+    then Ok layer_sizes
     else nnet_format_error "third"
   with End_of_file -> nnet_format_error "third"
 
@@ -82,7 +83,8 @@ let handle_nnet_unused_flag in_channel =
 let handle_nnet_min_input_values n_inputs in_channel =
   try
     let min_input_values = handle_nnet_line ~f:Float.of_string in_channel in
-    if List.length min_input_values = n_inputs then Ok min_input_values
+    if List.length min_input_values = n_inputs
+    then Ok min_input_values
     else nnet_format_error "fifth"
   with End_of_file -> nnet_format_error "fifth"
 
@@ -90,7 +92,8 @@ let handle_nnet_min_input_values n_inputs in_channel =
 let handle_nnet_max_input_values n_inputs in_channel =
   try
     let max_input_values = handle_nnet_line ~f:Float.of_string in_channel in
-    if List.length max_input_values = n_inputs then Ok max_input_values
+    if List.length max_input_values = n_inputs
+    then Ok max_input_values
     else nnet_format_error "sixth"
   with End_of_file -> nnet_format_error "sixth"
 
@@ -98,7 +101,8 @@ let handle_nnet_max_input_values n_inputs in_channel =
 let handle_nnet_mean_values n_inputs in_channel =
   try
     let mean_values = handle_nnet_line ~f:Float.of_string in_channel in
-    if List.length mean_values = n_inputs + 1 then
+    if List.length mean_values = n_inputs + 1
+    then
       let mean_input_values, mean_output_value =
         List.split_n mean_values n_inputs
       in
@@ -110,7 +114,8 @@ let handle_nnet_mean_values n_inputs in_channel =
 let handle_nnet_range_values n_inputs in_channel =
   try
     let range_values = handle_nnet_line ~f:Float.of_string in_channel in
-    if List.length range_values = n_inputs + 1 then
+    if List.length range_values = n_inputs + 1
+    then
       let range_input_values, range_output_value =
         List.split_n range_values n_inputs
       in
diff --git a/lib/nnet/nnet.mli b/lib/nnet/nnet.mli
index a1b5076fefaccfcea806f896708b3d48260d0eeb..437803c8e1bd9c10ace5b2157ef81048dc7005b1 100644
--- a/lib/nnet/nnet.mli
+++ b/lib/nnet/nnet.mli
@@ -13,9 +13,9 @@ type t = private {
   min_input_values : float list;  (** Minimum values of inputs. *)
   max_input_values : float list;  (** Maximum values of inputs. *)
   mean_values : float list * float;
-      (** Mean values of inputs and one value for all outputs. *)
+    (** Mean values of inputs and one value for all outputs. *)
   range_values : float list * float;
-      (** Range values of inputs and one value for all outputs. *)
+    (** Range values of inputs and one value for all outputs. *)
   weights_biases : float list list;  (** All weights and biases of NNet model. *)
 }
 (** NNet model metadata. *)
diff --git a/src/detection.ml b/src/detection.ml
index ed15cdc15bf5bf686309eab4e8993a7c785833b2..c4fa222a5ace8ff5025cb8e9eacd8bb058eb7c40 100644
--- a/src/detection.ml
+++ b/src/detection.ml
@@ -1,24 +1,27 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Caisar.                                          *)
+(*                                                                        *)
+(**************************************************************************)
+
 open Base
 module Sys = Caml.Sys
 
 let null = if Sys.unix then "/dev/null" else "NUL"
 
-let rec lookup_file l f =
-  match l with
+let rec lookup_file dirs filename =
+  match dirs with
   | [] -> raise Caml.Not_found
-  | a :: l ->
-      let abs = Caml.Filename.concat a f in
-      if Sys.file_exists abs then abs else lookup_file l f
+  | dir :: dirs ->
+    let file = Caml.Filename.concat dir filename in
+    if Sys.file_exists file then file else lookup_file dirs filename
 
 let detect () =
-  Why3.Debug.set_flag Why3.Autodetection.debug;
-  let caisar_autodetection =
-    lookup_file Stdlib_path.Sites.config "provers_autodetection.conf"
-  in
-  let data =
-    Why3.Autodetection.Prover_autodetection_data.from_file caisar_autodetection
-  in
-  let config = Why3.Whyconf.init_config (Some null) in
-  let binaries = Why3.Autodetection.request_binaries_version config data in
-  let provers = Why3.Autodetection.compute_builtin_prover binaries data in
-  Why3.Whyconf.set_provers config provers
+  let open Why3 in
+  Debug.set_flag Why3.Autodetection.debug;
+  let caisar_conf = lookup_file Dirs.Sites.config "caisar.conf" in
+  let data = Autodetection.Prover_autodetection_data.from_file caisar_conf in
+  let config = Whyconf.init_config (Some null) in
+  let binaries = Autodetection.request_binaries_version config data in
+  let provers = Autodetection.compute_builtin_prover binaries data in
+  Whyconf.set_provers config provers
diff --git a/src/dune b/src/dune
index 0e5cc551f334b959e6ee9c7564e3347740d71645..3d9b62cc15be31725720c7cf92474d8f1110e275 100644
--- a/src/dune
+++ b/src/dune
@@ -6,4 +6,6 @@
   (package caisar)
 )
 
-(generate_sites_module (module stdlib_path) (sites caisar))
+(generate_sites_module
+  (module dirs)
+  (sites caisar))
diff --git a/src/language.ml b/src/language.ml
index ee97874283d40ee8769c1899b37d914ea1920784..d5a0606319a70b39e25b5bb5c1f1c39477362269 100644
--- a/src/language.ml
+++ b/src/language.ml
@@ -6,7 +6,7 @@
 
 open Base
 
-(* Register neural network languages *)
+(* Register neural network formats. *)
 
 let nnet_parser env _ filename _ =
   let open Why3 in
@@ -18,24 +18,24 @@ let nnet_parser env _ filename _ =
   match header with
   | Error s -> Loc.errorm "%s" s
   | Ok header ->
-      let id_as_tuple = Ident.id_fresh "As_tuple" in
-      let th_uc = Pmodule.create_module env id_as_tuple in
-      let th_uc = Pmodule.use_export th_uc nnet in
-      let ls_out =
-        Term.create_fsymbol
-          (Ident.id_fresh "nnet_apply")
-          (List.init header.n_inputs ~f:(fun _ -> nnet_input_type))
-          (Ty.ty_tuple
-             (List.init header.n_outputs ~f:(fun _ -> nnet_input_type)))
-      in
+    let id_as_tuple = Ident.id_fresh "AsTuple" in
+    let th_uc = Pmodule.create_module env id_as_tuple in
+    let th_uc = Pmodule.use_export th_uc nnet in
+    let ls_nnet_apply =
+      let f _ = nnet_input_type in
+      Term.create_fsymbol
+        (Ident.id_fresh "nnet_apply")
+        (List.init header.n_inputs ~f)
+        (Ty.ty_tuple (List.init header.n_outputs ~f))
+    in
 
-      let th_uc =
-        Pmodule.add_pdecl ~vc:false th_uc
-          (Pdecl.create_pure_decl @@ Decl.create_param_decl ls_out)
-      in
-      Wstdlib.Mstr.singleton "AsTuple" (Pmodule.close_module th_uc)
+    let th_uc =
+      Pmodule.add_pdecl ~vc:false th_uc
+        (Pdecl.create_pure_decl @@ Decl.create_param_decl ls_nnet_apply)
+    in
+    Wstdlib.Mstr.singleton "AsTuple" (Pmodule.close_module th_uc)
 
 let register () =
-  Why3.Env.(
-    register_format ~desc:"NNet format (ReLU only)" Why3.Pmodule.mlw_language
+  Why3.(
+    Env.register_format ~desc:"NNet format (ReLU only)" Pmodule.mlw_language
       "NNet" [ "nnet" ] nnet_parser)
diff --git a/src/main.ml b/src/main.ml
index 8cda571d7003b06e78164942c268aa84da68db50..81d0a2b30f598b485333d04a8f127d8a97577ec8 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -24,13 +24,13 @@ let pp_header =
     match l with
     | Logs.App -> Fmt.pf ppf "[%a] " Fmt.(styled app_style string) x
     | Logs.Error ->
-        pp_h ppf err_style (match h with None -> "ERROR" | Some h -> h)
+      pp_h ppf err_style (match h with None -> "ERROR" | Some h -> h)
     | Logs.Warning ->
-        pp_h ppf warn_style (match h with None -> "WARNING" | Some h -> h)
+      pp_h ppf warn_style (match h with None -> "WARNING" | Some h -> h)
     | Logs.Info ->
-        pp_h ppf info_style (match h with None -> "INFO" | Some h -> h)
+      pp_h ppf info_style (match h with None -> "INFO" | Some h -> h)
     | Logs.Debug ->
-        pp_h ppf debug_style (match h with None -> "DEBUG" | Some h -> h)
+      pp_h ppf debug_style (match h with None -> "DEBUG" | Some h -> h)
 
 let setup_logs =
   let setup_log level =
@@ -78,11 +78,12 @@ let config_cmd =
   ( Term.(
       ret
         (const (fun cmdname detect _ ->
-             if not detect then `Help (`Pager, Some "config")
-             else
-               (* TODO: Do not only check for [detect], and enable it by
-                  default, as soon as other options are available. *)
-               `Ok (config cmdname true ()))
+           if not detect
+           then `Help (`Pager, Some "config")
+           else
+             (* TODO: Do not only check for [detect], and enable it by
+                default, as soon as other options are available. *)
+             `Ok (config cmdname true ()))
         $ const cmdname $ detect $ setup_logs)),
     Term.info cmdname ~sdocs:Manpage.s_common_options ~envs ~exits ~doc ~man )
 
@@ -110,7 +111,7 @@ let verify_cmd =
   ( Term.(
       ret
         (const (fun format loadpath files ->
-             `Ok (List.iter ~f:(Prove.prove format loadpath) files))
+           `Ok (List.iter ~f:(Verify.do_verify format loadpath) files))
         $ format $ loadpath $ files)),
     Term.info cmdname ~sdocs:Manpage.s_common_options ~exits ~doc ~man )
 
diff --git a/src/prove.ml b/src/prove.ml
deleted file mode 100644
index bdddcae4af7b0851250da637f8aa8a207cf84d7c..0000000000000000000000000000000000000000
--- a/src/prove.ml
+++ /dev/null
@@ -1,36 +0,0 @@
-open Base
-
-let () = Language.register ()
-
-let create_env loadpath =
-  let conf = Detection.detect () in
-  let stdlib = Stdlib_path.Sites.stdlib in
-  ( Why3.Env.create_env
-      (loadpath @ stdlib @ Why3.Whyconf.loadpath (Why3.Whyconf.get_main conf)),
-    conf )
-
-let altergo = Why3.Whyconf.mk_filter_prover "Alt-Ergo"
-
-let prove format loadpath file =
-  let env, config = create_env loadpath in
-  let _, m =
-    match file with
-    | "-" ->
-        ( "stdin",
-          Why3.Env.read_channel ?format Why3.Env.base_language env "stdin"
-            Caml.stdin )
-    | fname ->
-        let mlw_files, _ =
-          Why3.Env.read_file ?format Why3.Env.base_language env fname
-        in
-        (fname, mlw_files)
-  in
-  Why3.Wstdlib.Mstr.iter
-    (fun _ th ->
-      let l = Why3.Task.split_theory th None None in
-      let prover = Why3.Whyconf.filter_one_prover config altergo in
-      let driver =
-        Why3.Whyconf.load_driver (Why3.Whyconf.get_main config) env prover
-      in
-      List.iter l ~f:(Fmt.pr "%a" (Why3.Driver.print_task driver)))
-    m
diff --git a/src/verify.ml b/src/verify.ml
new file mode 100644
index 0000000000000000000000000000000000000000..3aa60d7bb21fb797dcdb59d50db05836bd747db1
--- /dev/null
+++ b/src/verify.ml
@@ -0,0 +1,40 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Caisar.                                          *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Base
+module Format = Caml.Format
+
+let () = Language.register ()
+
+let create_env loadpath =
+  let config = Detection.detect () in
+  let stdlib = Dirs.Sites.stdlib in
+
+  let open Why3 in
+  ( Env.create_env
+      (loadpath @ stdlib @ Whyconf.loadpath (Whyconf.get_main config)),
+    config )
+
+let altergo = Why3.Whyconf.mk_filter_prover "Alt-Ergo"
+
+let do_verify format loadpath file =
+  let open Why3 in
+  let env, config = create_env loadpath in
+  let _, mstr_theory =
+    match file with
+    | "-" ->
+      ("stdin", Env.(read_channel ?format base_language env "stdin" Caml.stdin))
+    | filename ->
+      let mlw_files, _ = Env.(read_file ?format base_language env filename) in
+      (filename, mlw_files)
+  in
+  Wstdlib.Mstr.iter
+    (fun _ theory ->
+      let tasks = Task.split_theory theory None None in
+      let prover = Whyconf.filter_one_prover config altergo in
+      let driver = Whyconf.(load_driver (get_main config) env prover) in
+      List.iter tasks ~f:(Format.printf "%a" (Driver.print_task driver)))
+    mstr_theory
diff --git a/stdlib/caisar.mlw b/stdlib/caisar.mlw
index 09763d9fea2daaf27063263bd4e2ec532a3a23d7..c29586772de968684847674cfe0347514ebc3204 100644
--- a/stdlib/caisar.mlw
+++ b/stdlib/caisar.mlw
@@ -1,4 +1,4 @@
 theory NNet
-       use ieee_float.Float64
-       type input_type = t
+  use ieee_float.Float64
+  type input_type = t
 end
diff --git a/tests/simple.t b/tests/simple.t
index b1729081aa728e20fc804ecefaddedfa2c1140c4..2fd8bba5e21304a722ac04c66183b78c91de96bf 100644
--- a/tests/simple.t
+++ b/tests/simple.t
@@ -11,1542 +11,1359 @@ Test help
   >      0.0 <. t'real y1 <. 0.1
   > end
   > EOF
-  theory Task
-    type int
-    
-    type real
-    
-    type string
-    
-    predicate (=) 'a 'a
-    
-    (* use why3.BuiltIn.BuiltIn *)
-    
-    type bool =
-      | True
-      | False
-    
-    (* use why3.Bool.Bool *)
-    
-    type tuple0 =
-      | Tuple0
-    
-    (* use why3.Tuple0.Tuple01 *)
-    
-    type unit = unit
-    
-    (* use why3.Unit.Unit *)
-    
-    constant zero : int = 0
-    
-    constant one : int = 1
-    
-    function (-_) int : int
-    
-    function (+) int int : int
-    
-    function ( * ) int int : int
-    
-    predicate (<) int int
-    
-    function (-) (x:int) (y:int) : int = x + (- y)
-    
-    predicate (>) (x:int) (y:int) = y < x
-    
-    predicate (<=) (x:int) (y:int) = x < y \/ x = y
-    
-    predicate (>=) (x:int) (y:int) = y <= x
-    
-    Assoc : forall x:int, y:int, z:int. ((x + y) + z) = (x + (y + z))
-    
-    (* clone algebra.Assoc with type t = int, function op = (+),
-      prop Assoc1 = Assoc,  *)
-    
-    Unit_def_l : forall x:int. (zero + x) = x
-    
-    Unit_def_r : forall x:int. (x + zero) = x
-    
-    (* clone algebra.Monoid with type t1 = int, constant unit = zero,
-      function op1 = (+), prop Unit_def_r1 = Unit_def_r,
-      prop Unit_def_l1 = Unit_def_l, prop Assoc2 = Assoc,  *)
-    
-    Inv_def_l : forall x:int. ((- x) + x) = zero
-    
-    Inv_def_r : forall x:int. (x + (- x)) = zero
-    
-    (* clone algebra.Group with type t2 = int, function inv = (-_),
-      constant unit1 = zero, function op2 = (+), prop Inv_def_r1 = Inv_def_r,
-      prop Inv_def_l1 = Inv_def_l, prop Unit_def_r2 = Unit_def_r,
-      prop Unit_def_l2 = Unit_def_l, prop Assoc3 = Assoc,  *)
-    
-    Comm : forall x:int, y:int. (x + y) = (y + x)
-    
-    (* clone algebra.Comm with type t3 = int, function op3 = (+),
-      prop Comm1 = Comm,  *)
-    
-    (* meta AC function (+) *)
-    
-    (* clone algebra.CommutativeGroup with type t4 = int, function inv1 = (-_),
-      constant unit2 = zero, function op4 = (+), prop Comm2 = Comm,
-      prop Inv_def_r2 = Inv_def_r, prop Inv_def_l2 = Inv_def_l,
-      prop Unit_def_r3 = Unit_def_r, prop Unit_def_l3 = Unit_def_l,
-      prop Assoc4 = Assoc,  *)
-    
-    Assoc5 : forall x:int, y:int, z:int. ((x * y) * z) = (x * (y * z))
-    
-    (* clone algebra.Assoc with type t = int, function op = ( * ),
-      prop Assoc1 = Assoc5,  *)
-    
-    Mul_distr_l :
-      forall x:int, y:int, z:int. (x * (y + z)) = ((x * y) + (x * z))
-    
-    Mul_distr_r :
-      forall x:int, y:int, z:int. ((y + z) * x) = ((y * x) + (z * x))
-    
-    (* clone algebra.Ring with type t5 = int, function ( *') = ( * ),
-      function (-'_) = (-_), function (+') = (+), constant zero1 = zero,
-      prop Mul_distr_r1 = Mul_distr_r, prop Mul_distr_l1 = Mul_distr_l,
-      prop Assoc6 = Assoc5, prop Comm3 = Comm, prop Inv_def_r3 = Inv_def_r,
-      prop Inv_def_l3 = Inv_def_l, prop Unit_def_r4 = Unit_def_r,
-      prop Unit_def_l4 = Unit_def_l, prop Assoc7 = Assoc,  *)
-    
-    Comm4 : forall x:int, y:int. (x * y) = (y * x)
-    
-    (* clone algebra.Comm with type t3 = int, function op3 = ( * ),
-      prop Comm1 = Comm4,  *)
-    
-    (* meta AC function ( * ) *)
-    
-    (* clone algebra.CommutativeRing with type t6 = int,
-      function ( *'') = ( * ), function (-''_) = (-_), function (+'') = (+),
-      constant zero2 = zero, prop Comm5 = Comm4,
-      prop Mul_distr_r2 = Mul_distr_r, prop Mul_distr_l2 = Mul_distr_l,
-      prop Assoc8 = Assoc5, prop Comm6 = Comm, prop Inv_def_r4 = Inv_def_r,
-      prop Inv_def_l4 = Inv_def_l, prop Unit_def_r5 = Unit_def_r,
-      prop Unit_def_l5 = Unit_def_l, prop Assoc9 = Assoc,  *)
-    
-    Unitary : forall x:int. (one * x) = x
-    
-    NonTrivialRing : not zero = one
-    
-    (* clone algebra.UnitaryCommutativeRing with type t7 = int,
-      constant one1 = one, function ( *''') = ( * ), function (-'''_) = (-_),
-      function (+''') = (+), constant zero3 = zero,
-      prop NonTrivialRing1 = NonTrivialRing, prop Unitary1 = Unitary,
-      prop Comm7 = Comm4, prop Mul_distr_r3 = Mul_distr_r,
-      prop Mul_distr_l3 = Mul_distr_l, prop Assoc10 = Assoc5,
-      prop Comm8 = Comm, prop Inv_def_r5 = Inv_def_r,
-      prop Inv_def_l5 = Inv_def_l, prop Unit_def_r6 = Unit_def_r,
-      prop Unit_def_l6 = Unit_def_l, prop Assoc11 = Assoc,  *)
-    
-    (* clone relations.EndoRelation with type t8 = int, predicate rel = (<=),
-       *)
-    
-    Refl : forall x:int. x <= x
-    
-    (* clone relations.Reflexive with type t9 = int, predicate rel1 = (<=),
-      prop Refl1 = Refl,  *)
-    
-    (* clone relations.EndoRelation with type t8 = int, predicate rel = (<=),
-       *)
-    
-    Trans : forall x:int, y:int, z:int. x <= y -> y <= z -> x <= z
-    
-    (* clone relations.Transitive with type t10 = int, predicate rel2 = (<=),
-      prop Trans1 = Trans,  *)
-    
-    (* clone relations.PreOrder with type t11 = int, predicate rel3 = (<=),
-      prop Trans2 = Trans, prop Refl2 = Refl,  *)
-    
-    (* clone relations.EndoRelation with type t8 = int, predicate rel = (<=),
-       *)
-    
-    Antisymm : forall x:int, y:int. x <= y -> y <= x -> x = y
-    
-    (* clone relations.Antisymmetric with type t12 = int,
-      predicate rel4 = (<=), prop Antisymm1 = Antisymm,  *)
-    
-    (* clone relations.PartialOrder with type t13 = int, predicate rel5 = (<=),
-      prop Antisymm2 = Antisymm, prop Trans3 = Trans, prop Refl3 = Refl,  *)
-    
-    (* clone relations.EndoRelation with type t8 = int, predicate rel = (<=),
-       *)
-    
-    Total : forall x:int, y:int. x <= y \/ y <= x
-    
-    (* clone relations.Total with type t14 = int, predicate rel6 = (<=),
-      prop Total1 = Total,  *)
-    
-    (* clone relations.TotalOrder with type t15 = int, predicate rel7 = (<=),
-      prop Total2 = Total, prop Antisymm3 = Antisymm, prop Trans4 = Trans,
-      prop Refl4 = Refl,  *)
-    
-    ZeroLessOne : zero <= one
-    
-    CompatOrderAdd : forall x:int, y:int, z:int. x <= y -> (x + z) <= (y + z)
-    
-    CompatOrderMult :
-      forall x:int, y:int, z:int. x <= y -> zero <= z -> (x * z) <= (y * z)
-    
-    (* clone algebra.OrderedUnitaryCommutativeRing with type t16 = int,
-      predicate (<=') = (<=), constant one2 = one, function ( *'''') = ( * ),
-      function (-''''_) = (-_), function (+'''') = (+), constant zero4 = zero,
-      prop CompatOrderMult1 = CompatOrderMult,
-      prop CompatOrderAdd1 = CompatOrderAdd, prop ZeroLessOne1 = ZeroLessOne,
-      prop Total3 = Total, prop Antisymm4 = Antisymm, prop Trans5 = Trans,
-      prop Refl5 = Refl, prop NonTrivialRing2 = NonTrivialRing,
-      prop Unitary2 = Unitary, prop Comm9 = Comm4,
-      prop Mul_distr_r4 = Mul_distr_r, prop Mul_distr_l4 = Mul_distr_l,
-      prop Assoc12 = Assoc5, prop Comm10 = Comm, prop Inv_def_r6 = Inv_def_r,
-      prop Inv_def_l6 = Inv_def_l, prop Unit_def_r7 = Unit_def_r,
-      prop Unit_def_l7 = Unit_def_l, prop Assoc13 = Assoc,  *)
-    
-    (* use int.Int *)
-    
-    constant zero5 : real = 0.0
-    
-    constant one3 : real = 1.0
-    
-    function (-'''''_) real : real
-    
-    function (+''''') real real : real
-    
-    function ( *''''') real real : real
-    
-    predicate (<') real real
-    
-    predicate (>') (x:real) (y:real) = y <' x
-    
-    predicate (<='') (x:real) (y:real) = x <' y \/ x = y
-    
-    predicate (>=') (x:real) (y:real) = y <='' x
-    
-    Assoc14 :
-      forall x:real, y:real, z:real.
-       ((x +''''' y) +''''' z) = (x +''''' (y +''''' z))
-    
-    (* clone algebra.Assoc with type t = real, function op = (+'''''),
-      prop Assoc1 = Assoc14,  *)
-    
-    Unit_def_l8 : forall x:real. (zero5 +''''' x) = x
-    
-    Unit_def_r8 : forall x:real. (x +''''' zero5) = x
-    
-    (* clone algebra.Monoid with type t1 = real, constant unit = zero5,
-      function op1 = (+'''''), prop Unit_def_r1 = Unit_def_r8,
-      prop Unit_def_l1 = Unit_def_l8, prop Assoc2 = Assoc14,  *)
-    
-    Inv_def_l7 : forall x:real. ((-''''' x) +''''' x) = zero5
-    
-    Inv_def_r7 : forall x:real. (x +''''' (-''''' x)) = zero5
-    
-    (* clone algebra.Group with type t2 = real, function inv = (-'''''_),
-      constant unit1 = zero5, function op2 = (+'''''),
-      prop Inv_def_r1 = Inv_def_r7, prop Inv_def_l1 = Inv_def_l7,
-      prop Unit_def_r2 = Unit_def_r8, prop Unit_def_l2 = Unit_def_l8,
-      prop Assoc3 = Assoc14,  *)
-    
-    Comm11 : forall x:real, y:real. (x +''''' y) = (y +''''' x)
-    
-    (* clone algebra.Comm with type t3 = real, function op3 = (+'''''),
-      prop Comm1 = Comm11,  *)
-    
-    (* meta AC function (+''''') *)
-    
-    (* clone algebra.CommutativeGroup with type t4 = real,
-      function inv1 = (-'''''_), constant unit2 = zero5,
-      function op4 = (+'''''), prop Comm2 = Comm11,
-      prop Inv_def_r2 = Inv_def_r7, prop Inv_def_l2 = Inv_def_l7,
-      prop Unit_def_r3 = Unit_def_r8, prop Unit_def_l3 = Unit_def_l8,
-      prop Assoc4 = Assoc14,  *)
-    
-    Assoc15 :
-      forall x:real, y:real, z:real.
-       ((x *''''' y) *''''' z) = (x *''''' (y *''''' z))
-    
-    (* clone algebra.Assoc with type t = real, function op = ( *'''''),
-      prop Assoc1 = Assoc15,  *)
-    
-    Mul_distr_l5 :
-      forall x:real, y:real, z:real.
-       (x *''''' (y +''''' z)) = ((x *''''' y) +''''' (x *''''' z))
-    
-    Mul_distr_r5 :
-      forall x:real, y:real, z:real.
-       ((y +''''' z) *''''' x) = ((y *''''' x) +''''' (z *''''' x))
-    
-    (* clone algebra.Ring with type t5 = real, function ( *') = ( *'''''),
-      function (-'_) = (-'''''_), function (+') = (+'''''),
-      constant zero1 = zero5, prop Mul_distr_r1 = Mul_distr_r5,
-      prop Mul_distr_l1 = Mul_distr_l5, prop Assoc6 = Assoc15,
-      prop Comm3 = Comm11, prop Inv_def_r3 = Inv_def_r7,
-      prop Inv_def_l3 = Inv_def_l7, prop Unit_def_r4 = Unit_def_r8,
-      prop Unit_def_l4 = Unit_def_l8, prop Assoc7 = Assoc14,  *)
-    
-    Comm12 : forall x:real, y:real. (x *''''' y) = (y *''''' x)
-    
-    (* clone algebra.Comm with type t3 = real, function op3 = ( *'''''),
-      prop Comm1 = Comm12,  *)
-    
-    (* meta AC function ( *''''') *)
-    
-    (* clone algebra.CommutativeRing with type t6 = real,
-      function ( *'') = ( *'''''), function (-''_) = (-'''''_),
-      function (+'') = (+'''''), constant zero2 = zero5, prop Comm5 = Comm12,
-      prop Mul_distr_r2 = Mul_distr_r5, prop Mul_distr_l2 = Mul_distr_l5,
-      prop Assoc8 = Assoc15, prop Comm6 = Comm11, prop Inv_def_r4 = Inv_def_r7,
-      prop Inv_def_l4 = Inv_def_l7, prop Unit_def_r5 = Unit_def_r8,
-      prop Unit_def_l5 = Unit_def_l8, prop Assoc9 = Assoc14,  *)
-    
-    Unitary3 : forall x:real. (one3 *''''' x) = x
-    
-    NonTrivialRing3 : not zero5 = one3
-    
-    (* clone algebra.UnitaryCommutativeRing with type t7 = real,
-      constant one1 = one3, function ( *''') = ( *'''''),
-      function (-'''_) = (-'''''_), function (+''') = (+'''''),
-      constant zero3 = zero5, prop NonTrivialRing1 = NonTrivialRing3,
-      prop Unitary1 = Unitary3, prop Comm7 = Comm12,
-      prop Mul_distr_r3 = Mul_distr_r5, prop Mul_distr_l3 = Mul_distr_l5,
-      prop Assoc10 = Assoc15, prop Comm8 = Comm11,
-      prop Inv_def_r5 = Inv_def_r7, prop Inv_def_l5 = Inv_def_l7,
-      prop Unit_def_r6 = Unit_def_r8, prop Unit_def_l6 = Unit_def_l8,
-      prop Assoc11 = Assoc14,  *)
-    
-    function inv2 real : real
-    
-    Inverse : forall x:real. not x = zero5 -> (x *''''' inv2 x) = one3
-    
-    function (-') (x:real) (y:real) : real = x +''''' (-''''' y)
-    
-    function (/) (x:real) (y:real) : real = x *''''' inv2 y
-    
-    add_div :
-      forall x:real, y:real, z:real.
-       not z = zero5 -> ((x +''''' y) / z) = ((x / z) +''''' (y / z))
-    
-    sub_div :
-      forall x:real, y:real, z:real.
-       not z = zero5 -> ((x -' y) / z) = ((x / z) -' (y / z))
-    
-    neg_div :
-      forall x:real, y:real.
-       not y = zero5 -> ((-''''' x) / y) = (-''''' (x / y))
-    
-    assoc_mul_div :
-      forall x:real, y:real, z:real.
-       not z = zero5 -> ((x *''''' y) / z) = (x *''''' (y / z))
-    
-    assoc_div_mul :
-      forall x:real, y:real, z:real.
-       not y = zero5 /\ not z = zero5 -> ((x / y) / z) = (x / (y *''''' z))
-    
-    assoc_div_div :
-      forall x:real, y:real, z:real.
-       not y = zero5 /\ not z = zero5 -> (x / (y / z)) = ((x *''''' z) / y)
-    
-    (* clone algebra.Field with type t17 = real, function (/') = (/),
-      function (-'') = (-'), function inv3 = inv2, constant one4 = one3,
-      function ( *'''''') = ( *'''''), function (-''''''_) = (-'''''_),
-      function (+'''''') = (+'''''), constant zero6 = zero5,
-      prop assoc_div_div1 = assoc_div_div, prop assoc_div_mul1 = assoc_div_mul,
-      prop assoc_mul_div1 = assoc_mul_div, prop neg_div1 = neg_div,
-      prop sub_div1 = sub_div, prop add_div1 = add_div,
-      prop Inverse1 = Inverse, prop NonTrivialRing4 = NonTrivialRing3,
-      prop Unitary4 = Unitary3, prop Comm13 = Comm12,
-      prop Mul_distr_r6 = Mul_distr_r5, prop Mul_distr_l6 = Mul_distr_l5,
-      prop Assoc16 = Assoc15, prop Comm14 = Comm11,
-      prop Inv_def_r8 = Inv_def_r7, prop Inv_def_l8 = Inv_def_l7,
-      prop Unit_def_r9 = Unit_def_r8, prop Unit_def_l9 = Unit_def_l8,
-      prop Assoc17 = Assoc14,  *)
-    
-    (* clone relations.EndoRelation with type t8 = real,
-      predicate rel = (<=''),  *)
-    
-    Refl6 : forall x:real. x <='' x
-    
-    (* clone relations.Reflexive with type t9 = real, predicate rel1 = (<=''),
-      prop Refl1 = Refl6,  *)
-    
-    (* clone relations.EndoRelation with type t8 = real,
-      predicate rel = (<=''),  *)
-    
-    Trans6 : forall x:real, y:real, z:real. x <='' y -> y <='' z -> x <='' z
-    
-    (* clone relations.Transitive with type t10 = real,
-      predicate rel2 = (<=''), prop Trans1 = Trans6,  *)
-    
-    (* clone relations.PreOrder with type t11 = real, predicate rel3 = (<=''),
-      prop Trans2 = Trans6, prop Refl2 = Refl6,  *)
-    
-    (* clone relations.EndoRelation with type t8 = real,
-      predicate rel = (<=''),  *)
-    
-    Antisymm5 : forall x:real, y:real. x <='' y -> y <='' x -> x = y
-    
-    (* clone relations.Antisymmetric with type t12 = real,
-      predicate rel4 = (<=''), prop Antisymm1 = Antisymm5,  *)
-    
-    (* clone relations.PartialOrder with type t13 = real,
-      predicate rel5 = (<=''), prop Antisymm2 = Antisymm5,
-      prop Trans3 = Trans6, prop Refl3 = Refl6,  *)
-    
-    (* clone relations.EndoRelation with type t8 = real,
-      predicate rel = (<=''),  *)
-    
-    Total4 : forall x:real, y:real. x <='' y \/ y <='' x
-    
-    (* clone relations.Total with type t14 = real, predicate rel6 = (<=''),
-      prop Total1 = Total4,  *)
-    
-    (* clone relations.TotalOrder with type t15 = real,
-      predicate rel7 = (<=''), prop Total2 = Total4,
-      prop Antisymm3 = Antisymm5, prop Trans4 = Trans6, prop Refl4 = Refl6,  *)
-    
-    ZeroLessOne2 : zero5 <='' one3
-    
-    CompatOrderAdd2 :
-      forall x:real, y:real, z:real. x <='' y -> (x +''''' z) <='' (y +''''' z)
-    
-    CompatOrderMult2 :
-      forall x:real, y:real, z:real.
-       x <='' y -> zero5 <='' z -> (x *''''' z) <='' (y *''''' z)
-    
-    (* clone algebra.OrderedField with type t18 = real,
-      predicate (<=''') = (<=''), function (/'') = (/), function (-''') = (-'),
-      function inv4 = inv2, constant one5 = one3,
-      function ( *''''''') = ( *'''''), function (-'''''''_) = (-'''''_),
-      function (+''''''') = (+'''''), constant zero7 = zero5,
-      prop CompatOrderMult3 = CompatOrderMult2,
-      prop CompatOrderAdd3 = CompatOrderAdd2, prop ZeroLessOne3 = ZeroLessOne2,
-      prop Total5 = Total4, prop Antisymm6 = Antisymm5, prop Trans7 = Trans6,
-      prop Refl7 = Refl6, prop assoc_div_div2 = assoc_div_div,
-      prop assoc_div_mul2 = assoc_div_mul, prop assoc_mul_div2 = assoc_mul_div,
-      prop neg_div2 = neg_div, prop sub_div2 = sub_div,
-      prop add_div2 = add_div, prop Inverse2 = Inverse,
-      prop NonTrivialRing5 = NonTrivialRing3, prop Unitary5 = Unitary3,
-      prop Comm15 = Comm12, prop Mul_distr_r7 = Mul_distr_r5,
-      prop Mul_distr_l7 = Mul_distr_l5, prop Assoc18 = Assoc15,
-      prop Comm16 = Comm11, prop Inv_def_r9 = Inv_def_r7,
-      prop Inv_def_l9 = Inv_def_l7, prop Unit_def_r10 = Unit_def_r8,
-      prop Unit_def_l10 = Unit_def_l8, prop Assoc19 = Assoc14,  *)
-    
-    (* use real.Real *)
-    
-    type t19 = <float 11 53>
-    
-    function t'real t19 : real
-    
-    predicate t'isFinite t19
-    
-    constant t'eb : int = 11
-    
-    constant t'sb : int = 53
-    
-    (* meta float_type type t19, function t'real, predicate t'isFinite *)
-    
-    (* meta model_projection function t'real *)
-    
-    constant pow2sb : int = 9007199254740992
-    
-    constant max_real : real = 0x1.FFFFFFFFFFFFFp1023
-    
-    function pow2 int : int
-    
-    axiom Power_0 : pow2 0 = 1
-    
-    axiom Power_s : forall n:int. n >= 0 -> pow2 (n + 1) = (2 * pow2 n)
-    
-    Power_1 : pow2 1 = 2
-    
-    Power_sum :
-      forall n:int, m:int. n >= 0 /\ m >= 0 -> pow2 (n + m) = (pow2 n * pow2 m)
-    
-    pow2pos : forall i:int. i >= 0 -> pow2 i > 0
-    
-    pow2_0 : pow2 0 = 0x1
-    
-    pow2_1 : pow2 1 = 0x2
-    
-    pow2_2 : pow2 2 = 0x4
-    
-    pow2_3 : pow2 3 = 0x8
-    
-    pow2_4 : pow2 4 = 0x10
-    
-    pow2_5 : pow2 5 = 0x20
-    
-    pow2_6 : pow2 6 = 0x40
-    
-    pow2_7 : pow2 7 = 0x80
-    
-    pow2_8 : pow2 8 = 0x100
-    
-    pow2_9 : pow2 9 = 0x200
-    
-    pow2_10 : pow2 10 = 0x400
-    
-    pow2_11 : pow2 11 = 0x800
-    
-    pow2_12 : pow2 12 = 0x1000
-    
-    pow2_13 : pow2 13 = 0x2000
-    
-    pow2_14 : pow2 14 = 0x4000
-    
-    pow2_15 : pow2 15 = 0x8000
-    
-    pow2_16 : pow2 16 = 0x10000
-    
-    pow2_17 : pow2 17 = 0x20000
-    
-    pow2_18 : pow2 18 = 0x40000
-    
-    pow2_19 : pow2 19 = 0x80000
-    
-    pow2_20 : pow2 20 = 0x100000
-    
-    pow2_21 : pow2 21 = 0x200000
-    
-    pow2_22 : pow2 22 = 0x400000
-    
-    pow2_23 : pow2 23 = 0x800000
-    
-    pow2_24 : pow2 24 = 0x1000000
-    
-    pow2_25 : pow2 25 = 0x2000000
-    
-    pow2_26 : pow2 26 = 0x4000000
-    
-    pow2_27 : pow2 27 = 0x8000000
-    
-    pow2_28 : pow2 28 = 0x10000000
-    
-    pow2_29 : pow2 29 = 0x20000000
-    
-    pow2_30 : pow2 30 = 0x40000000
-    
-    pow2_31 : pow2 31 = 0x80000000
-    
-    pow2_32 : pow2 32 = 0x100000000
-    
-    pow2_33 : pow2 33 = 0x200000000
-    
-    pow2_34 : pow2 34 = 0x400000000
-    
-    pow2_35 : pow2 35 = 0x800000000
-    
-    pow2_36 : pow2 36 = 0x1000000000
-    
-    pow2_37 : pow2 37 = 0x2000000000
-    
-    pow2_38 : pow2 38 = 0x4000000000
-    
-    pow2_39 : pow2 39 = 0x8000000000
-    
-    pow2_40 : pow2 40 = 0x10000000000
-    
-    pow2_41 : pow2 41 = 0x20000000000
-    
-    pow2_42 : pow2 42 = 0x40000000000
-    
-    pow2_43 : pow2 43 = 0x80000000000
-    
-    pow2_44 : pow2 44 = 0x100000000000
-    
-    pow2_45 : pow2 45 = 0x200000000000
-    
-    pow2_46 : pow2 46 = 0x400000000000
-    
-    pow2_47 : pow2 47 = 0x800000000000
-    
-    pow2_48 : pow2 48 = 0x1000000000000
-    
-    pow2_49 : pow2 49 = 0x2000000000000
-    
-    pow2_50 : pow2 50 = 0x4000000000000
-    
-    pow2_51 : pow2 51 = 0x8000000000000
-    
-    pow2_52 : pow2 52 = 0x10000000000000
-    
-    pow2_53 : pow2 53 = 0x20000000000000
-    
-    pow2_54 : pow2 54 = 0x40000000000000
-    
-    pow2_55 : pow2 55 = 0x80000000000000
-    
-    pow2_56 : pow2 56 = 0x100000000000000
-    
-    pow2_57 : pow2 57 = 0x200000000000000
-    
-    pow2_58 : pow2 58 = 0x400000000000000
-    
-    pow2_59 : pow2 59 = 0x800000000000000
-    
-    pow2_60 : pow2 60 = 0x1000000000000000
-    
-    pow2_61 : pow2 61 = 0x2000000000000000
-    
-    pow2_62 : pow2 62 = 0x4000000000000000
-    
-    pow2_63 : pow2 63 = 0x8000000000000000
-    
-    pow2_64 : pow2 64 = 0x10000000000000000
-    
-    (* use bv.Pow2int *)
-    
-    function abs (x:real) : real = if x >=' 0.0 then x else -''''' x
-    
-    Abs_le :
-      forall x:real, y:real. abs x <='' y <-> (-''''' y) <='' x /\ x <='' y
-    
-    Abs_pos : forall x:real. abs x >=' 0.0
-    
-    Abs_sum : forall x:real, y:real. abs (x +''''' y) <='' (abs x +''''' abs y)
-    
-    Abs_prod : forall x:real, y:real. abs (x *''''' y) = (abs x *''''' abs y)
-    
-    triangular_inequality :
-      forall x:real, y:real, z:real.
-       abs (x -' z) <='' (abs (x -' y) +''''' abs (y -' z))
-    
-    (* use real.Abs *)
-    
-    function from_int int : real
-    
-    axiom Zero : from_int 0 = 0.0
-    
-    axiom One : from_int 1 = 1.0
-    
-    axiom Add :
-      forall x:int, y:int. from_int (x + y) = (from_int x +''''' from_int y)
-    
-    axiom Sub :
-      forall x:int, y:int. from_int (x - y) = (from_int x -' from_int y)
-    
-    axiom Mul :
-      forall x:int, y:int. from_int (x * y) = (from_int x *''''' from_int y)
-    
-    axiom Neg : forall x:int. from_int (- x) = (-''''' from_int x)
-    
-    Injective : forall x:int, y:int. from_int x = from_int y -> x = y
-    
-    axiom Monotonic : forall x:int, y:int. x <= y -> from_int x <='' from_int y
-    
-    (* use real.FromInt *)
-    
-    function truncate real : int
-    
-    axiom Truncate_int : forall i:int. truncate (from_int i) = i
-    
-    axiom Truncate_down_pos :
-      forall x:real.
-       x >=' 0.0 ->
-       from_int (truncate x) <='' x /\ x <' from_int (truncate x + 1)
-    
-    axiom Truncate_up_neg :
-      forall x:real.
-       x <='' 0.0 ->
-       from_int (truncate x - 1) <' x /\ x <='' from_int (truncate x)
-    
-    axiom Real_of_truncate :
-      forall x:real.
-       (x -' 1.0) <='' from_int (truncate x) /\
-       from_int (truncate x) <='' (x +''''' 1.0)
-    
-    axiom Truncate_monotonic :
-      forall x:real, y:real. x <='' y -> truncate x <= truncate y
-    
-    axiom Truncate_monotonic_int1 :
-      forall x:real, i:int. x <='' from_int i -> truncate x <= i
-    
-    axiom Truncate_monotonic_int2 :
-      forall x:real, i:int. from_int i <='' x -> i <= truncate x
-    
-    function floor real : int
-    
-    function ceil real : int
-    
-    axiom Floor_int : forall i:int. floor (from_int i) = i
-    
-    axiom Ceil_int : forall i:int. ceil (from_int i) = i
-    
-    axiom Floor_down :
-      forall x:real. from_int (floor x) <='' x /\ x <' from_int (floor x + 1)
-    
-    axiom Ceil_up :
-      forall x:real. from_int (ceil x - 1) <' x /\ x <='' from_int (ceil x)
-    
-    axiom Floor_monotonic :
-      forall x:real, y:real. x <='' y -> floor x <= floor y
-    
-    axiom Ceil_monotonic : forall x:real, y:real. x <='' y -> ceil x <= ceil y
-    
-    (* use real.Truncate *)
-    
-    function (+.) (x:real) (y:real) : real = x +''''' y
-    
-    function (-.) (x:real) (y:real) : real = x -' y
-    
-    function ( *.) (x:real) (y:real) : real = x *''''' y
-    
-    function (/.) (x:real) (y:real) : real = x / y
-    
-    function (-._) (x:real) : real = -''''' x
-    
-    function inv5 (x:real) : real = inv2 x
-    
-    predicate (<=.) (x:real) (y:real) = x <='' y
-    
-    predicate (>=.) (x:real) (y:real) = x >=' y
-    
-    predicate (<.) (x:real) (y:real) = x <' y
-    
-    predicate (>.) (x:real) (y:real) = x >' y
-    
-    (* use real.RealInfix *)
-    
-    type mode =
-      | RNE
-      | RNA
-      | RTP
-      | RTN
-      | RTZ
-    
-    predicate to_nearest (m:mode) = m = RNE \/ m = RNA
-    
-    (* use ieee_float.RoundingMode *)
-    
-    constant zeroF : t19
-    
-    function add mode t19 t19 : t19
-    
-    function sub mode t19 t19 : t19
-    
-    function mul mode t19 t19 : t19
-    
-    function div mode t19 t19 : t19
-    
-    function abs1 t19 : t19
-    
-    function neg t19 : t19
-    
-    function fma mode t19 t19 t19 : t19
-    
-    function sqrt mode t19 : t19
-    
-    function (.-_) (x:t19) : t19 = neg x
-    
-    function (.+) (x:t19) (y:t19) : t19 = add RNE x y
-    
-    function (.-) (x:t19) (y:t19) : t19 = sub RNE x y
-    
-    function (.* ) (x:t19) (y:t19) : t19 = mul RNE x y
-    
-    function (./) (x:t19) (y:t19) : t19 = div RNE x y
-    
-    function roundToIntegral mode t19 : t19
-    
-    function min t19 t19 : t19
-    
-    function max t19 t19 : t19
-    
-    predicate le t19 t19
-    
-    predicate lt t19 t19
-    
-    predicate ge (x:t19) (y:t19) = le y x
-    
-    predicate gt (x:t19) (y:t19) = lt y x
-    
-    predicate eq t19 t19
-    
-    predicate (.<=) (x:t19) (y:t19) = le x y
-    
-    predicate (.<) (x:t19) (y:t19) = lt x y
-    
-    predicate (.>=) (x:t19) (y:t19) = ge x y
-    
-    predicate (.>) (x:t19) (y:t19) = gt x y
-    
-    predicate (.=) (x:t19) (y:t19) = eq x y
-    
-    predicate is_normal t19
-    
-    predicate is_subnormal t19
-    
-    predicate is_zero t19
-    
-    predicate is_infinite t19
-    
-    predicate is_nan t19
-    
-    predicate is_positive t19
-    
-    predicate is_negative t19
-    
-    predicate is_plus_infinity (x:t19) = is_infinite x /\ is_positive x
-    
-    predicate is_minus_infinity (x:t19) = is_infinite x /\ is_negative x
-    
-    predicate is_plus_zero (x:t19) = is_zero x /\ is_positive x
-    
-    predicate is_minus_zero (x:t19) = is_zero x /\ is_negative x
-    
-    predicate is_not_nan (x:t19) = t'isFinite x \/ is_infinite x
-    
-    is_not_nan : forall x:t19. is_not_nan x <-> not is_nan x
-    
-    is_not_finite :
-      forall x:t19. not t'isFinite x <-> is_infinite x \/ is_nan x
-    
-    zeroF_is_positive : is_positive zeroF
-    
-    zeroF_is_zero : is_zero zeroF
-    
-    zero_to_real :
-      forall x:t19 [is_zero x]. is_zero x <-> t'isFinite x /\ t'real x = 0.0
-    
-    function of_int mode int : t19
-    
-    function to_int mode t19 : int
-    
-    zero_of_int : forall m:mode. zeroF = of_int m 0
-    
-    function round mode real : real
-    
-    constant max_int : int
-    
-    constant emax : int = pow2 (t'eb - 1)
-    
-    max_real_int : max_real = from_int max_int
-    
-    predicate in_range (x:real) = (-. max_real) <=. x /\ x <=. max_real
-    
-    predicate in_int_range (i:int) = (- max_int) <= i /\ i <= max_int
-    
-    is_finite : forall x:t19. t'isFinite x -> in_range (t'real x)
-    
-    predicate no_overflow (m:mode) (x:real) = in_range (round m x)
-    
-    Bounded_real_no_overflow :
-      forall m:mode, x:real. in_range x -> no_overflow m x
-    
-    Round_monotonic :
-      forall m:mode, x:real, y:real. x <=. y -> round m x <=. round m y
-    
-    Round_idempotent :
-      forall m1:mode, m2:mode, x:real. round m1 (round m2 x) = round m2 x
-    
-    Round_to_real :
-      forall m:mode, x:t19. t'isFinite x -> round m (t'real x) = t'real x
-    
-    Round_down_le : forall x:real. round RTN x <=. x
-    
-    Round_up_ge : forall x:real. round RTP x >=. x
-    
-    Round_down_neg : forall x:real. round RTN (-. x) = (-. round RTP x)
-    
-    Round_up_neg : forall x:real. round RTP (-. x) = (-. round RTN x)
-    
-    predicate in_safe_int_range (i:int) = (- pow2sb) <= i /\ i <= pow2sb
-    
-    Exact_rounding_for_integers :
-      forall m:mode, i:int.
-       in_safe_int_range i -> round m (from_int i) = from_int i
-    
-    predicate same_sign (x:t19) (y:t19) =
-      is_positive x /\ is_positive y \/ is_negative x /\ is_negative y
-    
-    predicate diff_sign (x:t19) (y:t19) =
-      is_positive x /\ is_negative y \/ is_negative x /\ is_positive y
-    
-    feq_eq :
-      forall x:t19, y:t19.
-       t'isFinite x -> t'isFinite y -> not is_zero x -> x .= y -> x = y
-    
-    eq_feq :
-      forall x:t19, y:t19. t'isFinite x -> t'isFinite y -> x = y -> x .= y
-    
-    eq_refl : forall x:t19. t'isFinite x -> x .= x
-    
-    eq_sym : forall x:t19, y:t19. x .= y -> y .= x
-    
-    eq_trans : forall x:t19, y:t19, z:t19. x .= y -> y .= z -> x .= z
-    
-    eq_zero : zeroF .= (.- zeroF)
-    
-    eq_to_real_finite :
-      forall x:t19, y:t19.
-       t'isFinite x /\ t'isFinite y -> x .= y <-> t'real x = t'real y
-    
-    eq_special :
-      forall x:t19, y:t19.
-       x .= y ->
-       is_not_nan x /\
-       is_not_nan y /\
-       (t'isFinite x /\ t'isFinite y \/
-        is_infinite x /\ is_infinite y /\ same_sign x y)
-    
-    lt_finite :
-      forall x:t19, y:t19 [lt x y].
-       t'isFinite x /\ t'isFinite y -> lt x y <-> t'real x <. t'real y
-    
-    le_finite :
-      forall x:t19, y:t19 [le x y].
-       t'isFinite x /\ t'isFinite y -> le x y <-> t'real x <=. t'real y
-    
-    le_lt_trans : forall x:t19, y:t19, z:t19. x .<= y /\ y .< z -> x .< z
-    
-    lt_le_trans : forall x:t19, y:t19, z:t19. x .< y /\ y .<= z -> x .< z
-    
-    le_ge_asym : forall x:t19, y:t19. x .<= y /\ x .>= y -> x .= y
-    
-    not_lt_ge :
-      forall x:t19, y:t19.
-       not x .< y /\ is_not_nan x /\ is_not_nan y -> x .>= y
-    
-    not_gt_le :
-      forall x:t19, y:t19.
-       not x .> y /\ is_not_nan x /\ is_not_nan y -> x .<= y
-    
-    le_special :
-      forall x:t19, y:t19 [le x y].
-       le x y ->
-       t'isFinite x /\ t'isFinite y \/
-       is_minus_infinity x /\ is_not_nan y \/
-       is_not_nan x /\ is_plus_infinity y
-    
-    lt_special :
-      forall x:t19, y:t19 [lt x y].
-       lt x y ->
-       t'isFinite x /\ t'isFinite y \/
-       is_minus_infinity x /\ is_not_nan y /\ not is_minus_infinity y \/
-       is_not_nan x /\ not is_plus_infinity x /\ is_plus_infinity y
-    
-    lt_lt_finite : forall x:t19, y:t19, z:t19. lt x y -> lt y z -> t'isFinite y
-    
-    positive_to_real :
-      forall x:t19 [is_positive x| t'real x >=. 0.0].
-       t'isFinite x -> is_positive x -> t'real x >=. 0.0
-    
-    to_real_positive :
-      forall x:t19 [is_positive x].
-       t'isFinite x -> t'real x >. 0.0 -> is_positive x
-    
-    negative_to_real :
-      forall x:t19 [is_negative x| t'real x <=. 0.0].
-       t'isFinite x -> is_negative x -> t'real x <=. 0.0
-    
-    to_real_negative :
-      forall x:t19 [is_negative x].
-       t'isFinite x -> t'real x <. 0.0 -> is_negative x
-    
-    negative_xor_positive : forall x:t19. not (is_positive x /\ is_negative x)
-    
-    negative_or_positive :
-      forall x:t19. is_not_nan x -> is_positive x \/ is_negative x
-    
-    diff_sign_trans :
-      forall x:t19, y:t19, z:t19.
-       diff_sign x y /\ diff_sign y z -> same_sign x z
-    
-    diff_sign_product :
-      forall x:t19, y:t19.
-       t'isFinite x /\ t'isFinite y /\ (t'real x *. t'real y) <. 0.0 ->
-       diff_sign x y
-    
-    same_sign_product :
-      forall x:t19, y:t19.
-       t'isFinite x /\ t'isFinite y /\ same_sign x y ->
-       (t'real x *. t'real y) >=. 0.0
-    
-    predicate product_sign (z:t19) (x:t19) (y:t19) =
-      (same_sign x y -> is_positive z) /\ (diff_sign x y -> is_negative z)
-    
-    predicate overflow_value (m:mode) (x:t19) =
-      match m with
-      | RTN ->
-          if is_positive x then t'isFinite x /\ t'real x = max_real
-          else is_infinite x
-      | RTP ->
-          if is_positive x then is_infinite x
-          else t'isFinite x /\ t'real x = (-. max_real)
-      | RTZ ->
-          if is_positive x then t'isFinite x /\ t'real x = max_real
-          else t'isFinite x /\ t'real x = (-. max_real)
-      | RNA | RNE -> is_infinite x
-      end
-    
-    predicate sign_zero_result (m:mode) (x:t19) =
-      is_zero x -> match m with
-      | RTN -> is_negative x
-      | _ -> is_positive x
-      end
-    
-    add_finite :
-      forall m:mode, x:t19, y:t19 [add m x y].
-       t'isFinite x ->
-       t'isFinite y ->
-       no_overflow m (t'real x +. t'real y) ->
-       t'isFinite (add m x y) /\
-       t'real (add m x y) = round m (t'real x +. t'real y)
-    
-    add_finite_rev :
-      forall m:mode, x:t19, y:t19 [add m x y].
-       t'isFinite (add m x y) -> t'isFinite x /\ t'isFinite y
-    
-    add_finite_rev_n :
-      forall m:mode, x:t19, y:t19 [add m x y].
-       to_nearest m ->
-       t'isFinite (add m x y) ->
-       no_overflow m (t'real x +. t'real y) /\
-       t'real (add m x y) = round m (t'real x +. t'real y)
-    
-    sub_finite :
-      forall m:mode, x:t19, y:t19 [sub m x y].
-       t'isFinite x ->
-       t'isFinite y ->
-       no_overflow m (t'real x -. t'real y) ->
-       t'isFinite (sub m x y) /\
-       t'real (sub m x y) = round m (t'real x -. t'real y)
-    
-    sub_finite_rev :
-      forall m:mode, x:t19, y:t19 [sub m x y].
-       t'isFinite (sub m x y) -> t'isFinite x /\ t'isFinite y
-    
-    sub_finite_rev_n :
-      forall m:mode, x:t19, y:t19 [sub m x y].
-       to_nearest m ->
-       t'isFinite (sub m x y) ->
-       no_overflow m (t'real x -. t'real y) /\
-       t'real (sub m x y) = round m (t'real x -. t'real y)
-    
-    mul_finite :
-      forall m:mode, x:t19, y:t19 [mul m x y].
-       t'isFinite x ->
-       t'isFinite y ->
-       no_overflow m (t'real x *. t'real y) ->
-       t'isFinite (mul m x y) /\
-       t'real (mul m x y) = round m (t'real x *. t'real y)
-    
-    mul_finite_rev :
-      forall m:mode, x:t19, y:t19 [mul m x y].
-       t'isFinite (mul m x y) -> t'isFinite x /\ t'isFinite y
-    
-    mul_finite_rev_n :
-      forall m:mode, x:t19, y:t19 [mul m x y].
-       to_nearest m ->
-       t'isFinite (mul m x y) ->
-       no_overflow m (t'real x *. t'real y) /\
-       t'real (mul m x y) = round m (t'real x *. t'real y)
-    
-    div_finite :
-      forall m:mode, x:t19, y:t19 [div m x y].
-       t'isFinite x ->
-       t'isFinite y ->
-       not is_zero y ->
-       no_overflow m (t'real x /. t'real y) ->
-       t'isFinite (div m x y) /\
-       t'real (div m x y) = round m (t'real x /. t'real y)
-    
-    div_finite_rev :
-      forall m:mode, x:t19, y:t19 [div m x y].
-       t'isFinite (div m x y) ->
-       t'isFinite x /\ t'isFinite y /\ not is_zero y \/
-       t'isFinite x /\ is_infinite y /\ t'real (div m x y) = 0.0
-    
-    div_finite_rev_n :
-      forall m:mode, x:t19, y:t19 [div m x y].
-       to_nearest m ->
-       t'isFinite (div m x y) ->
-       t'isFinite y ->
-       no_overflow m (t'real x /. t'real y) /\
-       t'real (div m x y) = round m (t'real x /. t'real y)
-    
-    neg_finite :
-      forall x:t19 [neg x].
-       t'isFinite x -> t'isFinite (neg x) /\ t'real (neg x) = (-. t'real x)
-    
-    neg_finite_rev :
-      forall x:t19 [neg x].
-       t'isFinite (neg x) -> t'isFinite x /\ t'real (neg x) = (-. t'real x)
-    
-    abs_finite :
-      forall x:t19 [abs1 x].
-       t'isFinite x ->
-       t'isFinite (abs1 x) /\
-       t'real (abs1 x) = abs (t'real x) /\ is_positive (abs1 x)
-    
-    abs_finite_rev :
-      forall x:t19 [abs1 x].
-       t'isFinite (abs1 x) -> t'isFinite x /\ t'real (abs1 x) = abs (t'real x)
-    
-    abs_universal : forall x:t19 [abs1 x]. not is_negative (abs1 x)
-    
-    fma_finite :
-      forall m:mode, x:t19, y:t19, z:t19 [fma m x y z].
-       t'isFinite x ->
-       t'isFinite y ->
-       t'isFinite z ->
-       no_overflow m ((t'real x *. t'real y) +. t'real z) ->
-       t'isFinite (fma m x y z) /\
-       t'real (fma m x y z) = round m ((t'real x *. t'real y) +. t'real z)
-    
-    fma_finite_rev :
-      forall m:mode, x:t19, y:t19, z:t19 [fma m x y z].
-       t'isFinite (fma m x y z) -> t'isFinite x /\ t'isFinite y /\ t'isFinite z
-    
-    fma_finite_rev_n :
-      forall m:mode, x:t19, y:t19, z:t19 [fma m x y z].
-       to_nearest m ->
-       t'isFinite (fma m x y z) ->
-       no_overflow m ((t'real x *. t'real y) +. t'real z) /\
-       t'real (fma m x y z) = round m ((t'real x *. t'real y) +. t'real z)
-    
-    function sqr (x:real) : real = x *''''' x
-    
-    function sqrt1 real : real
-    
-    axiom Sqrt_positive : forall x:real. x >=' 0.0 -> sqrt1 x >=' 0.0
-    
-    axiom Sqrt_square : forall x:real. x >=' 0.0 -> sqr (sqrt1 x) = x
-    
-    axiom Square_sqrt : forall x:real. x >=' 0.0 -> sqrt1 (x *''''' x) = x
-    
-    axiom Sqrt_mul :
-      forall x:real, y:real.
-       x >=' 0.0 /\ y >=' 0.0 -> sqrt1 (x *''''' y) = (sqrt1 x *''''' sqrt1 y)
-    
-    axiom Sqrt_le :
-      forall x:real, y:real. 0.0 <='' x /\ x <='' y -> sqrt1 x <='' sqrt1 y
-    
-    (* use real.Square *)
-    
-    sqrt_finite :
-      forall m:mode, x:t19 [sqrt m x].
-       t'isFinite x ->
-       t'real x >=. 0.0 ->
-       t'isFinite (sqrt m x) /\ t'real (sqrt m x) = round m (sqrt1 (t'real x))
-    
-    sqrt_finite_rev :
-      forall m:mode, x:t19 [sqrt m x].
-       t'isFinite (sqrt m x) ->
-       t'isFinite x /\
-       t'real x >=. 0.0 /\ t'real (sqrt m x) = round m (sqrt1 (t'real x))
-    
-    predicate same_sign_real (x:t19) (r:real) =
-      is_positive x /\ r >. 0.0 \/ is_negative x /\ r <. 0.0
-    
-    add_special :
-      forall m:mode, x:t19, y:t19 [add m x y].
-       let r = add m x y in
-       (is_nan x \/ is_nan y -> is_nan r) /\
-       (t'isFinite x /\ is_infinite y -> is_infinite r /\ same_sign r y) /\
-       (is_infinite x /\ t'isFinite y -> is_infinite r /\ same_sign r x) /\
-       (is_infinite x /\ is_infinite y /\ same_sign x y ->
-        is_infinite r /\ same_sign r x) /\
-       (is_infinite x /\ is_infinite y /\ diff_sign x y -> is_nan r) /\
-       (t'isFinite x /\
-        t'isFinite y /\ not no_overflow m (t'real x +. t'real y) ->
-        same_sign_real r (t'real x +. t'real y) /\ overflow_value m r) /\
-       (t'isFinite x /\ t'isFinite y ->
-        (if same_sign x y then same_sign r x else sign_zero_result m r))
-    
-    sub_special :
-      forall m:mode, x:t19, y:t19 [sub m x y].
-       let r = sub m x y in
-       (is_nan x \/ is_nan y -> is_nan r) /\
-       (t'isFinite x /\ is_infinite y -> is_infinite r /\ diff_sign r y) /\
-       (is_infinite x /\ t'isFinite y -> is_infinite r /\ same_sign r x) /\
-       (is_infinite x /\ is_infinite y /\ same_sign x y -> is_nan r) /\
-       (is_infinite x /\ is_infinite y /\ diff_sign x y ->
-        is_infinite r /\ same_sign r x) /\
-       (t'isFinite x /\
-        t'isFinite y /\ not no_overflow m (t'real x -. t'real y) ->
-        same_sign_real r (t'real x -. t'real y) /\ overflow_value m r) /\
-       (t'isFinite x /\ t'isFinite y ->
-        (if diff_sign x y then same_sign r x else sign_zero_result m r))
-    
-    mul_special :
-      forall m:mode, x:t19, y:t19 [mul m x y].
-       let r = mul m x y in
-       (is_nan x \/ is_nan y -> is_nan r) /\
-       (is_zero x /\ is_infinite y -> is_nan r) /\
-       (t'isFinite x /\ is_infinite y /\ not is_zero x -> is_infinite r) /\
-       (is_infinite x /\ is_zero y -> is_nan r) /\
-       (is_infinite x /\ t'isFinite y /\ not is_zero y -> is_infinite r) /\
-       (is_infinite x /\ is_infinite y -> is_infinite r) /\
-       (t'isFinite x /\
-        t'isFinite y /\ not no_overflow m (t'real x *. t'real y) ->
-        overflow_value m r) /\
-       (not is_nan r -> product_sign r x y)
-    
-    div_special :
-      forall m:mode, x:t19, y:t19 [div m x y].
-       let r = div m x y in
-       (is_nan x \/ is_nan y -> is_nan r) /\
-       (t'isFinite x /\ is_infinite y -> is_zero r) /\
-       (is_infinite x /\ t'isFinite y -> is_infinite r) /\
-       (is_infinite x /\ is_infinite y -> is_nan r) /\
-       (t'isFinite x /\
-        t'isFinite y /\
-        not is_zero y /\ not no_overflow m (t'real x /. t'real y) ->
-        overflow_value m r) /\
-       (t'isFinite x /\ is_zero y /\ not is_zero x -> is_infinite r) /\
-       (is_zero x /\ is_zero y -> is_nan r) /\
-       (not is_nan r -> product_sign r x y)
-    
-    neg_special :
-      forall x:t19 [neg x].
-       (is_nan x -> is_nan (neg x)) /\
-       (is_infinite x -> is_infinite (neg x)) /\
-       (not is_nan x -> diff_sign x (neg x))
-    
-    abs_special :
-      forall x:t19 [abs1 x].
-       (is_nan x -> is_nan (abs1 x)) /\
-       (is_infinite x -> is_infinite (abs1 x)) /\
-       (not is_nan x -> is_positive (abs1 x))
-    
-    fma_special :
-      forall m:mode, x:t19, y:t19, z:t19 [fma m x y z].
-       let r = fma m x y z in
-       (is_nan x \/ is_nan y \/ is_nan z -> is_nan r) /\
-       (is_zero x /\ is_infinite y -> is_nan r) /\
-       (is_infinite x /\ is_zero y -> is_nan r) /\
-       (t'isFinite x /\ not is_zero x /\ is_infinite y /\ t'isFinite z ->
-        is_infinite r /\ product_sign r x y) /\
-       (t'isFinite x /\ not is_zero x /\ is_infinite y /\ is_infinite z ->
-        (if product_sign z x y then is_infinite r /\ same_sign r z
-         else is_nan r)) /\
-       (is_infinite x /\ t'isFinite y /\ not is_zero y /\ t'isFinite z ->
-        is_infinite r /\ product_sign r x y) /\
-       (is_infinite x /\ t'isFinite y /\ not is_zero y /\ is_infinite z ->
-        (if product_sign z x y then is_infinite r /\ same_sign r z
-         else is_nan r)) /\
-       (is_infinite x /\ is_infinite y /\ t'isFinite z ->
-        is_infinite r /\ product_sign r x y) /\
-       (t'isFinite x /\ t'isFinite y /\ is_infinite z ->
-        is_infinite r /\ same_sign r z) /\
-       (is_infinite x /\ is_infinite y /\ is_infinite z ->
-        (if product_sign z x y then is_infinite r /\ same_sign r z
-         else is_nan r)) /\
-       (t'isFinite x /\
-        t'isFinite y /\
-        t'isFinite z /\ not no_overflow m ((t'real x *. t'real y) +. t'real z) ->
-        same_sign_real r ((t'real x *. t'real y) +. t'real z) /\
-        overflow_value m r) /\
-       (t'isFinite x /\ t'isFinite y /\ t'isFinite z ->
-        (if product_sign z x y then same_sign r z
-         else ((t'real x *. t'real y) +. t'real z) = 0.0 ->
-              (if m = RTN then is_negative r else is_positive r)))
-    
-    sqrt_special :
-      forall m:mode, x:t19 [sqrt m x].
-       let r = sqrt m x in
-       (is_nan x -> is_nan r) /\
-       (is_plus_infinity x -> is_plus_infinity r) /\
-       (is_minus_infinity x -> is_nan r) /\
-       (t'isFinite x /\ t'real x <. 0.0 -> is_nan r) /\
-       (is_zero x -> same_sign r x) /\
-       (t'isFinite x /\ t'real x >. 0.0 -> is_positive r)
-    
-    of_int_add_exact :
-      forall m:mode, n:mode, i:int, j:int.
-       in_safe_int_range i ->
-       in_safe_int_range j ->
-       in_safe_int_range (i + j) ->
-       eq (of_int m (i + j)) (add n (of_int m i) (of_int m j))
-    
-    of_int_sub_exact :
-      forall m:mode, n:mode, i:int, j:int.
-       in_safe_int_range i ->
-       in_safe_int_range j ->
-       in_safe_int_range (i - j) ->
-       eq (of_int m (i - j)) (sub n (of_int m i) (of_int m j))
-    
-    of_int_mul_exact :
-      forall m:mode, n:mode, i:int, j:int.
-       in_safe_int_range i ->
-       in_safe_int_range j ->
-       in_safe_int_range (i * j) ->
-       eq (of_int m (i * j)) (mul n (of_int m i) (of_int m j))
-    
-    Min_r : forall x:t19, y:t19. y .<= x -> min x y .= y
-    
-    Min_l : forall x:t19, y:t19. x .<= y -> min x y .= x
-    
-    Max_r : forall x:t19, y:t19. y .<= x -> max x y .= x
-    
-    Max_l : forall x:t19, y:t19. x .<= y -> max x y .= y
-    
-    predicate is_int t19
-    
-    zeroF_is_int : is_int zeroF
-    
-    of_int_is_int : forall m:mode, x:int. in_int_range x -> is_int (of_int m x)
-    
-    big_float_is_int :
-      forall m:mode, i:t19.
-       t'isFinite i ->
-       i .<= neg (of_int m pow2sb) \/ of_int m pow2sb .<= i -> is_int i
-    
-    roundToIntegral_is_int :
-      forall m:mode, x:t19. t'isFinite x -> is_int (roundToIntegral m x)
-    
-    eq_is_int : forall x:t19, y:t19. eq x y -> is_int x -> is_int y
-    
-    add_int :
-      forall x:t19, y:t19, m:mode.
-       is_int x -> is_int y -> t'isFinite (add m x y) -> is_int (add m x y)
-    
-    sub_int :
-      forall x:t19, y:t19, m:mode.
-       is_int x -> is_int y -> t'isFinite (sub m x y) -> is_int (sub m x y)
-    
-    mul_int :
-      forall x:t19, y:t19, m:mode.
-       is_int x -> is_int y -> t'isFinite (mul m x y) -> is_int (mul m x y)
-    
-    fma_int :
-      forall x:t19, y:t19, z:t19, m:mode.
-       is_int x ->
-       is_int y -> is_int z -> t'isFinite (fma m x y z) -> is_int (fma m x y z)
-    
-    neg_int : forall x:t19. is_int x -> is_int (neg x)
-    
-    abs_int : forall x:t19. is_int x -> is_int (abs1 x)
-    
-    is_int_of_int :
-      forall x:t19, m:mode, m':mode. is_int x -> eq x (of_int m' (to_int m x))
-    
-    is_int_to_int : forall m:mode, x:t19. is_int x -> in_int_range (to_int m x)
-    
-    is_int_is_finite : forall x:t19. is_int x -> t'isFinite x
-    
-    int_to_real :
-      forall m:mode, x:t19. is_int x -> t'real x = from_int (to_int m x)
-    
-    truncate_int : forall m:mode, i:t19. is_int i -> roundToIntegral m i .= i
-    
-    truncate_neg :
-      forall x:t19.
-       t'isFinite x ->
-       is_negative x -> roundToIntegral RTZ x = roundToIntegral RTP x
-    
-    truncate_pos :
-      forall x:t19.
-       t'isFinite x ->
-       is_positive x -> roundToIntegral RTZ x = roundToIntegral RTN x
-    
-    ceil_le : forall x:t19. t'isFinite x -> x .<= roundToIntegral RTP x
-    
-    ceil_lest :
-      forall x:t19, y:t19. x .<= y /\ is_int y -> roundToIntegral RTP x .<= y
-    
-    ceil_to_real :
-      forall x:t19.
-       t'isFinite x ->
-       t'real (roundToIntegral RTP x) = from_int (ceil (t'real x))
-    
-    ceil_to_int :
-      forall m:mode, x:t19.
-       t'isFinite x -> to_int m (roundToIntegral RTP x) = ceil (t'real x)
-    
-    floor_le : forall x:t19. t'isFinite x -> roundToIntegral RTN x .<= x
-    
-    floor_lest :
-      forall x:t19, y:t19. y .<= x /\ is_int y -> y .<= roundToIntegral RTN x
-    
-    floor_to_real :
-      forall x:t19.
-       t'isFinite x ->
-       t'real (roundToIntegral RTN x) = from_int (floor (t'real x))
-    
-    floor_to_int :
-      forall m:mode, x:t19.
-       t'isFinite x -> to_int m (roundToIntegral RTN x) = floor (t'real x)
-    
-    RNA_down :
-      forall x:t19.
-       (x .- roundToIntegral RTN x) .< (roundToIntegral RTP x .- x) ->
-       roundToIntegral RNA x = roundToIntegral RTN x
-    
-    RNA_up :
-      forall x:t19.
-       (x .- roundToIntegral RTN x) .> (roundToIntegral RTP x .- x) ->
-       roundToIntegral RNA x = roundToIntegral RTP x
-    
-    RNA_down_tie :
-      forall x:t19.
-       (x .- roundToIntegral RTN x) .= (roundToIntegral RTP x .- x) ->
-       is_negative x -> roundToIntegral RNA x = roundToIntegral RTN x
-    
-    RNA_up_tie :
-      forall x:t19.
-       (roundToIntegral RTP x .- x) .= (x .- roundToIntegral RTN x) ->
-       is_positive x -> roundToIntegral RNA x = roundToIntegral RTP x
-    
-    to_int_roundToIntegral :
-      forall m:mode, x:t19. to_int m x = to_int m (roundToIntegral m x)
-    
-    to_int_monotonic :
-      forall m:mode, x:t19, y:t19.
-       t'isFinite x -> t'isFinite y -> le x y -> to_int m x <= to_int m y
-    
-    to_int_of_int :
-      forall m:mode, i:int. in_safe_int_range i -> to_int m (of_int m i) = i
-    
-    eq_to_int :
-      forall m:mode, x:t19, y:t19.
-       t'isFinite x -> x .= y -> to_int m x = to_int m y
-    
-    neg_to_int :
-      forall m:mode, x:t19. is_int x -> to_int m (neg x) = (- to_int m x)
-    
-    roundToIntegral_is_finite :
-      forall m:mode, x:t19. t'isFinite x -> t'isFinite (roundToIntegral m x)
-    
-    (* clone ieee_float.GenericFloat with type t20 = t19,
-      predicate is_int1 = is_int, predicate same_sign_real1 = same_sign_real,
-      predicate sign_zero_result1 = sign_zero_result,
-      predicate overflow_value1 = overflow_value,
-      predicate product_sign1 = product_sign, predicate diff_sign1 = diff_sign,
-      predicate same_sign1 = same_sign,
-      predicate in_safe_int_range1 = in_safe_int_range,
-      constant pow2sb1 = pow2sb, predicate no_overflow1 = no_overflow,
-      predicate in_int_range1 = in_int_range, predicate in_range1 = in_range,
-      constant emax1 = emax, constant max_int1 = max_int,
-      constant max_real1 = max_real, function round1 = round,
-      function to_int1 = to_int, function of_int1 = of_int,
-      function to_real = t'real, predicate is_not_nan1 = is_not_nan,
-      predicate is_minus_zero1 = is_minus_zero,
-      predicate is_plus_zero1 = is_plus_zero,
-      predicate is_minus_infinity1 = is_minus_infinity,
-      predicate is_plus_infinity1 = is_plus_infinity,
-      predicate is_finite = t'isFinite, predicate is_negative1 = is_negative,
-      predicate is_positive1 = is_positive, predicate is_nan1 = is_nan,
-      predicate is_infinite1 = is_infinite, predicate is_zero1 = is_zero,
-      predicate is_subnormal1 = is_subnormal, predicate is_normal1 = is_normal,
-      predicate (.=') = (.=), predicate (.>') = (.>), predicate (.>=') = (.>=),
-      predicate (.<') = (.<), predicate (.<=') = (.<=), predicate eq1 = eq,
-      predicate gt1 = gt, predicate ge1 = ge, predicate lt1 = lt,
-      predicate le1 = le, function max1 = max, function min1 = min,
-      function roundToIntegral1 = roundToIntegral, function (./') = (./),
-      function (.*') = (.* ), function (.-') = (.-), function (.+') = (.+),
-      function (.-'_) = (.-_), function sqrt2 = sqrt, function fma1 = fma,
-      function neg1 = neg, function abs2 = abs1, function div1 = div,
-      function mul1 = mul, function sub1 = sub, function add1 = add,
-      constant zeroF1 = zeroF, constant sb = t'sb, constant eb = t'eb,
-      prop roundToIntegral_is_finite1 = roundToIntegral_is_finite,
-      prop neg_to_int1 = neg_to_int, prop eq_to_int1 = eq_to_int,
-      prop to_int_of_int1 = to_int_of_int,
-      prop to_int_monotonic1 = to_int_monotonic,
-      prop to_int_roundToIntegral1 = to_int_roundToIntegral,
-      prop RNA_up_tie1 = RNA_up_tie, prop RNA_down_tie1 = RNA_down_tie,
-      prop RNA_up1 = RNA_up, prop RNA_down1 = RNA_down,
-      prop floor_to_int1 = floor_to_int, prop floor_to_real1 = floor_to_real,
-      prop floor_lest1 = floor_lest, prop floor_le1 = floor_le,
-      prop ceil_to_int1 = ceil_to_int, prop ceil_to_real1 = ceil_to_real,
-      prop ceil_lest1 = ceil_lest, prop ceil_le1 = ceil_le,
-      prop truncate_pos1 = truncate_pos, prop truncate_neg1 = truncate_neg,
-      prop truncate_int1 = truncate_int, prop int_to_real1 = int_to_real,
-      prop is_int_is_finite1 = is_int_is_finite,
-      prop is_int_to_int1 = is_int_to_int, prop is_int_of_int1 = is_int_of_int,
-      prop abs_int1 = abs_int, prop neg_int1 = neg_int,
-      prop fma_int1 = fma_int, prop mul_int1 = mul_int,
-      prop sub_int1 = sub_int, prop add_int1 = add_int,
-      prop eq_is_int1 = eq_is_int,
-      prop roundToIntegral_is_int1 = roundToIntegral_is_int,
-      prop big_float_is_int1 = big_float_is_int,
-      prop of_int_is_int1 = of_int_is_int, prop zeroF_is_int1 = zeroF_is_int,
-      prop Max_l1 = Max_l, prop Max_r1 = Max_r, prop Min_l1 = Min_l,
-      prop Min_r1 = Min_r, prop of_int_mul_exact1 = of_int_mul_exact,
-      prop of_int_sub_exact1 = of_int_sub_exact,
-      prop of_int_add_exact1 = of_int_add_exact,
-      prop sqrt_special1 = sqrt_special, prop fma_special1 = fma_special,
-      prop abs_special1 = abs_special, prop neg_special1 = neg_special,
-      prop div_special1 = div_special, prop mul_special1 = mul_special,
-      prop sub_special1 = sub_special, prop add_special1 = add_special,
-      prop sqrt_finite_rev1 = sqrt_finite_rev, prop sqrt_finite1 = sqrt_finite,
-      prop fma_finite_rev_n1 = fma_finite_rev_n,
-      prop fma_finite_rev1 = fma_finite_rev, prop fma_finite1 = fma_finite,
-      prop abs_universal1 = abs_universal,
-      prop abs_finite_rev1 = abs_finite_rev, prop abs_finite1 = abs_finite,
-      prop neg_finite_rev1 = neg_finite_rev, prop neg_finite1 = neg_finite,
-      prop div_finite_rev_n1 = div_finite_rev_n,
-      prop div_finite_rev1 = div_finite_rev, prop div_finite1 = div_finite,
-      prop mul_finite_rev_n1 = mul_finite_rev_n,
-      prop mul_finite_rev1 = mul_finite_rev, prop mul_finite1 = mul_finite,
-      prop sub_finite_rev_n1 = sub_finite_rev_n,
-      prop sub_finite_rev1 = sub_finite_rev, prop sub_finite1 = sub_finite,
-      prop add_finite_rev_n1 = add_finite_rev_n,
-      prop add_finite_rev1 = add_finite_rev, prop add_finite1 = add_finite,
-      prop same_sign_product1 = same_sign_product,
-      prop diff_sign_product1 = diff_sign_product,
-      prop diff_sign_trans1 = diff_sign_trans,
-      prop negative_or_positive1 = negative_or_positive,
-      prop negative_xor_positive1 = negative_xor_positive,
-      prop to_real_negative1 = to_real_negative,
-      prop negative_to_real1 = negative_to_real,
-      prop to_real_positive1 = to_real_positive,
-      prop positive_to_real1 = positive_to_real,
-      prop lt_lt_finite1 = lt_lt_finite, prop lt_special1 = lt_special,
-      prop le_special1 = le_special, prop not_gt_le1 = not_gt_le,
-      prop not_lt_ge1 = not_lt_ge, prop le_ge_asym1 = le_ge_asym,
-      prop lt_le_trans1 = lt_le_trans, prop le_lt_trans1 = le_lt_trans,
-      prop le_finite1 = le_finite, prop lt_finite1 = lt_finite,
-      prop eq_special1 = eq_special,
-      prop eq_to_real_finite1 = eq_to_real_finite, prop eq_zero1 = eq_zero,
-      prop eq_trans1 = eq_trans, prop eq_sym1 = eq_sym,
-      prop eq_refl1 = eq_refl, prop eq_feq1 = eq_feq, prop feq_eq1 = feq_eq,
-      prop Exact_rounding_for_integers1 = Exact_rounding_for_integers,
-      prop pow2sb = pow2sb1, prop Round_up_neg1 = Round_up_neg,
-      prop Round_down_neg1 = Round_down_neg, prop Round_up_ge1 = Round_up_ge,
-      prop Round_down_le1 = Round_down_le, prop Round_to_real1 = Round_to_real,
-      prop Round_idempotent1 = Round_idempotent,
-      prop Round_monotonic1 = Round_monotonic,
-      prop Bounded_real_no_overflow1 = Bounded_real_no_overflow,
-      prop is_finite1 = is_finite, prop max_real_int1 = max_real_int,
-      prop max_int = max_int1, prop zero_of_int1 = zero_of_int,
-      prop zero_to_real1 = zero_to_real, prop zeroF_is_zero1 = zeroF_is_zero,
-      prop zeroF_is_positive1 = zeroF_is_positive,
-      prop is_not_finite1 = is_not_finite, prop is_not_nan1 = is_not_nan,
-      prop sb_gt_1 = sb_gt_11, prop eb_gt_1 = eb_gt_11,  *)
-    
-    round_bound_ne :
-      forall x:real [round RNE x].
-       no_overflow RNE x ->
-       ((x -' (0x1.0p-53 *''''' abs x)) -' 0x1.0p-1075) <='' round RNE x /\
-       round RNE x
-       <='' ((x +''''' (0x1.0p-53 *''''' abs x)) +''''' 0x1.0p-1075)
-    
-    round_bound :
-      forall m:mode, x:real [round m x].
-       no_overflow m x ->
-       ((x -' (0x1.0p-52 *''''' abs x)) -' 0x1.0p-1074) <='' round m x /\
-       round m x <='' ((x +''''' (0x1.0p-52 *''''' abs x)) +''''' 0x1.0p-1074)
-    
-    (* use ieee_float.Float64 *)
-    
-    type input_type = t19
-    
-    (* use caisar.NNet *)
-    
-    type tuple5 'a 'a1 'a2 'a3 'a4 =
-      | Tuple5 'a 'a1 'a2 'a3 'a4
-    
-    (* use why3.Tuple5.Tuple51 *)
-    
-    function nnet_apply t19 t19 t19 t19 t19 : (t19, t19, t19, t19, t19)
-    
-    (* use As_tuple *)
-    
-    goal G :
-      forall x1:t19, x2:t19, x3:t19, x4:t19, x5:t19.
-       match nnet_apply x1 x2 x3 x4 x5 with
-       | y1, _, _, _, _ -> 0.0 <. t'real y1 /\ t'real y1 <. 0.1
-       end
-  end
+  <autodetect>0 prover(s) added
+  <autodetect>Generating strategies:
+  <autodetect>Run: (alt-ergo --version) > /tmp/build71161f.dune/out615f55 2>&1
+  <autodetect>Run: (alt-ergo-2.4.0 --version) > /tmp/build71161f.dune/outd1f15f 2>&1
+  <autodetect>command 'alt-ergo-2.4.0 --version' failed. Output:
+  sh: 1: alt-ergo-2.4.0: not found
+  
+  <autodetect>Found prover Alt-Ergo version 2.4.0, OK.
+  <autodetect>1 prover(s) added
+  (* this is the prelude for Alt-Ergo, version >= 2.4.0 *)
+  (* this is a prelude for Alt-Ergo integer arithmetic *)
+  (* this is a prelude for Alt-Ergo real arithmetic *)
+  type string
+  
+  logic match_bool : bool, 'a, 'a -> 'a
+  
+  axiom match_bool_True :
+    (forall z:'a. forall z1:'a. (match_bool(true, z, z1) = z))
+  
+  axiom match_bool_False :
+    (forall z:'a. forall z1:'a. (match_bool(false, z, z1) = z1))
+  
+  axiom CompatOrderMult :
+    (forall x:int. forall y:int. forall z:int. ((x <= y) -> ((0 <= z) ->
+    ((x * z) <= (y * z)))))
+  
+  axiom add_div :
+    (forall x:real. forall y:real. forall z:real. ((not (z = 0.0)) ->
+    (((x + y) / z) = ((x / z) + (y / z)))))
+  
+  axiom sub_div :
+    (forall x:real. forall y:real. forall z:real. ((not (z = 0.0)) ->
+    (((x - y) / z) = ((x / z) - (y / z)))))
+  
+  axiom neg_div :
+    (forall x:real. forall y:real. ((not (y = 0.0)) ->
+    (((-x) / y) = (-(x / y)))))
+  
+  axiom assoc_mul_div :
+    (forall x:real. forall y:real. forall z:real. ((not (z = 0.0)) ->
+    (((x * y) / z) = (x * (y / z)))))
+  
+  axiom assoc_div_mul :
+    (forall x:real. forall y:real. forall z:real. (((not (y = 0.0)) and
+    (not (z = 0.0))) -> (((x / y) / z) = (x / (y * z)))))
+  
+  axiom assoc_div_div :
+    (forall x:real. forall y:real. forall z:real. (((not (y = 0.0)) and
+    (not (z = 0.0))) -> ((x / (y / z)) = ((x * z) / y))))
+  
+  axiom CompatOrderMult1 :
+    (forall x:real. forall y:real. forall z:real. ((x <= y) -> ((0.0 <= z) ->
+    ((x * z) <= (y * z)))))
+  
+  type t
+  
+  logic tqtreal : t -> real
+  
+  logic tqtisFinite : t -> prop
+  
+  axiom tqtaxiom :
+    (forall x:t. (tqtisFinite(x) ->
+    ((-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0) <= tqtreal(x))))
+  
+  axiom tqtaxiom1 :
+    (forall x:t. (tqtisFinite(x) ->
+    (tqtreal(x) <= 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0)))
+  
+  logic pow2 : int -> int
+  
+  axiom Power_0 : (pow2(0) = 1)
+  
+  axiom Power_s : (forall n:int. ((0 <= n) -> (pow2((n + 1)) = (2 * pow2(n)))))
+  
+  axiom Power_1 : (pow2(1) = 2)
+  
+  axiom Power_sum :
+    (forall n:int. forall m:int. (((0 <= n) and (0 <= m)) ->
+    (pow2((n + m)) = (pow2(n) * pow2(m)))))
+  
+  axiom pow2pos : (forall i:int. ((0 <= i) -> (0 <  pow2(i))))
+  
+  axiom pow2_0 : (pow2(0) = 1)
+  
+  axiom pow2_1 : (pow2(1) = 2)
+  
+  axiom pow2_2 : (pow2(2) = 4)
+  
+  axiom pow2_3 : (pow2(3) = 8)
+  
+  axiom pow2_4 : (pow2(4) = 16)
+  
+  axiom pow2_5 : (pow2(5) = 32)
+  
+  axiom pow2_6 : (pow2(6) = 64)
+  
+  axiom pow2_7 : (pow2(7) = 128)
+  
+  axiom pow2_8 : (pow2(8) = 256)
+  
+  axiom pow2_9 : (pow2(9) = 512)
+  
+  axiom pow2_10 : (pow2(10) = 1024)
+  
+  axiom pow2_11 : (pow2(11) = 2048)
+  
+  axiom pow2_12 : (pow2(12) = 4096)
+  
+  axiom pow2_13 : (pow2(13) = 8192)
+  
+  axiom pow2_14 : (pow2(14) = 16384)
+  
+  axiom pow2_15 : (pow2(15) = 32768)
+  
+  axiom pow2_16 : (pow2(16) = 65536)
+  
+  axiom pow2_17 : (pow2(17) = 131072)
+  
+  axiom pow2_18 : (pow2(18) = 262144)
+  
+  axiom pow2_19 : (pow2(19) = 524288)
+  
+  axiom pow2_20 : (pow2(20) = 1048576)
+  
+  axiom pow2_21 : (pow2(21) = 2097152)
+  
+  axiom pow2_22 : (pow2(22) = 4194304)
+  
+  axiom pow2_23 : (pow2(23) = 8388608)
+  
+  axiom pow2_24 : (pow2(24) = 16777216)
+  
+  axiom pow2_25 : (pow2(25) = 33554432)
+  
+  axiom pow2_26 : (pow2(26) = 67108864)
+  
+  axiom pow2_27 : (pow2(27) = 134217728)
+  
+  axiom pow2_28 : (pow2(28) = 268435456)
+  
+  axiom pow2_29 : (pow2(29) = 536870912)
+  
+  axiom pow2_30 : (pow2(30) = 1073741824)
+  
+  axiom pow2_31 : (pow2(31) = 2147483648)
+  
+  axiom pow2_32 : (pow2(32) = 4294967296)
+  
+  axiom pow2_33 : (pow2(33) = 8589934592)
+  
+  axiom pow2_34 : (pow2(34) = 17179869184)
+  
+  axiom pow2_35 : (pow2(35) = 34359738368)
+  
+  axiom pow2_36 : (pow2(36) = 68719476736)
+  
+  axiom pow2_37 : (pow2(37) = 137438953472)
+  
+  axiom pow2_38 : (pow2(38) = 274877906944)
+  
+  axiom pow2_39 : (pow2(39) = 549755813888)
+  
+  axiom pow2_40 : (pow2(40) = 1099511627776)
+  
+  axiom pow2_41 : (pow2(41) = 2199023255552)
+  
+  axiom pow2_42 : (pow2(42) = 4398046511104)
+  
+  axiom pow2_43 : (pow2(43) = 8796093022208)
+  
+  axiom pow2_44 : (pow2(44) = 17592186044416)
+  
+  axiom pow2_45 : (pow2(45) = 35184372088832)
+  
+  axiom pow2_46 : (pow2(46) = 70368744177664)
+  
+  axiom pow2_47 : (pow2(47) = 140737488355328)
+  
+  axiom pow2_48 : (pow2(48) = 281474976710656)
+  
+  axiom pow2_49 : (pow2(49) = 562949953421312)
+  
+  axiom pow2_50 : (pow2(50) = 1125899906842624)
+  
+  axiom pow2_51 : (pow2(51) = 2251799813685248)
+  
+  axiom pow2_52 : (pow2(52) = 4503599627370496)
+  
+  axiom pow2_53 : (pow2(53) = 9007199254740992)
+  
+  axiom pow2_54 : (pow2(54) = 18014398509481984)
+  
+  axiom pow2_55 : (pow2(55) = 36028797018963968)
+  
+  axiom pow2_56 : (pow2(56) = 72057594037927936)
+  
+  axiom pow2_57 : (pow2(57) = 144115188075855872)
+  
+  axiom pow2_58 : (pow2(58) = 288230376151711744)
+  
+  axiom pow2_59 : (pow2(59) = 576460752303423488)
+  
+  axiom pow2_60 : (pow2(60) = 1152921504606846976)
+  
+  axiom pow2_61 : (pow2(61) = 2305843009213693952)
+  
+  axiom pow2_62 : (pow2(62) = 4611686018427387904)
+  
+  axiom pow2_63 : (pow2(63) = 9223372036854775808)
+  
+  axiom pow2_64 : (pow2(64) = 18446744073709551616)
+  
+  function abs(x: real) : real = (if (0.0 <= x) then x else (-x))
+  
+  axiom Abs_le : (forall x:real. forall y:real. ((abs(x) <= y) -> ((-y) <= x)))
+  
+  axiom Abs_le1 : (forall x:real. forall y:real. ((abs(x) <= y) -> (x <= y)))
+  
+  axiom Abs_le2 :
+    (forall x:real. forall y:real. ((((-y) <= x) and (x <= y)) ->
+    (abs(x) <= y)))
+  
+  axiom Abs_pos : (forall x:real. (0.0 <= abs(x)))
+  
+  axiom Abs_sum :
+    (forall x:real. forall y:real. (abs((x + y)) <= (abs(x) + abs(y))))
+  
+  axiom Abs_prod :
+    (forall x:real. forall y:real. (abs((x * y)) = (abs(x) * abs(y))))
+  
+  axiom triangular_inequality :
+    (forall x:real. forall y:real. forall z:real.
+    (abs((x - z)) <= (abs((x - y)) + abs((y - z)))))
+  
+  logic from_int : int -> real
+  
+  axiom Zero : (from_int(0) = 0.0)
+  
+  axiom One : (from_int(1) = 1.0)
+  
+  axiom Add :
+    (forall x:int. forall y:int.
+    (from_int((x + y)) = (from_int(x) + from_int(y))))
+  
+  axiom Sub :
+    (forall x:int. forall y:int.
+    (from_int((x - y)) = (from_int(x) - from_int(y))))
+  
+  axiom Mul :
+    (forall x:int. forall y:int.
+    (from_int((x * y)) = (from_int(x) * from_int(y))))
+  
+  axiom Neg : (forall x:int. (from_int((-x)) = (-from_int(x))))
+  
+  axiom Injective :
+    (forall x:int. forall y:int. ((from_int(x) = from_int(y)) -> (x = y)))
+  
+  axiom Monotonic :
+    (forall x:int. forall y:int. ((x <= y) -> (from_int(x) <= from_int(y))))
+  
+  logic truncate : real -> int
+  
+  axiom Truncate_int : (forall i:int. (truncate(from_int(i)) = i))
+  
+  axiom Truncate_down_pos :
+    (forall x:real. ((0.0 <= x) -> (from_int(truncate(x)) <= x)))
+  
+  axiom Truncate_down_pos1 :
+    (forall x:real. ((0.0 <= x) -> (x <  from_int((truncate(x) + 1)))))
+  
+  axiom Truncate_up_neg :
+    (forall x:real. ((x <= 0.0) -> (from_int((truncate(x) - 1)) <  x)))
+  
+  axiom Truncate_up_neg1 :
+    (forall x:real. ((x <= 0.0) -> (x <= from_int(truncate(x)))))
+  
+  axiom Real_of_truncate :
+    (forall x:real. ((x - 1.0) <= from_int(truncate(x))))
+  
+  axiom Real_of_truncate1 :
+    (forall x:real. (from_int(truncate(x)) <= (x + 1.0)))
+  
+  axiom Truncate_monotonic :
+    (forall x:real. forall y:real. ((x <= y) -> (truncate(x) <= truncate(y))))
+  
+  axiom Truncate_monotonic_int1 :
+    (forall x:real. forall i:int. ((x <= from_int(i)) -> (truncate(x) <= i)))
+  
+  axiom Truncate_monotonic_int2 :
+    (forall x:real. forall i:int. ((from_int(i) <= x) -> (i <= truncate(x))))
+  
+  logic floor : real -> int
+  
+  logic ceil : real -> int
+  
+  axiom Floor_int : (forall i:int. (floor(from_int(i)) = i))
+  
+  axiom Ceil_int : (forall i:int. (ceil(from_int(i)) = i))
+  
+  axiom Floor_down : (forall x:real. (from_int(floor(x)) <= x))
+  
+  axiom Floor_down1 : (forall x:real. (x <  from_int((floor(x) + 1))))
+  
+  axiom Ceil_up : (forall x:real. (from_int((ceil(x) - 1)) <  x))
+  
+  axiom Ceil_up1 : (forall x:real. (x <= from_int(ceil(x))))
+  
+  axiom Floor_monotonic :
+    (forall x:real. forall y:real. ((x <= y) -> (floor(x) <= floor(y))))
+  
+  axiom Ceil_monotonic :
+    (forall x:real. forall y:real. ((x <= y) -> (ceil(x) <= ceil(y))))
+  
+  type mode = RNE | RNA | RTP | RTN | RTZ
+  
+  logic match_mode : mode, 'a, 'a, 'a, 'a, 'a -> 'a
+  
+  axiom match_mode_RNE :
+    (forall z:'a. forall z1:'a. forall z2:'a. forall z3:'a. forall z4:'a.
+    (match_mode(RNE, z, z1, z2, z3, z4) = z))
+  
+  axiom match_mode_RNA :
+    (forall z:'a. forall z1:'a. forall z2:'a. forall z3:'a. forall z4:'a.
+    (match_mode(RNA, z, z1, z2, z3, z4) = z1))
+  
+  axiom match_mode_RTP :
+    (forall z:'a. forall z1:'a. forall z2:'a. forall z3:'a. forall z4:'a.
+    (match_mode(RTP, z, z1, z2, z3, z4) = z2))
+  
+  axiom match_mode_RTN :
+    (forall z:'a. forall z1:'a. forall z2:'a. forall z3:'a. forall z4:'a.
+    (match_mode(RTN, z, z1, z2, z3, z4) = z3))
+  
+  axiom match_mode_RTZ :
+    (forall z:'a. forall z1:'a. forall z2:'a. forall z3:'a. forall z4:'a.
+    (match_mode(RTZ, z, z1, z2, z3, z4) = z4))
+  
+  predicate to_nearest(m: mode) = ((m = RNE) or (m = RNA))
+  
+  logic zeroF : t
+  
+  logic add : mode, t, t -> t
+  
+  logic sub : mode, t, t -> t
+  
+  logic mul : mode, t, t -> t
+  
+  logic div : mode, t, t -> t
+  
+  logic abs1 : t -> t
+  
+  logic neg : t -> t
+  
+  logic fma : mode, t, t, t -> t
+  
+  logic sqrt : mode, t -> t
+  
+  logic roundToIntegral : mode, t -> t
+  
+  logic min : t, t -> t
+  
+  logic max : t, t -> t
+  
+  logic le : t, t -> prop
+  
+  logic lt : t, t -> prop
+  
+  logic eq : t, t -> prop
+  
+  logic is_normal : t -> prop
+  
+  logic is_subnormal : t -> prop
+  
+  logic is_zero : t -> prop
+  
+  logic is_infinite : t -> prop
+  
+  logic is_nan : t -> prop
+  
+  logic is_positive : t -> prop
+  
+  logic is_negative : t -> prop
+  
+  predicate is_plus_infinity(x: t) = (is_infinite(x) and is_positive(x))
+  
+  predicate is_minus_infinity(x: t) = (is_infinite(x) and is_negative(x))
+  
+  predicate is_plus_zero(x: t) = (is_zero(x) and is_positive(x))
+  
+  predicate is_minus_zero(x: t) = (is_zero(x) and is_negative(x))
+  
+  predicate is_not_nan(x: t) = (tqtisFinite(x) or is_infinite(x))
+  
+  axiom is_not_nan1 : (forall x:t. (is_not_nan(x) -> (not is_nan(x))))
+  
+  axiom is_not_nan2 : (forall x:t. ((not is_nan(x)) -> is_not_nan(x)))
+  
+  axiom is_not_finite :
+    (forall x:t. ((not tqtisFinite(x)) -> (is_infinite(x) or is_nan(x))))
+  
+  axiom is_not_finite1 :
+    (forall x:t. ((is_infinite(x) or is_nan(x)) -> (not tqtisFinite(x))))
+  
+  axiom zeroF_is_positive : is_positive(zeroF)
+  
+  axiom zeroF_is_zero : is_zero(zeroF)
+  
+  axiom zero_to_real :
+    (forall x:t [is_zero(x)]. (is_zero(x) -> tqtisFinite(x)))
+  
+  axiom zero_to_real1 :
+    (forall x:t [is_zero(x)]. (is_zero(x) -> (tqtreal(x) = 0.0)))
+  
+  axiom zero_to_real2 :
+    (forall x:t [is_zero(x)]. ((tqtisFinite(x) and (tqtreal(x) = 0.0)) ->
+    is_zero(x)))
+  
+  logic of_int : mode, int -> t
+  
+  logic to_int : mode, t -> int
+  
+  axiom zero_of_int : (forall m:mode. (zeroF = of_int(m, 0)))
+  
+  logic round : mode, real -> real
+  
+  logic max_int1 : int
+  
+  axiom max_real_int : (0x1.FFFFFFFFFFFFFp1023 = from_int(max_int1))
+  
+  predicate in_range(x: real) = (((-0x1.FFFFFFFFFFFFFp1023) <= x) and
+    (x <= 0x1.FFFFFFFFFFFFFp1023))
+  
+  predicate in_int_range(i: int) = (((-max_int1) <= i) and (i <= max_int1))
+  
+  axiom is_finite : (forall x:t. (tqtisFinite(x) -> in_range(tqtreal(x))))
+  
+  predicate no_overflow(m: mode, x: real) = in_range(round(m, x))
+  
+  axiom Bounded_real_no_overflow :
+    (forall m:mode. forall x:real. (in_range(x) -> no_overflow(m, x)))
+  
+  axiom Round_monotonic :
+    (forall m:mode. forall x:real. forall y:real. ((x <= y) -> (round(m,
+    x) <= round(m, y))))
+  
+  axiom Round_idempotent :
+    (forall m1:mode. forall m2:mode. forall x:real. (round(m1, round(m2,
+    x)) = round(m2, x)))
+  
+  axiom Round_to_real :
+    (forall m:mode. forall x:t. (tqtisFinite(x) -> (round(m,
+    tqtreal(x)) = tqtreal(x))))
+  
+  axiom Round_down_le : (forall x:real. (round(RTN, x) <= x))
+  
+  axiom Round_up_ge : (forall x:real. (x <= round(RTP, x)))
+  
+  axiom Round_down_neg : (forall x:real. (round(RTN, (-x)) = (-round(RTP, x))))
+  
+  axiom Round_up_neg : (forall x:real. (round(RTP, (-x)) = (-round(RTN, x))))
+  
+  predicate in_safe_int_range(i: int) = (((-9007199254740992) <= i) and
+    (i <= 9007199254740992))
+  
+  axiom Exact_rounding_for_integers :
+    (forall m:mode. forall i:int. (in_safe_int_range(i) -> (round(m,
+    from_int(i)) = from_int(i))))
+  
+  predicate same_sign(x: t, y: t) = ((is_positive(x) and is_positive(y)) or
+    (is_negative(x) and is_negative(y)))
+  
+  predicate diff_sign(x: t, y: t) = ((is_positive(x) and is_negative(y)) or
+    (is_negative(x) and is_positive(y)))
+  
+  axiom feq_eq :
+    (forall x:t. forall y:t. (tqtisFinite(x) -> (tqtisFinite(y) ->
+    ((not is_zero(x)) -> (eq(x, y) -> (x = y))))))
+  
+  axiom eq_feq :
+    (forall x:t. forall y:t. (tqtisFinite(x) -> (tqtisFinite(y) -> ((x = y) ->
+    eq(x, y)))))
+  
+  axiom eq_refl : (forall x:t. (tqtisFinite(x) -> eq(x, x)))
+  
+  axiom eq_sym : (forall x:t. forall y:t. (eq(x, y) -> eq(y, x)))
+  
+  axiom eq_trans :
+    (forall x:t. forall y:t. forall z:t. (eq(x, y) -> (eq(y, z) -> eq(x, z))))
+  
+  axiom eq_zero : eq(zeroF, neg(zeroF))
+  
+  axiom eq_to_real_finite :
+    (forall x:t. forall y:t. ((tqtisFinite(x) and tqtisFinite(y)) -> (eq(x,
+    y) -> (tqtreal(x) = tqtreal(y)))))
+  
+  axiom eq_to_real_finite1 :
+    (forall x:t. forall y:t. ((tqtisFinite(x) and tqtisFinite(y)) ->
+    ((tqtreal(x) = tqtreal(y)) -> eq(x, y))))
+  
+  axiom eq_special : (forall x:t. forall y:t. (eq(x, y) -> is_not_nan(x)))
+  
+  axiom eq_special1 : (forall x:t. forall y:t. (eq(x, y) -> is_not_nan(y)))
+  
+  axiom eq_special2 :
+    (forall x:t. forall y:t. (eq(x, y) -> ((tqtisFinite(x) and
+    tqtisFinite(y)) or (is_infinite(x) and (is_infinite(y) and same_sign(x,
+    y))))))
+  
+  axiom lt_finite :
+    (forall x:t. forall y:t [lt(x, y)]. ((tqtisFinite(x) and tqtisFinite(y)) ->
+    (lt(x, y) -> (tqtreal(x) <  tqtreal(y)))))
+  
+  axiom lt_finite1 :
+    (forall x:t. forall y:t [lt(x, y)]. ((tqtisFinite(x) and tqtisFinite(y)) ->
+    ((tqtreal(x) <  tqtreal(y)) -> lt(x, y))))
+  
+  axiom le_finite :
+    (forall x:t. forall y:t [le(x, y)]. ((tqtisFinite(x) and tqtisFinite(y)) ->
+    (le(x, y) -> (tqtreal(x) <= tqtreal(y)))))
+  
+  axiom le_finite1 :
+    (forall x:t. forall y:t [le(x, y)]. ((tqtisFinite(x) and tqtisFinite(y)) ->
+    ((tqtreal(x) <= tqtreal(y)) -> le(x, y))))
+  
+  axiom le_lt_trans :
+    (forall x:t. forall y:t. forall z:t. ((le(x, y) and lt(y, z)) -> lt(x, z)))
+  
+  axiom lt_le_trans :
+    (forall x:t. forall y:t. forall z:t. ((lt(x, y) and le(y, z)) -> lt(x, z)))
+  
+  axiom le_ge_asym :
+    (forall x:t. forall y:t. ((le(x, y) and le(y, x)) -> eq(x, y)))
+  
+  axiom not_lt_ge :
+    (forall x:t. forall y:t. (((not lt(x, y)) and (is_not_nan(x) and
+    is_not_nan(y))) -> le(y, x)))
+  
+  axiom not_gt_le :
+    (forall x:t. forall y:t. (((not lt(y, x)) and (is_not_nan(x) and
+    is_not_nan(y))) -> le(x, y)))
+  
+  axiom le_special :
+    (forall x:t. forall y:t [le(x, y)]. (le(x, y) -> ((tqtisFinite(x) and
+    tqtisFinite(y)) or ((is_minus_infinity(x) and is_not_nan(y)) or
+    (is_not_nan(x) and is_plus_infinity(y))))))
+  
+  axiom lt_special :
+    (forall x:t. forall y:t [lt(x, y)]. (lt(x, y) -> ((tqtisFinite(x) and
+    tqtisFinite(y)) or ((is_minus_infinity(x) and (is_not_nan(y) and
+    (not is_minus_infinity(y)))) or (is_not_nan(x) and
+    ((not is_plus_infinity(x)) and is_plus_infinity(y)))))))
+  
+  axiom lt_lt_finite :
+    (forall x:t. forall y:t. forall z:t. (lt(x, y) -> (lt(y, z) ->
+    tqtisFinite(y))))
+  
+  axiom positive_to_real :
+    (forall x:t [is_positive(x)]. (tqtisFinite(x) -> (is_positive(x) ->
+    (0.0 <= tqtreal(x)))))
+  
+  axiom to_real_positive :
+    (forall x:t [is_positive(x)]. (tqtisFinite(x) -> ((0.0 <  tqtreal(x)) ->
+    is_positive(x))))
+  
+  axiom negative_to_real :
+    (forall x:t [is_negative(x)]. (tqtisFinite(x) -> (is_negative(x) ->
+    (tqtreal(x) <= 0.0))))
+  
+  axiom to_real_negative :
+    (forall x:t [is_negative(x)]. (tqtisFinite(x) -> ((tqtreal(x) <  0.0) ->
+    is_negative(x))))
+  
+  axiom negative_xor_positive :
+    (forall x:t. (not (is_positive(x) and is_negative(x))))
+  
+  axiom negative_or_positive :
+    (forall x:t. (is_not_nan(x) -> (is_positive(x) or is_negative(x))))
+  
+  axiom diff_sign_trans :
+    (forall x:t. forall y:t. forall z:t. ((diff_sign(x, y) and diff_sign(y,
+    z)) -> same_sign(x, z)))
+  
+  axiom diff_sign_product :
+    (forall x:t. forall y:t. ((tqtisFinite(x) and (tqtisFinite(y) and
+    ((tqtreal(x) * tqtreal(y)) <  0.0))) -> diff_sign(x, y)))
+  
+  axiom same_sign_product :
+    (forall x:t. forall y:t. ((tqtisFinite(x) and (tqtisFinite(y) and
+    same_sign(x, y))) -> (0.0 <= (tqtreal(x) * tqtreal(y)))))
+  
+  predicate product_sign(z: t, x: t, y: t) = ((same_sign(x, y) ->
+    is_positive(z)) and (diff_sign(x, y) -> is_negative(z)))
+  
+  predicate overflow_value(m: mode, x: t) = ((((((m = RNE) ->
+    is_infinite(x)) and ((m = RNA) -> is_infinite(x))) and ((m = RTP) ->
+    (if is_positive(x) then is_infinite(x) else (tqtisFinite(x) and
+    (tqtreal(x) = (-0x1.FFFFFFFFFFFFFp1023)))))) and ((m = RTN) ->
+    (if is_positive(x) then (tqtisFinite(x) and
+    (tqtreal(x) = 0x1.FFFFFFFFFFFFFp1023)) else is_infinite(x)))) and
+    ((m = RTZ) -> (if is_positive(x) then (tqtisFinite(x) and
+    (tqtreal(x) = 0x1.FFFFFFFFFFFFFp1023)) else (tqtisFinite(x) and
+    (tqtreal(x) = (-0x1.FFFFFFFFFFFFFp1023))))))
+  
+  predicate sign_zero_result(m: mode, x: t) = (is_zero(x) -> ((((((m = RNE) ->
+    is_positive(x)) and ((m = RNA) -> is_positive(x))) and ((m = RTP) ->
+    is_positive(x))) and ((m = RTN) -> is_negative(x))) and ((m = RTZ) ->
+    is_positive(x))))
+  
+  axiom add_finite :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) + tqtreal(y))) ->
+    tqtisFinite(add(m, x, y))))))
+  
+  axiom add_finite1 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) + tqtreal(y))) ->
+    (tqtreal(add(m, x, y)) = round(m, (tqtreal(x) + tqtreal(y))))))))
+  
+  axiom add_finite_rev :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (tqtisFinite(add(m,
+    x, y)) -> tqtisFinite(x)))
+  
+  axiom add_finite_rev1 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (tqtisFinite(add(m,
+    x, y)) -> tqtisFinite(y)))
+  
+  axiom add_finite_rev_n :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(add(m, x, y)) -> no_overflow(m, (tqtreal(x) + tqtreal(y))))))
+  
+  axiom add_finite_rev_n1 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(add(m, x, y)) -> (tqtreal(add(m, x, y)) = round(m,
+    (tqtreal(x) + tqtreal(y)))))))
+  
+  axiom sub_finite :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) - tqtreal(y))) ->
+    tqtisFinite(sub(m, x, y))))))
+  
+  axiom sub_finite1 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) - tqtreal(y))) ->
+    (tqtreal(sub(m, x, y)) = round(m, (tqtreal(x) - tqtreal(y))))))))
+  
+  axiom sub_finite_rev :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (tqtisFinite(sub(m,
+    x, y)) -> tqtisFinite(x)))
+  
+  axiom sub_finite_rev1 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (tqtisFinite(sub(m,
+    x, y)) -> tqtisFinite(y)))
+  
+  axiom sub_finite_rev_n :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(sub(m, x, y)) -> no_overflow(m, (tqtreal(x) - tqtreal(y))))))
+  
+  axiom sub_finite_rev_n1 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(sub(m, x, y)) -> (tqtreal(sub(m, x, y)) = round(m,
+    (tqtreal(x) - tqtreal(y)))))))
+  
+  axiom mul_finite :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) * tqtreal(y))) ->
+    tqtisFinite(mul(m, x, y))))))
+  
+  axiom mul_finite1 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (no_overflow(m, (tqtreal(x) * tqtreal(y))) ->
+    (tqtreal(mul(m, x, y)) = round(m, (tqtreal(x) * tqtreal(y))))))))
+  
+  axiom mul_finite_rev :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (tqtisFinite(mul(m,
+    x, y)) -> tqtisFinite(x)))
+  
+  axiom mul_finite_rev1 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (tqtisFinite(mul(m,
+    x, y)) -> tqtisFinite(y)))
+  
+  axiom mul_finite_rev_n :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(mul(m, x, y)) -> no_overflow(m, (tqtreal(x) * tqtreal(y))))))
+  
+  axiom mul_finite_rev_n1 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(mul(m, x, y)) -> (tqtreal(mul(m, x, y)) = round(m,
+    (tqtreal(x) * tqtreal(y)))))))
+  
+  axiom div_finite :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> ((not is_zero(y)) -> (no_overflow(m,
+    (tqtreal(x) / tqtreal(y))) -> tqtisFinite(div(m, x, y)))))))
+  
+  axiom div_finite1 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> ((not is_zero(y)) -> (no_overflow(m,
+    (tqtreal(x) / tqtreal(y))) -> (tqtreal(div(m, x, y)) = round(m,
+    (tqtreal(x) / tqtreal(y)))))))))
+  
+  axiom div_finite_rev :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (tqtisFinite(div(m,
+    x, y)) -> ((tqtisFinite(x) and (tqtisFinite(y) and (not is_zero(y)))) or
+    (tqtisFinite(x) and (is_infinite(y) and (tqtreal(div(m, x, y)) = 0.0))))))
+  
+  axiom div_finite_rev_n :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(div(m, x, y)) -> (tqtisFinite(y) -> no_overflow(m,
+    (tqtreal(x) / tqtreal(y)))))))
+  
+  axiom div_finite_rev_n1 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (to_nearest(m) ->
+    (tqtisFinite(div(m, x, y)) -> (tqtisFinite(y) -> (tqtreal(div(m, x,
+    y)) = round(m, (tqtreal(x) / tqtreal(y))))))))
+  
+  axiom neg_finite :
+    (forall x:t [neg(x)]. (tqtisFinite(x) -> tqtisFinite(neg(x))))
+  
+  axiom neg_finite1 :
+    (forall x:t [neg(x)]. (tqtisFinite(x) ->
+    (tqtreal(neg(x)) = (-tqtreal(x)))))
+  
+  axiom neg_finite_rev :
+    (forall x:t [neg(x)]. (tqtisFinite(neg(x)) -> tqtisFinite(x)))
+  
+  axiom neg_finite_rev1 :
+    (forall x:t [neg(x)]. (tqtisFinite(neg(x)) ->
+    (tqtreal(neg(x)) = (-tqtreal(x)))))
+  
+  axiom abs_finite :
+    (forall x:t [abs1(x)]. (tqtisFinite(x) -> tqtisFinite(abs1(x))))
+  
+  axiom abs_finite1 :
+    (forall x:t [abs1(x)]. (tqtisFinite(x) ->
+    (tqtreal(abs1(x)) = abs(tqtreal(x)))))
+  
+  axiom abs_finite2 :
+    (forall x:t [abs1(x)]. (tqtisFinite(x) -> is_positive(abs1(x))))
+  
+  axiom abs_finite_rev :
+    (forall x:t [abs1(x)]. (tqtisFinite(abs1(x)) -> tqtisFinite(x)))
+  
+  axiom abs_finite_rev1 :
+    (forall x:t [abs1(x)]. (tqtisFinite(abs1(x)) ->
+    (tqtreal(abs1(x)) = abs(tqtreal(x)))))
+  
+  axiom abs_universal : (forall x:t [abs1(x)]. (not is_negative(abs1(x))))
+  
+  axiom fma_finite :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (tqtisFinite(x) -> (tqtisFinite(y) -> (tqtisFinite(z) -> (no_overflow(m,
+    ((tqtreal(x) * tqtreal(y)) + tqtreal(z))) -> tqtisFinite(fma(m, x, y,
+    z)))))))
+  
+  axiom fma_finite1 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (tqtisFinite(x) -> (tqtisFinite(y) -> (tqtisFinite(z) -> (no_overflow(m,
+    ((tqtreal(x) * tqtreal(y)) + tqtreal(z))) -> (tqtreal(fma(m, x, y,
+    z)) = round(m, ((tqtreal(x) * tqtreal(y)) + tqtreal(z)))))))))
+  
+  axiom fma_finite_rev :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (tqtisFinite(fma(m, x, y, z)) -> tqtisFinite(x)))
+  
+  axiom fma_finite_rev1 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (tqtisFinite(fma(m, x, y, z)) -> tqtisFinite(y)))
+  
+  axiom fma_finite_rev2 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (tqtisFinite(fma(m, x, y, z)) -> tqtisFinite(z)))
+  
+  axiom fma_finite_rev_n :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (to_nearest(m) -> (tqtisFinite(fma(m, x, y, z)) -> no_overflow(m,
+    ((tqtreal(x) * tqtreal(y)) + tqtreal(z))))))
+  
+  axiom fma_finite_rev_n1 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    (to_nearest(m) -> (tqtisFinite(fma(m, x, y, z)) -> (tqtreal(fma(m, x, y,
+    z)) = round(m, ((tqtreal(x) * tqtreal(y)) + tqtreal(z)))))))
+  
+  function sqr(x: real) : real = (x * x)
+  
+  logic sqrt1 : real -> real
+  
+  axiom Sqrt_positive : (forall x:real. ((0.0 <= x) -> (0.0 <= sqrt1(x))))
+  
+  axiom Sqrt_square : (forall x:real. ((0.0 <= x) -> (sqr(sqrt1(x)) = x)))
+  
+  axiom Square_sqrt : (forall x:real. ((0.0 <= x) -> (sqrt1((x * x)) = x)))
+  
+  axiom Sqrt_mul :
+    (forall x:real. forall y:real. (((0.0 <= x) and (0.0 <= y)) ->
+    (sqrt1((x * y)) = (sqrt1(x) * sqrt1(y)))))
+  
+  axiom Sqrt_le :
+    (forall x:real. forall y:real. (((0.0 <= x) and (x <= y)) ->
+    (sqrt1(x) <= sqrt1(y))))
+  
+  axiom sqrt_finite :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (tqtisFinite(x) ->
+    ((0.0 <= tqtreal(x)) -> tqtisFinite(sqrt(m, x)))))
+  
+  axiom sqrt_finite1 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (tqtisFinite(x) ->
+    ((0.0 <= tqtreal(x)) -> (tqtreal(sqrt(m, x)) = round(m,
+    sqrt1(tqtreal(x)))))))
+  
+  axiom sqrt_finite_rev :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (tqtisFinite(sqrt(m, x)) ->
+    tqtisFinite(x)))
+  
+  axiom sqrt_finite_rev1 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (tqtisFinite(sqrt(m, x)) ->
+    (0.0 <= tqtreal(x))))
+  
+  axiom sqrt_finite_rev2 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (tqtisFinite(sqrt(m, x)) ->
+    (tqtreal(sqrt(m, x)) = round(m, sqrt1(tqtreal(x))))))
+  
+  predicate same_sign_real(x: t, r: real) = ((is_positive(x) and (0.0 <  r)) or
+    (is_negative(x) and (r <  0.0)))
+  
+  axiom add_special :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_nan(x) or
+    is_nan(y)) -> is_nan(add(m, x, y))))
+  
+  axiom add_special1 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    is_infinite(y)) -> is_infinite(add(m, x, y))))
+  
+  axiom add_special2 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    is_infinite(y)) -> same_sign(add(m, x, y), y)))
+  
+  axiom add_special3 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_infinite(x) and
+    tqtisFinite(y)) -> is_infinite(add(m, x, y))))
+  
+  axiom add_special4 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_infinite(x) and
+    tqtisFinite(y)) -> same_sign(add(m, x, y), x)))
+  
+  axiom add_special5 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and same_sign(x, y))) -> is_infinite(add(m, x, y))))
+  
+  axiom add_special6 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and same_sign(x, y))) -> same_sign(add(m, x, y), x)))
+  
+  axiom add_special7 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and diff_sign(x, y))) -> is_nan(add(m, x, y))))
+  
+  axiom add_special8 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and (not no_overflow(m, (tqtreal(x) + tqtreal(y)))))) ->
+    same_sign_real(add(m, x, y), (tqtreal(x) + tqtreal(y)))))
+  
+  axiom add_special9 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and (not no_overflow(m, (tqtreal(x) + tqtreal(y)))))) ->
+    overflow_value(m, add(m, x, y))))
+  
+  axiom add_special10 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    tqtisFinite(y)) -> (same_sign(x, y) -> same_sign(add(m, x, y), x))))
+  
+  axiom add_special11 :
+    (forall m:mode. forall x:t. forall y:t [add(m, x, y)]. ((tqtisFinite(x) and
+    tqtisFinite(y)) -> ((not same_sign(x, y)) -> sign_zero_result(m, add(m, x,
+    y)))))
+  
+  axiom sub_special :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_nan(x) or
+    is_nan(y)) -> is_nan(sub(m, x, y))))
+  
+  axiom sub_special1 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    is_infinite(y)) -> is_infinite(sub(m, x, y))))
+  
+  axiom sub_special2 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    is_infinite(y)) -> diff_sign(sub(m, x, y), y)))
+  
+  axiom sub_special3 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_infinite(x) and
+    tqtisFinite(y)) -> is_infinite(sub(m, x, y))))
+  
+  axiom sub_special4 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_infinite(x) and
+    tqtisFinite(y)) -> same_sign(sub(m, x, y), x)))
+  
+  axiom sub_special5 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and same_sign(x, y))) -> is_nan(sub(m, x, y))))
+  
+  axiom sub_special6 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and diff_sign(x, y))) -> is_infinite(sub(m, x, y))))
+  
+  axiom sub_special7 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((is_infinite(x) and
+    (is_infinite(y) and diff_sign(x, y))) -> same_sign(sub(m, x, y), x)))
+  
+  axiom sub_special8 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and (not no_overflow(m, (tqtreal(x) - tqtreal(y)))))) ->
+    same_sign_real(sub(m, x, y), (tqtreal(x) - tqtreal(y)))))
+  
+  axiom sub_special9 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and (not no_overflow(m, (tqtreal(x) - tqtreal(y)))))) ->
+    overflow_value(m, sub(m, x, y))))
+  
+  axiom sub_special10 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    tqtisFinite(y)) -> (diff_sign(x, y) -> same_sign(sub(m, x, y), x))))
+  
+  axiom sub_special11 :
+    (forall m:mode. forall x:t. forall y:t [sub(m, x, y)]. ((tqtisFinite(x) and
+    tqtisFinite(y)) -> ((not diff_sign(x, y)) -> sign_zero_result(m, sub(m, x,
+    y)))))
+  
+  axiom mul_special :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((is_nan(x) or
+    is_nan(y)) -> is_nan(mul(m, x, y))))
+  
+  axiom mul_special1 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((is_zero(x) and
+    is_infinite(y)) -> is_nan(mul(m, x, y))))
+  
+  axiom mul_special2 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((tqtisFinite(x) and
+    (is_infinite(y) and (not is_zero(x)))) -> is_infinite(mul(m, x, y))))
+  
+  axiom mul_special3 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((is_infinite(x) and
+    is_zero(y)) -> is_nan(mul(m, x, y))))
+  
+  axiom mul_special4 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((is_infinite(x) and
+    (tqtisFinite(y) and (not is_zero(y)))) -> is_infinite(mul(m, x, y))))
+  
+  axiom mul_special5 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((is_infinite(x) and
+    is_infinite(y)) -> is_infinite(mul(m, x, y))))
+  
+  axiom mul_special6 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and (not no_overflow(m, (tqtreal(x) * tqtreal(y)))))) ->
+    overflow_value(m, mul(m, x, y))))
+  
+  axiom mul_special7 :
+    (forall m:mode. forall x:t. forall y:t [mul(m, x, y)]. (let r = mul(m, x,
+    y) : t in ((not is_nan(r)) -> product_sign(r, x, y))))
+  
+  axiom div_special :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((is_nan(x) or
+    is_nan(y)) -> is_nan(div(m, x, y))))
+  
+  axiom div_special1 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((tqtisFinite(x) and
+    is_infinite(y)) -> is_zero(div(m, x, y))))
+  
+  axiom div_special2 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((is_infinite(x) and
+    tqtisFinite(y)) -> is_infinite(div(m, x, y))))
+  
+  axiom div_special3 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((is_infinite(x) and
+    is_infinite(y)) -> is_nan(div(m, x, y))))
+  
+  axiom div_special4 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((tqtisFinite(x) and
+    (tqtisFinite(y) and ((not is_zero(y)) and (not no_overflow(m,
+    (tqtreal(x) / tqtreal(y))))))) -> overflow_value(m, div(m, x, y))))
+  
+  axiom div_special5 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((tqtisFinite(x) and
+    (is_zero(y) and (not is_zero(x)))) -> is_infinite(div(m, x, y))))
+  
+  axiom div_special6 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. ((is_zero(x) and
+    is_zero(y)) -> is_nan(div(m, x, y))))
+  
+  axiom div_special7 :
+    (forall m:mode. forall x:t. forall y:t [div(m, x, y)]. (let r = div(m, x,
+    y) : t in ((not is_nan(r)) -> product_sign(r, x, y))))
+  
+  axiom neg_special : (forall x:t [neg(x)]. (is_nan(x) -> is_nan(neg(x))))
+  
+  axiom neg_special1 :
+    (forall x:t [neg(x)]. (is_infinite(x) -> is_infinite(neg(x))))
+  
+  axiom neg_special2 :
+    (forall x:t [neg(x)]. ((not is_nan(x)) -> diff_sign(x, neg(x))))
+  
+  axiom abs_special : (forall x:t [abs1(x)]. (is_nan(x) -> is_nan(abs1(x))))
+  
+  axiom abs_special1 :
+    (forall x:t [abs1(x)]. (is_infinite(x) -> is_infinite(abs1(x))))
+  
+  axiom abs_special2 :
+    (forall x:t [abs1(x)]. ((not is_nan(x)) -> is_positive(abs1(x))))
+  
+  axiom fma_special :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_nan(x) or (is_nan(y) or is_nan(z))) -> is_nan(fma(m, x, y, z))))
+  
+  axiom fma_special1 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_zero(x) and is_infinite(y)) -> is_nan(fma(m, x, y, z))))
+  
+  axiom fma_special2 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and is_zero(y)) -> is_nan(fma(m, x, y, z))))
+  
+  axiom fma_special3 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and ((not is_zero(x)) and (is_infinite(y) and
+    tqtisFinite(z)))) -> is_infinite(fma(m, x, y, z))))
+  
+  axiom fma_special4 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and ((not is_zero(x)) and (is_infinite(y) and
+    tqtisFinite(z)))) -> product_sign(fma(m, x, y, z), x, y)))
+  
+  axiom fma_special5 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and ((not is_zero(x)) and (is_infinite(y) and
+    is_infinite(z)))) -> (product_sign(z, x, y) -> is_infinite(fma(m, x, y,
+    z)))))
+  
+  axiom fma_special6 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and ((not is_zero(x)) and (is_infinite(y) and
+    is_infinite(z)))) -> (product_sign(z, x, y) -> same_sign(fma(m, x, y, z),
+    z))))
+  
+  axiom fma_special7 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and ((not is_zero(x)) and (is_infinite(y) and
+    is_infinite(z)))) -> ((not product_sign(z, x, y)) -> is_nan(fma(m, x, y,
+    z)))))
+  
+  axiom fma_special8 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (tqtisFinite(y) and ((not is_zero(y)) and
+    tqtisFinite(z)))) -> is_infinite(fma(m, x, y, z))))
+  
+  axiom fma_special9 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (tqtisFinite(y) and ((not is_zero(y)) and
+    tqtisFinite(z)))) -> product_sign(fma(m, x, y, z), x, y)))
+  
+  axiom fma_special10 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (tqtisFinite(y) and ((not is_zero(y)) and
+    is_infinite(z)))) -> (product_sign(z, x, y) -> is_infinite(fma(m, x, y,
+    z)))))
+  
+  axiom fma_special11 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (tqtisFinite(y) and ((not is_zero(y)) and
+    is_infinite(z)))) -> (product_sign(z, x, y) -> same_sign(fma(m, x, y, z),
+    z))))
+  
+  axiom fma_special12 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (tqtisFinite(y) and ((not is_zero(y)) and
+    is_infinite(z)))) -> ((not product_sign(z, x, y)) -> is_nan(fma(m, x, y,
+    z)))))
+  
+  axiom fma_special13 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (is_infinite(y) and tqtisFinite(z))) ->
+    is_infinite(fma(m, x, y, z))))
+  
+  axiom fma_special14 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (is_infinite(y) and tqtisFinite(z))) ->
+    product_sign(fma(m, x, y, z), x, y)))
+  
+  axiom fma_special15 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and is_infinite(z))) ->
+    is_infinite(fma(m, x, y, z))))
+  
+  axiom fma_special16 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and is_infinite(z))) ->
+    same_sign(fma(m, x, y, z), z)))
+  
+  axiom fma_special17 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (is_infinite(y) and is_infinite(z))) ->
+    (product_sign(z, x, y) -> is_infinite(fma(m, x, y, z)))))
+  
+  axiom fma_special18 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (is_infinite(y) and is_infinite(z))) ->
+    (product_sign(z, x, y) -> same_sign(fma(m, x, y, z), z))))
+  
+  axiom fma_special19 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((is_infinite(x) and (is_infinite(y) and is_infinite(z))) ->
+    ((not product_sign(z, x, y)) -> is_nan(fma(m, x, y, z)))))
+  
+  axiom fma_special20 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and (tqtisFinite(z) and
+    (not no_overflow(m, ((tqtreal(x) * tqtreal(y)) + tqtreal(z))))))) ->
+    same_sign_real(fma(m, x, y, z), ((tqtreal(x) * tqtreal(y)) + tqtreal(z)))))
+  
+  axiom fma_special21 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and (tqtisFinite(z) and
+    (not no_overflow(m, ((tqtreal(x) * tqtreal(y)) + tqtreal(z))))))) ->
+    overflow_value(m, fma(m, x, y, z))))
+  
+  axiom fma_special22 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and tqtisFinite(z))) ->
+    (product_sign(z, x, y) -> same_sign(fma(m, x, y, z), z))))
+  
+  axiom fma_special23 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and tqtisFinite(z))) ->
+    ((not product_sign(z, x, y)) ->
+    ((((tqtreal(x) * tqtreal(y)) + tqtreal(z)) = 0.0) -> ((m = RTN) ->
+    is_negative(fma(m, x, y, z)))))))
+  
+  axiom fma_special24 :
+    (forall m:mode. forall x:t. forall y:t. forall z:t [fma(m, x, y, z)].
+    ((tqtisFinite(x) and (tqtisFinite(y) and tqtisFinite(z))) ->
+    ((not product_sign(z, x, y)) ->
+    ((((tqtreal(x) * tqtreal(y)) + tqtreal(z)) = 0.0) -> ((not (m = RTN)) ->
+    is_positive(fma(m, x, y, z)))))))
+  
+  axiom sqrt_special :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (is_nan(x) -> is_nan(sqrt(m, x))))
+  
+  axiom sqrt_special1 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (is_plus_infinity(x) ->
+    is_plus_infinity(sqrt(m, x))))
+  
+  axiom sqrt_special2 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (is_minus_infinity(x) ->
+    is_nan(sqrt(m, x))))
+  
+  axiom sqrt_special3 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. ((tqtisFinite(x) and
+    (tqtreal(x) <  0.0)) -> is_nan(sqrt(m, x))))
+  
+  axiom sqrt_special4 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. (is_zero(x) -> same_sign(sqrt(m,
+    x), x)))
+  
+  axiom sqrt_special5 :
+    (forall m:mode. forall x:t [sqrt(m, x)]. ((tqtisFinite(x) and
+    (0.0 <  tqtreal(x))) -> is_positive(sqrt(m, x))))
+  
+  axiom of_int_add_exact :
+    (forall m:mode. forall n:mode. forall i:int. forall j:int.
+    (in_safe_int_range(i) -> (in_safe_int_range(j) ->
+    (in_safe_int_range((i + j)) -> eq(of_int(m, (i + j)), add(n, of_int(m, i),
+    of_int(m, j)))))))
+  
+  axiom of_int_sub_exact :
+    (forall m:mode. forall n:mode. forall i:int. forall j:int.
+    (in_safe_int_range(i) -> (in_safe_int_range(j) ->
+    (in_safe_int_range((i - j)) -> eq(of_int(m, (i - j)), sub(n, of_int(m, i),
+    of_int(m, j)))))))
+  
+  axiom of_int_mul_exact :
+    (forall m:mode. forall n:mode. forall i:int. forall j:int.
+    (in_safe_int_range(i) -> (in_safe_int_range(j) ->
+    (in_safe_int_range((i * j)) -> eq(of_int(m, (i * j)), mul(n, of_int(m, i),
+    of_int(m, j)))))))
+  
+  axiom Min_r : (forall x:t. forall y:t. (le(y, x) -> eq(min(x, y), y)))
+  
+  axiom Min_l : (forall x:t. forall y:t. (le(x, y) -> eq(min(x, y), x)))
+  
+  axiom Max_r : (forall x:t. forall y:t. (le(y, x) -> eq(max(x, y), x)))
+  
+  axiom Max_l : (forall x:t. forall y:t. (le(x, y) -> eq(max(x, y), y)))
+  
+  logic is_int : t -> prop
+  
+  axiom zeroF_is_int : is_int(zeroF)
+  
+  axiom of_int_is_int :
+    (forall m:mode. forall x:int. (in_int_range(x) -> is_int(of_int(m, x))))
+  
+  axiom big_float_is_int :
+    (forall m:mode. forall i:t. (tqtisFinite(i) -> ((le(i, neg(of_int(m,
+    9007199254740992))) or le(of_int(m, 9007199254740992), i)) -> is_int(i))))
+  
+  axiom roundToIntegral_is_int :
+    (forall m:mode. forall x:t. (tqtisFinite(x) -> is_int(roundToIntegral(m,
+    x))))
+  
+  axiom eq_is_int :
+    (forall x:t. forall y:t. (eq(x, y) -> (is_int(x) -> is_int(y))))
+  
+  axiom add_int :
+    (forall x:t. forall y:t. forall m:mode. (is_int(x) -> (is_int(y) ->
+    (tqtisFinite(add(m, x, y)) -> is_int(add(m, x, y))))))
+  
+  axiom sub_int :
+    (forall x:t. forall y:t. forall m:mode. (is_int(x) -> (is_int(y) ->
+    (tqtisFinite(sub(m, x, y)) -> is_int(sub(m, x, y))))))
+  
+  axiom mul_int :
+    (forall x:t. forall y:t. forall m:mode. (is_int(x) -> (is_int(y) ->
+    (tqtisFinite(mul(m, x, y)) -> is_int(mul(m, x, y))))))
+  
+  axiom fma_int :
+    (forall x:t. forall y:t. forall z:t. forall m:mode. (is_int(x) ->
+    (is_int(y) -> (is_int(z) -> (tqtisFinite(fma(m, x, y, z)) -> is_int(fma(m,
+    x, y, z)))))))
+  
+  axiom neg_int : (forall x:t. (is_int(x) -> is_int(neg(x))))
+  
+  axiom abs_int1 : (forall x:t. (is_int(x) -> is_int(abs1(x))))
+  
+  axiom is_int_of_int :
+    (forall x:t. forall m:mode. forall mqt:mode. (is_int(x) -> eq(x,
+    of_int(mqt, to_int(m, x)))))
+  
+  axiom is_int_to_int :
+    (forall m:mode. forall x:t. (is_int(x) -> in_int_range(to_int(m, x))))
+  
+  axiom is_int_is_finite : (forall x:t. (is_int(x) -> tqtisFinite(x)))
+  
+  axiom int_to_real :
+    (forall m:mode. forall x:t. (is_int(x) -> (tqtreal(x) = from_int(to_int(m,
+    x)))))
+  
+  axiom truncate_int :
+    (forall m:mode. forall i:t. (is_int(i) -> eq(roundToIntegral(m, i), i)))
+  
+  axiom truncate_neg :
+    (forall x:t. (tqtisFinite(x) -> (is_negative(x) -> (roundToIntegral(RTZ,
+    x) = roundToIntegral(RTP, x)))))
+  
+  axiom truncate_pos :
+    (forall x:t. (tqtisFinite(x) -> (is_positive(x) -> (roundToIntegral(RTZ,
+    x) = roundToIntegral(RTN, x)))))
+  
+  axiom ceil_le :
+    (forall x:t. (tqtisFinite(x) -> le(x, roundToIntegral(RTP, x))))
+  
+  axiom ceil_lest :
+    (forall x:t. forall y:t. ((le(x, y) and is_int(y)) ->
+    le(roundToIntegral(RTP, x), y)))
+  
+  axiom ceil_to_real :
+    (forall x:t. (tqtisFinite(x) -> (tqtreal(roundToIntegral(RTP,
+    x)) = from_int(ceil(tqtreal(x))))))
+  
+  axiom ceil_to_int :
+    (forall m:mode. forall x:t. (tqtisFinite(x) -> (to_int(m,
+    roundToIntegral(RTP, x)) = ceil(tqtreal(x)))))
+  
+  axiom floor_le :
+    (forall x:t. (tqtisFinite(x) -> le(roundToIntegral(RTN, x), x)))
+  
+  axiom floor_lest :
+    (forall x:t. forall y:t. ((le(y, x) and is_int(y)) -> le(y,
+    roundToIntegral(RTN, x))))
+  
+  axiom floor_to_real :
+    (forall x:t. (tqtisFinite(x) -> (tqtreal(roundToIntegral(RTN,
+    x)) = from_int(floor(tqtreal(x))))))
+  
+  axiom floor_to_int :
+    (forall m:mode. forall x:t. (tqtisFinite(x) -> (to_int(m,
+    roundToIntegral(RTN, x)) = floor(tqtreal(x)))))
+  
+  axiom RNA_down :
+    (forall x:t. (lt(sub(RNE, x, roundToIntegral(RTN, x)), sub(RNE,
+    roundToIntegral(RTP, x), x)) -> (roundToIntegral(RNA,
+    x) = roundToIntegral(RTN, x))))
+  
+  axiom RNA_up :
+    (forall x:t. (lt(sub(RNE, roundToIntegral(RTP, x), x), sub(RNE, x,
+    roundToIntegral(RTN, x))) -> (roundToIntegral(RNA,
+    x) = roundToIntegral(RTP, x))))
+  
+  axiom RNA_down_tie :
+    (forall x:t. (eq(sub(RNE, x, roundToIntegral(RTN, x)), sub(RNE,
+    roundToIntegral(RTP, x), x)) -> (is_negative(x) -> (roundToIntegral(RNA,
+    x) = roundToIntegral(RTN, x)))))
+  
+  axiom RNA_up_tie :
+    (forall x:t. (eq(sub(RNE, roundToIntegral(RTP, x), x), sub(RNE, x,
+    roundToIntegral(RTN, x))) -> (is_positive(x) -> (roundToIntegral(RNA,
+    x) = roundToIntegral(RTP, x)))))
+  
+  axiom to_int_roundToIntegral :
+    (forall m:mode. forall x:t. (to_int(m, x) = to_int(m, roundToIntegral(m,
+    x))))
+  
+  axiom to_int_monotonic :
+    (forall m:mode. forall x:t. forall y:t. (tqtisFinite(x) ->
+    (tqtisFinite(y) -> (le(x, y) -> (to_int(m, x) <= to_int(m, y))))))
+  
+  axiom to_int_of_int :
+    (forall m:mode. forall i:int. (in_safe_int_range(i) -> (to_int(m, of_int(m,
+    i)) = i)))
+  
+  axiom eq_to_int :
+    (forall m:mode. forall x:t. forall y:t. (tqtisFinite(x) -> (eq(x, y) ->
+    (to_int(m, x) = to_int(m, y)))))
+  
+  axiom neg_to_int :
+    (forall m:mode. forall x:t. (is_int(x) -> (to_int(m, neg(x)) = (-to_int(m,
+    x)))))
+  
+  axiom roundToIntegral_is_finite :
+    (forall m:mode. forall x:t. (tqtisFinite(x) ->
+    tqtisFinite(roundToIntegral(m, x))))
+  
+  axiom round_bound_ne :
+    (forall x:real [round(RNE, x)]. (no_overflow(RNE, x) ->
+    (((x - (0x1.0p-53 * abs(x))) - 0x1.0p-1075) <= round(RNE, x))))
+  
+  axiom round_bound_ne1 :
+    (forall x:real [round(RNE, x)]. (no_overflow(RNE, x) -> (round(RNE,
+    x) <= ((x + (0x1.0p-53 * abs(x))) + 0x1.0p-1075))))
+  
+  axiom round_bound :
+    (forall m:mode. forall x:real [round(m, x)]. (no_overflow(m, x) ->
+    (((x - (0x1.0p-52 * abs(x))) - 0x1.0p-1074) <= round(m, x))))
+  
+  axiom round_bound1 :
+    (forall m:mode. forall x:real [round(m, x)]. (no_overflow(m, x) ->
+    (round(m, x) <= ((x + (0x1.0p-52 * abs(x))) + 0x1.0p-1074))))
+  
+  type ('a, 'a1, 'a2, 'a3, 'a4) tuple5 = { Tuple5_proj_1 : 'a; Tuple5_proj_2 :
+  'a1; Tuple5_proj_3 : 'a2; Tuple5_proj_4 : 'a3; Tuple5_proj_5 : 'a4
+  }
+  
+  logic nnet_apply : t, t, t, t, t -> (t, t, t, t, t) tuple5
+  
+  goal G :
+    (forall x1:t. forall x2:t. forall x3:t. forall x4:t. forall x5:t.
+    (forall x:t. forall x6:t. forall x7:t. forall x8:t. forall x9:t.
+    ((nnet_apply(x1, x2, x3, x4, x5) = { Tuple5_proj_1 = x; Tuple5_proj_2 = x6;
+    Tuple5_proj_3 = x7; Tuple5_proj_4 = x8; Tuple5_proj_5 = x9 }) ->
+    ((0.0 <  tqtreal(x)) and (tqtreal(x) <  0.1)))))