doc-src/Tutorial/Datatype/ABexp.thy
author wenzelm
Sat, 01 Jul 2000 19:49:20 +0200
changeset 9226 cbe6144f0f15
parent 5851 15ce4c1c8313
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5851
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     1
ABexp = Main +
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     2
datatype
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     3
    'a aexp = IF ('a bexp) ('a aexp) ('a aexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     4
            | Sum ('a aexp) ('a aexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     5
            | Diff ('a aexp) ('a aexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     6
            | Var 'a
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     7
            | Num nat
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     8
and 'a bexp = Less ('a aexp) ('a aexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     9
            | And ('a bexp) ('a bexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    10
            | Neg ('a bexp)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    11
consts  evala :: ('a => nat) => 'a aexp => nat
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    12
        evalb :: ('a => nat) => 'a bexp => bool
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    13
primrec
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    14
  "evala env (IF b a1 a2) =
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    15
     (if evalb env b then evala env a1 else evala env a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    16
  "evala env (Sum a1 a2) = evala env a1 + evala env a2"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    17
  "evala env (Diff a1 a2) = evala env a1 - evala env a2"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    18
  "evala env (Var v) = env v"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    19
  "evala env (Num n) = n"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    20
  "evalb env (Less a1 a2) = (evala env a1 < evala env a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    21
  "evalb env (And b1 b2) = (evalb env b1 & evalb env b2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    22
  "evalb env (Neg b) = (~ evalb env b)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    23
consts substa :: ('a => 'b aexp) => 'a aexp => 'b aexp
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    24
       substb :: ('a => 'b aexp) => 'a bexp => 'b bexp
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    25
primrec
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    26
  "substa s (IF b a1 a2) =
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    27
     IF (substb s b) (substa s a1) (substa s a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    28
  "substa s (Sum a1 a2) = Sum (substa s a1) (substa s a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    29
  "substa s (Diff a1 a2) = Diff (substa s a1) (substa s a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    30
  "substa s (Var v) = s v"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    31
  "substa s (Num n) = Num n"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    32
  "substb s (Less a1 a2) = Less (substa s a1) (substa s a2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    33
  "substb s (And b1 b2) = And (substb s b1) (substb s b2)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    34
  "substb s (Neg b) = Neg (substb s b)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    35
end