On this page you can find links to the courses I am or have been teaching, as well as information on teaching resources of general interest that I have developed (including some widely-used lecture notes on Prolog programming and an interactive proof assistant). There is a separate page with details on student supervision.

- Computational Social Choice
(ILLC, University of Amsterdam, taught more or less annually since 2007)

This is an advanced course in the Master of Logic programme covering various topics at the interface of social choice theory with logic and computation, including preference representation in combinatorial domains, voting theory, fair division procedures, mechanism design, and negotiation in multiagent systems. - Game Theory (ILLC, University of Amsterdam, to be taught in 2017)

This will be an introduction to game theory. The course will cover both cooperative and noncooperative games, and it will also briefly introduce the basic notions of mechanism design. - Logic, Language and Computation
(ILLC, University of Amsterdam, taught annually 2010-2014)

This is the central obligatory course in the Master of Logic programme. Through a series of guest lectures, it provides an overview of the different research areas that are being pursued at the ILLC. - Multiagent Systems
(ILLC, University of Amsterdam, taught in 2006)

This is an advanced course in the Master of Logic programme. It exemplifies some of the core contributions to the theory of multiagent systems made by different disciplines, including logic, economics and computer science. Topics covered include negotiation, multiagent resource allocation, fair division, combinatorial auctions, mechanism design, and preference representation in combinatorial domains. - Introduction to Logic in Computer Science
(ILLC, University of Amsterdam, taught in 2006 and 2007)

This is an introductory course in the Master of Logic programme covering basic techniques and concepts of logic in computer science, in particular automated reasoning, logic programming, and complexity theory. - Problem Solving and Search
(ILLC, University of Amsterdam, taught annually in 2005-2007, and again since 2013)

This introductory course for 1st year students in the BSc Artificial Intelligence programme provides an introduction to algorithmic thinking and basic problem solving techniques in AI, particularly search techniques. It also introduces the declarative programming language Prolog. The course was previously called*Logisch Programmeren en Zoektechnieken*. - Modern Classics in Social Choice Theory
(ILLC, University of Amsterdam, taught in Summer 2009)

This has been a one-off project course, in which students read and presented some of the seminal papers in social choice theory of the second half of the 20th century. The course has been offered together with Stéphane Airiau, Umberto Grandi, and Daniele Porello. - Programming in Prolog
(ILLC, University of Amsterdam, taught in Summer 2011)

This has been a one-off crash course in logic programming with Prolog, covering the basics of the Prolog language, the implementation of an automated theorem prover, and small student-driven individual programming projects.

- 474:
Multiagent Systems
(Department of Computing, Imperial College London, taught in Spring 2004 and 2005)

This is an advanced course for postgraduate and 4th year undergraduate students. The aim of the part of the course taught by me has been to show how formal models for rational decision making and negotiation, developed mostly in the area of economics, have found important applications in multiagent systems. - CS3AUR:
Automated Reasoning
(Department of Computer Science, King's College London, taught in Spring 2002)

This advanced course for 3rd year undergraduate students introduces some of the key techniques used in the field of automated reasoning, such as tableau-based deduction and resolution. The course also gives an introduction to knowledge representation with description logics and to temporal constraint reasoning. - CS2LAP:
Logic and Prolog
(Department of Computer Science, King's College London, taught in Autumn 1999 and 2000)

This introductory course for 2nd year undergraduate students introduces logic as a tool for various applications in computer science and artificial intelligence. It also introduces the logic-based declarative programming language Prolog.

- Multiagent Resource Allocation
(AAMAS-2006, EASSS-2006 and EASSS-2007)

This tutorial, given at the 5th International Joint Conference on Autonomous Agents and Multiagent Systems (AAMAS-2006 in Hakodate) and twice at the European Agent Systems Summer School (EASSS-2006 in Annecy and EASSS-2007 in Durham), covers some of the central issues in Multiagent Resource Allocation, including preference representation languages, social welfare orderings, allocation procedures, and complexity results. Two important topics receive special attention: distributed (as opposed to centralised) negotiation schemes and fair division issues in multiagent systems research. The two tutorials at EASSS I taught together with Nicolas Maudet. - Fair Division
(AAMAS-2008, EASSS-2009, COST-ADT School 2010, FairDiv-2015)

This tutorial, delivered at the 7th International Joint Conference on Autonomous Agents and Multiagent Systems (AAMAS-2008) in Estoril in May 2008, the 11th European Agent Systems Summer School (EASSS-2009) in Torino in August/September 2009, and the COST-ADT Doctoral School on Computational Social Choice in Estoril in April 2010 provides an introduction to the area of fair division, with an emphasis on computational considerations. Topics covered include fairness and efficiency criteria and their axiomatic foundations, cake-cutting procedures, and distributed approaches to the fair allocation of indivisible goods. My two tutorials as FairDiv-2015 in Grenoble covered a subset of these topics. - Computational Social Choice
(ESSLLI-2008,
ECAI-2010,
TbiLLC-2011
FAIR-2014)

This course, taught originally at the 20th European Summer School in Logic, Language and Information (ESSLLI-2008) in Hamburg in August 2008, is an introduction to computational social choice, an interdisciplinary field of study bringing together ideas from computer science, artificial intelligence, logic, political science and economic theory. The course covers topics in preference modelling, voting theory, and fair division, and it highlights recent contributions integrating social choice theory on the one hand and Logic & Computation on the other. A revamped (shorter) version has been delivered at the 19th European Conference on Artificial Intelligence (ECAI-2010) in Lisbon in August 2010 and yet another variant of the course focussing on the axiomatic method, social choice in combinatorial domains, and judgment aggregation has been part of the programme of the 9th Tbilisi Symposium on Language, Logic and Computation in Kutaisi in September 2011. The version presented at the South African Forum for Artificial Intelligence Resesarch Summer School(FAIR-2014) in Stellenbosch in December 2014 gives equal space to fair division, voting, and judgment aggregation. I have also given a very short overview of the COMSOC research area at COMSOC-2008 in Liverpool in September 2008. - Voting Theory
(AAAI-2010, SecVote-2012, EASSS-2013)

This tutorial, delivered at the 24th AAAI Conference on Artificial Intelligence (AAAI-2010) in Atlanta in July 2010 and at the 15th European Agent Systems Summer School (EASSS-2013) in London in July 2013, provides an introduction to the theory of voting for AI researchers. The material covered includes the most important voting rules, some of the classical theorems in the field, and several examples for recent work in computational social choice, with an emphasis on voting-related topics. I've also given a short version of the tutorial at the Summer School on Secure Voting (SecVote-2012) held at Schloss Dagstuhl in July 2012. - Judgment Aggregation
(WINE-2012, IMS Singapore 2013, AAMAS-2013)

This tutorial, delivered at the 8th Workshop on Internet and Network Economics (WINE-2012) in Liverpool in December 2012, the IMS Programme on Algorithmic Game Theory and Computational Social Choice at the Institute for Mathematical Sciences in Singapore in January 2013, and at the 12th International Conference on Autonomous Agents and Multiagent Systems (AAMAS-2013) in Saint Paul, Minnesota, in May 2013 has been an introduction to the field of judgment aggregation. - Logic and Social Choice Theory
(ESSLLI-2013)

This course, given at the 25th European Summer School in Logic, Language and Information (ESSLLI-2013) in Düsseldorf in August 2013, provides a thorough introduction to the field of social choice theory, highlighting the role that logic has taken in its development. - Lectures on the Theory of Aggregation
(Guangzhou 2014 and Paris 2016)

This series of lectures, first delivered at Sun Yat-Sen University in Guangzhou in 2014 and then, in compressed form, at LIP6 in Paris in 2016, provides an introduction to the theory of aggregation, ranging from the presentation of classical results in social choice theory to the discussion of recent research conducted in Amsterdam. Topics covered include preference aggregation, judgment aggregation, graph aggregation, and collective annotation.

- Lecture Notes on Fair Division

ILLC, University of Amsterdam, September 2009. Last revised in April 2010. - An
Introduction to Prolog Programming

Lecture Notes, King's College London and University of Amsterdam, 1999-2016. - WinKE:
An Interactive Proof Assistant for Teaching Logic

This software tool is based on the KE calculus, a refutation system which combines features from Smullyan's analytic tableaux and Gentzen's natural deduction, and has been designed to serve as a tutoring system to support the teaching of logic and reasoning at an introductory level. It is available free of charge to all interested parties.