src/HOL/Lex/Chopper.thy
author nipkow
Thu, 04 Mar 2004 10:04:42 +0100
changeset 14428 bb2b0e10d9be
parent 10338 291ce4c4b50e
permissions -rw-r--r--
Conversion of ML files to Isar.
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
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10338
diff changeset
    18
theory Chopper = List_Prefix:
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    19
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10338
diff changeset
    20
types 'a chopper = "'a list => 'a list list * 'a list"
1344
f172a7f14e49 Half a lexical analyzer generator.
nipkow
parents:
diff changeset
    21
1559
9ba0906aa60d added constdefs section
clasohm
parents: 1476
diff changeset
    22
constdefs
14428
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10338
diff changeset
    23
  is_longest_prefix_chopper :: "('a list => bool) => 'a chopper => bool"
bb2b0e10d9be Conversion of ML files to Isar.
nipkow
parents: 10338
diff changeset
    24
 "is_longest_prefix_chopper L chopper == !xs.
1559
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