src/HOL/Lex/RegSet_of_nat_DA.ML
author paulson
Fri, 09 Oct 1998 11:10:59 +0200
changeset 5625 77e9ab9cd7b1
parent 5521 7970832271cc
child 5983 79e301a6a51b
permissions -rw-r--r--
polymorphic versions of nat_neq_iff and nat_neqE
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/Lex/RegSet_of_nat_DA.ML
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     4
    Copyright   1998 TUM
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     5
*)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     6
5458
0e26af5975ba in_set_butlast_appendI supersedes in_set_butlast_appendI1,2
paulson
parents: 5184
diff changeset
     7
Addsimps [in_set_butlast_appendI];
0e26af5975ba in_set_butlast_appendI supersedes in_set_butlast_appendI1,2
paulson
parents: 5184
diff changeset
     8
AddIs    [in_set_butlast_appendI];
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     9
Addsimps [image_eqI];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    10
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    11
(* Lists *)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    12
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    13
Goal "(butlast xs = []) = (case xs of [] => True | y#ys => ys=[])";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    14
by (exhaust_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    15
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    16
qed "butlast_empty";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    17
AddIffs [butlast_empty];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    18
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    19
Goal "x:set(butlast xs) --> xs:set xss --> x:set(butlast(concat xss))";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    20
by (induct_tac "xss" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    21
 by (Simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    22
by (asm_simp_tac (simpset() addsimps [butlast_append] delsimps ball_simps) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    23
by (rtac conjI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    24
 by (Clarify_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    25
 by (rtac conjI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    26
  by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    27
 by (Clarify_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    28
 by (subgoal_tac "xs=[]" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    29
  by (rotate_tac ~1 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    30
  by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    31
 by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    32
by (blast_tac (claset() addDs [in_set_butlastD]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    33
qed_spec_mp "in_set_butlast_concatI";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    34
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    35
(* Regular sets *)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    36
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    37
(* The main lemma:
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    38
   how to decompose a trace into a prefix, a list of loops and a suffix.
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    39
*)
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    40
Goal "!i. k : set(trace d i xs) --> (? pref mids suf. \
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    41
\ xs = pref @ concat mids @ suf & \
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    42
\ deltas d pref i = k & (!n:set(butlast(trace d i pref)). n ~= k) & \
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    43
\ (!mid:set mids. (deltas d mid k = k) & \
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    44
\                 (!n:set(butlast(trace d k mid)). n ~= k)) & \
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    45
\ (!n:set(butlast(trace d k suf)). n ~= k))";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    46
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    47
 by (Simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    48
by (rename_tac "a as" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    49
by (rtac allI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    50
by (case_tac "d a i = k" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    51
 by (strip_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    52
 by (res_inst_tac[("x","[a]")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    53
 by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    54
 by (case_tac "k : set(trace d (d a i) as)" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    55
  by (etac allE 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    56
  by (etac impE 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    57
   by (assume_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    58
  by (REPEAT(etac exE 1));
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    59
  by (res_inst_tac[("x","pref#mids")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    60
  by (res_inst_tac[("x","suf")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    61
  by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    62
 by (res_inst_tac[("x","[]")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    63
 by (res_inst_tac[("x","as")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    64
 by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    65
 by (blast_tac (claset() addDs [in_set_butlastD]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    66
by (Asm_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    67
by (rtac conjI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    68
 by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    69
by (strip_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    70
by (etac allE 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    71
by (etac impE 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    72
 by (assume_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    73
by (REPEAT(etac exE 1));
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    74
by (res_inst_tac[("x","a#pref")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    75
by (res_inst_tac[("x","mids")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    76
by (res_inst_tac[("x","suf")]exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    77
by (Asm_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    78
qed_spec_mp "decompose";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    79
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    80
Goal "!i. length(trace d i xs) = length xs";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    81
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    82
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    83
qed "length_trace";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    84
Addsimps [length_trace];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    85
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    86
Goal "!i. deltas d (xs@ys) i = deltas d ys (deltas d xs i)";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    87
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    88
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    89
qed "deltas_append";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    90
Addsimps [deltas_append];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    91
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    92
Goal "!i. trace d i (xs@ys) = trace d i xs @ trace d (deltas d xs i) ys";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    93
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    94
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    95
qed "trace_append";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    96
Addsimps [trace_append];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    97
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
    98
Goal "(!xs: set xss. deltas d xs i = i) --> \
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    99
\         trace d i (concat xss) = concat (map (trace d i) xss)";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   100
by (induct_tac "xss" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   101
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   102
qed_spec_mp "trace_concat";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   103
Addsimps [trace_concat];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   104
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   105
Goal "!i. (trace d i xs = []) = (xs = [])";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   106
by (exhaust_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   107
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   108
qed "trace_is_Nil";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   109
Addsimps [trace_is_Nil];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   110
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   111
Goal "(trace d i xs = n#ns) = \
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   112
\         (case xs of [] => False | y#ys => n = d y i & ns = trace d n ys)";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   113
by (exhaust_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   114
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   115
by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   116
qed_spec_mp "trace_is_Cons_conv";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   117
Addsimps [trace_is_Cons_conv];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   118
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   119
Goal "!i. set(trace d i xs) = \
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   120
\ (if xs=[] then {} else insert(deltas d xs i)(set(butlast(trace d i xs))))";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   121
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   122
 by (Simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   123
by (asm_simp_tac (simpset() addsimps [insert_commute]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   124
qed "set_trace_conv";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   125
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   126
Goal
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   127
 "(!mid:set mids. deltas d mid k = k) --> deltas d (concat mids) k = k";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   128
by (induct_tac "mids" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   129
by (ALLGOALS Asm_simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   130
qed_spec_mp "deltas_concat";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   131
Addsimps [deltas_concat];
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   132
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   133
goal Nat.thy "!!n. [| n < Suc k; n ~= k |] ==> n < k";
5625
77e9ab9cd7b1 polymorphic versions of nat_neq_iff and nat_neqE
paulson
parents: 5521
diff changeset
   134
by (etac linorder_neqE 1);
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   135
by (ALLGOALS trans_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   136
val lemma = result();
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   137
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   138
Goal
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   139
 "!i j xs. xs : regset d i j k = \
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   140
\          ((!n:set(butlast(trace d i xs)). n < k) & deltas d xs i = j)";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   141
by (induct_tac "k" 1);
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5132
diff changeset
   142
 by (simp_tac (simpset() addcongs [conj_cong] addsplits [list.split]) 1);
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   143
by (strip_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   144
by (asm_simp_tac (simpset() addsimps [conc_def]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   145
by (rtac iffI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   146
 by (etac disjE 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   147
  by (Asm_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   148
 by (REPEAT(eresolve_tac[exE,conjE] 1));
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   149
 by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   150
 by (subgoal_tac
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5132
diff changeset
   151
      "(!m:set(butlast(trace d n xsb)). m < Suc n) & deltas d xsb n = n" 1);
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   152
  by (asm_simp_tac (simpset() addsimps [set_trace_conv,butlast_append,ball_Un]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   153
 by (etac star.induct 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   154
  by (Simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   155
 by (asm_full_simp_tac (simpset() addsimps [set_trace_conv,butlast_append,ball_Un]) 1);
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 5132
diff changeset
   156
by (case_tac "n : set(butlast(trace d i xs))" 1);
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   157
 by (rtac disjI1 2);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   158
 by (blast_tac (claset() addIs [lemma]) 2);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   159
by (rtac disjI2 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   160
by (dtac (in_set_butlastD RS decompose) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   161
by (Clarify_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   162
by (res_inst_tac [("x","pref")] exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   163
by (Asm_full_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   164
by (rtac conjI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   165
 by (rtac ballI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   166
 by (rtac lemma 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   167
  by (Asm_simp_tac 2);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   168
 by (EVERY[dtac bspec 1, atac 2]);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   169
 by (Asm_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   170
by (res_inst_tac [("x","concat mids")] exI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   171
by (Simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   172
by (rtac conjI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   173
 by (rtac concat_in_star 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   174
 by (Asm_simp_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   175
 by (rtac ballI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   176
 by (rtac ballI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   177
 by (rtac lemma 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   178
  by (Asm_simp_tac 2);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   179
 by (EVERY[dtac bspec 1, atac 2]);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   180
 by (asm_simp_tac (simpset() addsimps [image_eqI,in_set_butlast_concatI]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   181
by (rtac ballI 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   182
by (rtac lemma 1);
5521
7970832271cc added wrapper for bspec
oheimb
parents: 5458
diff changeset
   183
 by (Auto_tac);
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   184
qed_spec_mp "regset_spec";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   185
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   186
Goalw [bounded_def]
5118
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   187
 "bounded d k ==> !i. i < k --> (!n:set(trace d i xs). n < k)";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   188
by (induct_tac "xs" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   189
 by (ALLGOALS Simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   190
by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   191
qed_spec_mp "trace_below";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   192
5118
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   193
Goal "[| bounded d k; i < k; j < k |] ==> \
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   194
\     regset d i j k = {xs. deltas d xs i = j}";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   195
by (rtac set_ext 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   196
by (simp_tac (simpset() addsimps [regset_spec]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   197
by (blast_tac (claset() addDs [trace_below,in_set_butlastD]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   198
qed "regset_below";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   199
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   200
Goalw [bounded_def]
5118
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   201
 "bounded d k ==> !i. i < k --> deltas d w i < k";
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   202
by (induct_tac "w" 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   203
 by (ALLGOALS Simp_tac);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   204
by (Blast_tac 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   205
qed_spec_mp "deltas_below";
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   206
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4832
diff changeset
   207
Goalw [regset_of_DA_def]
5118
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   208
 "[| bounded (next A) k; start A < k; j < k |] ==> \
6b995dad8a9d Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
   209
\ w : regset_of_DA A k = accepts A w";
5132
24f992a25adc isatool expandshort;
wenzelm
parents: 5118
diff changeset
   210
by (asm_simp_tac (simpset() addcongs [conj_cong] addsimps
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   211
 [regset_below,deltas_below,accepts_def,delta_def]) 1);
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
   212
qed "regset_DA_equiv";