1478
|
1 |
(* Title: ZF/ex/TF.thy
|
515
|
2 |
ID: $Id$
|
1478
|
3 |
Author: Lawrence C Paulson, Cambridge University Computer Laboratory
|
515
|
4 |
Copyright 1994 University of Cambridge
|
|
5 |
|
|
6 |
Trees & forests, a mutually recursive type definition.
|
|
7 |
*)
|
|
8 |
|
|
9 |
TF = List +
|
|
10 |
consts
|
6112
|
11 |
tree, forest, tree_forest :: i=>i
|
|
12 |
|
|
13 |
datatype
|
|
14 |
"tree(A)" = Tcons ("a: A", "f: forest(A)")
|
|
15 |
and
|
|
16 |
"forest(A)" = Fnil | Fcons ("t: tree(A)", "f: forest(A)")
|
|
17 |
|
|
18 |
|
|
19 |
consts
|
6046
|
20 |
map :: [i=>i, i] => i
|
|
21 |
size :: i=>i
|
|
22 |
preorder :: i=>i
|
1401
|
23 |
list_of_TF :: i=>i
|
6046
|
24 |
of_list :: i=>i
|
|
25 |
reflect :: i=>i
|
515
|
26 |
|
6046
|
27 |
primrec
|
|
28 |
"list_of_TF (Tcons(x,f)) = [Tcons(x,f)]"
|
|
29 |
"list_of_TF (Fnil) = []"
|
|
30 |
"list_of_TF (Fcons(t,tf)) = Cons (t, list_of_TF(tf))"
|
515
|
31 |
|
6046
|
32 |
primrec
|
|
33 |
"of_list([]) = Fnil"
|
|
34 |
"of_list(Cons(t,l)) = Fcons(t, of_list(l))"
|
|
35 |
|
|
36 |
primrec
|
|
37 |
"map (h, Tcons(x,f)) = Tcons(h(x), map(h,f))"
|
|
38 |
"map (h, Fnil) = Fnil"
|
|
39 |
"map (h, Fcons(t,tf)) = Fcons (map(h, t), map(h, tf))"
|
515
|
40 |
|
6046
|
41 |
primrec
|
|
42 |
"size (Tcons(x,f)) = succ(size(f))"
|
|
43 |
"size (Fnil) = 0"
|
|
44 |
"size (Fcons(t,tf)) = size(t) #+ size(tf)"
|
|
45 |
|
|
46 |
primrec
|
|
47 |
"preorder (Tcons(x,f)) = Cons(x, preorder(f))"
|
|
48 |
"preorder (Fnil) = Nil"
|
|
49 |
"preorder (Fcons(t,tf)) = preorder(t) @ preorder(tf)"
|
|
50 |
|
|
51 |
primrec
|
|
52 |
"reflect (Tcons(x,f)) = Tcons(x, reflect(f))"
|
|
53 |
"reflect (Fnil) = Fnil"
|
|
54 |
"reflect (Fcons(t,tf)) = of_list
|
|
55 |
(list_of_TF (reflect(tf)) @
|
|
56 |
Cons(reflect(t), Nil))"
|
515
|
57 |
|
|
58 |
end
|