I've read lots of examples here on how to set one matrix Equal
to another, but how do you nest And
and Or
around several different equalities for values a matrix of variables can take on? Using what I've found so far, I've been able to cobble something together that works, but surely someone knows a better way?
The idea: Variables V
can take on the values in either A
or B
or C
.
Minimum Working Example:
Apply[
And,
Apply[
Or,
MapThread[
Equal,
{Transpose[
Table[v[i], {c, 3}, {i, 10}]],
Table[{-1, 0, 1}, {i, 10}]},
2],
{1}]]
Good output:
(v[1] == -1 || v[1] == 0 || v[1] == 1) && (v[2] == -1 || v[2] == 0 || v[2] == 1) &&
(v[3] == -1 || v[3] == 0 || v[3] == 1) && (v[4] == -1 || v[4] == 0 || v[4] == 1) &&
(v[5] == -1 || v[5] == 0 || v[5] == 1) && (v[6] == -1 || v[6] == 0 || v[6] == 1) &&
(v[7] == -1 || v[7] == 0 || v[7] == 1) && (v[8] == -1 || v[8] == 0 || v[8] == 1) &&
(v[9] == -1 || v[9] == 0 || v[9] == 1) && (v[10] == -1 || v[10] == 0 || v[10] == 1)
Ideally the answer would be something of the form
And[Or[V == {A, B, C}]]
instead of the heavy use of Table
like I have, so we can see what's happening and adapt it for other problems, and often the possible values won't have such a regular pattern as these do (A, B, & C may have irregular patterns and even repetitions in order to fill out the matrix to the right shape).
Conceivably there's a way to do something like this, but I couldn't get this to work either (for use in Reduce
or FindInstance
):
Eqns && V ∈ {-1, 0, 1}