anchor.diff:          while hasChanged do
               let old = newFormula
               newFormula <- optimize newFormula
  -            if old = newFormula then hasChanged <- false
  +            if System.Object.ReferenceEquals(old, newFormula) then hasChanged <- false
           newFormula
               
   
  
positive.code:                 | true, false -> FrameworkRestriction.And
                  | false, true -> FrameworkRestriction.OrAlreadySimplified
                  | false, false -> FrameworkRestriction.Or
              operands |> f, next
          | h when h.StartsWith "NOT" ->
              let next = h.Substring 2
  
  
negative.code:     //    Unchecked.defaultof<_>
  
      let Between (x, y) =
          And [ AtLeast x; NotAtLeast y ]
          //let isSimple, result = And2 (AtLeast x) (NotAtLeast y)
          //if isSimple then result else simplify result
  
      let combineRestrictionsWithOr (x : FrameworkRestriction) y =
          Or [ x; y ]
          //let isSimple, result = Or2 x y
          //if isSimple then result else simplify result
  
      let (|HasNoRestriction|_|) x =
          if x = NoRestriction then Some () else None
  
      let combineRestrictionsWithAnd (x : FrameworkRestriction) y =
          And [ x; y ]
          //let isSimple, result = And2 x y
          //if isSimple then result else simplify result
  
  type FrameworkRestrictions =
  | ExplicitRestriction of FrameworkRestriction
  