Как сделать включение схемы в другую схему с использованием языка Z
Я пишу формальную спецификацию для моей модели, используя z-нотацию Z-языка. Я застрял и не знаю, как включить одну схему в другую схему и создает ее переменные в других схемах. Любое руководство и помощь будут оценены. Благодарю.
2 ответа
Вы можете использовать схему как тип данных записи. Например, предположим, что у вас есть схема, описывающая комплексное целое число:
--- Complex ---
| real, img: ℤ
------
Вы можете объявить переменную в другой схеме такого типа:
--- Ex1 ---
| c: Complex
----
| c.real = 5 ∧ c.img = 6
-------
Конечно, вы можете создать более сложные типы данных с помощью последовательности и операции для добавления элемента:
--- State ---
| data: seq Complex
-------
--- Add1 ---
| ΔState
| real?, img?: ℤ
----
| ∃ c:Complex · c.real = real? ∧ c.img = img? ∧ data' = data^<c>
-------
Вы также можете использовать тэта-оператор для создания экземпляра этого типа. Значения для переменных взяты из текущего контекста (+ необязательные декорации):
--- Add2 ---
| ΔState
| real?, img?: ℤ
----
| data' = data^< θComplex? >
-------
θComplex?
это пример Complex
где значения для real
а также img
взяты из локальных переменных real?
а также img?
,
Мы также можем объявить входные переменные, используя исходную схему, и написать операцию более кратко (Add3 такой же, как Add2):
--- Add3 ---
| ΔState
| Complex?
----
| data' = data^< θComplex? >
-------
(Я удалил свой первоначальный ответ, потому что я неверно истолковал ваш вопрос.)
Как это
--- Agent---
| state: AgentState
-------
--- Shape ---
| agents :F Agent
----
| ∃ agt:agents · agt.state = stationary
-------