src/HOL/Tools/SMT/smt_real.ML
changeset 40579 98ebd2300823
parent 40516 516a367eb38c
child 41059 d2b1fc1b8e19
equal deleted inserted replaced
40578:2b098a549450 40579:98ebd2300823
    61 
    61 
    62 
    62 
    63 (* Z3 builtins *)
    63 (* Z3 builtins *)
    64 
    64 
    65 local
    65 local
    66   fun z3_builtin_fun @{term "op / :: real => _"} ts = SOME ("/", ts)
    66   fun z3_builtin_fun @{const divide (real)} ts = SOME ("/", ts)
    67     | z3_builtin_fun _ _ = NONE
    67     | z3_builtin_fun _ _ = NONE
    68 in
    68 in
    69 
    69 
    70 val z3_builtins = (fn c => fn ts => z3_builtin_fun (Const c) ts)
    70 val z3_builtins = (fn c => fn ts => z3_builtin_fun (Const c) ts)
    71 
    71 
    84 
    84 
    85   fun z3_mk_builtin_num _ i T =
    85   fun z3_mk_builtin_num _ i T =
    86     if T = @{typ real} then SOME (Numeral.mk_cnumber @{ctyp real} i)
    86     if T = @{typ real} then SOME (Numeral.mk_cnumber @{ctyp real} i)
    87     else NONE
    87     else NONE
    88 
    88 
    89   val mk_uminus = Thm.capply @{cterm "uminus :: real => _"}
    89   val mk_uminus = Thm.capply (Thm.cterm_of @{theory} @{const uminus (real)})
    90   val mk_add = Thm.mk_binop @{cterm "op + :: real => _"}
    90   val mk_add = Thm.mk_binop (Thm.cterm_of @{theory} @{const plus (real)})
    91   val mk_sub = Thm.mk_binop @{cterm "op - :: real => _"}
    91   val mk_sub = Thm.mk_binop (Thm.cterm_of @{theory} @{const minus (real)})
    92   val mk_mul = Thm.mk_binop @{cterm "op * :: real => _"}
    92   val mk_mul = Thm.mk_binop (Thm.cterm_of @{theory} @{const times (real)})
    93   val mk_div = Thm.mk_binop @{cterm "op / :: real => _"}
    93   val mk_div = Thm.mk_binop (Thm.cterm_of @{theory} @{const divide (real)})
    94   val mk_lt = Thm.mk_binop @{cterm "op < :: real => _"}
    94   val mk_lt = Thm.mk_binop (Thm.cterm_of @{theory} @{const less (real)})
    95   val mk_le = Thm.mk_binop @{cterm "op <= :: real => _"}
    95   val mk_le = Thm.mk_binop (Thm.cterm_of @{theory} @{const less_eq (real)})
    96 
    96 
    97   fun z3_mk_builtin_fun (I.Sym ("-", _)) [ct] = SOME (mk_uminus ct)
    97   fun z3_mk_builtin_fun (I.Sym ("-", _)) [ct] = SOME (mk_uminus ct)
    98     | z3_mk_builtin_fun (I.Sym ("+", _)) [ct, cu] = SOME (mk_add ct cu)
    98     | z3_mk_builtin_fun (I.Sym ("+", _)) [ct, cu] = SOME (mk_add ct cu)
    99     | z3_mk_builtin_fun (I.Sym ("-", _)) [ct, cu] = SOME (mk_sub ct cu)
    99     | z3_mk_builtin_fun (I.Sym ("-", _)) [ct, cu] = SOME (mk_sub ct cu)
   100     | z3_mk_builtin_fun (I.Sym ("*", _)) [ct, cu] = SOME (mk_mul ct cu)
   100     | z3_mk_builtin_fun (I.Sym ("*", _)) [ct, cu] = SOME (mk_mul ct cu)