anchor.diff:              |> List.map (fun andFormula -> { Literals = andFormula.Literals |> List.distinct |> List.sort })
               |> List.distinct
               |> List.sort 
  -            |> fun newOrList -> FrameworkRestriction.WithOrListInternal newOrList fr
  +            |> fun newOrList ->
  +                if newOrList <> fr.OrFormulas then FrameworkRestriction.WithOrListInternal newOrList fr
  +                else fr
           let optimize fr =
               fr
               |> removeNegatedLiteralsWhichOccurSinglePositive
  
positive.code:     //    Unchecked.defaultof<_>
  
      let Between (x, y) =
          let isSimple, result = And2 (AtLeast x) (NotAtLeast y)
          if isSimple then result else simplify result
  
      let combineRestrictionsWithOr (x : FrameworkRestriction) 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 =
          let isSimple, result = And2 x y
          if isSimple then result else simplify result
  
  type FrameworkRestrictions =
  | ExplicitRestriction of FrameworkRestriction
  
negative.code:         while hasChanged do
              let old = newFormula
              newFormula <- optimize newFormula
              if System.Object.ReferenceEquals(old, newFormula) then hasChanged <- false
          newFormula
              
  
  