-- Feb 07 in class sig City {roads: set City} run {} for exactly 6 City pred multiplicityPractice { some roads one roads lone roads -- no roads } run multiplicityPractice for exactly 6 City fact roadsGoSomewhere { no iden & roads } pred someAll { some c: City | all c2: City-c | c2 in c.roads } pred allSome { all c: City | some c2: City-c | c2 in c.roads } check { allSome iff someAll } for exactly 4 City pred romeExists { -- "All roads lead to Rome" some rome: City | all other: City-rome | rome in other.roads } pred allConnected { all disj c1, c2: City | c1->c2 in roads } run {romeExists and allConnected} for exactly 4 City --------------------- pred isCycle1[cities: set City] { cities in cities.^roads } -- underconstrained run {some cities: set City |isCycle1[cities] and some cities} pred isCycle2[cities: set City] { -- reminder: no self loops was (iden & roads) let localRoads = cities->cities & roads | all c: cities | c in c.^localRoads } run {some cities: set City |isCycle2[cities] and #cities > 2} for 4 int -- TEst predicate! run test_isCycle2_discon { some disj a, b, c, d: City | { roads = a -> b + b -> a + c->d + d->c isCycle2[a+b+c+d] } } for exactly 4 City -- expect false run test_isCycle2_4cycle { some disj a, b, c, d: City | { roads = a -> b + b -> c + c->d + d->a isCycle2[a+b+c+d] } } for exactly 4 City -- expect true pred isCycle3[cities: set City] { let localRoads = cities->cities & roads | all c: cities | all c2: cities-c | c2 in c.^localRoads } // Does THAT work?