all results must track curtails - done when merging two results that have curtails for the same combinator, use the smaller curtail - done - actually, shouldn't this be the opposite, given that curtails stand for the highest level that a result is valid at? when updating a result, replace the curtails with the leftrec level for the current context - done ignore a previous result when the current leftrec level is less than the previous result curtail level for even one of the curtails - done the function to check if reusable needs to take into account a +1 for the combinator being currently memoized - done when depth of a curtail is less than or equal to remaining tokens of input after the furthest finish of a result, that curtail can be deleted? when depth of curtail plus remaining tokens after furthest finish of a result is less than or equal to total input tokens plus one, curtail can be deleted from a result when depth of curtail plus remaining tokens after furthest finish of a result is less than or equal to remaining tokens at the start of a result, then curtail can be deleted from result, because in that case it is no longer possible for curtail to happen due to excessive combinator recursion