models.book.chapter4.grandpa2.als Maven / Gradle / Ivy
module language/grandpa2 ---- Page 86
abstract sig Person {
father: lone Man,
mother: lone Woman
}
sig Man extends Person {
wife: lone Woman
}
sig Woman extends Person {
husband: lone Man
}
fact {
no p: Person | p in p.^(mother+father)
wife = ~husband
}
assert NoSelfFather {
no m: Man | m = m.father
}
// This should not find any counterexample.
check NoSelfFather
fun grandpas [p: Person] : set Person {
let parent = mother + father + father.wife + mother.husband |
p.parent.parent & Man
}
pred ownGrandpa [p: Person] {
p in p.grandpas
}
// This generates an instance similar to Fig 4.2
run ownGrandpa for 4 Person
© 2015 - 2025 Weber Informatics LLC | Privacy Policy