From 90cb7626f12fe1cf3f18ebcf5a9b90b195b0865c Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 5 Jan 2022 13:36:50 +0100 Subject: [PATCH] [qed] Removes native:alt-ergo --- src/plugins/qed/Makefile | 4 +- src/plugins/qed/export_altergo.ml | 374 ----------------------------- src/plugins/qed/export_altergo.mli | 74 ------ 3 files changed, 1 insertion(+), 451 deletions(-) delete mode 100644 src/plugins/qed/export_altergo.ml delete mode 100644 src/plugins/qed/export_altergo.mli diff --git a/src/plugins/qed/Makefile b/src/plugins/qed/Makefile index fb2350efe6e..95628832002 100644 --- a/src/plugins/qed/Makefile +++ b/src/plugins/qed/Makefile @@ -54,7 +54,6 @@ PLUGIN_CMO:= \ pool kind term \ plib pretty export \ export_whycore \ - export_altergo \ export_why3 \ export_coq \ @@ -67,7 +66,7 @@ PLUGIN_OFLAGS:= PLUGIN_GENERATED:= $(PLUGIN_DIR)/Qed.mli PLUGIN_DISTRIBUTED:=$(PLUGIN_ENABLED) -PLUGIN_DISTRIB_EXTERNAL:= Makefile +PLUGIN_DISTRIB_EXTERNAL:= Makefile include $(FRAMAC_SHARE)/Makefile.dynamic @@ -87,7 +86,6 @@ QED_API= \ pool.mli kind.mli term.mli \ plib.mli pretty.mli engine.mli export.mli \ export_whycore.mli \ - export_altergo.mli \ export_why3.mli \ export_coq.mli \ diff --git a/src/plugins/qed/export_altergo.ml b/src/plugins/qed/export_altergo.ml deleted file mode 100644 index d779b1f827c..00000000000 --- a/src/plugins/qed/export_altergo.ml +++ /dev/null @@ -1,374 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of WP plug-in of Frama-C. *) -(* *) -(* Copyright (C) 2007-2021 *) -(* CEA (Commissariat a l'energie atomique et aux energies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -(* -------------------------------------------------------------------------- *) -(* --- Exportation Engine for Alt-Ergo --- *) -(* -------------------------------------------------------------------------- *) - -open Logic -open Format -open Plib -open Engine -open Export - -module Make(T : Term) = -struct - - open T - module E = Export_whycore.Make(T) - module Env = E.Env - module ADT = T.ADT - module Field = T.Field - module Fun = T.Fun - - type trigger = (T.var,Fun.t) ftrigger - type typedef = (tau,Field.t,Fun.t) Engine.ftypedef - - class virtual engine = - object(self) - - inherit E.engine - - (* -------------------------------------------------------------------------- *) - (* --- Types --- *) - (* -------------------------------------------------------------------------- *) - - method t_atomic (_:tau) = true - - method pp_array fmt data = - fprintf fmt "%a farray" self#pp_tau data - - method pp_farray fmt key data = - fprintf fmt "(%a,%a) farray" self#pp_tau key self#pp_tau data - - method virtual get_typedef : ADT.t -> tau option - method virtual set_typedef : ADT.t -> tau -> unit - - method pp_datatype adt fmt ts = - match self#get_typedef adt with - | Some def -> - let t = Kind.tmap (Array.of_list ts) def in - self#pp_tau fmt t - | None -> - match ts with - | [] -> pp_print_string fmt (self#datatype adt) - | [t] -> fprintf fmt "%a@ %s" self#pp_tau t (self#datatype adt) - | t::ts -> - fprintf fmt "@[<hov 2>(%a" self#pp_tau t ; - List.iter (fun t -> fprintf fmt ",@,%a" self#pp_tau t) ts ; - fprintf fmt ")@ %s@]" (self#datatype adt) - - (* -------------------------------------------------------------------------- *) - (* --- Primitives --- *) - (* -------------------------------------------------------------------------- *) - - method callstyle = CallVar - - method pp_array_cst fmt (key : tau) v = - try - let elt = T.typeof v in - let tau = Array(key,elt) in - fprintf fmt "@[<hov 2>(const(%a)@ : %a)@]" - self#pp_flow v self#pp_tau tau - with Not_found -> - fprintf fmt "const(%a)" self#pp_flow v - - (* -------------------------------------------------------------------------- *) - (* --- Arithmetics --- *) - (* -------------------------------------------------------------------------- *) - - method pp_int amode fmt z = match amode with - | Aint -> pp_print_string fmt (Z.to_string z) - | Areal -> fprintf fmt "%s.0" (Z.to_string z) - - method pp_real fmt r = - if Z.equal r.Q.den Z.one then - self#pp_int Areal fmt r.Q.num - else - fprintf fmt "(%a@ / %a)" - (self#pp_int Areal) r.Q.num - (self#pp_int Areal) r.Q.den - - method op_real_of_int = Call "real_of_int" - - method op_minus (_:amode) = Op "-" - method op_add (_:amode) = Assoc "+" - method op_sub (_:amode) = Assoc "-" - method op_mul (_:amode) = Assoc "*" - method op_div = function Aint -> Call "div" | Areal -> Op "/" - method op_mod = function Aint -> Call "mod" | Areal -> Call "rmod" - - method op_eq cmode _amode = - match cmode with - | Cprop -> Op "=" - | Cterm -> Call "eqb" - - method op_neq cmode _amode = - match cmode with - | Cprop -> Op "<>" - | Cterm -> Call "neqb" - - method op_lt cmode amode = - match cmode , amode with - | Cprop , _ -> Op "<" - | Cterm , Aint -> Call "zlt" - | Cterm , Areal -> Call "rlt" - - method op_leq cmode amode = - match cmode , amode with - | Cprop , _ -> Op "<=" - | Cterm , Aint -> Call "zleq" - | Cterm , Areal -> Call "rleq" - - (* -------------------------------------------------------------------------- *) - (* --- Logical Connectives --- *) - (* -------------------------------------------------------------------------- *) - - method e_true _ = "true" - method e_false _ = "false" - - method op_not = function Cprop -> Op "not" | Cterm -> Call "notb" - method op_and = function Cprop -> Assoc "and" | Cterm -> Call "andb" - method op_or = function Cprop -> Assoc "or" | Cterm -> Call "orb" - method op_imply = function Cprop -> Assoc "->" | Cterm -> Call "implb" - method op_equiv = function Cprop -> Op "<->" | Cterm -> Call "eqb" - - method op_equal = function Cprop -> Op "=" | Cterm -> Call "eqb" - method op_noteq = function Cprop -> Op "<>" | Cterm -> Call "neqb" - - (* -------------------------------------------------------------------------- *) - (* --- Conditional --- *) - (* -------------------------------------------------------------------------- *) - - method pp_conditional fmt a b c = - match Export.pmode self#mode with - | Negative -> - let cond = T.e_and [T.e_imply [a] b ; T.e_imply [T.e_not a] c] in - self#pp_flow fmt cond - | Positive -> - let cond = T.e_or [T.e_and [a;b] ; T.e_and [T.e_not a;c]] in - self#pp_flow fmt cond - | Boolean -> - begin - fprintf fmt "@[<hov 2>match_bool(" ; - self#with_mode Mterm (fun _ -> self#pp_atom fmt a) ; - fprintf fmt ",@ %a" self#pp_atom b ; - fprintf fmt ",@ %a" self#pp_atom c ; - fprintf fmt ")@]" ; - end - - (* -------------------------------------------------------------------------- *) - (* --- Records --- *) - (* -------------------------------------------------------------------------- *) - - method op_record = "{" , "}" - - (* -------------------------------------------------------------------------- *) - (* --- Atomicity --- *) - (* -------------------------------------------------------------------------- *) - - method op_spaced = is_identifier - method is_atomic e = - match T.repr e with - | Kint z -> Z.leq Z.zero z - | Kreal _ -> true - | Apply _ -> true - | Acst _ | Aset _ | Aget _ | Fun _ -> true - | _ -> T.is_simple e - - (* -------------------------------------------------------------------------- *) - (* --- Lets --- *) - (* -------------------------------------------------------------------------- *) - - method typeof e = T.typeof e - - val mutable quantify_let = false - method set_quantify_let e = quantify_let <- e - - method pp_let fmt pmode x e = - try - let tau = self#typeof e in - match pmode with - | Positive when quantify_let -> - fprintf fmt "@[<hov 4>forall %s : %a. %s = %a ->@]@ " - x self#pp_tau tau x self#pp_flow e - | Negative when quantify_let -> - fprintf fmt "@[<hov 4>exists %s : %a. %s = %a and@]@ " - x self#pp_tau tau x self#pp_flow e - | _ -> - fprintf fmt "@[<hov 4>let %s = %a : %a in@]@ " - x self#pp_atom e self#pp_tau tau - with Not_found -> - fprintf fmt "@[<hov 4>let %s = %a in@]@ " - x self#pp_flow e - - (* -------------------------------------------------------------------------- *) - (* --- Binders --- *) - (* -------------------------------------------------------------------------- *) - - method pp_forall tau fmt = function - | [] -> () - | x::xs -> - fprintf fmt "@[<hov 2>forall %a" self#pp_var x ; - List.iter (fun x -> fprintf fmt ",@,%a" self#pp_var x) xs ; - fprintf fmt "@ : %a.@]" self#pp_tau tau ; - - method pp_intros tau fmt = function - | [] -> () - | x::xs -> - fprintf fmt "@[<hov 2>forall %a" self#pp_var x ; - List.iter (fun x -> fprintf fmt ",@,%a" self#pp_var x) xs ; - fprintf fmt "@ : %a@]" self#pp_tau tau ; - - method pp_exists tau fmt = function - | [] -> () - | x::xs -> - fprintf fmt "@[<hov 2>exists %a" self#pp_var x ; - List.iter (fun x -> fprintf fmt ",@,%a" self#pp_var x) xs ; - fprintf fmt "@ : %a.@]" self#pp_tau tau ; - - method pp_trigger fmt t = - let rec pretty fmt = function - | TgAny -> assert false - | TgVar x -> self#pp_var fmt (self#find x) - | TgGet(t,k) -> fprintf fmt "@[<hov 2>%a[%a]@]" pretty t pretty k - | TgSet(t,k,v) -> fprintf fmt "@[<hov 2>%a[%a@ <- %a]@]" pretty t pretty k pretty v - | TgFun(f,ts) -> call Cterm f fmt ts - | TgProp(f,ts) -> call Cprop f fmt ts - and call mode f fmt ts = - match self#link f, mode with - | F_call f, _ - | F_bool_prop (f,_), Cterm - | F_bool_prop (_,f), Cprop -> - Plib.pp_call_var ~f pretty fmt ts - | F_left f, _ -> Plib.pp_fold_call ~f pretty fmt ts - | F_right f, _ -> Plib.pp_fold_call_rev ~f pretty fmt (List.rev ts) - | F_assoc op, _ -> Plib.pp_assoc ~e:"?" ~op pretty fmt ts - | F_subst s, _ -> Plib.substitute_list pretty s fmt ts - | F_list(fc,fn) , _ -> - let rec plist fc fn fmt = function - | [] -> pp_print_string fmt fn - | x::xs -> - fprintf fmt "[<hov 2>%s(@,%a,@,%a)@]" fc - pretty x (plist fc fn) xs - in plist fc fn fmt ts - in fprintf fmt "@[<hov 2>%a@]" pretty t - - method pp_goal fmt p = self#pp_prop fmt p - - (* -------------------------------------------------------------------------- *) - (* --- Declarations --- *) - (* -------------------------------------------------------------------------- *) - - method pp_declare_adt fmt adt = function - | 0 -> fprintf fmt "type %s" (self#datatype adt) - | 1 -> fprintf fmt "type %a %s" self#pp_tvar 1 (self#datatype adt) - | n -> - begin - fprintf fmt "type (%a" self#pp_tvar 1 ; - for i=2 to n do fprintf fmt ",%a" self#pp_tvar i done ; - fprintf fmt ") %s" (self#datatype adt) ; - end - - method pp_declare_def fmt adt n def = - begin - fprintf fmt "(* @[<hov 4>inlined type " ; - self#pp_declare_adt fmt adt n ; - fprintf fmt "@ = %a@] *)" self#pp_tau def ; - self#set_typedef adt def ; - end - - method pp_declare_sum fmt adt n cases = - let is_enum = function (_,[]) -> true | _ -> false in - if List.for_all is_enum cases then - begin - fprintf fmt "@[<hov 4>" ; - self#pp_declare_adt fmt adt n ; - Plib.iteri - (fun index (c,_) -> match index with - | Ifirst | Isingle -> - fprintf fmt " = %s" (link_name (self#link c)) - | Imiddle | Ilast -> - fprintf fmt "@ | %s" (link_name (self#link c)) - ) cases ; - fprintf fmt "@]" - end - else - begin - self#pp_declare_adt fmt adt n ; - pp_print_newline fmt () ; - let result = Data(adt,Kind.type_params n) in - List.iter - (fun (c,ts) -> - self#declare_signature fmt c ts result - ) cases ; - let rank = "rank_" ^ self#datatype adt in - fprintf fmt "logic %s : %a -> int@\n" rank self#pp_tau result ; - Plib.iterk - (fun k (c,ts) -> - fprintf fmt "@[<hov 2>axiom %s_%d:@ " rank k ; - let xs = Plib.mapk - (fun k t -> - fprintf fmt "forall x%d:%a.@ " k self#pp_tau t ; - Printf.sprintf "x%d" k) ts - in - let f = link_name (self#link c) in - fprintf fmt "%s(%a)=%d@]@\n" rank - (Plib.pp_call_var ~f pp_print_string) - xs k - ) cases ; - end - - method declare_signature fmt f ts t = - begin - fprintf fmt "@[<hv 4>logic %s :@ " (link_name (self#link f)) ; - if ts <> [] then - begin - Plib.pp_listcompact ~sep:"," self#pp_tau fmt ts ; - fprintf fmt "@ -> " ; - end ; - fprintf fmt "%a@]@\n" self#pp_tau t - end - - method declare_definition fmt f xs t e = - self#global - begin fun () -> - let cmode = Export.ctau t in - fprintf fmt "@[<hv 4>%a@,(" (self#pp_declare_symbol cmode) f ; - Plib.pp_listsep ~sep:"," - (fun fmt x -> - let a = self#bind x in - let t = T.tau_of_var x in - fprintf fmt "%a:%a" self#pp_var a self#pp_tau t - ) fmt xs ; - match cmode with - | Cprop -> - fprintf fmt ") =@ @[<hov 0>%a@]@]@\n" - self#pp_prop e - | Cterm -> - fprintf fmt ") :@ %a =@ @[<hov 0>%a@]@]@\n" - self#pp_tau t (self#pp_expr t) e - end - - end - -end diff --git a/src/plugins/qed/export_altergo.mli b/src/plugins/qed/export_altergo.mli deleted file mode 100644 index ec036440e67..00000000000 --- a/src/plugins/qed/export_altergo.mli +++ /dev/null @@ -1,74 +0,0 @@ -(**************************************************************************) -(* *) -(* This file is part of WP plug-in of Frama-C. *) -(* *) -(* Copyright (C) 2007-2021 *) -(* CEA (Commissariat a l'energie atomique et aux energies *) -(* alternatives) *) -(* *) -(* you can redistribute it and/or modify it under the terms of the GNU *) -(* Lesser General Public License as published by the Free Software *) -(* Foundation, version 2.1. *) -(* *) -(* It is distributed in the hope that it will be useful, *) -(* but WITHOUT ANY WARRANTY; without even the implied warranty of *) -(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) -(* GNU Lesser General Public License for more details. *) -(* *) -(* See the GNU Lesser General Public License version 2.1 *) -(* for more details (enclosed in the file licenses/LGPLv2.1). *) -(* *) -(**************************************************************************) - -open Logic -open Format -open Plib -open Engine - -(** Exportation Engine for Alt-Ergo. - - Provides a full {{:Export.S.engine-c.html}engine} - from a {{:Export.S.linker-c.html}linker}. *) - -module Make(T : Term) : -sig - - open T - module Env : Engine.Env with type term := term - - type trigger = (T.var,Fun.t) Engine.ftrigger - type typedef = (tau,Field.t,Fun.t) Engine.ftypedef - - class virtual engine : - object - method set_quantify_let : bool -> unit - - method virtual get_typedef : ADT.t -> tau option - method virtual set_typedef : ADT.t -> tau -> unit - - method typeof : term -> tau (** Defaults to T.typeof *) - - inherit [Z.t,ADT.t,Field.t,Fun.t,tau,var,term,Env.t] Engine.engine - method marks : Env.t * T.marks - method op_spaced : string -> bool - method op_record : string * string - method pp_forall : tau -> string list printer - method pp_intros : tau -> string list printer - method pp_exists : tau -> string list printer - method pp_param : (string * tau) printer - method pp_trigger : (var,Fun.t) ftrigger printer - method pp_declare_symbol : cmode -> Fun.t printer - method pp_declare_adt : formatter -> ADT.t -> int -> unit - method pp_declare_def : formatter -> ADT.t -> int -> tau -> unit - method pp_declare_sum : formatter -> ADT.t -> int -> (Fun.t * tau list) list -> unit - method pp_goal : formatter -> term -> unit - - method declare_type : formatter -> ADT.t -> int -> typedef -> unit - method declare_prop : kind:string -> formatter -> string -> T.var list -> trigger list list -> term -> unit - method declare_axiom : formatter -> string -> var list -> trigger list list -> term -> unit - method declare_signature : formatter -> Fun.t -> tau list -> tau -> unit - method declare_definition : formatter -> Fun.t -> var list -> tau -> term -> unit - - end - -end -- GitLab