et en

Topics related to teaching programming and logic

1. AI Markers in Programming Homework Assignments [Bac/Mas]

The University of Tartu's "Computer Programming" course is designed to help students acquire basic programming skills, but the assignments given in the course can also be easily completed by AI. Many students do, in fact, use AI to solve these assignments. Therefore, it is important to take into consideration the extent and impact of AI use when teaching the course.

The aim of the thesis is to investigate how the frequency of markers indicating potential AI use has changed in programs submitted as homework assignments in the "Computer Programming" course over the years. Such markers include, for example, specific program constructs, type hints, the presence of error handling, helper functions, etc. The thesis should identify suitable markers and create scripts to automatically extract them from the programs. Then, count the number of occurrences of these markers, analyze the changes statistically, and interpret the results. The raw data is already available. This topic combines programming and data analysis and helps to understand the role of AI in the learning process.

2. Correlations Between Learning Outcomes in the Courses "Programming" and "Theoretical Computer Science" [Bac]

Do students who excel in programming also do well in theoretical computer science? In the bachelor's curriculum in computer science, these courses have quite different emphases: "Computer Programming" focuses on practical programming skills, while "Theoretical Computer Science" focuses on the theoretical foundations of computer science. Many students take both courses during their studies, which makes it possible to compare them.

The aim of the thesis is to find out what relationships exist between students' graded activities in these courses, how stable these relationships are over the years, and what conclusions can be drawn regarding the courses' content and teaching methods. The available data consist of tables of results for both courses from 2019 to 2026, the thesis should analyze them using appropriate statistical methods and interpret the results.

3. Automatic Testing System for Prolog Programs [Bac]

As part of the "Logic in Computer Science" course, students solve programming tasks in Prolog. Currently, submitted programs are checked manually, which means that students receive feedback with a delay and only once, and finding errors in the programs is labor-intensive for instructors, too. The goal is to set up an automated testing system for the Moodle VPL module that checks Prolog programs submitted by students and provides immediate feedback. The thesis should create the necessary execution scripts and test files, test the system with both correct solutions and those containing typical errors, and evaluate the system's usability for teaching.

4. Logic Learning Tool

The course "Logic in Computer Science" teaches various logical methods, but these are currently practiced on paper and with text-based materials. There is a need for a web-based tool that supports learning by allowing students to apply the relevant method step by step, make their own decisions, and receive immediate feedback. The result of the thesis is a working prototype, along with some sample exercises, and an analysis or evaluation of the tool. Experience in creating web applications is a plus. Having previously taken the logic course is not required, but it is necessary to be prepared to learn the chosen method during the process.

Some possible tools:

  • Tool for learning recursive definitions and structural induction. The user enters a recursive definition for a given set or function, the program checks its correctness and shows feedback. Then, the user can prove properties of the defined object by consecutively writing equations and simple phrases and having the program check them.
  • Natural deduction assistant. The user derives a given statement from given premises using box-based natural deduction in propositional logic (or, additionally, predicate logic, if desired). Steps can be performed both from the premises towards the statement and from the statement back to the premises. The program checks the correctness of the steps and compliance with the rules of inference, and gives feedback and guidance.
  • Formula transformation tool. The user transforms a predicate logic formula step by step into prenex form, Skolem form, or clausal form, specifying at each step whether the step preserves equivalence or only satisfiability. The infrastructure created for this tool can also be implemented as a second output: a learning program for constructing Herbrand universes and Herbrand extensions.
  • Prolog search tree visualizer. Given a Prolog knowledge base and a query, the program reveals the nodes of the search tree one by one, showing where the search is currently located, which rule is being applied, and how backtracking occurs. This makes it possible to see why some Prolog searches may take a long time or run indefinitely. Initially, one can limit the scope to pure Prolog, but it is also possible to include lists, arithmetic, and the cut predicate.
  • Hoare logic derivation assistant. For a given program, the user constructs a proof of its correctness in Hoare logic. The tool verifies the steps, including the validity of logical implications, either on its own (for example, in the case of linear arithmetic and propositional logic) or by calling an external tool (for example, Z3).
  • Loop invariant tutorial. The user enters a loop invariant for the given loop and the given pre- and post-conditions. The tool provides feedback on whether the invariant is valid or is too strong, too weak, or does not hold throughout the loop. If the invariant is invalid, the tool provides a counterexample.

The scope of the topics can be expanded or narrowed.

Contact: reimo.palm@ut.ee