A description of the predicates and variable types can be found here.
| Misc |
| TaughtBy(C, P, Q) ^ CourseLevel(C, level_500) => Professor(P) |
| TaughtBy(C, P, Q) ^ Student(P) => !CourseLevel(C, level_500) |
| TaughtBy(C, P, Q) ^ Student(P) => !Phase(P, pre_Quals) |
| TaughtBy(C, P, Q) ^ Student(P) => !YearsInProgram(P, year_1) |
| TempAdvisedBy(P, S) => Professor(P) |
| TempAdvisedBy(P, S) => Student(S) |
| TempAdvisedBy(P, S) => Position(P, faculty) |
| TempAdvisedBy(P, S) => Phase(S, pre_Quals) |
| TempAdvisedBy(P, S) => YearsInProgram(P, year_1) or YearsInProgram(P, year_2) |
| TA(C, P, Q) => Student(P) |
| TaughtBy(C, P, Q) ^ CourseLevel(C, level_500) ^ TA(C, S, Q) => AdvisedBy(S, P) or TempAdvisedBy(S,P) |
| AdvisedBy(P, S) => Student(S) |
| AdvisedBy(P, S) => Professor(P) |
| AdvisedBy(P, S) => !YearsInProgram(P, year_1) |
| Publication(P, X) ^ Publication(P,Y) ^ Student(X) ^ !Student(Y) => Professor(Y) |
| Publication(P, X) ^ Publication(P,Y) ^ Student(X) ^ !Student(Y) => AdvisedBy(X,Y) or TempAdvisedBy(X,Y) |
| Student(X) => !Professor(X) |
| Professor(X) => !Student(Y) |
| Student(X) => AdvisedBy(X,Y) or TempAdvisedBy(X,Y) |
| Professor(P) ^ Position(P, faculty) => TaughtBy(C, P, Q) |
| Phase(S, post_Quals) => !YearsInProgram(year_1) |
| Phase(S, pre_Quals) => !Phase(S, post_Quals) |
| Phase(S, pre_Quals) => !Phase(S, post_Generals) |
| Phase(S, post_Quals) => !Phase(S, pre_Quals) |
| Phase(S, post_Quals) => !Phase(S, post_Generals) |
| Phase(S, post_Generals) => !Phase(S, pre_Quals) |
| Phase(S, post_Generals) => !Phase(S, post_Quals) |
| Professor(P) => Position(P, faculty) or Position(P, faculty_affiliate) or Position(P, faculty_adjunct) or Position(P, faculty_emeritus) or Position(P, faculty_visiting) |
| Position(P, faculty_visiting) => !AdvisedBy(S, P)
originally written by volunteer as Position(P, faculty_visiting) => !(exists S, AdvisedBy(S,P) |
| Professor(X) ^ Position(X, faculty) => AdvisedBy(S,X) or TempAdvisedBy(S,X) |
| Student(P) ^ !YearsInProgram(year_1) => TA(C, P, Q) |
| Advisement |
| AdvisedBy(X,Y) => Student(X) |
| AdvisedBy(X,Y) => Professor(Y) |
| TempAdvisedBy(X,Y) => Student(X) |
| TempAdvisedBy(X,Y) => Professor(Y) |
| Position(X,T) => Professor(X) |
| TempAdvisedBy(X,Y) => !Position(X,faculty_visiting) |
| TempAdvisedBy(X,Y) ^ !YearsInProgram(X,year_1) => YearsInProgram(X,year_2) |
| TempAdvisedBy(X,Y) => Phase(X,pre_Quals) |
| Exists Y: Student(X) ^ !AdvisedBy(X,Y) => TempAdvisedBy(X,Y) |
| Exists Y: Professor(X) ^ !Position(X, faculty_visiting) => AdvisedBy(Y,X) |
| Misc |
| TaughtBy(C,X,Q) => Professor(X) |
| TA(C,X,Q) => Student(X) |
| Phases and positions |
| Phase(X,Y) => Student(X) |
| Student(X) => Phase(X,pre_Quals) or Phase(X,post_Quals) or Phase(X,post_Generals) |
| Phase(X,pre_Quals) => !Phase(X,post_Quals) |
| Phase(X,post_Quals) => !Phase(X,pre_Quals) |
| Phase(X,post_Generals) => !Phase(X,post_Quals) |
| Position(X,Y) ^ Position(X,Z) => SamePosition(Y,Z) |
| Exists P: Phase(X, post_Generals) => Publication(P,X) |
| Exists Y: Professor(X) => Position(X,Y) |
| Predicate constraints |
| !AdvisedBy(A,A) |
| !TempAdvisedBy(A,A) |
| AdvisedBy(A,B) => !AdvisedBy(B,A) |
| TempAdvisedBy(A,B) => !TempAdvisedBy(B,A) |
| AdvisedBy(S:Person, P:Person) ^ !SamePerson(P,Q) => !AdvisedBy(S:Person, Q:Person) |
| TempAdvisedBy(S:Person, P:Person) ^ !SamePerson(P,Q) => !TempAdvisedBy(S:Person, Q:Person) |
| AdvisedBy(S:Person, P:Person) => !TempAdvisedBy(S:Person, Q:Person) |
| TempAdvisedBy(S:Person, P:Person) => !AdvisedBy(S:Person, Q:Person) |
| Phase |
| Phase(S,pre_Quals) => !AdvisedBy(S,P) |
| Phase(S,post_Quals) => !TempAdvisedBy(S,P) |
| Phase(S,post_Generals) => !TempAdvisedBy(S,P) |
| Teaching and AdvisedBy |
| Exists Y: TaughtBy(C,X,Q) => TA(C,Y,Q) |
| Exists Y: TA(C,X,Q) => TaughtBy(C,Y,Q) |
| Phase(S,post_Quals) ^ TaughtBy(C,P,Q) ^ TA(C,S,Q) ^ !CourseLevel(C,level_100) => AdvisedBy(S,P) |
| Phase(S,post_Quals) ^ TaughtBy(C,P,Q) ^ !TA(C,S,Q) ^ !CourseLevel(C,level_100) => !AdvisedBy(S,P) |
| Phase(S,post_Quals) ^ !TaughtBy(C,P,Q) ^ TA(C,S,Q) ^ !CourseLevel(C,level_100) => !AdvisedBy(S,P) |
| Phase(S,post_Generals) ^ TaughtBy(C,P,Q) ^ TA(C,S,Q) ^ !CourseLevel(C,level_100) => AdvisedBy(S,P) |
| Phase(S,post_Generals) ^ TaughtBy(C,P,Q) ^ !TA(C,S,Q) ^ !CourseLevel(C,level_100) => !AdvisedBy(S,P) |
| Phase(S,post_Generals) ^ !TaughtBy(C,P,Q) ^ TA(C,S,Q) ^ !CourseLevel(C,level_100) => !AdvisedBy(S,P) |
| Publication and AdvisedBy |
| Publication(T:Title,A:Person) ^ Publication(T,B) ^ !SamePerson(A,B) => AdvisedBy(A,B) or AdvisedBy(B,A) |
| Publication(T,A) ^ Publication(T,B) ^ !SamePerson(A,B) ^ Professor(A) ^ Student(B) => AdvisedBy(B,A) |
| AdvisedBy(S,P) ^ Publication(T,S) => Publication(T,P) |
| Classes of people |
| TaughtBy(C:Course, P:Person, Q:Quarter) => Professor(P:Person) |
| Position(P:Person, X:Position) => Professor(P:Person) |
| AdvisedBy(S:Person, P:Person) => Student(S:Person) |
| AdvisedBy(S:Person, P:Person) => Professor(P:Person) |
| Phase(P:Person, X:Phase) => Student(P:Person) |
| TempAdvisedBy(S:Person, P:Person) => Student(S:Person) |
| TempAdvisedBy(S:Person, P:Person) => Professor(P:Person) |
| YearsInProgram(P:Person, X:Integer) => Student(P:Person) |
| TA(C:Course, P:Person, Q:Quarter) => Student(P:Person) |
| People belong to one class |
| !Student(P:Person) => Professor(P:Person) |
| Student(P:Person) => !Professor(P:Person) |
| Uniqueness constraints |
| Position(P:Person, X:Position) ^ !SamePosition(X,Y) => !Position(P:Person, Y:Position) |
| Phase(P:Person, X:Phase) ^ !SamePhase(X,Y) => !Phase(P:Person, Y:Phase) |
| YearsInProgram(P:Person, X:Integer) ^ !SameInteger(X,Y) => !YearsInProgram(P:Person, Y:Integer) |
| Generally true uniqueness constraints |
| TaughtBy(X:Course, P:Person, Q:Quarter) ^ !SameCourse(X,Y) => !TaughtBy(Y:Course, P:Person, Q:Quarter) |
| TaughtBy(C:Course, X:Person, Q:Quarter) ^ !SamePerson(X,Y) => !TaughtBy(C:Course, Y:Person, Q:Quarter) |
| TA(X:Course, P:Person, Q:Quarter) ^ !SameCourse(X,Y) => !TA(Y:Course, P:Person, Q:Quarter) |
| TA(C:Course, X:Person, Q:Quarter) ^ !SamePerson(X,Y) => !TA(C:Course, Y:Person, Q:Quarter) |