domain JobShop { primitive Machine ::= (id: Integer). primitive Job ::= (id: Integer). [Closed(owner)][Unique(owner, prec -> dur)] primitive Task ::= (owner: Job, prec: Natural, dur: PosInteger). [Closed(task, mach)][Function(task -> start, mach)] primitive Schedule ::= (task: Task, start: Natural, mach: Machine). overlap := s1 is Schedule, s2 is Schedule, s1.task != s2.task, s1.mach = s2.mach, s1.start + s1.task.dur >= s2.start, s1.start <= s2.start. outOfOrder := s1 is Schedule, s2 is Schedule, s1.task.owner = s2.task.owner, s1.start >= s2.start, s1.task.prec < s2.task.prec. tooSlow := s is Schedule, s.start >= 15. conforms := !(overlap | outOfOrder | tooSlow). } partial model MyShop of JobShop { Machine(1) Machine(2) j1 is Job(1) t11 is Task(j1, 1, 10) t12 is Task(j1, 2, 3) j2 is Job(2) t21 is Task(j2, 5, 10) t22 is Task(j2, 10, 6) Schedule(t11,_,_) Schedule(t12,_,_) Schedule(t21,_,_) Schedule(t22,_,_) }