Implementing a Datalog Reasoner
Supervisor
Suitable for
Abstract
The objective of this project would be for a student to implement a simple Datalog reasoner. Depending on the student’s ambitions,
the reasoner could be running in main memory (easier version) or on disk (more challenging). The student would be expected
to design the data structures needed to store the data (in RAM or on disk, as agreed with me). On top of this, the student
would implement the seminaive algorithm and evaluate the system on a couple of medium-sized datasets. We have in our group
ready-made datasets that could be used for evaluation. A variation of this project where the student would reuse an existing
relational database to store the data. Then, the seminaive algorithm would be implemented either as an extension of the database
(assuming the database is open source), or on top of the database (by running SQL queries). This last variant would arguably
be much easier as it would involve less design, and more just reusing existing technologies. More advanced students could
extend their system to implement various incremental reasoning algorithms. For example, I would give them one of the many
papers I’ve written on this topic, and they would have to (a) understand the formal material and (b) implement and evaluate
the algorithms. Hence, this project would also give students the opportunity to go as far as they can. Having attended the
Databases or Database System Implementation courses, and perhaps to a lesser extent the KRR course, would be a prerequisite
for doing this project.