doc-src/Tutorial/Ifexpr/Ifexpr.thy
author wenzelm
Sat, 01 Jul 2000 19:49:20 +0200
changeset 9226 cbe6144f0f15
parent 5377 efb799c5ed3c
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5377
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     1
Ifexpr = Main +
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     2
datatype boolex = Const bool | Var nat
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     3
                | Neg boolex | And boolex boolex
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     4
consts value :: boolex => (nat => bool) => bool
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     5
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     6
"value (Const b) env = b"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     7
"value (Var x)   env = env x"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     8
"value (Neg b)   env = (~ value b env)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
     9
"value (And b c) env = (value b env & value c env)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    10
datatype ifex = CIF bool | VIF nat | IF ifex ifex ifex
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    11
consts valif :: ifex => (nat => bool) => bool
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    12
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    13
"valif (CIF b)    env = b"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    14
"valif (VIF x)    env = env x"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    15
"valif (IF b t e) env = (if valif b env then valif t env
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    16
                                        else valif e env)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    17
consts bool2if :: boolex => ifex
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    18
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    19
"bool2if (Const b) = CIF b"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    20
"bool2if (Var x)   = VIF x"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    21
"bool2if (Neg b)   = IF (bool2if b) (CIF False) (CIF True)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    22
"bool2if (And b c) = IF (bool2if b) (bool2if c) (CIF False)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    23
consts normif :: ifex => ifex => ifex => ifex
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    24
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    25
"normif (CIF b)    t e = IF (CIF b) t e"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    26
"normif (VIF x)    t e = IF (VIF x) t e"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    27
"normif (IF b t e) u f = normif b (normif t u f) (normif e u f)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    28
consts norm :: ifex => ifex
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    29
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    30
"norm (CIF b)    = CIF b"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    31
"norm (VIF x)    = VIF x"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    32
"norm (IF b t e) = normif b (norm t) (norm e)"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    33
consts normal :: ifex => bool
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    34
primrec
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    35
"normal(CIF b) = True"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    36
"normal(VIF x) = True"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    37
"normal(IF b t e) = (normal t & normal e &
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    38
      (case b of CIF b => True | VIF x => True | IF x y z => False))"
efb799c5ed3c *** empty log message ***
nipkow
parents:
diff changeset
    39
end