использование функции добавления в модульном проекте

Я смоделировал свой проект в сплаве и хочу отделить рабочую часть от смоделированной части моего проекта. В некоторых фактах и ​​предикатах я использую функцию добавления при сравнении мощности. Вот пример:

#relation1 = add[ #(relation2), 1]

Когда часть запуска и часть модели находятся в одном файле, все работает успешно.

Но когда я разделяю их на 2 файла, у меня возникает следующая синтаксическая ошибка:

The name "add" cannot be found.

Я подумал, что нужно открыть целочисленный модуль, где есть функция добавления, поэтому я открыл его в заголовке части модели. Но затем среда выполнения попросит меня указать область действия this/Univ.

You must specify a scope for sig "this/Univ"

Вот пример: сначала модель в одном модуле

module solo

open util/ordering [A] as chain
//open util/integer

sig A{ b : set B}

fact {  all a : A - chain/last | #(a.next.b) = add[ #(a.b), 2]}

sig B{}

затем часть запуска в другом модуле:

module due

open solo

run {#(solo/chain/first.b) = 2 }for 10 B, 5 A

когда я называю это так, у меня возникает ошибка «добавление имени не может быть найдено». Когда я раскомментирую открытие целочисленного модуля, у меня возникает ошибка «Вы должны указать область для sig« this/Univ »».

Что я должен сделать, чтобы заставить его работать?


person user2858691    schedule 08.01.2014    source источник


Ответы (1)


Если я не ошибаюсь, + является оператором объединения и поэтому не может использоваться для выполнения сложений.

Какую версию сплава вы используете?

Я думаю, что функция add[Int,Int] была добавлена ​​недавно, раньше она была plus[int,int].

Возможно, вы захотите попробовать plus[Int,Int] и посмотреть, решит ли это вашу проблему. В противном случае было бы неплохо иметь доступ к вашим моделям. Возможно, ошибка исходит из другого места.

person Loïc Gammaitoni    schedule 08.01.2014
comment
Я использую сплав 4.2. Вы правы, + - это оператор объединения. Я ошибаюсь. Я попробовал оператор плюс, и когда команда и модель находятся в одном файле, он работает, как и с оператором добавления. Но когда я пытаюсь с помощью команды в отдельном файле, кажется, что файл, открытый с ключевым словом open, не имеет доступа ни к операторам добавления, ни к операторам плюса. - person user2858691; 08.01.2014
comment
Я думаю, было бы легче диагностировать, что не так, если бы вы поделились проблемными моделями. На самом деле у меня есть трудности с тем, что вы имеете в виду, когда отделяете часть запуска от части модели. - person Loïc Gammaitoni; 09.01.2014
comment
Явное открытие util/integer должно работать. Отсутствующая область действия для Univ — странная ошибка, и я также хотел бы увидеть модель, которая ее вызывает. - person Aleksandar Milicevic; 10.01.2014
comment
Я изменил свой вопрос, чтобы представить модель с этой ошибкой. - person user2858691; 20.01.2014