## General problem
Given a set of logical expressions I need to find numbers with a margin between pairs that obey the logical rules.

## Example
For the expression $m=n=o,p=q$ with a margin of 10 the following (m,n,o,p,q)-tuples would be valid: 

(7,7,7,17,17)

(1,1,1,20,20)

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:

(1,2,2,20,20)

(1,1,1,9,9)

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?