Entity: Movie 180 18 null * title String 3 false false false rating double 3 false false false year int 3 false false false Operation: createPositive Movie void n int static n >= 0 Movie->exists( m1 | m1.rating = 10 * n & Movie->exists( m2 | m2.rating = 10 * n + 1 & Movie->exists( m3 | m3.rating = 10 * n + 2 & Movie->exists( m4 | m4.rating = 10 * n + 3 & Movie->exists( m5 | m5.rating = 10 * n + 4 & Movie.createPositiveActors(n,m1,m2,m3,m4,m5) & Movie.createPositiveActresses(n,m1,m2,m3,m4,m5) ) ) ) ) ) Operation: createPositiveActors Movie void n int m1 Movie m2 Movie m3 Movie m4 Movie m5 Movie static n >= 0 Actor->exists( a | a.name = "a" + ( 10 * n ) & a : m1.persons & a : m2.persons & a : m3.persons & a : m4.persons & Actor->exists( b | b.name = "a" + ( 10 * n + 1 ) & b : m1.persons & b : m2.persons & b : m3.persons & b : m4.persons & Actor->exists( c | c.name = "a" + ( n * 10 + 2 ) & c : m2.persons & c : m3.persons & c : m4.persons ) ) ) Operation: createPositiveActresses Movie void n int m1 Movie m2 Movie m3 Movie m4 Movie m5 Movie static n >= 0 Actress->exists( d | d.name = "a" + ( n * 10 + 3 ) & d : m2.persons & d : m3.persons & d : m4.persons & d : m5.persons & Actress->exists( e | e.name = "a" + ( n * 10 + 4 ) & e : m2.persons & e : m3.persons & e : m4.persons & e : m5.persons ) ) Operation: createNegative Movie void n int static n >= 0 Movie->exists( m1 | m1.rating = 10 * n + 5 & Movie->exists( m2 | m2.rating = 10 * n + 6 & Movie->exists( m3 | m3.rating = 10 * n + 7 & Movie->exists( m4 | m4.rating = 10 * n + 8 & Movie->exists( m5 | m5.rating = 10 * n + 9 & Movie.createNegativeActors(n,m1,m2,m3,m4,m5) & Movie.createNegativeActresses(n,m1,m2,m3,m4,m5) ) ) ) ) ) Operation: createNegativeActors Movie void n int m1 Movie m2 Movie m3 Movie m4 Movie m5 Movie static n >= 0 Actor->exists( a | a.name = "a" + ( 10 * n + 5 ) & a : m1.persons & a : m2.persons & Actor->exists( b | b.name = "a" + ( 10 * n + 6 ) & b : m1.persons & b : m2.persons & b : m3.persons ) ) Operation: createNegativeActresses Movie void n int m1 Movie m2 Movie m3 Movie m4 Movie m5 Movie static n >= 0 Actress->exists( c | c.name = "a" + ( 10 * n + 7 ) & c : m2.persons & c : m3.persons & c : m4.persons & Actress->exists( d | d.name = "a" + ( n * 10 + 8 ) & d : m3.persons & d : m4.persons & d : m5.persons & Actress->exists( e | e.name = "a" + ( n * 10 + 9 ) & e : m4.persons & e : m5.persons ) ) ) Type: MovieType 50 10 MOVIE TV VIDEO VIDEOGAME Entity: Person 150 224 null * abstract name String 3 false false false Entity: Actor 187 344 Person * Entity: Actress 306 348 Person * Entity: Group 464 89 null * abstract avgRating double 3 false false false Entity: Couple 432 215 Group * Operation: toString Couple String query true result = "Couple avgRating " + avgRating + ", " + commonMovies.size + " movies (" + p1.name + "," + p2.name + ")" Entity: Clique 533 286 Group * Operation: toString Clique String query true result = persons.size + "-Clique avgRating " + avgRating + ", " + commonMovies.size + " movies (" + persons.name + ")" Entity: SortLib 616 29 null * externalApp Operation: sortByN SortLib Sequence(null) s Sequence f Sequence n int query static true result = result Association: Movie Person 0 206 185 265 222 0 persons movies Association: Group Movie 0 465 98 400 27 0 commonMovies null Association: Couple Person 0 433 218 308 224 -1 p1 null Association: Couple Person 0 434 236 310 246 -1 p2 null Association: Clique Person 0 535 307 310 256 0 persons null Generalisation: Person Actor 227 345 231 258 Generalisation: Person Actress 320 349 306 258 Generalisation: Group Couple 474 215 474 126 Generalisation: Group Clique 575 287 573 126 GeneralUseCase: task2 false GeneralUseCase: task3 false GeneralUseCase: exttask1 false GeneralUseCase: exttask2 false Constraint: cl : Clique p : Person & cl.persons->excludes(p) & comm = cl.commonMovies->intersection(p.movies) & comm.size > 2 Clique->exists1( c | c.persons = cl.persons->including(p) & c.commonMovies = comm ) null exttask2 false GeneralUseCase: exttask3 false GeneralUseCase: exttask4 false GeneralUseCase: task1 n int false