You must mean aI have a set of numberssequenceof numbers because the result of the splitting may depend on the order of numbers.

There are many ways, of course, more or less awkward. For example, first you may define a predicate on sequences as follows:

iff for each .

Then you may say that for every sequence there exists a sequence of breakpoints where such that is equal to the concatenation of subsequences,

each of those subsequences satisfy , and is false for each .

Actually, after writing this, I see that this is too involved; it would probably take the reader too much effort to decipher all this. Besides, you need to consider carefully all limit cases: it is possible that n=0? n=1? m=0? m=1? etc. You need to make sure that the formulas make sense in all those cases; for example, that either is defined or never occurs, etc.

So, after defining the predicate , I would probably say that is represented as a concatenation ofmaximalsubsequences satisfying . "Maximal" means that they cannot be made longer. This description would make a reasonable compromise between precision and clarity.

Of course, it is possible to write a program in a functional language (such as ML or Haskell) that splits a sequence in a required way. Functional languages are basically mathematical languages because programs consist of equalities defining functions, and the bodies of those definitions consist of compositions of functions (e.g., no sequences of operations like "Set Tmp = Empty" before doing the loop). That would provide ultimate precision but, again, this is not the most user-friendly presentation.