91251 - Languages and Algorithms for Artificial Intelligence

Academic Year 2020/2021

  • Moduli: Maurizio Gabbrielli (Modulo 1) Gianluigi Zavattaro (Modulo 2) Ugo Dal Lago (Modulo 3)
  • Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2) Traditional lectures (Modulo 3)
  • Campus: Bologna
  • Corso: Second cycle degree programme (LM) in Artificial Intelligence (cod. 9063)

Learning outcomes

At the end of the course, the student has an understanding of the main linguistic and algorithmic techniques used in the context of AI, including the main aspects related to functional, logic and constraint programming, with their theoretical foundations and practical applications. The student has an understanding of the basic principles of distributed models and algorithms, consensus problems, and large-scale algorithms for the analysis of big data.

Course contents

Module 1
Introduction to mathematical logic. Unification. Resolution.
Introduction to logic programming. Prolog languages.
Constraint logic programming and concurrent constraint programming.
Constraint programming. The language MiniZinc.

Module 2
Functional approach to programming, with particular focus on technique for parallelization and scalable distribution of data and programs, as proposed by the MapReduce programming model.
Use of the Scala programming language and study of the sequential and parallel collections provided by the language. Use of Spark for distributed programming, Cloud deployment of Scala-Spark programs.

Module 3
Rudiments of Computability and Complexity Theory.
A Formal Learning Model: PAC Learning. Learning via Uniform Convergence. The Bias-Complexity Tradeoff.
The VC-Dimension.
The Runtime of Learning.



Dirk van Dalen. Logic and structure. 4th edition, Springer.

K. Doets. From Logic to Logic Programming. The Mit Press.

Russell, Norvig. Artificial Intelligence: A Modern Approach (any edition). Pearson.

Programming in Scala (3rd edition)
Martin Odersky, Lex Spoon, Bill Venners

Learning Concurrent Programming in Scala (2nd edition)
Aleksandar Prokopec
Packt Publishing

Learning Spark: Lightning-Fast Big Data Analysis
Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zaharia

Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach. Cambridge University Press, 2009.
Michael Kearns, Umesh. Vazirani. An Introduction to Computational Learning Theory. MIT Press, 1994.
Shai Shalev-Shwartz and Shai Ben-David. Understanding Machine Learning: From Theory to Algorithms. Cambridge University Press, 2014.

Teaching methods

Theoretical and practical class lectures.

Assessment methods

Written and/or oral examinations at the end of each module.
Possible project work.

Teaching tools

Lectures. Practical exercises.

Office hours

See the website of Maurizio Gabbrielli

See the website of Gianluigi Zavattaro

See the website of Ugo Dal Lago