(* Title: HOL/HOLCF/IOA/Asig.thy Author: Olaf Müller, Tobias Nipkow & Konrad Slind *) section \Action signatures\ theory Asig imports Main begin type_synonym 'a signature = "'a set \ 'a set \ 'a set" definition inputs :: "'action signature \ 'action set" where asig_inputs_def: "inputs = fst" definition outputs :: "'action signature \ 'action set" where asig_outputs_def: "outputs = fst \ snd" definition internals :: "'action signature \ 'action set" where asig_internals_def: "internals = snd \ snd" definition actions :: "'action signature \ 'action set" where "actions asig = inputs asig \ outputs asig \ internals asig" definition externals :: "'action signature \ 'action set" where "externals asig = inputs asig \ outputs asig" definition locals :: "'action signature \ 'action set" where "locals asig = internals asig \ outputs asig" definition is_asig :: "'action signature \ bool" where "is_asig triple \ inputs triple \ outputs triple = {} \ outputs triple \ internals triple = {} \ inputs triple \ internals triple = {}" definition mk_ext_asig :: "'action signature \ 'action signature" where "mk_ext_asig triple = (inputs triple, outputs triple, {})" lemmas asig_projections = asig_inputs_def asig_outputs_def asig_internals_def lemma asig_triple_proj: "outputs (a, b, c) = b \ inputs (a, b, c) = a \ internals (a, b, c) = c" by (simp add: asig_projections) lemma int_and_ext_is_act: "a \ internals S \ a \ externals S \ a \ actions S" by (simp add: externals_def actions_def) lemma ext_is_act: "a \ externals S \ a \ actions S" by (simp add: externals_def actions_def) lemma int_is_act: "a \ internals S \ a \ actions S" by (simp add: asig_internals_def actions_def) lemma inp_is_act: "a \ inputs S \ a \ actions S" by (simp add: asig_inputs_def actions_def) lemma out_is_act: "a \ outputs S \ a \ actions S" by (simp add: asig_outputs_def actions_def) lemma ext_and_act: "x \ actions S \ x \ externals S \ x \ externals S" by (fast intro!: ext_is_act) lemma not_ext_is_int: "is_asig S \ x \ actions S \ x \ externals S \ x \ internals S" by (auto simp add: actions_def is_asig_def externals_def) lemma not_ext_is_int_or_not_act: "is_asig S \ x \ externals S \ x \ internals S \ x \ actions S" by (auto simp add: actions_def is_asig_def externals_def) lemma int_is_not_ext:"is_asig S \ x \ internals S \ x \ externals S" by (auto simp add: externals_def actions_def is_asig_def) end