src/HOL/IOA/Solve.ML
author urbanc
Tue, 13 Dec 2005 18:11:21 +0100
changeset 18396 b3e7da94b51f
parent 17288 aa3833fb7bee
permissions -rw-r--r--
added a fresh_left lemma that contains all instantiation for the various atom-types.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4530
ac1821645636 corrected Title
oheimb
parents: 4477
diff changeset
     1
(*  Title:      HOL/IOA/Solve.ML
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     2
    ID:         $Id$
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     3
    Author:     Tobias Nipkow & Konrad Slind
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     4
    Copyright   1994  TU Muenchen
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     5
*)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     6
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     7
Addsimps [mk_trace_thm,trans_in_actions];
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
     8
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4838
diff changeset
     9
Goalw [is_weak_pmap_def,traces_def]
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    10
  "!!f. [| IOA(C); IOA(A); externals(asig_of(C)) = externals(asig_of(A)); \
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    11
\          is_weak_pmap f C A |] ==> traces(C) <= traces(A)";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    12
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
    13
  by (simp_tac(simpset() addsimps [has_trace_def])1);
5132
24f992a25adc isatool expandshort;
wenzelm
parents: 5069
diff changeset
    14
  by Safe_tac;
4828
ee3317896a47 improved split_all_tac significantly
oheimb
parents: 4799
diff changeset
    15
  by (rename_tac "ex1 ex2" 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    16
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    17
  (* choose same trace, therefore same NF *)
4772
8c7e7eaffbdf split_all_tac now fails if there is nothing to split
oheimb
parents: 4681
diff changeset
    18
  by (res_inst_tac[("x","mk_trace  C ex1")] exI 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    19
  by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    20
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    21
  (* give execution of abstract automata *)
4772
8c7e7eaffbdf split_all_tac now fails if there is nothing to split
oheimb
parents: 4681
diff changeset
    22
  by (res_inst_tac[("x","(mk_trace A ex1,%i. f (ex2 i))")] bexI 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    23
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    24
  (* Traces coincide *)
4772
8c7e7eaffbdf split_all_tac now fails if there is nothing to split
oheimb
parents: 4681
diff changeset
    25
   by (asm_simp_tac (simpset() addsimps [mk_trace_def,filter_oseq_idemp])1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    26
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    27
  (* Use lemma *)
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 6916
diff changeset
    28
  by (ftac states_of_exec_reachable 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    29
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    30
  (* Now show that it's an execution *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
    31
  by (asm_full_simp_tac(simpset() addsimps [executions_def]) 1);
4153
e534c4c32d54 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4089
diff changeset
    32
  by Safe_tac;
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    33
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    34
  (* Start states map to start states *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    35
  by (dtac bspec 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    36
  by (atac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    37
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    38
  (* Show that it's an execution fragment *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
    39
  by (asm_full_simp_tac (simpset() addsimps [is_execution_fragment_def])1);
4153
e534c4c32d54 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4089
diff changeset
    40
  by Safe_tac;
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    41
4772
8c7e7eaffbdf split_all_tac now fails if there is nothing to split
oheimb
parents: 4681
diff changeset
    42
  by (eres_inst_tac [("x","ex2 n")] allE 1);
8c7e7eaffbdf split_all_tac now fails if there is nothing to split
oheimb
parents: 4681
diff changeset
    43
  by (eres_inst_tac [("x","ex2 (Suc n)")] allE 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    44
  by (eres_inst_tac [("x","a")] allE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    45
  by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    46
qed "trace_inclusion";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    47
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    48
(* Lemmata *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    49
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    50
val prems = goal HOL.thy "(P ==> Q-->R) ==> P&Q --> R";
4153
e534c4c32d54 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4089
diff changeset
    51
  by (fast_tac (claset() addDs prems) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    52
val imp_conj_lemma = result();
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    53
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    54
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    55
(* fist_order_tautology of externals_of_par *)
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    56
goal (theory "IOA") "a:externals(asig_of(A1||A2)) =    \
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    57
\  (a:externals(asig_of(A1)) & a:externals(asig_of(A2)) |  \
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    58
\  a:externals(asig_of(A1)) & a~:externals(asig_of(A2)) |  \
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    59
\  a~:externals(asig_of(A1)) & a:externals(asig_of(A2)))";
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
    60
by (asm_full_simp_tac (simpset() addsimps [externals_def,asig_of_par,asig_comp_def,asig_inputs_def,asig_outputs_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    61
 by (Fast_tac 1);
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    62
val externals_of_par_extra = result();
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    63
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5132
diff changeset
    64
Goal "[| reachable (C1||C2) s |] ==> reachable C1 (fst s)";
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    65
by (asm_full_simp_tac (simpset() addsimps [reachable_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    66
by (etac bexE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    67
by (res_inst_tac [("x",
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3078
diff changeset
    68
   "(filter_oseq (%a. a:actions(asig_of(C1))) \
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    69
\                (fst ex),                                                \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3078
diff changeset
    70
\    %i. fst (snd ex i))")]  bexI 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    71
(* fst(s) is in projected execution *)
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    72
 by (Force_tac 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    73
(* projected execution is indeed an execution *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    74
by (asm_full_simp_tac
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    75
      (simpset() delcongs [if_weak_cong]
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    76
                 addsimps [executions_def,is_execution_fragment_def,
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    77
                           par_def,starts_of_def,trans_of_def,filter_oseq_def]
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    78
                 addsplits [option.split]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    79
qed"comp1_reachable";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    80
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    81
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    82
(* Exact copy of proof of comp1_reachable for the second
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    83
   component of a parallel composition.     *)
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5132
diff changeset
    84
Goal "[| reachable (C1||C2) s|] ==> reachable C2 (snd s)";
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    85
by (asm_full_simp_tac (simpset() addsimps [reachable_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    86
by (etac bexE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    87
by (res_inst_tac [("x",
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3078
diff changeset
    88
   "(filter_oseq (%a. a:actions(asig_of(C2)))\
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    89
\                (fst ex),                                                \
3842
b55686a7b22c fixed dots;
wenzelm
parents: 3078
diff changeset
    90
\    %i. snd (snd ex i))")]  bexI 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    91
(* fst(s) is in projected execution *)
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    92
 by (Force_tac 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    93
(* projected execution is indeed an execution *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    94
by (asm_full_simp_tac
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    95
      (simpset() delcongs [if_weak_cong]
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    96
                 addsimps [executions_def,is_execution_fragment_def,
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
    97
                           par_def,starts_of_def,trans_of_def,filter_oseq_def]
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
    98
                 addsplits [option.split]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
    99
qed"comp2_reachable";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   100
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   101
Delsplits [split_if]; Delcongs [if_weak_cong];
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   102
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   103
(* THIS THEOREM IS NEVER USED (lcp)
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   104
   Composition of possibility-mappings *)
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   105
Goalw [is_weak_pmap_def]
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   106
     "[| is_weak_pmap f C1 A1; \
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   107
\        externals(asig_of(A1))=externals(asig_of(C1));\
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   108
\        is_weak_pmap g C2 A2;  \
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   109
\        externals(asig_of(A2))=externals(asig_of(C2)); \
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   110
\        compat_ioas C1 C2; compat_ioas A1 A2  |]     \
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   111
\  ==> is_weak_pmap (%p.(f(fst(p)),g(snd(p)))) (C1||C2) (A1||A2)";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   112
 by (rtac conjI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   113
(* start_states *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   114
 by (asm_full_simp_tac (simpset() addsimps [par_def, starts_of_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   115
(* transitions *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   116
by (REPEAT (rtac allI 1));
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   117
by (rtac imp_conj_lemma 1);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   118
by (simp_tac (simpset() addsimps [externals_of_par_extra]) 1);
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   119
by (simp_tac (simpset() addsimps [par_def]) 1);
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   120
by (asm_full_simp_tac (simpset() addsimps [trans_of_def]) 1);
4831
dae4d63a1318 Renamed expand_const -> split_const.
nipkow
parents: 4828
diff changeset
   121
by (stac split_if 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   122
by (rtac conjI 1);
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   123
by (rtac impI 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   124
by (etac disjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   125
(* case 1      a:e(A1) | a:e(A2) *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   126
by (asm_full_simp_tac (simpset() addsimps [comp1_reachable,comp2_reachable,
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   127
                                    ext_is_act]) 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   128
by (etac disjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   129
(* case 2      a:e(A1) | a~:e(A2) *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   130
by (asm_full_simp_tac (simpset() addsimps [comp1_reachable,comp2_reachable,
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   131
             ext_is_act,ext1_ext2_is_not_act2]) 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   132
(* case 3      a:~e(A1) | a:e(A2) *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   133
by (asm_full_simp_tac (simpset() addsimps [comp1_reachable,comp2_reachable,
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   134
             ext_is_act,ext1_ext2_is_not_act1]) 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   135
(* case 4      a:~e(A1) | a~:e(A2) *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   136
by (rtac impI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   137
by (subgoal_tac "a~:externals(asig_of(A1)) & a~:externals(asig_of(A2))" 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   138
(* delete auxiliary subgoal *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   139
by (Asm_full_simp_tac 2);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   140
by (Fast_tac 2);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   141
by (simp_tac (simpset() addsimps [conj_disj_distribR] addcongs [conj_cong]
4831
dae4d63a1318 Renamed expand_const -> split_const.
nipkow
parents: 4828
diff changeset
   142
                 addsplits [split_if]) 1);
4153
e534c4c32d54 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4089
diff changeset
   143
by (REPEAT((resolve_tac [conjI,impI] 1 ORELSE etac conjE 1) THEN
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   144
           asm_full_simp_tac(simpset() addsimps[comp1_reachable,
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   145
                                                comp2_reachable])1));
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   146
qed"fxg_is_weak_pmap_of_product_IOA";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   147
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   148
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5132
diff changeset
   149
Goal "[| reachable (rename C g) s |] ==> reachable C s";
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   150
by (asm_full_simp_tac (simpset() addsimps [reachable_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   151
by (etac bexE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   152
by (res_inst_tac [("x",
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   153
   "((%i. case (fst ex i) \
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   154
\         of None => None\
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   155
\          | Some(x) => g x) ,snd ex)")]  bexI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   156
by (Simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   157
(* execution is indeed an execution of C *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   158
by (asm_full_simp_tac
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   159
      (simpset() addsimps [executions_def,is_execution_fragment_def,
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   160
                          par_def,starts_of_def,trans_of_def,rename_def]
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5143
diff changeset
   161
                addsplits [option.split]) 1);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   162
by (best_tac (claset() addSDs [spec] addDs [sym] addss (simpset())) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   163
qed"reachable_rename_ioa";
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   164
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   165
5143
b94cd208f073 Removal of leading "\!\!..." from most Goal commands
paulson
parents: 5132
diff changeset
   166
Goal "[| is_weak_pmap f C A |]\
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   167
\                      ==> (is_weak_pmap f (rename C g) (rename A g))";
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   168
by (asm_full_simp_tac (simpset() addsimps [is_weak_pmap_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   169
by (rtac conjI 1);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   170
by (asm_full_simp_tac (simpset() addsimps [rename_def,starts_of_def]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   171
by (REPEAT (rtac allI 1));
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   172
by (rtac imp_conj_lemma 1);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   173
by (simp_tac (simpset() addsimps [rename_def]) 1);
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 4071
diff changeset
   174
by (asm_full_simp_tac (simpset() addsimps [externals_def,asig_inputs_def,asig_outputs_def,asig_of_def,trans_of_def]) 1);
4153
e534c4c32d54 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4089
diff changeset
   175
by Safe_tac;
4831
dae4d63a1318 Renamed expand_const -> split_const.
nipkow
parents: 4828
diff changeset
   176
by (stac split_if 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   177
 by (rtac conjI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   178
 by (rtac impI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   179
 by (etac disjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   180
 by (etac exE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   181
by (etac conjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   182
(* x is input *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   183
 by (dtac sym 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   184
 by (dtac sym 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   185
by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   186
by (REPEAT (hyp_subst_tac 1));
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   187
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   188
by (assume_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   189
by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   190
(* x is output *)
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   191
 by (etac exE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   192
by (etac conjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   193
 by (dtac sym 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   194
 by (dtac sym 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   195
by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   196
by (REPEAT (hyp_subst_tac 1));
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   197
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   198
by (assume_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   199
by (Asm_full_simp_tac 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   200
(* x is internal *)
17288
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   201
by (simp_tac (simpset() addsimps [de_Morgan_disj, de_Morgan_conj, not_ex]
aa3833fb7bee converted to Isar theory format;
wenzelm
parents: 7499
diff changeset
   202
                       addcongs [conj_cong]) 1);
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   203
by (rtac impI 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   204
by (etac conjE 1);
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   205
by (cut_inst_tac [("C","C"),("g","g"),("s","s")] reachable_rename_ioa 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4153
diff changeset
   206
by Auto_tac;
3078
984866a8f905 old IOA meta theory (see also new version in HOLCF/IOA/meta_theory);
mueller
parents:
diff changeset
   207
qed"rename_through_pmap";
4681
a331c1f5a23e expand_if is now by default part of the simpset.
nipkow
parents: 4651
diff changeset
   208
4831
dae4d63a1318 Renamed expand_const -> split_const.
nipkow
parents: 4828
diff changeset
   209
Addsplits [split_if];
6916
4957978b6f9e tidied proofs to cope with default if_weak_cong
paulson
parents: 5184
diff changeset
   210
Addcongs  [if_weak_cong];