anchor.diff:          //assert (CharDiet.intervalsDisjoint charSet2.Tree)
   
           // If the input sets have the same underlying tree, we can return immediately.
  -        if charSet1.Tree === charSet2.Tree then charSet1
  +        if charSet1.Tree == charSet2.Tree then charSet1
           else
               // OPTIMIZATION : If the result is the same as either input set's tree,
               // return that set instead of creating a new one.
               let result = CharDiet.intersect charSet1.Tree charSet2.Tree
               //assert (CharDiet.dietInvariant result)
               //assert (CharDiet.intervalsDisjoint result)
  -            if charSet1.Tree === result then charSet1
  -            elif charSet2.Tree === result then charSet2
  +            if charSet1.Tree == result then charSet1
  +            elif charSet2.Tree == result then charSet2
               else CharSet (result)
   
       //
  
positive.code: 
          // OPTIMIZATION : If the trees are identical, there's no need to compare them.
          | t1 :: l1, t2 :: l2
              when t1 === t2 ->
              AvlTree.CompareStacks (comparer, l1, l2)
  
          | Empty :: t1, Empty :: t2 ->
  
negative.code:     //
      static member Compare (comparer : IComparer<'T>, s1 : AvlTree<'T>, s2 : AvlTree<'T>) : int =
          // OPTIMIZATION : If the trees are identical, there's no need to compare them.
          if s1 == s2 then 0
          else
              match s1, s2 with
              | Empty, Empty -> 0
  