| author | wenzelm | 
| Mon, 22 Nov 2021 15:03:37 +0100 | |
| changeset 74828 | 46c7fafbea3d | 
| parent 69593 | 3dda49e08b9d | 
| child 78177 | ea7a3cc64df5 | 
| permissions | -rw-r--r-- | 
| 58061 | 1  | 
(* Title: HOL/Tools/SMT/z3_real.ML  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
2  | 
Author: Sascha Boehme, TU Muenchen  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
4  | 
Z3 setup for reals.  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
5  | 
*)  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
6  | 
|
| 58061 | 7  | 
structure Z3_Real: sig end =  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
8  | 
struct  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
9  | 
|
| 69593 | 10  | 
fun real_type_parser (SMTLIB.Sym "Real", []) = SOME \<^typ>\<open>Real.real\<close>  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
11  | 
| real_type_parser _ = NONE  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
12  | 
|
| 69593 | 13  | 
fun real_term_parser (SMTLIB.Dec (i, 0), []) = SOME (HOLogic.mk_number \<^typ>\<open>Real.real\<close> i)  | 
| 58061 | 14  | 
| real_term_parser (SMTLIB.Sym "/", [t1, t2]) =  | 
| 69593 | 15  | 
SOME (\<^term>\<open>Rings.divide :: real => _\<close> $ t1 $ t2)  | 
16  | 
| real_term_parser (SMTLIB.Sym "to_real", [t]) = SOME (\<^term>\<open>Int.of_int :: int => _\<close> $ t)  | 
|
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
17  | 
| real_term_parser _ = NONE  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
18  | 
|
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
19  | 
fun abstract abs t =  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
20  | 
(case t of  | 
| 69593 | 21  | 
(c as \<^term>\<open>Rings.divide :: real => _\<close>) $ t1 $ t2 =>  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
22  | 
abs t1 ##>> abs t2 #>> (fn (u1, u2) => SOME (c $ u1 $ u2))  | 
| 69593 | 23  | 
| (c as \<^term>\<open>Int.of_int :: int => _\<close>) $ t =>  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
24  | 
abs t #>> (fn u => SOME (c $ u))  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
25  | 
| _ => pair NONE)  | 
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
26  | 
|
| 
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
27  | 
val _ = Theory.setup (Context.theory_map (  | 
| 58061 | 28  | 
SMTLIB_Proof.add_type_parser real_type_parser #>  | 
29  | 
SMTLIB_Proof.add_term_parser real_term_parser #>  | 
|
| 
69204
 
d5ab1636660b
split SMT reconstruction into library
 
fleury <Mathias.Fleury@mpi-inf.mpg.de> 
parents: 
61609 
diff
changeset
 | 
30  | 
SMT_Replay_Methods.add_arith_abstracter abstract))  | 
| 
56078
 
624faeda77b5
moved 'SMT2' (SMT-LIB-2-based SMT module) into Isabelle
 
blanchet 
parents:  
diff
changeset
 | 
31  | 
|
| 57229 | 32  | 
end;  |