All Downloads are FREE. Search and download functionalities are using the official Maven repository.

models.book.chapter4.grandpa3.als Maven / Gradle / Ivy

module language/grandpa3 ---- the final model in fig 4.4

abstract sig Person {
	father: lone Man,
	mother: lone Woman
	}

sig Man extends Person {
	wife: lone Woman
	}

sig Woman extends Person {
	husband: lone Man
	}

fact Biology {
	no p: Person | p in p.^(mother+father)
	}

fact Terminology {
	wife = ~husband
	}

fact SocialConvention {
	no (wife+husband) & ^(mother+father)
	}

------------------------------------------

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.3
run ownGrandpa for 4 Person

------------------------------------------

pred SocialConvention1 {
	no (wife + husband) & ^(mother + father)
	}

pred SocialConvention2 {
	let parent = mother + father {
		no m: Man | some m.wife and m.wife in m.*parent.mother
		no w: Woman | some w.husband and w.husband in w.*parent.father
		}
	}

// This assertion was described on page 90.
assert Same {
	SocialConvention1 iff SocialConvention2
	}

// This should not find any counterexample
check Same




© 2015 - 2025 Weber Informatics LLC | Privacy Policy