src/HOL/Lex/RegSet_of_nat_DA.thy
author wenzelm
Mon, 16 Nov 1998 10:41:08 +0100
changeset 5869 b279a84ac11c
parent 5184 9b8547a9496a
child 14431 ade3d26e0caf
permissions -rw-r--r--
added read;
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.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
Conversion of deterministic automata into regular sets.
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
To generate a regual expression, the alphabet must be finite.
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
     9
regexp needs to be supplied with an 'a list for a unique order
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
add_Atom d i j r a = (if d a i = j then Union r (Atom a) else r)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    12
atoms d i j as = foldl (add_Atom d i j) Empty as
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    13
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    14
regexp as d i j 0 = (if i=j then Union (Star Empty) (atoms d i j as)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    15
                        else atoms d i j as
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    16
*)
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
RegSet_of_nat_DA = RegSet + DA +
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    19
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    20
types 'a nat_next = "'a => nat => nat"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    21
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    22
syntax deltas :: 'a nat_next => 'a list => nat => nat
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    23
translations "deltas" == "foldl2"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    24
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    25
consts trace :: 'a nat_next => nat => 'a list => nat list
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 4832
diff changeset
    26
primrec
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    27
"trace d i [] = []"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    28
"trace d i (x#xs) = d x i # trace d (d x i) xs"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    29
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    30
(* conversion a la Warshall *)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    31
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    32
consts regset :: 'a nat_next => nat => nat => nat => 'a list set
5184
9b8547a9496a Adapted to new datatype package.
berghofe
parents: 4832
diff changeset
    33
primrec
4832
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    34
"regset d i j 0 = (if i=j then insert [] {[a] | a. d a i = j}
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    35
                          else {[a] | a. d a i = j})"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    36
"regset d i j (Suc k) = regset d i j k Un
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    37
                        conc (regset d i k k)
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    38
                             (conc (star(regset d k k k))
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    39
                                   (regset d k j k))"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    40
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    41
constdefs
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    42
 regset_of_DA :: ('a,nat)da => nat => 'a list set
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    43
"regset_of_DA A k == UN j:{j. j<k & fin A j}. regset (next A) (start A) j k"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    44
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    45
 bounded :: "'a => nat => bool"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    46
"bounded d k == !n. n < k --> (!x. d x n < k)"
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    47
bc11b5b06f87 Added conversion of reg.expr. to automata.
nipkow
parents:
diff changeset
    48
end