src/HOL/BCV/Err.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/Err.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
The error type
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
Err = Semilat +
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    10
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    11
datatype 'a err = Err | OK 'a
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    12
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    13
types 'a ebinop = 'a => 'a => 'a err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    14
      'a esl =    "'a set * 'a ord * 'a ebinop"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    15
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    16
constdefs
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    17
 lift :: ('a => 'b err) => ('a err => 'b err)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    18
"lift f e == case e of Err => Err | OK x => f x"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    19
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    20
 lift2 :: ('a => 'b => 'c err) => 'a err => 'b err => 'c err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    21
"lift2 f e1 e2 ==
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    22
 case e1 of Err  => Err
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    23
          | OK x => (case e2 of Err => Err | OK y => f x y)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    24
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    25
 le :: 'a ord => 'a err ord
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    26
"le r e1 e2 ==
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    27
        case e2 of Err => True |
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    28
                   OK y => (case e1 of Err => False | OK x => x <=_r y)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    29
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    30
 sup :: ('a => 'b => 'c) => ('a err => 'b err => 'c err)
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    31
"sup f == lift2(%x y. OK(x +_f y))"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    32
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    33
 err :: 'a set => 'a err set
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    34
"err A == insert Err {x . ? y:A. x = OK y}"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    35
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    36
 esl :: 'a sl => 'a esl
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    37
"esl == %(A,r,f). (A,r, %x y. OK(f x y))"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    38
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    39
 sl :: 'a esl => 'a err sl
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    40
"sl == %(A,r,f). (err A, le r, lift2 f)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    41
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    42
syntax
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    43
 err_semilat :: 'a esl => bool
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    44
translations
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    45
"err_semilat L" == "semilat(Err.sl L)"
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    46
a39e5d43de55 Completely new version of BCV
nipkow
parents:
diff changeset
    47
end