diff --git a/src/plugins/wp/Why3Import.ml b/src/plugins/wp/Why3Import.ml index fae7052ebcc7de1f8d7e03e834b3710f384a798a..60cae1c55b39d7ce5f1b8cd5bfae02f25729b435 100644 --- a/src/plugins/wp/Why3Import.ml +++ b/src/plugins/wp/Why3Import.ml @@ -110,6 +110,20 @@ type tvars = C.logic_type W.Ty.Mtv.t type genv = W.Env.env * tenv * lenv +module LogicMap = Map.Make(struct + type t = C.logic_info + let compare = compare (* Use the default comparison function for type A *) + end) + +module TypeMap = Map.Make(struct + type t = C.logic_type + let compare = compare (* Use the default comparison function for type A *) + end) + + +type _reverse_logic_info = W.Term.lsymbol LogicMap.t +type _reverse_logic_type = W.Ty.tysymbol TypeMap.t + (* -------------------------------------------------------------------------- *) (* --- Built-in --- *) (* -------------------------------------------------------------------------- *) @@ -117,8 +131,7 @@ type genv = W.Env.env * tenv * lenv let add_builtin (tenv : tenv) ts lt_name lt_params = W.Ty.Hts.add tenv ts C.{lt_name ; lt_params; lt_def=None; lt_attr=[] } - -let find_ts wenv pkg thy name = +let find_ts ((wenv,_,_) : genv) pkg thy name = let th = Why3.Env.read_theory wenv pkg thy in try Why3.Theory.ns_find_ts th.th_export name @@ -126,15 +139,21 @@ let find_ts wenv pkg thy name = L.fatal "Cannot find %s.%s.%s" (String.concat "." pkg ) thy (String.concat "." name) -let add_builtins (wenv : W.Env.env) (tenv:tenv) = +let add_builtins ((wenv,tenv,lenv) : genv) = begin - let ts_list = find_ts wenv ["list"] "List" ["list"] in - let ts_set = find_ts wenv ["set"] "Set" ["set"] in + let ts_list = find_ts (wenv,tenv,lenv) ["list"] "List" ["list"] in + let ts_set = find_ts (wenv,tenv,lenv) ["set"] "Set" ["set"] in add_builtin tenv W.Ty.ts_bool Utf8_logic.boolean []; add_builtin tenv ts_list "\\list" ["A"]; add_builtin tenv ts_set "set" ["A"]; end +(* -------------------------------------------------------------------------- *) +(* --- Reverse tables --- *) +(* -------------------------------------------------------------------------- *) + + + (* -------------------------------------------------------------------------- *) (* --- Type conversion --- *) (* -------------------------------------------------------------------------- *) @@ -268,7 +287,8 @@ let () = let wenv = create_why3_env @@ libs in let tenv : tenv = W.Ty.Hts.create 0 in let lenv : lenv = W.Term.Hls.create 0 in - add_builtins wenv tenv; + let genv : genv = (wenv , tenv , lenv) in + add_builtins genv; List.iter (import_theory wenv tenv lenv) @@ imports; W.Ty.Hts.iter (fun (tys) (lti) -> L.result "Why3 type symbol : %a" pp_tys tys;