Учитывая набор из двух или более логических условий, возможно ли алгоритмически определить, что ровно ОДНО из них будет оцениваться как ИСТИНА? Например:
# this should pass, since for every X, only one condition is taken
cond 1: (X >= 1.0)
cond 2: (X < 1.0)
# this should fail
cond 1: (X < 1.0)
cond 2: (X > 2.0)
# this should also fail, since X=1.0 would meet both conditions
cond 1: (X < 2.0)
cond 2: (X > 0.0)
# there may be more than one variable involved
cond 1: (X >= 1.0 && Y >= 0)
cond 2: (X < 1.0 && Y <= -1)
Эти условия генерируются из предметно-ориентированного языка и используются для определения следующего пути выполнения. то есть пользователи составляют условие для каждого параметра, когда дерево выполнения разделяется на несколько путей, а условие, которое оценивается как истинное, определяет путь, который должен быть выбран. Чтобы симуляция была действительной, это должен быть только один возможный путь, который может быть выбран для любых заданных значений.
В настоящее время я оцениваю эти условия во время выполнения и выкидываю истерику, если более одного (или ни одного) из них истинны.
Я хотел бы иметь возможность проверять ошибочные условия на этапе анализа (от языка домена до компилируемого исходного кода). Является ли это возможным? Как можно было бы проверить условия?
обновление
Что касается того, что может быть включено в условия, сфера применения на практике довольно широка. Все это возможные условия:
X >= Y && Y < Z
X.within_radius(0.4)
X IN some_array
X * Y < Z
окончательное обновление
Похоже, что решение, охватывающее все возможные условия, невозможно (или, по крайней мере, учитывая мои ограниченные знания, невозможно в течение времени, отведенного для решения проблемы). Я вернусь к этому когда-нибудь, но пока принимаю ответ, который выдвинул меня вперед.