ex/term.thy
author lcp
Thu, 06 Apr 1995 11:49:42 +0200
changeset 246 0f9230a24164
parent 48 21291189b51e
permissions -rw-r--r--
Deleted extra space in clos_mk.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	HOL/ex/term
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1992  University of Cambridge
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     5
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     6
Terms over a given alphabet -- function applications; illustrates List functor
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     7
  (essentially the same type as in Trees & Forests)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     8
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     9
There is no constructor APP because it is simply cons (.) 
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    10
*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    11
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    12
Term = List +
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    13
types term 1
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    14
arities term :: (term)term
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    15
consts
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    16
  Term		:: "'a node set set => 'a node set set"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    17
  Rep_Term	:: "'a term => 'a node set"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    18
  Abs_Term	:: "'a node set => 'a term"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    19
  Rep_TList	:: "'a term list => 'a node set"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    20
  Abs_TList	:: "'a node set => 'a term list"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    21
  App		:: "['a, ('a term)list] => 'a term"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    22
  Term_rec	::
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    23
    "['a node set, ['a node set , 'a node set, 'b list]=>'b] => 'b"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    24
  term_rec	:: "['a term, ['a ,'a term list, 'b list]=>'b] => 'b"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    25
rules
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    26
  Term_def		"Term(A) == lfp(%Z.  A <*> List(Z))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    27
    (*faking a type definition for term...*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    28
  Rep_Term 		"Rep_Term(n): Term(range(Leaf))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    29
  Rep_Term_inverse 	"Abs_Term(Rep_Term(t)) = t"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    30
  Abs_Term_inverse 	"M: Term(range(Leaf)) ==> Rep_Term(Abs_Term(M)) = M"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    31
    (*defining abstraction/representation functions for term list...*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    32
  Rep_TList_def	"Rep_TList == Rep_map(Rep_Term)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    33
  Abs_TList_def	"Abs_TList == Abs_map(Abs_Term)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    34
    (*defining the abstract constants*)
48
21291189b51e changed "." to "$" and Cons to infix "#" to eliminate ambiguity
clasohm
parents: 0
diff changeset
    35
  App_def 	"App(a,ts) == Abs_Term(Leaf(a) $ Rep_TList(ts))"
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    36
     (*list recursion*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    37
  Term_rec_def	
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    38
   "Term_rec(M,d) == wfrec(trancl(pred_Sexp),  M, \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    39
\            %M g. Split(M, %x y. d(x,y, Abs_map(g,y))))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    40
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    41
  term_rec_def
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    42
   "term_rec(t,d) == \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    43
\   Term_rec(Rep_Term(t), %x y r. d(Inv(Leaf,x), Abs_TList(y), r))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    44
end