doc-src/Exercises/2003/a2/a2.thy
author wenzelm
Sat, 29 May 2004 15:05:25 +0200
changeset 14830 faa4865ba1ce
parent 14526 51dc6c7b1fd7
permissions -rw-r--r--
removed norm_typ; improved output; refer to Pretty.pp;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14526
mehta
parents:
diff changeset
     1
(*<*)
mehta
parents:
diff changeset
     2
theory a2 = Main:
mehta
parents:
diff changeset
     3
(*>*)
mehta
parents:
diff changeset
     4
mehta
parents:
diff changeset
     5
subsection {* Trees *}
mehta
parents:
diff changeset
     6
mehta
parents:
diff changeset
     7
mehta
parents:
diff changeset
     8
mehta
parents:
diff changeset
     9
text{* Define a datatype @{text"'a tree"} for binary trees. Both leaf
mehta
parents:
diff changeset
    10
and internal nodes store information.
mehta
parents:
diff changeset
    11
*};
mehta
parents:
diff changeset
    12
mehta
parents:
diff changeset
    13
datatype 'a tree(*<*)= Tip "'a" | Node "'a" "'a tree" "'a tree"(*>*)
mehta
parents:
diff changeset
    14
mehta
parents:
diff changeset
    15
text{*
mehta
parents:
diff changeset
    16
Define the functions @{term preOrder}, @{term postOrder}, and @{term
mehta
parents:
diff changeset
    17
inOrder} that traverse an @{text"'a tree"} in the respective order.
mehta
parents:
diff changeset
    18
*}
mehta
parents:
diff changeset
    19
mehta
parents:
diff changeset
    20
(*<*)consts(*>*)
mehta
parents:
diff changeset
    21
  preOrder :: "'a tree \<Rightarrow> 'a list"
mehta
parents:
diff changeset
    22
  postOrder :: "'a tree \<Rightarrow> 'a list"
mehta
parents:
diff changeset
    23
  inOrder :: "'a tree \<Rightarrow> 'a list"
mehta
parents:
diff changeset
    24
mehta
parents:
diff changeset
    25
text{*
mehta
parents:
diff changeset
    26
Define a function @{term mirror} that returns the mirror image of an @{text"'a tree"}.
mehta
parents:
diff changeset
    27
*}; 
mehta
parents:
diff changeset
    28
(*<*)consts(*>*)
mehta
parents:
diff changeset
    29
  mirror :: "'a tree \<Rightarrow> 'a tree"
mehta
parents:
diff changeset
    30
mehta
parents:
diff changeset
    31
text{*
mehta
parents:
diff changeset
    32
Suppose that @{term xOrder} and @{term yOrder} are tree traversal
mehta
parents:
diff changeset
    33
functions chosen from @{term preOrder}, @{term postOrder}, and @{term
mehta
parents:
diff changeset
    34
inOrder}. Formulate and prove all valid properties of the form
mehta
parents:
diff changeset
    35
\mbox{@{text "xOrder (mirror xt) = rev (yOrder xt)"}}.
mehta
parents:
diff changeset
    36
*}
mehta
parents:
diff changeset
    37
mehta
parents:
diff changeset
    38
text{*
mehta
parents:
diff changeset
    39
Define the functions @{term root}, @{term leftmost} and @{term
mehta
parents:
diff changeset
    40
rightmost}, that return the root, leftmost, and rightmost element
mehta
parents:
diff changeset
    41
respectively.
mehta
parents:
diff changeset
    42
*}
mehta
parents:
diff changeset
    43
(*<*)consts(*>*)
mehta
parents:
diff changeset
    44
  root :: "'a tree \<Rightarrow> 'a"
mehta
parents:
diff changeset
    45
  leftmost :: "'a tree \<Rightarrow> 'a"
mehta
parents:
diff changeset
    46
  rightmost :: "'a tree \<Rightarrow> 'a"
mehta
parents:
diff changeset
    47
mehta
parents:
diff changeset
    48
text {*
mehta
parents:
diff changeset
    49
Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.
mehta
parents:
diff changeset
    50
*};
mehta
parents:
diff changeset
    51
mehta
parents:
diff changeset
    52
theorem "last(inOrder xt) = rightmost xt"
mehta
parents:
diff changeset
    53
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    54
theorem "hd (inOrder xt) = leftmost xt "
mehta
parents:
diff changeset
    55
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    56
theorem "hd(preOrder xt) = last(postOrder xt)"
mehta
parents:
diff changeset
    57
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    58
theorem "hd(preOrder xt) = root xt"
mehta
parents:
diff changeset
    59
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    60
theorem "hd(inOrder xt) = root xt "
mehta
parents:
diff changeset
    61
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    62
theorem "last(postOrder xt) = root xt"
mehta
parents:
diff changeset
    63
(*<*)oops(*>*) 
mehta
parents:
diff changeset
    64
mehta
parents:
diff changeset
    65
mehta
parents:
diff changeset
    66
(*<*)end(*>*)