Указание области применения Sig in Alloy

я новичок в Alloy, и есть ошибка, из-за которой моя программа не может выполняться или отображаться. Ошибка у меня есть

Произошла синтаксическая ошибка: необходимо указать область действия для «это/имя».

Мой код

    module language/Family
sig Name { }
abstract sig Person {
  name: one Name,
  siblings: Person,
  father: lone Man,
  mother: lone Woman
  }
sig Man extends Person {
  wife: lone Woman
  } 
sig Woman extends Person {
  husband: lone Man
  }
sig Married extends Person {
  }
fact {
  no p: Person | p in p.^(mother + father)
  wife = ~husband
}
fun grandpas[p: Person] : set Person {
  let parent = mother + father + father.wife + mother.husband | p.parent.parent & Man
  }
pred ownGrandpa[p: Person] {
  p in grandpas[p]
  }

Это мои команды запуска

run ownGrandpa for 4 Person
run ownGrandpa for 2 Person
run ownGrandpa for 1 Person

Может ли кто-нибудь указать мне на эту ошибку, пожалуйста.


person Syed Saddam    schedule 20.05.2015    source источник


Ответы (1)


Есть три способа назначить область вашей модели.

Первый заключается в назначении области каждой подписи вашей модели. например : run ownGrandpa for 4 Person, 3 Name

Второй — дать глобальную область действия, которая будет применяться ко всем подписям. например run ownGrandpa for 4

Последний представляет собой смесь двух предыдущих и состоит из глобальной области, сопровождаемой одним или несколькими отдельными определениями области. например run ownGrandpa for 5 but 4 Person. Глобальная область должна применяться ко всем сигнатурам, для которых отсутствует объявление отдельной области.

Таким образом, в вашем примере run ownGrandpa for 5 but 4 Person эквивалентно run ownGrandpa for 5 Name, 4 Person

Обратите внимание, что предоставление таких областей дает только верхнюю границу количества атомов, полученных из подписи.

Если вы хотите выразить, что любой ваш экземпляр должен содержать ровно 4 человека (ни больше, ни меньше), то вы должны использовать ключевое слово exactly. например run ownGrandpa for 5 but exactly 4 Person

person Loïc Gammaitoni    schedule 21.05.2015