src/HOL/Tools/SMT/z3_interface.ML
changeset 47965 8ba6438557bc
parent 46497 89ccf66aa73d
child 49720 6279490e0438
equal deleted inserted replaced
47964:b74655182ed6 47965:8ba6438557bc
   182   in
   182   in
   183     Thm.apply (Thm.mk_binop (SMT_Utils.instTs cTs update) array index) value
   183     Thm.apply (Thm.mk_binop (SMT_Utils.instTs cTs update) array index) value
   184   end
   184   end
   185 
   185 
   186 val mk_uminus = Thm.apply (Thm.cterm_of @{theory} @{const uminus (int)})
   186 val mk_uminus = Thm.apply (Thm.cterm_of @{theory} @{const uminus (int)})
   187 val mk_add = Thm.mk_binop (Thm.cterm_of @{theory} @{const plus (int)})
   187 val add = Thm.cterm_of @{theory} @{const plus (int)}
       
   188 val int0 = Numeral.mk_cnumber @{ctyp int} 0
   188 val mk_sub = Thm.mk_binop (Thm.cterm_of @{theory} @{const minus (int)})
   189 val mk_sub = Thm.mk_binop (Thm.cterm_of @{theory} @{const minus (int)})
   189 val mk_mul = Thm.mk_binop (Thm.cterm_of @{theory} @{const times (int)})
   190 val mk_mul = Thm.mk_binop (Thm.cterm_of @{theory} @{const times (int)})
   190 val mk_div = Thm.mk_binop (Thm.cterm_of @{theory} @{const z3div})
   191 val mk_div = Thm.mk_binop (Thm.cterm_of @{theory} @{const z3div})
   191 val mk_mod = Thm.mk_binop (Thm.cterm_of @{theory} @{const z3mod})
   192 val mk_mod = Thm.mk_binop (Thm.cterm_of @{theory} @{const z3mod})
   192 val mk_lt = Thm.mk_binop (Thm.cterm_of @{theory} @{const less (int)})
   193 val mk_lt = Thm.mk_binop (Thm.cterm_of @{theory} @{const less (int)})
   209   | (Sym ("distinct", _), _) => SOME (mk_distinct cts)
   210   | (Sym ("distinct", _), _) => SOME (mk_distinct cts)
   210   | (Sym ("select", _), [ca, ck]) => SOME (Thm.apply (mk_access ca) ck)
   211   | (Sym ("select", _), [ca, ck]) => SOME (Thm.apply (mk_access ca) ck)
   211   | (Sym ("store", _), [ca, ck, cv]) => SOME (mk_update ca ck cv)
   212   | (Sym ("store", _), [ca, ck, cv]) => SOME (mk_update ca ck cv)
   212   | _ =>
   213   | _ =>
   213     (case (sym, try (#T o Thm.rep_cterm o hd) cts, cts) of
   214     (case (sym, try (#T o Thm.rep_cterm o hd) cts, cts) of
   214       (Sym ("+", _), SOME @{typ int}, [ct, cu]) => SOME (mk_add ct cu)
   215       (Sym ("+", _), SOME @{typ int}, _) => SOME (mk_nary add int0 cts)
   215     | (Sym ("-", _), SOME @{typ int}, [ct]) => SOME (mk_uminus ct)
   216     | (Sym ("-", _), SOME @{typ int}, [ct]) => SOME (mk_uminus ct)
   216     | (Sym ("-", _), SOME @{typ int}, [ct, cu]) => SOME (mk_sub ct cu)
   217     | (Sym ("-", _), SOME @{typ int}, [ct, cu]) => SOME (mk_sub ct cu)
   217     | (Sym ("*", _), SOME @{typ int}, [ct, cu]) => SOME (mk_mul ct cu)
   218     | (Sym ("*", _), SOME @{typ int}, [ct, cu]) => SOME (mk_mul ct cu)
   218     | (Sym ("div", _), SOME @{typ int}, [ct, cu]) => SOME (mk_div ct cu)
   219     | (Sym ("div", _), SOME @{typ int}, [ct, cu]) => SOME (mk_div ct cu)
   219     | (Sym ("mod", _), SOME @{typ int}, [ct, cu]) => SOME (mk_mod ct cu)
   220     | (Sym ("mod", _), SOME @{typ int}, [ct, cu]) => SOME (mk_mod ct cu)