Недостатки и предлагаемые изменения
В работе [7] показано, что арифметические и логические выражения, включающие ?-функции, можно преобразовывать в несколько вложенных ??функций и арифметических выражений, что позволяет получать константные выражения даже в тех случаях, когда аргументы исходного арифметического или логического выражения не являются константами. Это видно по следующему примеру: if P then a1 = 2 b1 = 1 else a2 = 4 b2 = 2 endif a3 = ?(P, a1, a2) b3 = ?(P, b2, b3) if a3 > b3 then ... endif
В данном случае переменные a3 и b3 будут всегда равны независимо от значения предиката P. Алгоритм, предложенный в [5] не сможет определить отношение значений переменных в данной ситуации.
Предлагаемые изменения алгоритма привели бы предикат a3 > b3 к виду: ?(P, a1 > b1, a2 > b2) = ?(P, true, true) = true.
Предлагаемые изменения алгоритма касаются обработки арифметических и логических выражений и состоят в следующем:
E1, E2 – аргументы арифметического (логического) оператора
- E1 и E2 не содержат ?-функций, либо обе содержат ?-функции с разными предикатами. Используется обычное правило для вычисления арифметических и логических выражений.
- Один из аргументов (E1 для определенности) содержит ?-функцию. Выполняется следующее преобразование:
?(P, V1, V2) op E2 = ?(P, V1 op E2, V2 op E2) - E1 и E2 содержат в себе ?-функции с одинаковыми предикатами. Выполняется следующее преобразование:
?(P, V1, V2) op ?(P, V3, V4) = ?(P, V1 op V3, V2 op V4)