Максима - Сокращение логических выражений - PullRequest
0 голосов
/ 12 июня 2018

Рассмотрим следующие последовательности инструкций максимумов:

(in1) x=0;
(out) x=0

(in2) y>0;
(out) y>0

(in3) x>0 and y>0;
(out) x>0 and y>0

(in4) x=0 or y>0;
(out) y>0

(in5) x=0 and y>0;
(out) false

Первые три инструкции дают ожидаемые результаты.однако, почему логическое утверждение «x = 0» во входах (in4) и (in5) считается равным false?

Мы можем видеть, что когда выражение «x = 0» является изолированным, он не дает ему конкретного значения (здесь ложного), я не понимаю эти выводы концептуально и математически, это не математическое поведение, ожидаемое ..

Вот некоторые странные поведения, когда я пытаюсьдля отладки.

(in1) prederror:true$
(in2) debugmode(true)$
(in3) x=0;
(out) x=0
(in4) y>0;
(out) y>0
(in5) x=0 or y>0;
(out) Unable to evaluate predicate y > 0

Что это значит?

1 Ответ

0 голосов
/ 20 июня 2018

Что здесь происходит?

x > 0 and y > 0;

Аргументы [x > 0] и [y > 0] оцениваются сами собой.[[x > 0] and [y > 0]] также оценивается сам по себе.

x = 0 or y > 0;

[x = 0] оценивается как false, а [y > 0] оценивается само по себе, [false or [y > 0]] оценивается как [y > 0].

x = 0 and y > 0;

[x = 0] оценивается в false, а [false and [y > 0]] немедленно оценивается в false без вычисления второго аргумента.

Соответствующие разделы документации:

...