# HG changeset patch # User wenzelm # Date 1633104319 -7200 # Node ID 1aa05eee4e8b8e93d7c8ddde0a729314db31add3 # Parent 269a39b6c5f8c426b2f9d9077733ddad6dfa89cf clarified antiquotations; diff -r 269a39b6c5f8 -r 1aa05eee4e8b src/HOL/SMT_Examples/boogie.ML --- a/src/HOL/SMT_Examples/boogie.ML Fri Oct 01 12:45:47 2021 +0200 +++ b/src/HOL/SMT_Examples/boogie.ML Fri Oct 01 18:05:19 2021 +0200 @@ -68,15 +68,15 @@ fun mk_var name T = Free ("V_" ^ isabelle_name name, T) -fun mk_arrayT (Ts, T) = Type (\<^type_name>\fun\, [HOLogic.mk_tupleT Ts, T]) +fun mk_arrayT (Ts, T) = \<^Type>\fun \HOLogic.mk_tupleT Ts\ T\ fun mk_binary t (t1, t2) = t $ t1 $ t2 fun mk_nary _ t [] = t | mk_nary f _ ts = uncurry (fold_rev f) (split_last ts) -fun mk_distinct [] = \<^const>\HOL.True\ - | mk_distinct [_] = \<^const>\HOL.True\ +fun mk_distinct [] = \<^Const>\True\ + | mk_distinct [_] = \<^Const>\True\ | mk_distinct (t :: ts) = let fun mk_noteq u u' = @@ -85,24 +85,23 @@ fun mk_store m k v = let - val mT = Term.fastype_of m and kT = Term.fastype_of k + val kT = Term.fastype_of k val vT = Term.fastype_of v - in Const (\<^const_name>\fun_upd\, mT --> kT --> vT --> mT) $ m $ k $ v end + in \<^Const>\fun_upd kT vT for m k v\ end fun mk_quant q (Free (x, T)) t = q T $ absfree (x, T) t | mk_quant _ t _ = raise TERM ("bad variable", [t]) -val patternT = \<^typ>\SMT.pattern\ +val patternT = \<^Type>\SMT.pattern\ -fun mk_pat t = - Const (\<^const_name>\SMT.pat\, Term.fastype_of t --> patternT) $ t +fun mk_pat t = \<^Const>\SMT.pat \Term.fastype_of t\ for t\ fun mk_pattern [] = raise TERM ("mk_pattern", []) | mk_pattern ts = SMT_Util.mk_symb_list patternT (map mk_pat ts) fun mk_trigger [] t = t | mk_trigger pss t = - \<^term>\SMT.trigger\ $ + \<^Const>\SMT.trigger\ $ SMT_Util.mk_symb_list \<^typ>\SMT.pattern SMT.symb_list\ (map mk_pattern pss) $ t @@ -112,36 +111,35 @@ let fun apply (xs, ls) = f ls |>> (fn x => x :: xs) in funpow (as_int n) apply ([], ls) |>> rev end -fun parse_type _ (["bool"] :: ls) = (\<^typ>\bool\, ls) - | parse_type _ (["int"] :: ls) = (\<^typ>\int\, ls) +fun parse_type _ (["bool"] :: ls) = (\<^Type>\bool\, ls) + | parse_type _ (["int"] :: ls) = (\<^Type>\int\, ls) | parse_type cx (["array", arity] :: ls) = repeat (parse_type cx) arity ls |>> mk_arrayT o split_last | parse_type cx (("type-con" :: name :: _) :: ls) = (lookup_type cx name, ls) | parse_type _ _ = error "Bad type" -fun parse_expr _ (["true"] :: ls) = (\<^term>\True\, ls) - | parse_expr _ (["false"] :: ls) = (\<^term>\False\, ls) +fun parse_expr _ (["true"] :: ls) = (\<^Const>\True\, ls) + | parse_expr _ (["false"] :: ls) = (\<^Const>\False\, ls) | parse_expr cx (["not"] :: ls) = parse_expr cx ls |>> HOLogic.mk_not - | parse_expr cx (["and", n] :: ls) = parse_nary_expr cx n HOLogic.mk_conj \<^term>\True\ ls - | parse_expr cx (["or", n] :: ls) = parse_nary_expr cx n HOLogic.mk_disj \<^term>\False\ ls - | parse_expr cx (["implies"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\HOL.implies\) ls + | parse_expr cx (["and", n] :: ls) = parse_nary_expr cx n HOLogic.mk_conj \<^Const>\True\ ls + | parse_expr cx (["or", n] :: ls) = parse_nary_expr cx n HOLogic.mk_disj \<^Const>\False\ ls + | parse_expr cx (["implies"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\implies\) ls | parse_expr cx (["="] :: ls) = parse_bin_expr cx HOLogic.mk_eq ls | parse_expr cx (["var", name] :: ls) = parse_type cx ls |>> mk_var name | parse_expr cx (["fun", name, n] :: ls) = let val (t, _) = lookup_func cx name in repeat (parse_expr cx) n ls |>> curry Term.list_comb t end | parse_expr cx (("label" :: _) :: ls) = parse_expr cx ls - | parse_expr _ (["int-num", n] :: ls) = (HOLogic.mk_number \<^typ>\int\ (as_int n), ls) - | parse_expr cx (["<"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(<) :: int => _\) ls - | parse_expr cx (["<="] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(<=) :: int => _\) ls - | parse_expr cx ([">"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(<) :: int => _\o swap) ls - | parse_expr cx ([">="] :: ls) = - parse_bin_expr cx (mk_binary \<^term>\(<=) :: int => _\ o swap) ls - | parse_expr cx (["+"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(+) :: int => _\) ls - | parse_expr cx (["-"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(-) :: int => _\) ls - | parse_expr cx (["*"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\(*) :: int => _\) ls - | parse_expr cx (["/"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\boogie_div\) ls - | parse_expr cx (["%"] :: ls) = parse_bin_expr cx (mk_binary \<^term>\boogie_mod\) ls + | parse_expr _ (["int-num", n] :: ls) = (HOLogic.mk_number \<^Type>\int\ (as_int n), ls) + | parse_expr cx (["<"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\less \<^Type>\int\\) ls + | parse_expr cx (["<="] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\less_eq \<^Type>\int\\) ls + | parse_expr cx ([">"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\less \<^Type>\int\\ o swap) ls + | parse_expr cx ([">="] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\less_eq \<^Type>\int\\ o swap) ls + | parse_expr cx (["+"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\plus \<^Type>\int\\) ls + | parse_expr cx (["-"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\minus \<^Type>\int\\) ls + | parse_expr cx (["*"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\times \<^Type>\int\\) ls + | parse_expr cx (["/"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\boogie_div\) ls + | parse_expr cx (["%"] :: ls) = parse_bin_expr cx (mk_binary \<^Const>\boogie_mod\) ls | parse_expr cx (["select", n] :: ls) = repeat (parse_expr cx) n ls |>> (fn ts => hd ts $ HOLogic.mk_tuple (tl ts))