(**************************************************************************) (* ___ *) (* ||M|| *) (* ||A|| A project by Andrea Asperti *) (* ||T|| *) (* ||I|| Developers: *) (* ||T|| The HELM team. *) (* ||A|| http://helm.cs.unibo.it *) (* \ / *) (* \ / This file is distributed under the terms of the *) (* v GNU General Public License Version 2 *) (* *) (**************************************************************************) include "basics/types.ma". include "basics/deqsets.ma". include "Traces.ma". record concrete_transition_sys (p : label_params) : Type[2] ≝ { trans_sys :> abstract_status p }. record abstract_transition_sys : Type[1] ≝ { abs_state_t :> Type[0] ; abs_instr : monoid ; act_abs : monoid_action abs_instr abs_state_t }. notation "〚 term 19 C 〛 term 90 A" with precedence 10 for @{ 'sem $C $A }. interpretation "act_abs" 'sem f x = (act ?? (act_abs ?) f x). record galois_rel (p : label_params) (C : concrete_transition_sys p) (A : abstract_transition_sys) : Type[0] ≝ { rel_galois :2> C → A → Prop }. record galois_connection (p : label_params) : Type[2] ≝ { concr : concrete_transition_sys p ; abs_d : abstract_transition_sys ; galois_rel:> galois_rel p concr abs_d }. record abstract_interpretation (p : label_params) : Type[2] ≝ { galois_conn:> galois_connection p ; instr_t : Type[0] ; fetch : concr … galois_conn → option instr_t ; instr_map : instr_t → abs_instr … (abs_d … galois_conn) ; instr_map_ok : ∀s,s': concr … galois_conn. ∀a: abs_d … galois_conn.∀l,i. as_execute … l s s' → fetch … s = Some ? i → ∀I. instr_map … i = I → galois_conn s a → galois_conn s' (〚I〛 a) }.