src/HOL/BCV/Listn.thy
author wenzelm
Fri, 06 Oct 2000 17:35:58 +0200
changeset 10168 50be659d4222
parent 9791 a39e5d43de55
permissions -rw-r--r--
final tuning;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9791
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/BCV/Listn.thy
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     2
    ID:         $Id$
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     4
    Copyright   2000 TUM
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     5
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     6
Lists of a fixed length
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     7
*)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     8
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
     9
Listn = Err +
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    10
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    11
constdefs
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    12
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    13
 list :: nat => 'a set => 'a list set
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    14
"list n A == {xs. length xs = n & set xs <= A}"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    15
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    16
 le :: 'a ord => ('a list)ord
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    17
"le r == list_all2 (%x y. x <=_r y)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    18
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    19
syntax "@lesublist" :: 'a list => 'a ord => 'a list => bool
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    20
       ("(_ /<=[_] _)" [50, 0, 51] 50)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    21
syntax "@lesssublist" :: 'a list => 'a ord => 'a list => bool
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    22
       ("(_ /<[_] _)" [50, 0, 51] 50)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    23
translations
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    24
 "x <=[r] y" == "x <=_(Listn.le r) y"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    25
 "x <[r] y"  == "x <_(Listn.le r) y"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    26
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    27
constdefs
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    28
 map2 :: ('a => 'b => 'c) => 'a list => 'b list => 'c list
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    29
"map2 f == (%xs ys. map (split f) (zip xs ys))"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    30
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    31
syntax "@plussublist" :: 'a list => ('a => 'b => 'c) => 'b list => 'c list
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    32
       ("(_ /+[_] _)" [65, 0, 66] 65)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    33
translations  "x +[f] y" == "x +_(map2 f) y"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    34
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    35
consts coalesce :: 'a err list => 'a list err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    36
primrec
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    37
"coalesce [] = OK[]"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    38
"coalesce (ex#exs) = Err.sup (op #) ex (coalesce exs)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    39
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    40
constdefs
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    41
 sl :: nat => 'a sl => 'a list sl
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    42
"sl n == %(A,r,f). (list n A, le r, map2 f)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    43
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    44
 sup :: ('a => 'b => 'c err) => 'a list => 'b list => 'c list err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    45
"sup f == %xs ys. if size xs = size ys then coalesce(xs +[f] ys) else Err"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    46
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    47
 upto_esl :: nat => 'a esl => 'a list esl
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    48
"upto_esl m == %(A,r,f). (Union{list n A |n. n <= m}, le r, sup f)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    49
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    50
end