src/HOLCF/IOA/meta_theory/Automata.ML
author wenzelm
Wed, 03 Oct 2001 20:54:16 +0200
changeset 11655 923e4d0d36d5
parent 6161 bc2a76ce1ea3
child 12218 6597093b77e7
permissions -rw-r--r--
tuned parentheses in relational expressions;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/Automata.ML
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     2
    ID:         $Id$
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     3
    Author:     Olaf Mueller, Tobias Nipkow, Konrad Slind
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
    Copyright   1994, 1996  TU Muenchen
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     5
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     6
The I/O automata of Lynch and Tuttle.
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     7
*)
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     8
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
     9
(* this modification of the simpset is local to this file *)
4536
74f7c556fd90 added split_paired_Ex to the implicit simpset
oheimb
parents: 4477
diff changeset
    10
Delsimps [split_paired_Ex];
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    11
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    12
val ioa_projections = [asig_of_def, starts_of_def, trans_of_def,wfair_of_def,sfair_of_def];
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    13
6161
paulson
parents: 5976
diff changeset
    14
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    15
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    16
section "asig_of, starts_of, trans_of";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    17
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    18
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    19
Goal
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    20
 "((asig_of (x,y,z,w,s)) = x)   & \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    21
\ ((starts_of (x,y,z,w,s)) = y) & \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    22
\ ((trans_of (x,y,z,w,s)) = z)  & \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    23
\ ((wfair_of (x,y,z,w,s)) = w) & \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    24
\ ((sfair_of (x,y,z,w,s)) = s)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    25
  by (simp_tac (simpset() addsimps ioa_projections) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    26
qed "ioa_triple_proj";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    27
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    28
Goalw [is_trans_of_def,actions_def, is_asig_def]
6161
paulson
parents: 5976
diff changeset
    29
  "[| is_trans_of A; (s1,a,s2):trans_of(A) |] ==> a:act A";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    30
  by (REPEAT(etac conjE 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    31
  by (EVERY1[etac allE, etac impE, atac]);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    32
  by (Asm_full_simp_tac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    33
qed "trans_in_actions";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    34
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    35
Goal
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    36
"starts_of(A || B) = {p. fst(p):starts_of(A) & snd(p):starts_of(B)}";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    37
  by (simp_tac (simpset() addsimps (par_def::ioa_projections)) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    38
qed "starts_of_par";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    39
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    40
Goal
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    41
"trans_of(A || B) = {tr. let s = fst(tr); a = fst(snd(tr)); t = snd(snd(tr)) \       
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    42
\            in (a:act A | a:act B) & \
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    43
\               (if a:act A then       \                
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    44
\                  (fst(s),a,fst(t)):trans_of(A) \                    
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    45
\                else fst(t) = fst(s))            \                      
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    46
\               &                                  \                     
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    47
\               (if a:act B then                    \   
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    48
\                  (snd(s),a,snd(t)):trans_of(B)     \                
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    49
\                else snd(t) = snd(s))}";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    50
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
    51
by (simp_tac (simpset() addsimps (par_def::ioa_projections)) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    52
qed "trans_of_par";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
    53
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    54
6161
paulson
parents: 5976
diff changeset
    55
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    56
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    57
section "actions and par";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    58
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    59
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    60
Goal 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    61
"actions(asig_comp a b) = actions(a) Un actions(b)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    62
  by (simp_tac (simpset() addsimps
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    63
               ([actions_def,asig_comp_def]@asig_projections)) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    64
  by (fast_tac (set_cs addSIs [equalityI]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    65
qed "actions_asig_comp";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    66
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    67
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    68
Goal "asig_of(A || B) = asig_comp (asig_of A) (asig_of B)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    69
  by (simp_tac (simpset() addsimps (par_def::ioa_projections)) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    70
qed "asig_of_par";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    71
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    72
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    73
Goal "ext (A1||A2) =    \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    74
\  (ext A1) Un (ext A2)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    75
by (asm_full_simp_tac (simpset() addsimps [externals_def,asig_of_par,asig_comp_def,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    76
      asig_inputs_def,asig_outputs_def,Un_def,set_diff_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    77
by (rtac set_ext 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    78
by (fast_tac set_cs 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    79
qed"externals_of_par"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    80
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    81
Goal "act (A1||A2) =    \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    82
\  (act A1) Un (act A2)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    83
by (asm_full_simp_tac (simpset() addsimps [actions_def,asig_of_par,asig_comp_def,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    84
      asig_inputs_def,asig_outputs_def,asig_internals_def,Un_def,set_diff_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    85
by (rtac set_ext 1); 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    86
by (fast_tac set_cs 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    87
qed"actions_of_par"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    88
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    89
Goal "inp (A1||A2) =\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    90
\         ((inp A1) Un (inp A2)) - ((out A1) Un (out A2))";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    91
by (asm_full_simp_tac (simpset() addsimps [actions_def,asig_of_par,asig_comp_def,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    92
      asig_inputs_def,asig_outputs_def,Un_def,set_diff_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    93
qed"inputs_of_par";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    94
  
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
    95
Goal "out (A1||A2) =\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    96
\         (out A1) Un (out A2)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
    97
by (asm_full_simp_tac (simpset() addsimps [actions_def,asig_of_par,asig_comp_def,
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    98
      asig_outputs_def,Un_def,set_diff_def]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    99
qed"outputs_of_par";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   100
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   101
Goal "int (A1||A2) =\
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   102
\         (int A1) Un (int A2)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   103
by (asm_full_simp_tac (simpset() addsimps [actions_def,asig_of_par,asig_comp_def,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   104
      asig_inputs_def,asig_outputs_def,asig_internals_def,Un_def,set_diff_def]) 1);
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   105
qed"internals_of_par";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   106
6161
paulson
parents: 5976
diff changeset
   107
(* ------------------------------------------------------------------------ *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   108
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   109
section "actions and compatibility"; 
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   110
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   111
Goal"compatible A B = compatible B A";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   112
by (asm_full_simp_tac (simpset() addsimps [compatible_def,Int_commute]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   113
by Auto_tac;
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   114
qed"compat_commute";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   115
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   116
Goalw [externals_def,actions_def,compatible_def]
6161
paulson
parents: 5976
diff changeset
   117
 "[| compatible A1 A2; a:ext A1|] ==> a~:int A2";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   118
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   119
by (Blast_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   120
qed"ext1_is_not_int2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   121
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   122
(* just commuting the previous one: better commute compatible *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   123
Goalw [externals_def,actions_def,compatible_def]
6161
paulson
parents: 5976
diff changeset
   124
 "[| compatible A2 A1 ; a:ext A1|] ==> a~:int A2";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   125
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   126
by (Blast_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   127
qed"ext2_is_not_int1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   128
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   129
bind_thm("ext1_ext2_is_not_act2",ext1_is_not_int2 RS int_and_ext_is_act);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   130
bind_thm("ext1_ext2_is_not_act1",ext2_is_not_int1 RS int_and_ext_is_act);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   131
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   132
Goalw  [externals_def,actions_def,compatible_def]
6161
paulson
parents: 5976
diff changeset
   133
 "[| compatible A B; x:int A |] ==> x~:ext B";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   134
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   135
by (Blast_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   136
qed"intA_is_not_extB";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   137
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   138
Goalw [externals_def,actions_def,compatible_def,is_asig_def,asig_of_def]
6161
paulson
parents: 5976
diff changeset
   139
"[| compatible A B; a:int A |] ==> a ~: act B";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   140
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   141
by (Blast_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   142
qed"intA_is_not_actB";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   143
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   144
(* the only one that needs disjointness of outputs and of internals and _all_ acts *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   145
Goalw [asig_outputs_def,asig_internals_def,actions_def,asig_inputs_def,
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   146
    compatible_def,is_asig_def,asig_of_def]
6161
paulson
parents: 5976
diff changeset
   147
"[| compatible A B; a:out A ;a:act B|] ==> a : inp B";
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   148
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   149
by (Blast_tac 1);
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   150
qed"outAactB_is_inpB";
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   151
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   152
(* needed for propagation of input_enabledness from A,B to A||B *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   153
Goalw [asig_outputs_def,asig_internals_def,actions_def,asig_inputs_def,
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   154
    compatible_def,is_asig_def,asig_of_def]
6161
paulson
parents: 5976
diff changeset
   155
"[| compatible A B; a:inp A ;a:act B|] ==> a : inp B | a: out B";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   156
by (Asm_full_simp_tac 1);
6161
paulson
parents: 5976
diff changeset
   157
by (Blast_tac 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   158
qed"inpAAactB_is_inpBoroutB";
3433
2de17c994071 added deadlock freedom, polished definitions and proofs
mueller
parents: 3275
diff changeset
   159
6161
paulson
parents: 5976
diff changeset
   160
(* ------------------------------------------------------------------------- *)
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   161
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   162
section "input_enabledness and par";  
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   163
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   164
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   165
(* ugly case distinctions. Heart of proof: 
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   166
     1. inpAAactB_is_inpBoroutB ie. internals are really hidden.
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   167
     2. inputs_of_par: outputs are no longer inputs of par. This is important here *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   168
Goalw [input_enabled_def] 
6161
paulson
parents: 5976
diff changeset
   169
"[| compatible A B; input_enabled A; input_enabled B|] \
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   170
\     ==> input_enabled (A||B)";
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   171
by (asm_full_simp_tac (simpset()addsimps[Let_def,inputs_of_par,trans_of_par])1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   172
by (safe_tac set_cs);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   173
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   174
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 2);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   175
(* a: inp A *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   176
by (case_tac "a:act B" 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   177
(* a:act B *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   178
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   179
by (Asm_full_simp_tac 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   180
by (dtac inpAAactB_is_inpBoroutB 1);
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   181
by (assume_tac 1);
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   182
by (assume_tac 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   183
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   184
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   185
by (eres_inst_tac [("x","aa")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   186
by (eres_inst_tac [("x","b")] allE 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   187
by (etac exE 1);
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   188
by (etac exE 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   189
by (res_inst_tac [("x","(s2,s2a)")] exI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   190
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   191
(* a~: act B*)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   192
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   193
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   194
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   195
by (eres_inst_tac [("x","aa")] allE 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   196
by (etac exE 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   197
by (res_inst_tac [("x","(s2,b)")] exI 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   198
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   199
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   200
(* a:inp B *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   201
by (case_tac "a:act A" 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   202
(* a:act A *)
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   203
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   204
by (eres_inst_tac [("x","a")] allE 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   205
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
4473
803d1e302af1 Decremented subscript because of change to iffD1
paulson
parents: 4423
diff changeset
   206
by (forw_inst_tac [("A1","A")] (compat_commute RS iffD1) 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   207
by (dtac inpAAactB_is_inpBoroutB 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   208
back();
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   209
by (assume_tac 1);
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   210
by (assume_tac 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   211
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   212
by (rotate_tac ~1 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   213
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   214
by (eres_inst_tac [("x","aa")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   215
by (eres_inst_tac [("x","b")] allE 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   216
by (etac exE 1);
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   217
by (etac exE 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   218
by (res_inst_tac [("x","(s2,s2a)")] exI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   219
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   220
(* a~: act B*)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   221
by (asm_full_simp_tac (simpset() addsimps [inp_is_act]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   222
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   223
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   224
by (eres_inst_tac [("x","a")] allE 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   225
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   226
by (eres_inst_tac [("x","b")] allE 1);
4423
a129b817b58a expandshort;
wenzelm
parents: 4098
diff changeset
   227
by (etac exE 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   228
by (res_inst_tac [("x","(aa,s2)")] exI 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   229
by (Asm_full_simp_tac 1);
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   230
qed"input_enabled_par";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   231
6161
paulson
parents: 5976
diff changeset
   232
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   233
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   234
section "invariants";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   235
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   236
val [p1,p2] = goalw thy [invariant_def]
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   237
  "[| !!s. s:starts_of(A) ==> P(s);     \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   238
\     !!s t a. [|reachable A s; P(s)|] ==> (s,a,t): trans_of(A) --> P(t) |] \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   239
\  ==> invariant A P";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   240
by (rtac allI 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   241
by (rtac impI 1);
5102
8c782c25a11e Adapted to new inductive definition package.
berghofe
parents: 5068
diff changeset
   242
by (res_inst_tac [("xa","s")] reachable.induct 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   243
by (atac 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   244
by (etac p1 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   245
by (eres_inst_tac [("s1","sa")] (p2 RS mp) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   246
by (REPEAT (atac 1));
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   247
qed"invariantI";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   248
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   249
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   250
val [p1,p2] = goal thy
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   251
 "[| !!s. s : starts_of(A) ==> P(s); \
6161
paulson
parents: 5976
diff changeset
   252
\    !!s t a. reachable A s ==> P(s) --> (s,a,t):trans_of(A) --> P(t) \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   253
\ |] ==> invariant A P";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   254
  by (fast_tac (HOL_cs addSIs [invariantI] addSDs [p1,p2]) 1);
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   255
qed "invariantI1";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   256
6161
paulson
parents: 5976
diff changeset
   257
Goalw [invariant_def] "[| invariant A P; reachable A s |] ==> P(s)";
paulson
parents: 5976
diff changeset
   258
by (Blast_tac 1);   
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   259
qed "invariantE";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   260
6161
paulson
parents: 5976
diff changeset
   261
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   262
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   263
section "restrict";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   264
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   265
6161
paulson
parents: 5976
diff changeset
   266
val reachable_0 = reachable.reachable_0
paulson
parents: 5976
diff changeset
   267
and reachable_n = reachable.reachable_n;
paulson
parents: 5976
diff changeset
   268
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   269
Goal "starts_of(restrict ioa acts) = starts_of(ioa) &     \
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   270
\         trans_of(restrict ioa acts) = trans_of(ioa)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   271
by (simp_tac (simpset() addsimps ([restrict_def]@ioa_projections)) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   272
qed "cancel_restrict_a";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   273
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   274
Goal "reachable (restrict ioa acts) s = reachable ioa s";
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   275
by (rtac iffI 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   276
by (etac reachable.induct 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   277
by (asm_full_simp_tac (simpset() addsimps [cancel_restrict_a,reachable_0]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   278
by (etac reachable_n 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   279
by (asm_full_simp_tac (simpset() addsimps [cancel_restrict_a]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   280
(* <--  *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   281
by (etac reachable.induct 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   282
by (rtac reachable_0 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   283
by (asm_full_simp_tac (simpset() addsimps [cancel_restrict_a]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   284
by (etac reachable_n 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   285
by (asm_full_simp_tac (simpset() addsimps [cancel_restrict_a]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   286
qed "cancel_restrict_b";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   287
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   288
Goal "act (restrict A acts) = act A";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   289
by (simp_tac (simpset() addsimps [actions_def,asig_internals_def,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   290
        asig_outputs_def,asig_inputs_def,externals_def,asig_of_def,restrict_def,
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   291
        restrict_asig_def]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   292
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   293
qed"acts_restrict";
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   294
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   295
Goal "starts_of(restrict ioa acts) = starts_of(ioa) &     \
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   296
\         trans_of(restrict ioa acts) = trans_of(ioa) & \
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   297
\         reachable (restrict ioa acts) s = reachable ioa s & \
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   298
\         act (restrict A acts) = act A";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   299
  by (simp_tac (simpset() addsimps [cancel_restrict_a,cancel_restrict_b,acts_restrict]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   300
qed"cancel_restrict";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   301
6161
paulson
parents: 5976
diff changeset
   302
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   303
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   304
section "rename";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   305
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   306
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   307
6161
paulson
parents: 5976
diff changeset
   308
Goal "s -a--(rename C f)-> t ==> (? x. Some(x) = f(a) & s -x--C-> t)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   309
by (asm_full_simp_tac (simpset() addsimps [Let_def,rename_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   310
qed"trans_rename";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   311
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   312
6161
paulson
parents: 5976
diff changeset
   313
Goal "[| reachable (rename C g) s |] ==> reachable C s";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   314
by (etac reachable.induct 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   315
by (rtac reachable_0 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   316
by (asm_full_simp_tac (simpset() addsimps [rename_def]@ioa_projections) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   317
by (dtac trans_rename 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   318
by (etac exE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   319
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   320
by (etac reachable_n 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   321
by (assume_tac 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   322
qed"reachable_rename";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   323
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   324
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   325
6161
paulson
parents: 5976
diff changeset
   326
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   327
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   328
section "trans_of(A||B)";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   329
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   330
6161
paulson
parents: 5976
diff changeset
   331
Goal "[|(s,a,t):trans_of (A||B); a:act A|] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   332
\             ==> (fst s,a,fst t):trans_of A";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   333
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   334
qed"trans_A_proj";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   335
6161
paulson
parents: 5976
diff changeset
   336
Goal "[|(s,a,t):trans_of (A||B); a:act B|] \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   337
\             ==> (snd s,a,snd t):trans_of B";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   338
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   339
qed"trans_B_proj";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   340
6161
paulson
parents: 5976
diff changeset
   341
Goal "[|(s,a,t):trans_of (A||B); a~:act A|]\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   342
\             ==> fst s = fst t";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   343
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   344
qed"trans_A_proj2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   345
6161
paulson
parents: 5976
diff changeset
   346
Goal "[|(s,a,t):trans_of (A||B); a~:act B|]\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   347
\             ==> snd s = snd t";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   348
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   349
qed"trans_B_proj2";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   350
6161
paulson
parents: 5976
diff changeset
   351
Goal "(s,a,t):trans_of (A||B) \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   352
\              ==> a :act A | a :act B";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   353
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   354
qed"trans_AB_proj";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   355
6161
paulson
parents: 5976
diff changeset
   356
Goal "[|a:act A;a:act B;\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   357
\      (fst s,a,fst t):trans_of A;(snd s,a,snd t):trans_of B|]\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   358
\  ==> (s,a,t):trans_of (A||B)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   359
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   360
qed"trans_AB";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   361
6161
paulson
parents: 5976
diff changeset
   362
Goal "[|a:act A;a~:act B;\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   363
\      (fst s,a,fst t):trans_of A;snd s=snd t|]\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   364
\  ==> (s,a,t):trans_of (A||B)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   365
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   366
qed"trans_A_notB";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   367
6161
paulson
parents: 5976
diff changeset
   368
Goal "[|a~:act A;a:act B;\
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   369
\      (snd s,a,snd t):trans_of B;fst s=fst t|]\
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   370
\  ==> (s,a,t):trans_of (A||B)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   371
by (asm_full_simp_tac (simpset() addsimps [Let_def,par_def,trans_of_def]) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   372
qed"trans_notA_B";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   373
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   374
val trans_of_defs1 = [trans_AB,trans_A_notB,trans_notA_B];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   375
val trans_of_defs2 = [trans_A_proj,trans_B_proj,trans_A_proj2,
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   376
                      trans_B_proj2,trans_AB_proj];
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   377
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   378
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   379
Goal 
11655
923e4d0d36d5 tuned parentheses in relational expressions;
wenzelm
parents: 6161
diff changeset
   380
"((s,a,t) : trans_of(A || B || C || D)) =                                    \
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   381
\ ((a:actions(asig_of(A)) | a:actions(asig_of(B)) | a:actions(asig_of(C)) |  \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   382
\   a:actions(asig_of(D))) &                                                 \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   383
\  (if a:actions(asig_of(A)) then (fst(s),a,fst(t)):trans_of(A)              \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   384
\   else fst t=fst s) &                                                      \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   385
\  (if a:actions(asig_of(B)) then (fst(snd(s)),a,fst(snd(t))):trans_of(B)    \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   386
\   else fst(snd(t))=fst(snd(s))) &                                          \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   387
\  (if a:actions(asig_of(C)) then                                            \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   388
\     (fst(snd(snd(s))),a,fst(snd(snd(t)))):trans_of(C)                      \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   389
\   else fst(snd(snd(t)))=fst(snd(snd(s)))) &                                \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   390
\  (if a:actions(asig_of(D)) then                                            \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   391
\     (snd(snd(snd(s))),a,snd(snd(snd(t)))):trans_of(D)                      \
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   392
\   else snd(snd(snd(t)))=snd(snd(snd(s)))))";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   393
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   394
  by (simp_tac (simpset() addsimps ([par_def,actions_asig_comp,Pair_fst_snd_eq,Let_def]@
4833
2e53109d4bc8 Renamed expand_const -> split_const
nipkow
parents: 4814
diff changeset
   395
                            ioa_projections)) 1);
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   396
qed "trans_of_par4";
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   397
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   398
6161
paulson
parents: 5976
diff changeset
   399
(* ------------------------------------------------------------------------- *)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   400
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   401
section "proof obligation generator for IOA requirements";  
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   402
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   403
(* without assumptions on A and B because is_trans_of is also incorporated in ||def *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   404
Goalw [is_trans_of_def] "is_trans_of (A||B)";
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   405
by (simp_tac (simpset() addsimps [Let_def,actions_of_par,trans_of_par]) 1);
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   406
qed"is_trans_of_par";
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   407
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   408
Goalw [is_trans_of_def] 
6161
paulson
parents: 5976
diff changeset
   409
"is_trans_of A ==> is_trans_of (restrict A acts)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   410
by (asm_simp_tac (simpset() addsimps [cancel_restrict,acts_restrict])1);
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   411
qed"is_trans_of_restrict";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   412
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   413
Goalw [is_trans_of_def,restrict_def,restrict_asig_def] 
6161
paulson
parents: 5976
diff changeset
   414
"is_trans_of A ==> is_trans_of (rename A f)";
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   415
by (asm_full_simp_tac
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   416
    (simpset() addsimps [Let_def,actions_def,trans_of_def, asig_internals_def,
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   417
			 asig_outputs_def,asig_inputs_def,externals_def,
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   418
			 asig_of_def,rename_def,rename_set_def]) 1);
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   419
by (Blast_tac 1);
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   420
qed"is_trans_of_rename";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   421
6161
paulson
parents: 5976
diff changeset
   422
Goal "[| is_asig_of A; is_asig_of B; compatible A B|]  \
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   423
\         ==> is_asig_of (A||B)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   424
by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,asig_of_par,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   425
       asig_comp_def,compatible_def,asig_internals_def,asig_outputs_def,
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   426
     asig_inputs_def,actions_def,is_asig_def]) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   427
by (asm_full_simp_tac (simpset() addsimps [asig_of_def]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   428
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   429
qed"is_asig_of_par";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   430
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   431
Goalw [is_asig_of_def,is_asig_def,asig_of_def,restrict_def,restrict_asig_def,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   432
           asig_internals_def,asig_outputs_def,asig_inputs_def,externals_def,o_def] 
6161
paulson
parents: 5976
diff changeset
   433
"is_asig_of A ==> is_asig_of (restrict A f)";
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   434
by (Asm_full_simp_tac 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   435
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   436
qed"is_asig_of_restrict";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   437
6161
paulson
parents: 5976
diff changeset
   438
Goal "is_asig_of A ==> is_asig_of (rename A f)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   439
by (asm_full_simp_tac (simpset() addsimps [is_asig_of_def,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   440
     rename_def,rename_set_def,asig_internals_def,asig_outputs_def,
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   441
     asig_inputs_def,actions_def,is_asig_def,asig_of_def]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   442
by Auto_tac; 
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   443
by   (ALLGOALS(dres_inst_tac [("s","Some ?x")] sym THEN' Asm_full_simp_tac));
6161
paulson
parents: 5976
diff changeset
   444
by   (ALLGOALS(Blast_tac));
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   445
qed"is_asig_of_rename";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   446
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   447
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   448
Addsimps [is_asig_of_par,is_asig_of_restrict,is_asig_of_rename,
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   449
          is_trans_of_par,is_trans_of_restrict,is_trans_of_rename];
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   450
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   451
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   452
Goalw [compatible_def]
6161
paulson
parents: 5976
diff changeset
   453
"[|compatible A B; compatible A C |]==> compatible A (B||C)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   454
by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   455
   outputs_of_par,actions_of_par]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   456
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   457
qed"compatible_par";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   458
5976
44290b71a85f tuning to assimiliate it with PhD;
mueller
parents: 5102
diff changeset
   459
(*  better derive by previous one and compat_commute *)
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   460
Goalw [compatible_def]
6161
paulson
parents: 5976
diff changeset
   461
"[|compatible A C; compatible B C |]==> compatible (A||B) C";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   462
by (asm_full_simp_tac (simpset() addsimps [internals_of_par, 
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   463
   outputs_of_par,actions_of_par]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4473
diff changeset
   464
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   465
qed"compatible_par2";
3521
bdc51b4c6050 changes needed for adding fairness
mueller
parents: 3457
diff changeset
   466
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4833
diff changeset
   467
Goalw [compatible_def]
6161
paulson
parents: 5976
diff changeset
   468
"[| compatible A B; (ext B - S) Int ext A = {}|] \
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   469
\     ==> compatible A (restrict B S)";
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 3662
diff changeset
   470
by (asm_full_simp_tac (simpset() addsimps [ioa_triple_proj,asig_triple_proj,
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   471
          externals_def,restrict_def,restrict_asig_def,actions_def]) 1);
6161
paulson
parents: 5976
diff changeset
   472
by Auto_tac;
3656
2df8a2bc3ee2 some minor changes;
mueller
parents: 3521
diff changeset
   473
qed"compatible_restrict";
4814
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   474
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   475
0277a026f99d made modifications of the simpset() local
oheimb
parents: 4536
diff changeset
   476
Addsimps [split_paired_Ex];