From f1b310a5ee0334c746a32eeed7593bcf25f4f75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bobot?= <francois.bobot@cea.fr> Date: Thu, 4 Apr 2024 20:31:46 +0200 Subject: [PATCH] [NN_prover] Can convert to ONNX output terms --- src/transformations/native_nn_prover.ml | 116 ++++--- tests/acasxu.t | 404 +++++++++++------------- 2 files changed, 257 insertions(+), 263 deletions(-) diff --git a/src/transformations/native_nn_prover.ml b/src/transformations/native_nn_prover.ml index f98ce39..347746b 100644 --- a/src/transformations/native_nn_prover.ml +++ b/src/transformations/native_nn_prover.ml @@ -25,10 +25,8 @@ open Base let src = Logs.Src.create "NN-Gen" ~doc:"Generation of neural networks" type new_output = { - old_index : Why3.Number.int_constant; - old_nn : Language.nn; - new_index : int; - old_nn_args : Why3.Term.term list; + index : int; + term : Why3.Term.term; } (** invariant: @@ -52,6 +50,7 @@ let create_new_nn env input_vars outputs : string = let i = Why3.Term.Mls.find_exn UnknownLogicSymbol ls input_vars in Ir.Nier_simple.Node.gather_int input i) in + let cache = Why3.Term.Hterm.create 17 in let rec convert_old_nn (old_nn : Language.nn) old_index old_nn_args : IR.GFloat.Node.t = let old_index = Why3.Number.to_small_integer old_index in @@ -97,6 +96,13 @@ let create_new_nn env input_vars outputs : string = in Ir.Nier_simple.Node.gather_int out old_index and convert_term term : IR.GFloat.Node.t = + match Why3.Term.Hterm.find_opt cache term with + | None -> + let n = convert_term_aux term in + Why3.Term.Hterm.add cache term n; + n + | Some n -> n + and convert_term_aux term : IR.GFloat.Node.t = if not (Why3.Ty.ty_equal (Option.value_exn term.Why3.Term.t_ty) th_f64.ty) then Logging.user_error ?loc:term.t_loc (fun m -> @@ -175,8 +181,8 @@ let create_new_nn env input_vars outputs : string = let outputs = List.rev_map outputs ~f:(fun o -> Int.decr r; - assert (!r = o.new_index); - convert_old_nn o.old_nn o.old_index o.old_nn_args) + assert (!r = o.index); + convert_term o.term) in let output = IR.Node.create (Concat { inputs = outputs; axis = 0 }) in assert ( @@ -186,48 +192,53 @@ let create_new_nn env input_vars outputs : string = Onnx.Simple.write nn filename; filename +let heuristic th_model th_nn term = + match term.Why3.Term.t_node with + | Tapp + ( ls_get (* [ ] *), + [ + { + t_node = + Why3.Term.Tapp + ( ls_atat (* @@ *), + [ + { t_node = Tapp (ls_nn (* nn *), _); _ }; + { + t_node = Tapp (ls (* input vector *), tl (* input vars *)); + _; + }; + ] ); + _; + }; + { t_node = Tconst (ConstInt _); _ }; + ] ) + when String.equal ls_get.ls_name.id_string (Why3.Ident.op_get "") + && (Why3.Term.ls_equal ls_atat th_model.Symbols.Model.atat + || Why3.Term.ls_equal ls_atat th_nn.Symbols.NN.atat) -> ( + match (Language.lookup_nn ls_nn, Language.lookup_vector ls) with + | Some { nn_nb_inputs; _ }, Some vector_length -> + assert (nn_nb_inputs = vector_length && vector_length = List.length tl); + true + | _, _ -> + Logging.code_error ~src (fun m -> + m "Neural network application without fixed NN or arguments: %a" + Why3.Pretty.print_term term)) + | _ -> false + (** Abstract terms that contains neural network application *) let abstract_nn_term env = let th_model = Symbols.Model.create env in let th_nn = Symbols.NN.create env in + let th_float64 = Symbols.Float64.create env in let rec do_simplify (new_index, output_vars) term = - match term.Why3.Term.t_node with - | Tapp - ( ls_get (* [ ] *), - [ - { - t_node = - Why3.Term.Tapp - ( ls_atat (* @@ *), - [ - { t_node = Tapp (ls_nn (* nn *), _); _ }; - { - t_node = - Tapp (ls (* input vector *), tl (* input vars *)); - _; - }; - ] ); - _; - }; - { t_node = Tconst (ConstInt old_index); _ }; - ] ) - when String.equal ls_get.ls_name.id_string (Why3.Ident.op_get "") - && (Why3.Term.ls_equal ls_atat th_model.atat - || Why3.Term.ls_equal ls_atat th_nn.atat) -> ( - match (Language.lookup_nn ls_nn, Language.lookup_vector ls) with - | Some ({ nn_nb_inputs; nn_ty_elt; _ } as old_nn), Some vector_length -> - assert (nn_nb_inputs = vector_length && vector_length = List.length tl); - let ls = Why3.(Term.create_fsymbol (Ident.id_fresh "y") [] nn_ty_elt) in - let term = Why3.Term.fs_app ls [] nn_ty_elt in - ( ( new_index + 1, - ({ old_index; new_index; old_nn; old_nn_args = tl }, ls) - :: output_vars ), - term ) - | _, _ -> - Logging.code_error ~src (fun m -> - m "Neural network application without fixed NN or arguments: %a" - Why3.Pretty.print_term term)) - | _ -> Why3.Term.t_map_fold do_simplify (new_index, output_vars) term + if heuristic th_model th_nn term + then + let ls = + Why3.(Term.create_fsymbol (Ident.id_fresh "y") [] th_float64.ty) + in + let term' = Why3.Term.fs_app ls [] th_float64.ty in + ((new_index + 1, ({ index = new_index; term }, ls) :: output_vars), term') + else Why3.Term.t_map_fold do_simplify (new_index, output_vars) term in Why3.Trans.fold_map (fun task_hd (((index, input_vars) as acc), task) -> @@ -242,9 +253,17 @@ let abstract_nn_term env = | Decl { d_node = - Dparam ({ ls_args = []; ls_constr = 0; ls_proj = false; _ } as ls); + Dparam + ({ + ls_args = []; + ls_constr = 0; + ls_proj = false; + ls_value = Some ty; + _; + } as ls); _; - } -> + } + when Why3.Ty.ty_equal ty th_float64.ty -> (* Add meta for input variable declarations. Note that each meta needs to appear before the corresponding declaration in order to be leveraged by prover printers. *) @@ -270,13 +289,12 @@ let abstract_nn_term env = (* Add meta for outputs *) let task = List.fold output_vars ~init:task - ~f:(fun task ({ new_index; _ }, output_var) -> + ~f:(fun task ({ index; _ }, output_var) -> let task = Why3.Task.add_meta task Meta.meta_output - [ MAls output_var; MAint new_index ] + [ MAls output_var; MAint index ] in - let decl = Why3.Decl.create_param_decl output_var in - Why3.Task.add_decl task decl) + Why3.Task.add_param_decl task output_var) in let nn_filename = create_new_nn env input_vars (List.map ~f:fst output_vars) diff --git a/tests/acasxu.t b/tests/acasxu.t index d098710..fb054b7 100644 --- a/tests/acasxu.t +++ b/tests/acasxu.t @@ -183,19 +183,19 @@ Test verify on acasxu vector, 5 [DEBUG]{ProverSpec} Prover-tailored specification: - 0.0 <= x3 - x3 <= 60760.0 - -3.141592653589793115997963468544185161590576171875 <= x4 - x4 <= 3.141592653589793115997963468544185161590576171875 - -3.141592653589793115997963468544185161590576171875 <= x5 - x5 <= 3.141592653589793115997963468544185161590576171875 - 100.0 <= x6 - x6 <= 1200.0 - 0.0 <= x7 - x7 <= 1200.0 - 55947.6909999999988940544426441192626953125 <= x3 - 1145.0 <= x6 - x7 <= 60.0 + 0.0 <= x1 + x1 <= 60760.0 + -3.141592653589793115997963468544185161590576171875 <= x2 + x2 <= 3.141592653589793115997963468544185161590576171875 + -3.141592653589793115997963468544185161590576171875 <= x3 + x3 <= 3.141592653589793115997963468544185161590576171875 + 100.0 <= x4 + x4 <= 1200.0 + 0.0 <= x5 + x5 <= 1200.0 + 55947.6909999999988940544426441192626953125 <= x1 + 1145.0 <= x4 + x5 <= 60.0 y0 <= 3.991125645861615112153231166303157806396484375 [DEBUG]{InterpretGoal} Interpreted formula for goal 'run2'vc': @@ -256,19 +256,19 @@ Test verify on acasxu vector, 5 [DEBUG]{ProverSpec} Prover-tailored specification: - 0.0 <= x3 - x3 <= 60760.0 - -3.141592653589793115997963468544185161590576171875 <= x4 - x4 <= 3.141592653589793115997963468544185161590576171875 - -3.141592653589793115997963468544185161590576171875 <= x5 - x5 <= 3.141592653589793115997963468544185161590576171875 - 100.0 <= x6 - x6 <= 1200.0 - 0.0 <= x7 - x7 <= 1200.0 - 55947.6909999999988940544426441192626953125 <= x3 - 1145.0 <= x6 - x7 <= 60.0 + 0.0 <= x1 + x1 <= 60760.0 + -3.141592653589793115997963468544185161590576171875 <= x2 + x2 <= 3.141592653589793115997963468544185161590576171875 + -3.141592653589793115997963468544185161590576171875 <= x3 + x3 <= 3.141592653589793115997963468544185161590576171875 + 100.0 <= x4 + x4 <= 1200.0 + 0.0 <= x5 + x5 <= 1200.0 + 55947.6909999999988940544426441192626953125 <= x1 + 1145.0 <= x4 + x5 <= 60.0 y0 <= y1 and y2 <= y3 [DEBUG]{InterpretGoal} Interpreted formula for goal 'run3'vc': @@ -330,21 +330,21 @@ Test verify on acasxu vector, 5 [DEBUG]{ProverSpec} Prover-tailored specification: - 0.0 <= x3 - x3 <= 60760.0 - -3.141592653589793115997963468544185161590576171875 <= x4 - x4 <= 3.141592653589793115997963468544185161590576171875 - -3.141592653589793115997963468544185161590576171875 <= x5 - x5 <= 3.141592653589793115997963468544185161590576171875 - 100.0 <= x6 - x6 <= 1200.0 - 0.0 <= x7 - x7 <= 1200.0 - 55947.6909999999988940544426441192626953125 <= x3 - 1145.0 <= x6 - x7 <= 60.0 - -1.0 <= x8 - x8 <= 1.0 + 0.0 <= x1 + x1 <= 60760.0 + -3.141592653589793115997963468544185161590576171875 <= x2 + x2 <= 3.141592653589793115997963468544185161590576171875 + -3.141592653589793115997963468544185161590576171875 <= x3 + x3 <= 3.141592653589793115997963468544185161590576171875 + 100.0 <= x4 + x4 <= 1200.0 + 0.0 <= x5 + x5 <= 1200.0 + 55947.6909999999988940544426441192626953125 <= x1 + 1145.0 <= x4 + x5 <= 60.0 + -1.0 <= x6 + x6 <= 1.0 y0 <= y1 and y2 <= y3 [DEBUG]{InterpretGoal} Interpreted formula for goal 'test'vc': @@ -381,19 +381,19 @@ Test verify on acasxu vector, 5 [DEBUG]{ProverSpec} Prover-tailored specification: - 0.0 <= x3 - x3 <= 60760.0 - -3.141592653589793115997963468544185161590576171875 <= x4 - x4 <= 3.141592653589793115997963468544185161590576171875 - -3.141592653589793115997963468544185161590576171875 <= x5 - x5 <= 3.141592653589793115997963468544185161590576171875 - 100.0 <= x6 - x6 <= 1200.0 - 0.0 <= x7 - x7 <= 1200.0 - 55947.6909999999988940544426441192626953125 <= x3 - 1145.0 <= x6 - x7 <= 60.0 + 0.0 <= x1 + x1 <= 60760.0 + -3.141592653589793115997963468544185161590576171875 <= x2 + x2 <= 3.141592653589793115997963468544185161590576171875 + -3.141592653589793115997963468544185161590576171875 <= x3 + x3 <= 3.141592653589793115997963468544185161590576171875 + 100.0 <= x4 + x4 <= 1200.0 + 0.0 <= x5 + x5 <= 1200.0 + 55947.6909999999988940544426441192626953125 <= x1 + 1145.0 <= x4 + x5 <= 60.0 y0 <= 3.991125645861615112153231166303157806396484375 [DEBUG]{InterpretGoal} Interpreted formula for goal 'P3': @@ -504,28 +504,22 @@ Test verify on acasxu ;; X_5 (declare-const X_5 Real) - ;; X_6 - (declare-const X_6 Real) - - ;; X_7 - (declare-const X_7 Real) - ;; Requires - (assert (>= X_3 0.0)) - (assert (<= X_3 60760.0)) - (assert (>= X_4 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_4 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_5 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_5 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_6 100.0)) - (assert (<= X_6 1200.0)) - (assert (>= X_7 0.0)) - (assert (<= X_7 1200.0)) + (assert (>= X_1 0.0)) + (assert (<= X_1 60760.0)) + (assert (>= X_2 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_2 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_3 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_3 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_4 100.0)) + (assert (<= X_4 1200.0)) + (assert (>= X_5 0.0)) + (assert (<= X_5 1200.0)) ;; Requires - (assert (>= X_3 55947.6909999999988940544426441192626953125)) - (assert (>= X_6 1145.0)) - (assert (<= X_7 60.0)) + (assert (>= X_1 55947.6909999999988940544426441192626953125)) + (assert (>= X_4 1145.0)) + (assert (<= X_5 60.0)) ;; Y_0 (declare-const Y_0 Real) @@ -554,28 +548,22 @@ Test verify on acasxu ;; X_5 (declare-const X_5 Real) - ;; X_6 - (declare-const X_6 Real) - - ;; X_7 - (declare-const X_7 Real) - ;; Requires - (assert (>= X_3 0.0)) - (assert (<= X_3 60760.0)) - (assert (>= X_4 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_4 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_5 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_5 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_6 100.0)) - (assert (<= X_6 1200.0)) - (assert (>= X_7 0.0)) - (assert (<= X_7 1200.0)) + (assert (>= X_1 0.0)) + (assert (<= X_1 60760.0)) + (assert (>= X_2 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_2 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_3 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_3 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_4 100.0)) + (assert (<= X_4 1200.0)) + (assert (>= X_5 0.0)) + (assert (<= X_5 1200.0)) ;; Requires - (assert (>= X_3 55947.6909999999988940544426441192626953125)) - (assert (>= X_6 1145.0)) - (assert (<= X_7 60.0)) + (assert (>= X_1 55947.6909999999988940544426441192626953125)) + (assert (>= X_4 1145.0)) + (assert (<= X_5 60.0)) ;; Y_3 (declare-const Y_3 Real) @@ -618,34 +606,28 @@ Test verify on acasxu ;; X_6 (declare-const X_6 Real) - ;; X_7 - (declare-const X_7 Real) - - ;; X_8 - (declare-const X_8 Real) - ;; Requires - (assert (>= X_3 0.0)) - (assert (<= X_3 60760.0)) - (assert (>= X_4 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_4 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_5 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_5 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_6 100.0)) - (assert (<= X_6 1200.0)) - (assert (>= X_7 0.0)) - (assert (<= X_7 1200.0)) + (assert (>= X_1 0.0)) + (assert (<= X_1 60760.0)) + (assert (>= X_2 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_2 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_3 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_3 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_4 100.0)) + (assert (<= X_4 1200.0)) + (assert (>= X_5 0.0)) + (assert (<= X_5 1200.0)) ;; Requires - (assert (>= X_3 55947.6909999999988940544426441192626953125)) - (assert (>= X_6 1145.0)) - (assert (<= X_7 60.0)) + (assert (>= X_1 55947.6909999999988940544426441192626953125)) + (assert (>= X_4 1145.0)) + (assert (<= X_5 60.0)) ;; H - (assert (>= X_8 -1.0)) + (assert (>= X_6 -1.0)) ;; H - (assert (<= X_8 1.0)) + (assert (<= X_6 1.0)) ;; Y_3 (declare-const Y_3 Real) @@ -685,28 +667,22 @@ Test verify on acasxu ;; X_5 (declare-const X_5 Real) - ;; X_6 - (declare-const X_6 Real) - - ;; X_7 - (declare-const X_7 Real) - ;; Requires - (assert (>= X_3 0.0)) - (assert (<= X_3 60760.0)) - (assert (>= X_4 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_4 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_5 -3.141592653589793115997963468544185161590576171875)) - (assert (<= X_5 3.141592653589793115997963468544185161590576171875)) - (assert (>= X_6 100.0)) - (assert (<= X_6 1200.0)) - (assert (>= X_7 0.0)) - (assert (<= X_7 1200.0)) + (assert (>= X_1 0.0)) + (assert (<= X_1 60760.0)) + (assert (>= X_2 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_2 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_3 -3.141592653589793115997963468544185161590576171875)) + (assert (<= X_3 3.141592653589793115997963468544185161590576171875)) + (assert (>= X_4 100.0)) + (assert (<= X_4 1200.0)) + (assert (>= X_5 0.0)) + (assert (<= X_5 1200.0)) ;; Requires - (assert (>= X_3 55947.6909999999988940544426441192626953125)) - (assert (>= X_6 1145.0)) - (assert (<= X_7 60.0)) + (assert (>= X_1 55947.6909999999988940544426441192626953125)) + (assert (>= X_4 1145.0)) + (assert (<= X_5 60.0)) ;; Y_0 (declare-const Y_0 Real) @@ -812,103 +788,103 @@ Test verify on acasxu $ caisar verify --prover Marabou --ltag=ProverSpec file.mlw [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 y0 >= 3.991125645861615112153231166303157806396484375 [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 +y0 -y1 >= 0 [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 +y2 -y3 >= 0 [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 - x8 >= -1.0 - x8 <= 1.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 + x6 >= -1.0 + x6 <= 1.0 +y0 -y1 >= 0 [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 - x8 >= -1.0 - x8 <= 1.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 + x6 >= -1.0 + x6 <= 1.0 +y2 -y3 >= 0 [DEBUG]{ProverSpec} Prover-tailored specification: - x3 >= 0.0 - x3 <= 60760.0 - x4 >= -3.141592653589793115997963468544185161590576171875 - x4 <= 3.141592653589793115997963468544185161590576171875 - x5 >= -3.141592653589793115997963468544185161590576171875 - x5 <= 3.141592653589793115997963468544185161590576171875 - x6 >= 100.0 - x6 <= 1200.0 - x7 >= 0.0 - x7 <= 1200.0 - x3 >= 55947.6909999999988940544426441192626953125 - x6 >= 1145.0 - x7 <= 60.0 + x1 >= 0.0 + x1 <= 60760.0 + x2 >= -3.141592653589793115997963468544185161590576171875 + x2 <= 3.141592653589793115997963468544185161590576171875 + x3 >= -3.141592653589793115997963468544185161590576171875 + x3 <= 3.141592653589793115997963468544185161590576171875 + x4 >= 100.0 + x4 <= 1200.0 + x5 >= 0.0 + x5 <= 1200.0 + x1 >= 55947.6909999999988940544426441192626953125 + x4 >= 1145.0 + x5 <= 60.0 y0 >= 3.991125645861615112153231166303157806396484375 [DEBUG]{ProverSpec} Prover-tailored specification: -- GitLab