anchor.diff:  
       // return true only if all discrete cursors moved to the same key or they cannot move further
       let rec doMoveNextDiscrete() =
  +      #if PRERELEASE
  +      Trace.Assert(this.HasValidState)
  +      #endif
         let mutable continueMoves = true
         // check if we reached the state where all cursors are at the same position
         while cmp.Compare(discreteKeysSet.First.Key, discreteKeysSet.Last.Key) < 0 && continueMoves do
  
positive.code:     
      // Continuous
      let doMoveNextContinuous(frontier:'K) =
        let mutable frontier = frontier
  
        // frontier is the current key. on each zip move we must move at least one cursor ahead 
  
negative.code:           if isContinuous && not allMovedAt then cont <- false
            allMovedAt <- cont
          else
            this.HasValidState <- true
            if isContinuous then
              // this condition is applied to all directions
              if cmp.Compare(contKeysSet.First.Key, contKeysSet.Last.Key) = 0 
  