While writing formal specifications for an algorithm, e.g. an algorithm f that searches a list A for a value x, I want to express that now assumption should be made about the order of elements in A (for it is ordered a more efficient implementation may be available).
How could this be formulated?
If we guarantee that the algorithm will be called with an ordered list we could write pre(f.call,A) is ordered or if we guarantee that it is unordered pre(f.call,A) is unordered.
Although it is possible to just omit any statement regarding the orderliness of A in the specification, because then writing an algorithm using the ordered nature of A and then proving its correctness is impossible.
Or should we require a meta-statement about the specification S itself, stating that $\neg (S\implies \texttt{pre(f.call,A) is ordered})\wedge \neg (S\implies \texttt{pre(f.call,A) is unordered})$ which has to be proven?