aboutsummaryrefslogtreecommitdiffhomepage
path: root/contrib/dp/dp_why.ml
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/dp/dp_why.ml')
-rw-r--r--contrib/dp/dp_why.ml50
1 files changed, 32 insertions, 18 deletions
diff --git a/contrib/dp/dp_why.ml b/contrib/dp/dp_why.ml
index d6a5e145c..662a5a8be 100644
--- a/contrib/dp/dp_why.ml
+++ b/contrib/dp/dp_why.ml
@@ -12,16 +12,28 @@ let rec print_list sep print fmt = function
let space fmt () = fprintf fmt "@ "
let comma fmt () = fprintf fmt ",@ "
-let is_why_keyword s = false (* TODO *)
+let is_why_keyword =
+ let h = Hashtbl.create 17 in
+ List.iter
+ (fun s -> Hashtbl.add h s ())
+ ["absurd"; "and"; "array"; "as"; "assert"; "axiom"; "begin";
+ "bool"; "do"; "done"; "else"; "end"; "exception"; "exists";
+ "external"; "false"; "for"; "forall"; "fun"; "function"; "goal";
+ "if"; "in"; "int"; "invariant"; "label"; "let"; "logic"; "not";
+ "of"; "or"; "parameter"; "predicate"; "prop"; "raise"; "raises";
+ "reads"; "real"; "rec"; "ref"; "returns"; "then"; "true"; "try";
+ "type"; "unit"; "variant"; "void"; "while"; "with"; "writes" ];
+ Hashtbl.mem h
let ident fmt s =
- if is_why_keyword s then fprintf fmt "why__%s" s else fprintf fmt "%s" s
+ if is_why_keyword s then fprintf fmt "coq__%s" s else fprintf fmt "%s" s
let rec print_typ fmt = function
- | Tvar x -> fprintf fmt "'%s" x
- | Tid (x, []) -> fprintf fmt "%s" x
- | Tid (x, [t]) -> fprintf fmt "%a %s" print_typ t x
- | Tid (x, tl) -> fprintf fmt "(%a) %s" (print_list comma print_typ) tl x
+ | Tvar x -> fprintf fmt "'%a" ident x
+ | Tid ("int", []) -> fprintf fmt "int"
+ | Tid (x, []) -> fprintf fmt "%a" ident x
+ | Tid (x, [t]) -> fprintf fmt "%a %a" print_typ t ident x
+ | Tid (x,tl) -> fprintf fmt "(%a) %a" (print_list comma print_typ) tl ident x
let rec print_term fmt = function
| Cst n ->
@@ -79,40 +91,42 @@ let rec print_predicate fmt p =
let print_query fmt (decls,concl) =
let print_dtype = function
| DeclType (id, 0) ->
- fprintf fmt "@[type %s@]@\n@\n" id
+ fprintf fmt "@[type %a@]@\n@\n" ident id
| DeclType (id, 1) ->
- fprintf fmt "@[type 'a %s@]@\n@\n" id
+ fprintf fmt "@[type 'a %a@]@\n@\n" ident id
| DeclType (id, n) ->
fprintf fmt "@[type (";
- for i = 1 to n do fprintf fmt "'a%d" i done;
- fprintf fmt ") %s@]@\n@\n" id
+ for i = 1 to n do
+ fprintf fmt "'a%d" i; if i < n then fprintf fmt ", "
+ done;
+ fprintf fmt ") %a@]@\n@\n" ident id
| DeclFun _ | DeclPred _ | Axiom _ ->
()
in
let print_dvar_dpred = function
| DeclFun (id, _, [], t) ->
- fprintf fmt "@[logic %s : -> %a@]@\n@\n" id print_typ t
+ fprintf fmt "@[logic %a : -> %a@]@\n@\n" ident id print_typ t
| DeclFun (id, _, l, t) ->
- fprintf fmt "@[logic %s : %a -> %a@]@\n@\n"
- id (print_list comma print_typ) l print_typ t
+ fprintf fmt "@[logic %a : %a -> %a@]@\n@\n"
+ ident id (print_list comma print_typ) l print_typ t
| DeclPred (id, _, []) ->
- fprintf fmt "@[logic %s : -> prop @]@\n@\n" id
+ fprintf fmt "@[logic %a : -> prop @]@\n@\n" ident id
| DeclPred (id, _, l) ->
- fprintf fmt "@[logic %s : %a -> prop@]@\n@\n"
- id (print_list comma print_typ) l
+ fprintf fmt "@[logic %a : %a -> prop@]@\n@\n"
+ ident id (print_list comma print_typ) l
| DeclType _ | Axiom _ ->
()
in
let print_assert = function
| Axiom (id, f) ->
- fprintf fmt "@[<hov 2>axiom %s:@ %a@]@\n@\n" id print_predicate f
+ fprintf fmt "@[<hov 2>axiom %a:@ %a@]@\n@\n" ident id print_predicate f
| DeclType _ | DeclFun _ | DeclPred _ ->
()
in
List.iter print_dtype decls;
List.iter print_dvar_dpred decls;
List.iter print_assert decls;
- fprintf fmt "@[<hov 2>goal coq__goal: %a@]" print_predicate concl
+ fprintf fmt "@[<hov 2>goal coq___goal: %a@]" print_predicate concl
let output_file f q =
let c = open_out f in