Question: As shown in the graph, a solid directed arrow from CS15 to CS16 indicates that CS15 is a prerequisite to CS16. A dotted arrow means

As shown in the graph, a solid directed arrow from CS15 to CS16 indicates that CS15 is a prerequisite to CS16. A dotted arrow means that ONE of the these courses is a prerequisite of the course. For example, to take CS33, you have to take either CS16 or CS18. Course names are constants, so you have to use lowercase letters (cs22,cs33, etc) in your code. More facts about the transcript are:
CS15, CS17, CS33, CS141 and CS126 are only offered in the fall.
CS16, CS18, CS22, CS32, CS166 are only offered in the spring.
You also have a set of rules as follows:
A course is introductory if its offered in the fall and has no prerequisites, or if its offered in the spring and its prerequisite that has no prerequisites.
A course is intermediate if it is not introductory, but its prerequisites are all introductory courses.
A course is upper level if its prerequisites are not introductory courses, or if its prerequisites are CS22 and introductions.
Course may only be of one level; i.e., introductory courses may not also be intermediate courses, etc.
A- Considering the fact, that fall semester is over and Sarah were able to complete 4 courses only and failed in CS33. You should now add a set of facts that students have taken some courses using the has_taken predicate (i.e., has_taken(sarah, cs15)).
B- Then, you need to add one more rule to test the eligibility of a student to take a course in the spring: can_take(Student, Course), true when Student is eligible to take Course (i.e., they have taken the necessary prerequisites).
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
