Given a set of logical expressions I need to find numbers with a margin between pairs that obey the logical rules.
For the expression $m=n=o,p=q$ with a margin of 10 the following (m,n,o,p,q)-tuples would be valid:
as they obey all the rules and have at least 10 between tuples of identical items. For completeness the following tuples wouldn't be valid:
In the first one a logical expression is violated, in the second case the margin is too small.
Details and started minimal example
Assume we have many logical expressions of completely analytical form as in
((n == n && i == m) || (n == m && i == n)) && ((o == n && i == i) || (o == i && i == n)).
I am absolutely aware of the fact that some of those expressions do not contain information (e.g., as in $n=n$). To eliminate those and to expand the expression to get individual cases I use
LogicalExpand wrapped around such that
LogicalExpand[((n == n && i == m) || (n == m && i == n)) && ((o == n && i == i) || (o == i && i == n))] (* Out: (m == i && o == n) || (m == i && n == i && o == i) || (n == i && n == m && o == i) || (n == i && n == m && o == n)*).
For each of the
Or-Arguments I need to find a specific tuple matching all criteria. The only way I can currently imagine is (not in code but paraphrased here) to choose the first letter in the alphabet in an
Equal and to replace via
ReplaceAll. But this seems error-prone and cumbersome. Is there a more elegant way?