# ==========================================
# FACTS: Knowledge Base
# ==========================================
# Facts: students
students = [
"budi",
"sari",
"dewi"
]
# Facts: students and the courses they study
studies = [
("budi", "ai"),
("sari", "ml"),
("dewi", "ai")
]
# Facts: teachers and the courses they teach
teaches = [
("media", "ai"),
("rahmadya", "ml")
]
# ==========================================
# RULE: taught_by(X, Z)
# If X is a student,
# X studies course Y,
# and Z teaches course Y,
# then X is taught by Z.
# ==========================================
def taught_by():
results = []
for student in students:
for person, course in studies:
if student == person:
for teacher, taught_course in teaches:
if course == taught_course:
results.append((student, teacher))
return results
# ==========================================
# QUERY: Display all inference results
# ==========================================
for student, teacher in taught_by():
print(student + " diajar oleh " + teacher)
CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRkFDVFM6IEtub3dsZWRnZSBCYXNlCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIEZhY3RzOiBzdHVkZW50cwpzdHVkZW50cyA9IFsKICAgICJidWRpIiwKICAgICJzYXJpIiwKICAgICJkZXdpIgpdCgojIEZhY3RzOiBzdHVkZW50cyBhbmQgdGhlIGNvdXJzZXMgdGhleSBzdHVkeQpzdHVkaWVzID0gWwogICAgKCJidWRpIiwgImFpIiksCiAgICAoInNhcmkiLCAibWwiKSwKICAgICgiZGV3aSIsICJhaSIpCl0KCiMgRmFjdHM6IHRlYWNoZXJzIGFuZCB0aGUgY291cnNlcyB0aGV5IHRlYWNoCnRlYWNoZXMgPSBbCiAgICAoIm1lZGlhIiwgImFpIiksCiAgICAoInJhaG1hZHlhIiwgIm1sIikKXQoKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgUlVMRTogdGF1Z2h0X2J5KFgsIFopCiMgSWYgWCBpcyBhIHN0dWRlbnQsCiMgWCBzdHVkaWVzIGNvdXJzZSBZLAojIGFuZCBaIHRlYWNoZXMgY291cnNlIFksCiMgdGhlbiBYIGlzIHRhdWdodCBieSBaLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZGVmIHRhdWdodF9ieSgpOgogICAgcmVzdWx0cyA9IFtdCgogICAgZm9yIHN0dWRlbnQgaW4gc3R1ZGVudHM6CiAgICAgICAgZm9yIHBlcnNvbiwgY291cnNlIGluIHN0dWRpZXM6CiAgICAgICAgICAgIGlmIHN0dWRlbnQgPT0gcGVyc29uOgogICAgICAgICAgICAgICAgZm9yIHRlYWNoZXIsIHRhdWdodF9jb3Vyc2UgaW4gdGVhY2hlczoKICAgICAgICAgICAgICAgICAgICBpZiBjb3Vyc2UgPT0gdGF1Z2h0X2NvdXJzZToKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKHN0dWRlbnQsIHRlYWNoZXIpKQoKICAgIHJldHVybiByZXN1bHRzCgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBRVUVSWTogRGlzcGxheSBhbGwgaW5mZXJlbmNlIHJlc3VsdHMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmZvciBzdHVkZW50LCB0ZWFjaGVyIGluIHRhdWdodF9ieSgpOgogICAgcHJpbnQoc3R1ZGVudCArICIgZGlhamFyIG9sZWggIiArIHRlYWNoZXIpCg==