Как указать математическое выражение, используя спецификацию Z?

как я могу указать математическое выражение, используя нотацию Z? Я думаю, что свободные типы подходят для этой ситуации, потому что выражения имеют рекурсивный характер. учтите, что в нашем выражении могут быть скобки и переменные. и разрешены только ( + , - , / , * ). например: А + 2 * (3 - В) / 4

пожалуйста, помогите мне ...


person Armin Balalaie    schedule 16.11.2013    source источник


Ответы (1)


Вам нужно использовать аксиоматическое определение: определение объекта ограничено условиями.

Для этого в zet указана схема. Который

| Declaration
------------------------------
| Predicate
|
|

Дан рекурсивный пример:

[ИМЯ ПОЛЬЗОВАТЕЛЯ] — уже определенный тип.

Учитывая имя пользователя и последовательность имен пользователей (N1 --> USERNAME), возвращают число, которое данное имя пользователя появляется в последовательности.

|-occurs- USERNAME X seq USERNAME → N //here you define the input and what is returned.
---------------------------------------
|∀ u: USERNAME, s: seq USERNAME then
|s = < > => occurs(u,s) = 0
|s ≠ < > and head(s) = u => occurs(u,s) = 1+occurs(u,tail(s))
|s ≠ < > and head(s) ≠ u => occurs(u,s) = occurs(u,tail(s))
person nmargaritis    schedule 11.01.2014