Температурные логические выражения
Я работаю над некоторыми логическими выражениями. Я хочу объединить 2 выражения в одно, но не совсем точно, как. Я использую VDM Overture Tool.
Я смотрю на набор из 5 температур. Некоторым за 400, некоторым под и т.д.
Мое первое выражение верно, когда хотя бы одна температура превышает 400:
OverLimit: TempRead -> bool
OverLimit(temp) == temp(1) > 400 or temp(2) > 400 or
temp(3) > 400 or temp(4) > 400 or
temp(5) > 400;`
Второе выражение истинно, когда все значения в наборе превышают 400:
ContOverLimit: TempRead -> bool
ContOverLimit(temp) ==
temp(1) > 400 and temp(2) > 400 and
temp(3) > 400 and temp(4) > 400 and
temp(5) > 400;
Выражение, которое я пытаюсь сделать сейчас, - это когда хотя бы одна температура превышает 400, но не все из них.
Есть идеи как совместить эти два?
1 ответ
Похоже, вы ищете экзистенциальный квантификатор. Я предполагаю, что TempRead - это последовательность, так что-то вроде:
exists i in set inds temp & temp(i) > 400
Если вы буквально имеете в виду "но не все из них", вам нужно дополнительное "и существует" для проверки того, что существует < 400.
Кстати, будьте осторожны, сочетая два exists
выражения с and
: вам нужно заключить в скобки все существующее выражение, в противном случае предложение "и" считается частью первого существующего!