(* 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