src/HOL/HOLCF/IOA/Compositionality.thy
author wenzelm
Sat, 16 Jan 2016 23:31:28 +0100
changeset 62193 0826f6b6ba09
parent 62192 bdaa0eb0fc74
child 63549 b0d31c7def86
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62008
cbedaddc9351 clarified directory structure;
wenzelm
parents: 62002
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/Compositionality.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     3
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 61999
diff changeset
     5
section \<open>Compositionality of I/O automata\<close>
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     6
theory Compositionality
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
imports CompoTraces
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
begin
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     9
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    10
lemma compatibility_consequence3: "eA \<longrightarrow> A \<Longrightarrow> eB \<and> \<not> eA \<longrightarrow> \<not> A \<Longrightarrow> (eA \<or> eB) \<longrightarrow> A = eA"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    11
  by auto
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    12
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    13
lemma Filter_actAisFilter_extA:
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    14
  "compatible A B \<Longrightarrow> Forall (\<lambda>a. a \<in> ext A \<or> a \<in> ext B) tr \<Longrightarrow>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    15
    Filter (\<lambda>a. a \<in> act A) $ tr = Filter (\<lambda>a. a \<in> ext A) $ tr"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    16
  apply (rule ForallPFilterQR)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    17
  text \<open>i.e.: \<open>(\<forall>x. P x \<longrightarrow> (Q x = R x)) \<Longrightarrow> Forall P tr \<Longrightarrow> Filter Q $ tr = Filter R $ tr\<close>\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    18
  prefer 2 apply assumption
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    19
  apply (rule compatibility_consequence3)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    20
  apply (simp_all add: ext_is_act ext1_ext2_is_not_act1)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    21
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    22
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    23
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    24
text \<open>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    25
  The next two theorems are only necessary, as there is no theorem
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    26
  \<open>ext (A \<parallel> B) = ext (B \<parallel> A)\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    27
\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    28
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    29
lemma compatibility_consequence4: "eA \<longrightarrow> A \<Longrightarrow> eB \<and> \<not> eA \<longrightarrow> \<not> A \<Longrightarrow> (eB \<or> eA) \<longrightarrow> A = eA"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    30
  by auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    31
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    32
lemma Filter_actAisFilter_extA2:
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    33
  "compatible A B \<Longrightarrow> Forall (\<lambda>a. a \<in> ext B \<or> a \<in> ext A) tr \<Longrightarrow>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    34
    Filter (\<lambda>a. a \<in> act A) $ tr = Filter (\<lambda>a. a \<in> ext A) $ tr"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    35
  apply (rule ForallPFilterQR)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    36
  prefer 2 apply (assumption)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    37
  apply (rule compatibility_consequence4)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    38
  apply (simp_all add: ext_is_act ext1_ext2_is_not_act1)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    39
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    40
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    41
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    42
subsection \<open>Main Compositionality Theorem\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    43
62192
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    44
lemma compositionality:
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    45
  assumes "is_trans_of A1" and "is_trans_of A2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    46
    and "is_trans_of B1" and "is_trans_of B2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    47
    and "is_asig_of A1" and "is_asig_of A2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    48
    and "is_asig_of B1" and "is_asig_of B2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    49
    and "compatible A1 B1" and "compatible A2 B2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    50
    and "A1 =<| A2" and "B1 =<| B2"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    51
  shows "(A1 \<parallel> B1) =<| (A2 \<parallel> B2)"
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    52
  apply (insert assms)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    53
  apply (simp add: is_asig_of_def)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    54
  apply (frule_tac A1 = "A1" in compat_commute [THEN iffD1])
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    55
  apply (frule_tac A1 = "A2" in compat_commute [THEN iffD1])
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    56
  apply (simp add: ioa_implements_def inputs_of_par outputs_of_par externals_of_par)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    57
  apply auto
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    58
  apply (simp add: compositionality_tr)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    59
  apply (subgoal_tac "ext A1 = ext A2 \<and> ext B1 = ext B2")
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    60
  prefer 2
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    61
  apply (simp add: externals_def)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    62
  apply (erule conjE)+
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    63
  text \<open>rewrite with proven subgoal\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    64
  apply (simp add: externals_of_par)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    65
  apply auto
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    66
  text \<open>2 goals, the 3rd has been solved automatically\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    67
  text \<open>1: \<open>Filter A2 x \<in> traces A2\<close>\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    68
  apply (drule_tac A = "traces A1" in subsetD)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    69
  apply assumption
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    70
  apply (simp add: Filter_actAisFilter_extA)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    71
  text \<open>2: \<open>Filter B2 x \<in> traces B2\<close>\<close>
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    72
  apply (drule_tac A = "traces B1" in subsetD)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    73
  apply assumption
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    74
  apply (simp add: Filter_actAisFilter_extA2)
bdaa0eb0fc74 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    75
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    76
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    77
end