src/HOL/HOLCF/IOA/meta_theory/Compositionality.thy
author wenzelm
Sat, 18 Jul 2015 20:54:56 +0200
changeset 60754 02924903a6fd
parent 58880 0baae4311a9f
child 61999 89291b5d0ede
permissions -rw-r--r--
prefer tactics with explicit context;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42151
4da4fc77664b tuned headers;
wenzelm
parents: 40945
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/meta_theory/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
58880
0baae4311a9f modernized header;
wenzelm
parents: 42151
diff changeset
     5
section {* Compositionality of I/O automata *}
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
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    10
lemma compatibility_consequence3: "[|eA --> A ; eB & ~eA --> ~A|] ==> (eA | eB) --> A=eA"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    11
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    12
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    13
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    14
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    15
lemma Filter_actAisFilter_extA: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    16
"!! A B. [| compatible A B; Forall (%a. a: ext A | a: ext B) tr |] ==>  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    17
            Filter (%a. a: act A)$tr= Filter (%a. a: ext A)$tr"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    18
apply (rule ForallPFilterQR)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    19
(* i.e.: [| (! x. P x --> (Q x = R x)) ; Forall P tr |] ==> Filter Q$tr = Filter R$tr *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    20
prefer 2 apply (assumption)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    21
apply (rule compatibility_consequence3)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    22
apply (simp_all add: ext_is_act ext1_ext2_is_not_act1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    23
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    24
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    25
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    26
(* the next two theorems are only necessary, as there is no theorem ext (A||B) = ext (B||A) *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    27
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    28
lemma compatibility_consequence4: "[|eA --> A ; eB & ~eA --> ~A|] ==> (eB | eA) --> A=eA"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    29
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    30
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    31
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    32
lemma Filter_actAisFilter_extA2: "[| compatible A B; Forall (%a. a: ext B | a: ext A) tr |] ==>  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    33
            Filter (%a. a: act A)$tr= Filter (%a. a: ext A)$tr"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    34
apply (rule ForallPFilterQR)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    35
prefer 2 apply (assumption)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    36
apply (rule compatibility_consequence4)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    37
apply (simp_all add: ext_is_act ext1_ext2_is_not_act1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    38
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    39
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    40
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    41
subsection " Main Compositionality Theorem "
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    42
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    43
lemma compositionality: "[| is_trans_of A1; is_trans_of A2; is_trans_of B1; is_trans_of B2; 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    44
             is_asig_of A1; is_asig_of A2;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    45
             is_asig_of B1; is_asig_of B2;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    46
             compatible A1 B1; compatible A2 B2;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    47
             A1 =<| A2;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    48
             B1 =<| B2 |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    49
         ==> (A1 || B1) =<| (A2 || B2)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    50
apply (simp add: is_asig_of_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    51
apply (frule_tac A1 = "A1" in compat_commute [THEN iffD1])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    52
apply (frule_tac A1 = "A2" in compat_commute [THEN iffD1])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    53
apply (simp add: ioa_implements_def inputs_of_par outputs_of_par externals_of_par)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 19741
diff changeset
    54
apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    55
apply (simp add: compositionality_tr)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    56
apply (subgoal_tac "ext A1 = ext A2 & ext B1 = ext B2")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    57
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
apply (simp add: externals_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    59
apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    60
(* rewrite with proven subgoal *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    61
apply (simp add: externals_of_par)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 19741
diff changeset
    62
apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    63
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    64
(* 2 goals, the 3rd has been solved automatically *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    65
(* 1: Filter A2 x : traces A2 *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    66
apply (drule_tac A = "traces A1" in subsetD)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    67
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    68
apply (simp add: Filter_actAisFilter_extA)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    69
(* 2: Filter B2 x : traces B2 *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    70
apply (drule_tac A = "traces B1" in subsetD)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    71
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    72
apply (simp add: Filter_actAisFilter_extA2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    73
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    74
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    75
end