В общих чертах как-то так.
Основная идея создать простой булевый массив из двух значений, чтобы собственно можно было с помощью его индекса "перебирать" любые величины A B и C
bool check = true;
bool[] b = new bool[2] { true, false };
for (int i1 = 0; i1 < 2; i1++)
for (int i2 = 0; i2 < 2; i2++)
for (int i3 = 0; i3 < 2; i3++)
{
//Подставить тут требуемые сравнения.
bool result1 = (b[i1] || b[i2]);
bool result2 = (b[i2] || b[i1]);
if (result1 != result2) check = false;
}
Где на выходе смотреть на check. Если он осталься true значит пары эквиваленты
Закодировать сравнения для result1 и result2 конечно придется самому.