src/HOL/Lex/Auto.thy
author paulson
Mon, 23 Sep 1996 18:18:18 +0200
changeset 2010 0a22b9d63a18
parent 1559 9ba0906aa60d
child 4670 f309259fa828
permissions -rw-r--r--
Simplification of definition of synth
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1476
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
     1
(*  Title:      HOL/Lex/Auto.thy
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1476
608483c2122a expanded tabs; incorporated Konrad's changes
clasohm
parents: 1374
diff changeset
     3
    Author:     Tobias Nipkow
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     4
    Copyright   1995 TUM
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     5
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     6
Automata expressed as triples of
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     7
  1. a start state,
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     8
  2. a transition function and
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     9
  3. a test for final states.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    10
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    11
NOTE: this functional representation is suitable for all kinds of automata,
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    12
      not just finite ones!
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    13
*)
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    14
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    15
Auto = Prefix +
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    16
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    17
types ('a,'b)auto = "'b * ('b => 'a => 'b) * ('b => bool)"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    18
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    19
constdefs
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    20
1374
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    21
  start :: ('a, 'b)auto => 'b
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    22
  "start(A) == fst(A)"
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    23
1374
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    24
  next  :: ('a, 'b)auto => ('b => 'a => 'b)
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    25
  "next(A) == fst(snd(A))"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    26
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    27
  fin   :: ('a, 'b)auto => ('b => bool)
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    28
  "fin(A) == snd(snd(A))"
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    29
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    30
  nexts :: ('a, 'b)auto => 'b => 'a list => 'b
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    31
  "nexts(A) == foldl(next(A))"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    32
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    33
  accepts :: ('a,'b) auto => 'a list => bool
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    34
  "accepts A xs == fin A (nexts A (start A) xs)"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    35
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    36
  acc_prefix :: ('a, 'b)auto => 'b => 'a list => bool
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    37
  "acc_prefix A st xs == ? us. us <= xs & us~=[] & fin A (nexts A st us)"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    38
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    39
end