src/HOL/IOA/meta_theory/Solve.ML
author clasohm
Fri, 19 Apr 1996 11:18:59 +0200
changeset 1667 6056e9c967d9
parent 1266 3ae9fe3c0f68
child 1894 c2c8279d40f0
permissions -rw-r--r--
adapted to new version of Fun.ML
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     1
(*  Title:      HOL/IOA/meta_theory/Solve.ML
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     2
    ID:         $Id$
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     4
    Copyright   1994  TU Muenchen
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     5
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     6
Weak possibilities mapping (abstraction)
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     7
*)
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
     8
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
     9
open Solve; 
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    10
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    11
Addsimps [mk_trace_thm,trans_in_actions];
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    12
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    13
goalw Solve.thy [is_weak_pmap_def,traces_def]
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    14
  "!!f. [| IOA(C); IOA(A); externals(asig_of(C)) = externals(asig_of(A)); \
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    15
\          is_weak_pmap f C A |] ==> traces(C) <= traces(A)";
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    16
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    17
  by (simp_tac(!simpset addsimps [has_trace_def])1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    18
  by (safe_tac set_cs);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    19
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    20
  (* choose same trace, therefore same NF *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    21
  by (res_inst_tac[("x","mk_trace  C (fst ex)")] exI 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    22
  by (Asm_full_simp_tac 1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    23
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    24
  (* give execution of abstract automata *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    25
  by (res_inst_tac[("x","(mk_trace A (fst ex),%i.f(snd ex i))")] bexI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    26
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    27
  (* Traces coincide *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    28
  by (asm_simp_tac (!simpset addsimps [mk_trace_def,filter_oseq_idemp])1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    29
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    30
  (* Use lemma *)
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    31
  by (forward_tac [states_of_exec_reachable] 1);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    32
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    33
  (* Now show that it's an execution *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    34
  by (asm_full_simp_tac(!simpset addsimps [executions_def]) 1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    35
  by (safe_tac set_cs);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    36
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    37
  (* Start states map to start states *)
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    38
  by (dtac bspec 1);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    39
  by (atac 1);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    40
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    41
  (* Show that it's an execution fragment *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    42
  by (asm_full_simp_tac (!simpset addsimps [is_execution_fragment_def])1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    43
  by (safe_tac HOL_cs);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    44
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    45
  by (eres_inst_tac [("x","snd ex n")] allE 1);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    46
  by (eres_inst_tac [("x","snd ex (Suc n)")] allE 1);
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    47
  by (eres_inst_tac [("x","a")] allE 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    48
  by (Asm_full_simp_tac 1);
966
3fd66f245ad7 converted IOA with curried function application
clasohm
parents:
diff changeset
    49
qed "trace_inclusion";
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    50
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    51
(* Lemmata *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    52
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    53
val prems = goal HOL.thy "(P ==> Q-->R) ==> P&Q --> R";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    54
  by(fast_tac (HOL_cs addDs prems) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    55
val imp_conj_lemma = result();
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    56
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    57
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    58
(* fist_order_tautology of externals_of_par *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    59
goal IOA.thy "a:externals(asig_of(A1||A2)) =    \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    60
\  (a:externals(asig_of(A1)) & a:externals(asig_of(A2)) |  \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    61
\  a:externals(asig_of(A1)) & a~:externals(asig_of(A2)) |  \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    62
\  a~:externals(asig_of(A1)) & a:externals(asig_of(A2)))";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    63
by (asm_full_simp_tac (!simpset addsimps [externals_def,asig_of_par,asig_comp_def,asig_inputs_def,asig_outputs_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    64
 by (fast_tac set_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    65
val externals_of_par_extra = result(); 
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    66
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    67
goal Solve.thy "!!s.[| reachable (C1||C2) s |] ==> reachable C1 (fst s)";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    68
by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); 
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    69
by (etac bexE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    70
by (res_inst_tac [("x",
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    71
   "(filter_oseq (%a.a:actions(asig_of(C1))) \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    72
\                (fst ex),                                                \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    73
\    %i.fst (snd ex i))")]  bexI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    74
(* fst(s) is in projected execution *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    75
 by (Simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    76
 by (fast_tac HOL_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    77
(* projected execution is indeed an execution *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    78
by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    79
    par_def, starts_of_def,trans_of_def]) 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    80
by (simp_tac (!simpset addsimps [filter_oseq_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    81
 by (REPEAT(rtac allI 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    82
 by (cut_inst_tac [("x","fst ex n")] opt_cases 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    83
 by (etac disjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    84
(* case 1: action sequence of || had already a None *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    85
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    86
 by (REPEAT(etac exE 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    87
 by (case_tac "y:actions(asig_of(C1))" 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    88
(* case 2: action sequence of || had Some(a) and 
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    89
           filtered sequence also       *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    90
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    91
 by (rtac impI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    92
 by (REPEAT(hyp_subst_tac 1)); 
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    93
 by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    94
(* case 3: action sequence pf || had Some(a) but
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    95
           filtered sequence has None      *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
    96
 by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    97
qed"comp1_reachable";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    98
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
    99
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   100
(* Exact copy of proof of comp1_reachable for the second 
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   101
   component of a parallel composition.     *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   102
goal Solve.thy "!!s.[| reachable (C1||C2) s|] ==> reachable C2 (snd s)";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   103
by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); 
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   104
by (etac bexE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   105
by (res_inst_tac [("x",
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   106
   "(filter_oseq (%a.a:actions(asig_of(C2)))\
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   107
\                (fst ex),                                                \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   108
\    %i.snd (snd ex i))")]  bexI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   109
(* fst(s) is in projected execution *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   110
 by (Simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   111
 by (fast_tac HOL_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   112
(* projected execution is indeed an execution *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   113
 by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   114
    par_def, starts_of_def,trans_of_def]) 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   115
 by (simp_tac (!simpset addsimps [filter_oseq_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   116
 by (REPEAT(rtac allI 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   117
 by (cut_inst_tac [("x","fst ex n")] opt_cases 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   118
 by (etac disjE 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   119
 by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   120
 by (REPEAT(etac exE 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   121
 by (case_tac "y:actions(asig_of(C2))" 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   122
 by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   123
 by (rtac impI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   124
 by (REPEAT(hyp_subst_tac 1)); 
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   125
 by (Asm_full_simp_tac 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   126
 by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   127
qed"comp2_reachable";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   128
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   129
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   130
(* Composition of possibility-mappings *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   131
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   132
goalw Solve.thy [is_weak_pmap_def] "!!f g.[| is_weak_pmap f C1 A1 & \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   133
\               externals(asig_of(A1))=externals(asig_of(C1)) &\
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   134
\               is_weak_pmap g C2 A2 &  \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   135
\               externals(asig_of(A2))=externals(asig_of(C2)) & \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   136
\               compat_ioas C1 C2 & compat_ioas A1 A2  |]     \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   137
\  ==> is_weak_pmap (%p.(f(fst(p)),g(snd(p)))) (C1||C2) (A1||A2)";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   138
 by (rtac conjI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   139
(* start_states *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   140
 by (asm_full_simp_tac (!simpset addsimps [par_def, starts_of_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   141
 by (fast_tac set_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   142
(* transitions *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   143
by (REPEAT (rtac allI 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   144
by (rtac imp_conj_lemma 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   145
by (REPEAT(etac conjE 1));
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   146
by (simp_tac (!simpset addsimps [externals_of_par_extra]) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   147
by (simp_tac (!simpset addsimps [par_def]) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   148
by (asm_full_simp_tac (!simpset addsimps [trans_of_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   149
by (rtac (expand_if RS ssubst) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   150
by (rtac conjI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   151
by (rtac impI 1); 
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   152
by (etac disjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   153
(* case 1      a:e(A1) | a:e(A2) *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   154
by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   155
                                    ext_is_act]) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   156
by (etac disjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   157
(* case 2      a:e(A1) | a~:e(A2) *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   158
by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   159
             ext_is_act,ext1_ext2_is_not_act2]) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   160
(* case 3      a:~e(A1) | a:e(A2) *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   161
by (asm_full_simp_tac (!simpset addsimps [comp1_reachable,comp2_reachable,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   162
             ext_is_act,ext1_ext2_is_not_act1]) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   163
(* case 4      a:~e(A1) | a~:e(A2) *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   164
by (rtac impI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   165
by (subgoal_tac "a~:externals(asig_of(A1)) & a~:externals(asig_of(A2))" 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   166
(* delete auxiliary subgoal *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   167
by (Asm_full_simp_tac 2);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   168
by (fast_tac HOL_cs 2);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   169
by (simp_tac (!simpset addsimps [conj_disj_distribR] addcongs [conj_cong]
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   170
                 setloop (split_tac [expand_if])) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   171
by(REPEAT((resolve_tac [conjI,impI] 1 ORELSE etac conjE 1) THEN
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   172
        asm_full_simp_tac(!simpset addsimps[comp1_reachable,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   173
                                      comp2_reachable])1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   174
qed"fxg_is_weak_pmap_of_product_IOA";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   175
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   176
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   177
goal Solve.thy "!!s.[| reachable (rename C g) s |] ==> reachable C s";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   178
by (asm_full_simp_tac (!simpset addsimps [reachable_def]) 1); 
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   179
by (etac bexE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   180
by (res_inst_tac [("x",
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   181
   "((%i. case (fst ex i) \
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   182
\         of None => None\
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   183
\          | Some(x) => g x) ,snd ex)")]  bexI 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   184
by (Simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   185
(* execution is indeed an execution of C *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   186
by (asm_full_simp_tac (!simpset addsimps [executions_def,is_execution_fragment_def,
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   187
    par_def, starts_of_def,trans_of_def,rename_def]) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   188
by (REPEAT(rtac allI 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   189
by (cut_inst_tac [("x","fst ex n")] opt_cases 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   190
 by (etac disjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   191
(* case 1: action sequence of rename C had already a None *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   192
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   193
(* case 2 *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   194
by (REPEAT(etac exE 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   195
by (etac conjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   196
by (eres_inst_tac [("x","n")] allE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   197
by (eres_inst_tac [("x","y")] allE 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   198
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   199
by (etac exE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   200
by (etac conjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   201
by (dtac sym 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   202
by (dtac sym 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   203
by (dtac sym 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   204
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   205
by (safe_tac HOL_cs);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   206
qed"reachable_rename_ioa";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   207
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   208
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   209
(* HOL Lemmata - must already exist ! *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   210
goal HOL.thy  "(~(A|B)) =(~A&~B)";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   211
 by (fast_tac HOL_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   212
val disj_demorgan = result();
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   213
goal HOL.thy  "(~(A&B)) =(~A|~B)";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   214
 by (fast_tac HOL_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   215
val conj_demorgan = result();
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   216
goal HOL.thy  "(~(? x.P x)) =(! x. (~ (P x)))";
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   217
 by (fast_tac HOL_cs 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   218
val neg_ex = result();
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   219
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   220
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   221
goal Solve.thy "!!f.[| is_weak_pmap f C A |]\
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   222
\                      ==> (is_weak_pmap f (rename C g) (rename A g))";
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   223
by (asm_full_simp_tac (!simpset addsimps [is_weak_pmap_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   224
by (rtac conjI 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   225
by (asm_full_simp_tac (!simpset addsimps [rename_def,starts_of_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   226
by (REPEAT (rtac allI 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   227
by (rtac imp_conj_lemma 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   228
by (simp_tac (!simpset addsimps [rename_def]) 1);
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   229
by (asm_full_simp_tac (!simpset addsimps [externals_def,asig_inputs_def,asig_outputs_def,asig_of_def,trans_of_def]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   230
by (safe_tac set_cs);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   231
by (rtac (expand_if RS ssubst) 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   232
 by (rtac conjI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   233
 by (rtac impI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   234
 by (etac disjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   235
 by (etac exE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   236
by (etac conjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   237
(* x is input *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   238
 by (dtac sym 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   239
 by (dtac sym 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   240
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   241
by (REPEAT (hyp_subst_tac 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   242
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   243
by (assume_tac 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   244
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   245
(* x is output *)
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   246
 by (etac exE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   247
by (etac conjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   248
 by (dtac sym 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   249
 by (dtac sym 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   250
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   251
by (REPEAT (hyp_subst_tac 1));
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   252
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   253
by (assume_tac 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   254
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   255
(* x is internal *)
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   256
by (simp_tac (!simpset addsimps [disj_demorgan,neg_ex,conj_demorgan] addcongs [conj_cong]) 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   257
by (rtac impI 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   258
by (etac conjE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   259
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   260
by (assume_tac 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   261
by (eres_inst_tac [("x","s")] allE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   262
by (eres_inst_tac [("x","t")] allE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   263
by (eres_inst_tac [("x","x")] allE 1);
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   264
by (eres_inst_tac [("x","x")] allE 1);
1266
3ae9fe3c0f68 added local simpsets
clasohm
parents: 1052
diff changeset
   265
by (Asm_full_simp_tac 1);
1052
e044350bfa52 Olafs new version.
nipkow
parents: 972
diff changeset
   266
qed"rename_through_pmap";