author | clasohm |
Wed, 02 Nov 1994 11:50:09 +0100 | |
changeset 156 | fd1be45b64bf |
parent 128 | 89669c58e506 |
child 178 | 12dd5d2e266b |
permissions | -rw-r--r-- |
128 | 1 |
(* Title: HOL/Sexp |
0 | 2 |
ID: $Id$ |
3 |
Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
|
4 |
Copyright 1992 University of Cambridge |
|
5 |
||
6 |
S-expressions, general binary trees for defining recursive data structures |
|
7 |
*) |
|
8 |
||
9 |
Sexp = Univ + |
|
10 |
consts |
|
128 | 11 |
sexp :: "'a item set" |
0 | 12 |
|
128 | 13 |
sexp_case :: "['a=>'b, nat=>'b, ['a item, 'a item]=>'b, \ |
14 |
\ 'a item] => 'b" |
|
0 | 15 |
|
128 | 16 |
sexp_rec :: "['a item, 'a=>'b, nat=>'b, \ |
17 |
\ ['a item, 'a item, 'b, 'b]=>'b] => 'b" |
|
0 | 18 |
|
128 | 19 |
pred_sexp :: "('a item * 'a item)set" |
20 |
||
21 |
inductive "sexp" |
|
22 |
intrs |
|
23 |
LeafI "Leaf(a): sexp" |
|
24 |
NumbI "Numb(a): sexp" |
|
25 |
SconsI "[| M: sexp; N: sexp |] ==> M$N : sexp" |
|
0 | 26 |
|
27 |
rules |
|
28 |
||
128 | 29 |
sexp_case_def |
30 |
"sexp_case(c,d,e,M) == @ z. (? x. M=Leaf(x) & z=c(x)) \ |
|
0 | 31 |
\ | (? k. M=Numb(k) & z=d(k)) \ |
48
21291189b51e
changed "." to "$" and Cons to infix "#" to eliminate ambiguity
clasohm
parents:
0
diff
changeset
|
32 |
\ | (? N1 N2. M = N1 $ N2 & z=e(N1,N2))" |
0 | 33 |
|
128 | 34 |
pred_sexp_def |
35 |
"pred_sexp == UN M: sexp. UN N: sexp. {<M, M$N>, <N, M$N>}" |
|
0 | 36 |
|
128 | 37 |
sexp_rec_def |
38 |
"sexp_rec(M,c,d,e) == wfrec(pred_sexp, M, \ |
|
39 |
\ %M g. sexp_case(c, d, %N1 N2. e(N1, N2, g(N1), g(N2)), M))" |
|
0 | 40 |
end |
41 |