anchor.diff:                  let layerIsOutOfSearchZone = snd layer.[0].Bottom - fst layer.[0].Bottom + 1 >= maxSearchLength + 1
                   layerIsOutOfSearchZone
           
  -        let rec completeLayer layer matricesSize = 
  +        let rec completeLayer (layer: SubMatrix.T []) = 
  +            let matricesSize = layer.[0].Size
               if matricesSize = 1 then
                   let headProbsFromTail (tail, tailProb) = 
                       if allRules.IsComplexTail tail then 
  
positive.code:             let performOne (task, nts) = 
                  let (nt1, nt2) = nts
                  let {where=where; from1=from1; from2=from2} = task
                  addToP (nt1, nt2) (subMatrixMult nt1 nt2 from1 from2) where
  
              if doParallel
              then fullTasks |> Array.Parallel.iter performOne
  
negative.code:     
          // bottom-left triangle and diagonal of tMatrixes and pMatrixes are not used
          // upper-right triangle of size (stringSize - maxSearchLength) is not used
  
          // swich to dictionary (?)
          let tMatrix = new Map<NonTerminal, double [,]>
                              (
                                  nonterminals 
  