// Predicate Declarations Professor(person) Student(person) Publication(title, person) TaughtBy(course, person, quarter) CourseLevel(course, level) IntroCourse(course) Position(person, position) ProjectMember(project, person) AdvisedBy(person, person) Phase(person, phase) TempAdvisedBy(person, person) YearsInProgram(person, integer) TA(course, person, quarter) // Types level = {"Level_100", "Level_300", "Level_400", "Level_500"} position = {"Faculty", "Faculty_affiliate", "Faculty_adjunct", "Faculty_emeritus", "Faculty_visiting"} phase = {"Post_Quals", "Pre_Quals", "Post_Generals"} // Clauses !TaughtBy(c, p, q) v !CourseLevel(c, Level_500) v Professor(p) !TaughtBy(c, p, q) v !Student(p) v !CourseLevel(c, Level_500) !TaughtBy(c, p, q) v !Student(p) v !Phase(p, Pre_Quals) !TaughtBy(c, p, q) v !Student(p) v !YearsInProgram(p, Year_1) !TempAdvisedBy(p, s) v Professor(p) !TempAdvisedBy(p, s) v Student(s) !TempAdvisedBy(p, s) v Position(p, Faculty) !TempAdvisedBy(p, s) v Phase(s, Pre_Quals) !TaughtBy(c, p, q) v !CourseLevel(c, Level_500) v !TA(c, s, q) v AdvisedBy(s, p) v TempAdvisedBy(s,p) !AdvisedBy(p, s) v Student(s) !AdvisedBy(p, s) v Professor(p) !AdvisedBy(p, s) v !YearsInProgram(p, Year_1) !Publication(p, x) v !Publication(p,y) v !Student(x) v Student(y) v Professor(y) !Publication(p, x) v !Publication(p,y) v !Student(x) v Student(y) v AdvisedBy(x,y) v TempAdvisedBy(x,y) !Professor(x) v !Student(x) !Phase(s, Post_Quals) v !YearsInProgram(s, Year_1) !Phase(s, Post_Quals) v !Phase(s, Post_Generals) !Phase(s, Post_Generals) v !Phase(s, Pre_Quals) !Professor(p) v Position(p, Faculty) v Position(p, Faculty_affiliate) v Position(p, Faculty_adjunct) v Position(p, Faculty_emeritus) v Position(p, Faculty_visiting) !Position(p, Faculty_visiting) v !AdvisedBy(s, p) !TempAdvisedBy(x,y) v !Position(x,Faculty_visiting) !TempAdvisedBy(x,y) v YearsInProgram(x,Year_1) v YearsInProgram(x,Year_2) !TempAdvisedBy(x,y) v Phase(x,Pre_Quals) !Student(x) v Phase(x,Pre_Quals) v Phase(x,Post_Quals) v Phase(x,Post_Generals) !Phase(x,Pre_Quals) v !Phase(x,Post_Quals) !Position(x,y) v !Position(x,z) v y=z !AdvisedBy(a,a) !TempAdvisedBy(a,a) !AdvisedBy(a,b) v !AdvisedBy(b,a) !TempAdvisedBy(a,b) v !TempAdvisedBy(b,a) !AdvisedBy(s, p) v (p=q) v !AdvisedBy(s, q) !TempAdvisedBy(s, p) v (p=q) v !TempAdvisedBy(s, q) !TempAdvisedBy(s, p) v !AdvisedBy(s, q) !Phase(s,Pre_Quals) v !AdvisedBy(s,p) !Phase(s,Post_Quals) v !TempAdvisedBy(s,p) !Phase(s,Post_Generals) v !TempAdvisedBy(s,p) !Phase(s,Post_Quals) v !TaughtBy(c,p,q) v !TA(c,s,q) v CourseLevel(c,Level_100) v AdvisedBy(s,p) !Phase(s,Post_Quals) v !TaughtBy(c,p,q) v TA(c,s,q) v CourseLevel(c,Level_100) v !AdvisedBy(s,p) !Phase(s,Post_Quals) v TaughtBy(c,p,q) v !TA(c,s,q) v CourseLevel(c,Level_100) v !AdvisedBy(s,p) !Phase(s,Post_Generals) v !TaughtBy(c,p,q) v !TA(c,s,q) v CourseLevel(c,Level_100) v AdvisedBy(s,p) !Phase(s,Post_Generals) v !TaughtBy(c,p,q) v TA(c,s,q) v CourseLevel(c,Level_100) v !AdvisedBy(s,p) !Phase(s,Post_Generals) v TaughtBy(c,p,q) v !TA(c,s,q) v CourseLevel(c,Level_100) v !AdvisedBy(s,p) !Publication(t,a) v !Publication(t,b) v (a=b) v AdvisedBy(a,b) v AdvisedBy(b,a) !Publication(t,a) v !Publication(t,b) v (a=b) v !Professor(a) v !Student(b) v AdvisedBy(b,a) !AdvisedBy(s,p) v !Publication(t,s) v Publication(t,p) !TaughtBy(c, p, q) v Professor(p) !Position(p, x) v Professor(p) !AdvisedBy(s, p) v Student(s) !AdvisedBy(s, p) v Professor(p) !Phase(p, x) v Student(p) !TempAdvisedBy(s, p) v Student(s) !TempAdvisedBy(s, p) v Professor(p) !YearsInProgram(p, x) v Student(p) !TA(c, p, q) v Student(p) Student(p) v Professor(p) !Student(p) v !Professor(p) !Phase(p, x) v (x=y) v !Phase(p, y) !YearsInProgram(p, x) v (x=y) v !YearsInProgram(p, y) !TaughtBy(x, p, q) v (x=y) v !TaughtBy(y, p, q) !TaughtBy(c, x, q) v (x=y) v !TaughtBy(c, y, q) !TA(x, p, q) v (x=y) v !TA(y, p, q) !TA(c, x, q) v (x=y) v !TA(c, y, q) // Unit clauses Professor(x) Student(x) Publication(y, z) TaughtBy(x, y, z) CourseLevel(z, y) IntroCourse(x) Position(x, y) ProjectMember(x, y) AdvisedBy(x, y) Phase(x, y) TempAdvisedBy(x, y) YearsInProgram(x, y) TA(x, y, z)