This is an old revision of the document!


1.

  (APP1) append(Empty, l) = l
  (APP2) append(Cons(x, xs), l) = Cons(x, append(xs, l))
  (REV1) reverse(Empty) = Empty
  (REV2) reverse(Cons(x, xs)) = append(reverse(xs), Cons(x, Empty))

2.

  (M1) mirror(Nil) = Nil
  (M2) mirror(Node(e, l, r)) =  Node(e, mirror(r), mirror(l))
  (F1) flatten(Nil) = Empty
  (F2) flatten(Node(e, l, r)) = Cons(e, append(flatten(l), flatten(r)))

3.

  (UPD1) update(MEmpty, k, v) = Insert((k, v), MEmpty)
  (UPD2) update(Insert((k, v), m), k', v') = if k = k' then Insert((k, v'), m)
                                                       else Insert((k, v), update(m, k', v'))
  (DEL1) delete(MEmpty, k) = MEmpty
  (DEL2) delete(Insert((k, v), m), k') = if k = k' then m
                                                   else Insert((k, v), delete(m, k'))