Температурные логические выражения

Я работаю над некоторыми логическими выражениями. Я хочу объединить 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: вам нужно заключить в скобки все существующее выражение, в противном случае предложение "и" считается частью первого существующего!

Другие вопросы по тегам