src/HOL/Lex/NA.thy
author webertj
Wed, 10 Mar 2004 22:33:48 +0100
changeset 14456 cca28ec5f9a6
parent 14428 bb2b0e10d9be
permissions -rw-r--r--
support for non-recursive IDTs, The, arbitrary, Hilbert_Choice.Eps
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/NA.thy
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
Nondeterministic automata
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     7
*)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     8
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
     9
theory NA = AutoProj:
4832
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
types ('a,'s)na = "'s * ('a => 's => 's set) * ('s => bool)"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    12
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    13
consts delta :: "('a,'s)na => 'a list => 's => 's set"
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 4907
diff changeset
    14
primrec
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    15
"delta A []    p = {p}"
10834
a7897aebbffc *** empty log message ***
nipkow
parents: 8732
diff changeset
    16
"delta A (a#w) p = Union(delta A w ` next A a p)"
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    17
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    18
constdefs
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    19
 accepts :: "('a,'s)na => 'a list => bool"
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    20
"accepts A w == EX q : delta A w (start A). fin A q"
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    21
5323
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    22
 step :: "('a,'s)na => 'a => ('s * 's)set"
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    23
"step A a == {(p,q) . q : next A a p}"
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    24
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    25
consts steps :: "('a,'s)na => 'a list => ('s * 's)set"
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    26
primrec
5608
a82a038a3e7a id <-> Id
nipkow
parents: 5323
diff changeset
    27
"steps A [] = Id"
5323
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    28
"steps A (a#w) = steps A w  O  step A a"
028e00595280 Direct translation RegExp -> NA!
nipkow
parents: 5184
diff changeset
    29
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    30
lemma steps_append[simp]:
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    31
 "steps A (v@w) = steps A w  O  steps A v";
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    32
by(induct v, simp_all add:O_assoc)
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    33
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    34
lemma in_steps_append[iff]:
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    35
  "(p,r) : steps A (v@w) = ((p,r) : (steps A w O steps A v))"
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    36
apply(rule steps_append[THEN equalityE])
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    37
apply blast
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    38
done
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    39
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    40
lemma delta_conv_steps: "!!p. delta A w p = {q. (p,q) : steps A w}"
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    41
by(induct w)(auto simp:step_def)
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    42
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    43
lemma accepts_conv_steps:
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    44
 "accepts A w = (? q. (start A,q) : steps A w & fin A q)";
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    45
by(simp add: delta_conv_steps accepts_def)
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10834
diff changeset
    46
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    47
end