1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package ca.mcgill.ecse.socialnetwork.plugin
import epackage "http://ecse.mcgill.ca/socialnetwork"
//@Constraint(message="terminatorAndInformation", severity="error", key={T})
//pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
// FunctionalOutput.outgoingLinks(Out,I);
// FunctionalOutput.terminator(Out,T);
//} or {
// InformationLink.to(I,In);
// FunctionalInput.terminator(In,T);
//}
@Constraint(message="singleFriendship", severity="error", key={p1})
pattern singleFriendship(p1: Person) {
find friendship(p1, p);
neg find friendship(p, p1);
}
//@Constraint(message="cycle", severity="error", key={p})
//pattern cycleInParenthood(p: Person) {
// find isAncestor(p, p);
//}
@Constraint(message="noFriend", severity="error", key={p})
pattern noFriend(p: Person){
neg find friendship(p, _);
}
//@Constraint(message="brothhoodParent", severity="error", key={p1,p2})
//pattern brothhoodParent(p1: Person, p2: Person){
// Person.parents(p1, parent1);
// Person.parents(p2, parent2);
// parent1 == parent2;
// find isAncestor(p1, p2);
//}
@Constraint(message="selfFriend", severity="error", key={p})
pattern selfFriend(p: Person){
Person.friends(p,p);
}
pattern friendship(p1: Person, p2: Person){
Person.friends(p1,p2);
}
//pattern isAncestor(person : Person, ancestor : Person){
// Person.parents(person, ancestor);
//} or {
// Person.parents(person, parent);
// find isAncestor(parent, ancestor);
//}
|