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) |