ex/Term.thy
author lcp
Thu, 06 Apr 1995 11:49:42 +0200
changeset 246 0f9230a24164
parent 195 df6b3bd14dcb
child 249 492493334e0f
permissions -rw-r--r--
Deleted extra space in clos_mk.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
     1
(*  Title: 	HOL/ex/Term
0
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
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
     6
Terms over a given alphabet -- function applications; illustrates list functor
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     7
  (essentially the same type as in Trees & Forests)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     8
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
     9
There is no constructor APP because it is simply cons ($) 
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    10
*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    11
195
df6b3bd14dcb Moved HOL/List to HOL/ex/SList (strict list).
nipkow
parents: 127
diff changeset
    12
Term = SList +
72
30e80f028c57 removal of obsolete type-declaration syntax
lcp
parents: 48
diff changeset
    13
30e80f028c57 removal of obsolete type-declaration syntax
lcp
parents: 48
diff changeset
    14
types   'a term
30e80f028c57 removal of obsolete type-declaration syntax
lcp
parents: 48
diff changeset
    15
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    16
arities term :: (term)term
72
30e80f028c57 removal of obsolete type-declaration syntax
lcp
parents: 48
diff changeset
    17
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    18
consts
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    19
  term		:: "'a item set => 'a item set"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    20
  Rep_term	:: "'a term => 'a item"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    21
  Abs_term	:: "'a item => 'a term"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    22
  Rep_Tlist	:: "'a term list => 'a item"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    23
  Abs_Tlist	:: "'a item => 'a term list"
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    24
  App		:: "['a, ('a term)list] => 'a term"
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    25
  Term_rec	:: "['a item, ['a item , 'a item, 'b list]=>'b] => 'b"
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    26
  term_rec	:: "['a term, ['a ,'a term list, 'b list]=>'b] => 'b"
72
30e80f028c57 removal of obsolete type-declaration syntax
lcp
parents: 48
diff changeset
    27
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    28
inductive "term(A)"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    29
  intrs
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    30
    APP_I "[| M: A;  N : list(term(A)) |] ==> M$N : term(A)"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    31
  monos   "[list_mono]"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    32
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    33
defs
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    34
  (*defining abstraction/representation functions for term list...*)
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    35
  Rep_Tlist_def	"Rep_Tlist == Rep_map(Rep_term)"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    36
  Abs_Tlist_def	"Abs_Tlist == Abs_map(Abs_term)"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    37
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    38
  (*defining the abstract constants*)
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    39
  App_def 	"App(a,ts) == Abs_term(Leaf(a) $ Rep_Tlist(ts))"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    40
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    41
  (*list recursion*)
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    42
  Term_rec_def	
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    43
   "Term_rec(M,d) == wfrec(trancl(pred_sexp),  M, \
114
b7f57e0ab47c HOL/ex/Term, Simult: updated for new Split
lcp
parents: 72
diff changeset
    44
\            Split(%x y g. d(x,y, Abs_map(g,y))))"
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    45
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    46
  term_rec_def
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    47
   "term_rec(t,d) == \
127
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    48
\   Term_rec(Rep_term(t), %x y r. d(Inv(Leaf,x), Abs_Tlist(y), r))"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    49
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    50
rules
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    51
    (*faking a type definition for term...*)
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    52
  Rep_term 		"Rep_term(n): term(range(Leaf))"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    53
  Rep_term_inverse 	"Abs_term(Rep_term(t)) = t"
d9527f97246e INSTALLATION OF INDUCTIVE DEFINITIONS
lcp
parents: 114
diff changeset
    54
  Abs_term_inverse 	"M: term(range(Leaf)) ==> Rep_term(Abs_term(M)) = M"
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    55
end