doc-src/Tutorial/Datatype/Term.thy
author wenzelm
Sat, 01 Jul 2000 19:49:20 +0200
changeset 9226 cbe6144f0f15
parent 5851 15ce4c1c8313
child 9255 2ceb11a2e190
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
Term = Main +
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     2
datatype 'a t = A | B "'a * ('a t list)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     3
datatype expr = Var string | Lam string expr | App expr expr
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     4
              | Data data
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     5
and      data = Bool bool | Num nat
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     6
              | Closure string expr "(string * data)list"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     7
datatype ('a,'b)term = Var 'a | App 'b ((('a,'b)term)list)
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     8
consts
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
     9
   subst  :: ('a => ('a,'b)term) => ('a,'b)term      => ('a,'b)term
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    10
   substs :: ('a => ('a,'b)term) => ('a,'b)term list => ('a,'b)term list
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    11
primrec
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    12
  "subst s (Var x) = s x"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    13
  "subst s (App f ts) = App f (substs s ts)"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    14
  "substs s [] = []"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    15
  "substs s (t # ts) = subst s t # substs s ts"
15ce4c1c8313 New section on advanced datatypes.
nipkow
parents:
diff changeset
    16
end