| 61224 |      1 | theory Tree2
 | 
|  |      2 | imports Main
 | 
|  |      3 | begin
 | 
|  |      4 | 
 | 
|  |      5 | datatype ('a,'b) tree =
 | 
|  |      6 |   Leaf ("\<langle>\<rangle>") |
 | 
| 62160 |      7 |   Node 'b "('a,'b)tree" 'a "('a,'b) tree" ("(1\<langle>_,/ _,/ _,/ _\<rangle>)")
 | 
| 61224 |      8 | 
 | 
|  |      9 | fun inorder :: "('a,'b)tree \<Rightarrow> 'a list" where
 | 
|  |     10 | "inorder Leaf = []" |
 | 
|  |     11 | "inorder (Node _ l a r) = inorder l @ a # inorder r"
 | 
|  |     12 | 
 | 
|  |     13 | fun height :: "('a,'b) tree \<Rightarrow> nat" where
 | 
|  |     14 | "height Leaf = 0" |
 | 
|  |     15 | "height (Node _ l a r) = max (height l) (height r) + 1"
 | 
|  |     16 | 
 | 
| 62650 |     17 | definition size1 :: "('a,'b) tree \<Rightarrow> nat" where
 | 
|  |     18 | "size1 t = size t + 1"
 | 
|  |     19 | 
 | 
|  |     20 | lemma size1_simps[simp]:
 | 
|  |     21 |   "size1 \<langle>\<rangle> = 1"
 | 
|  |     22 |   "size1 \<langle>u, l, x, r\<rangle> = size1 l + size1 r"
 | 
|  |     23 | by (simp_all add: size1_def)
 | 
|  |     24 | 
 | 
|  |     25 | lemma size1_ge0[simp]: "0 < size1 t"
 | 
|  |     26 | by (simp add: size1_def)
 | 
|  |     27 | 
 | 
| 62390 |     28 | end
 |