src/HOL/Lex/Chopper.thy
author berghofe
Fri, 24 Jul 1998 13:19:38 +0200
changeset 5184 9b8547a9496a
parent 2609 4370e5f0fa3f
child 10338 291ce4c4b50e
permissions -rw-r--r--
Adapted to new datatype package.
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/Chopper.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
A 'chopper' is a function which returns
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     7
  1. a chopped up prefix of the input string
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     8
  2. together with the remaining suffix.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
     9
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    10
It is a longest_prefix_chopper if it
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    11
  1. chops up as much of the input as possible and
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    12
  2. chops it up into the longest substrings possible.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    13
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    14
A chopper is parametrized by a language ('a list => bool),
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    15
i.e. a set of strings.
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    16
*)
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    17
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    18
Chopper = Prefix +
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    19
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    20
types   'a chopper = "'a list => 'a list list * 'a list"
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    21
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    22
constdefs
1374
5e407f2a3323 removed quotes from consts and syntax sections
clasohm
parents: 1344
diff changeset
    23
  is_longest_prefix_chopper :: ['a list => bool, 'a chopper] => bool
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    24
  "is_longest_prefix_chopper L chopper == !xs.
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    25
       (!zs. chopper(xs) = ([],zs) -->
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    26
             zs=xs & (!ys. ys ~= [] & ys <= xs --> ~L(ys))) &
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    27
       (!ys yss zs. chopper(xs) = (ys#yss,zs) -->
2609
4370e5f0fa3f New class "order" and accompanying changes.
nipkow
parents: 1559
diff changeset
    28
          ys ~= [] & L(ys) & xs=ys@concat(yss)@zs &
4370e5f0fa3f New class "order" and accompanying changes.
nipkow
parents: 1559
diff changeset
    29
          chopper(concat(yss)@zs) = (yss,zs) &
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    30
          (!as. as <= xs & ys <= as & ys ~= as --> ~L(as)))"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    31
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    32
end