Maurizio GabbrielliUniversity of Bologna | UNIBO · Department of Computer Science and Engineering DISI
Maurizio Gabbrielli
PhD
About
200
Publications
11,968
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
2,285
Citations
Introduction
Skills and Expertise
Publications
Publications (200)
In education, the capability of generating human-like text of Large Language Models (LLMs) inspired work on how they can increase the efficiency of learning and teaching. We study the affordability of these models for educators and students by investigating how LLMs answer multiple-choice questions (MCQs) with respect to hardware constraints and re...
Choreographies provide a clear way to specify the intended communication behaviour of concurrent and distributed systems. Previous theoretical work investigated the translation of choreographies into (models of) programs based on message passing. However, existing theories still present a gap between how they model communications—using channel name...
With the increasing popularity of LLM-based code completers, like GitHub Copilot, the interest in automatically detecting AI-generated code is also increasing-in particular in contexts where the use of LLMs to program is forbidden by policy due to security, intellectual property, or ethical concerns.We introduce a novel technique for AI code stylom...
Knowledge Tracing is a well-known problem in AI for Education, consisting of monitoring how the knowledge state of students changes during the learning process and accurately predicting their performance in future exercises.In recent years, many advances have been made thanks to various machine learning and deep learning techniques. Despite their s...
Academic dropout remains a significant challenge for education systems, necessitating rigorous analysis and targeted interventions. This study employs machine learning techniques, specifically Random Forest (RF) and Feature Tokenizer Transformer (FTT), to predict academic attrition. Utilizing a comprehensive dataset of over 40,000 students from an...
In this chapter, we discuss object-oriented languages. We attempt to present the linguistic aspects which concern objects and their use, starting with a presentation of objects as a way to gain data abstraction in a way that is both flexible and extensible. This will lead us to describe the concepts of objects and classes, and, then, those of encap...
In this chapter, we will present some of the main ways in which a language can provide mechanisms for defining abstractions over data, more sophisticated than just the definition of new types. Among these mechanisms, we will discuss the so-called abstract data types, which in different forms are provided by many different languages. We then look at...
An important component of an abstract machine’s interpreter is the one dealing with memory management. If this component can be extremely simple in a physical machine, memory management in an abstract machine for a high-level language is fairly complicated and can employ a range of techniques. We will see both static and dynamic management and will...
In this chapter, we will tackle the problem of managing sequence control, an important part in defining the execution of program instructions in a generic abstract machine’s interpreter.
In this chapter, we discuss the functional programming paradigm, where computation proceeds by term rewriting and not through modification of the state. Languages of this paradigm, at least in their “pure” form, do not use the concept of memory and therefore there is no side effect. Once an environment is fixed, an expression always denotes the sam...
The evolution of programming languages can be seen in large measure as a process which has led, by means of appropriate abstraction mechanisms, to the definition of formalisms that are increasingly distant from the physical machine. In this context, names play a fundamental role. A name, indeed, is nothing more than a (possibly meaningful) sequence...
Abstraction mechanisms play a crucial role in computing because they allow us to manage the complexity inherent in most computational systems by isolating the important aspects in a dedicated context. In the field of programming languages, these mechanisms are fundamental, both from a theoretical viewpoint (many important concepts can be appropriat...
The first electronic, programmable computers, and, therefore, the first programming languages, appeared at the end of the 1940s. Since then, many hundreds (if not thousands) of languages have been defined. In the previous chapters of this book, we have sought to identify the most important design and implementation characteristics that are common t...
The concept of abstraction is a recurrent theme in this text. Right from the first chapter, we have encountered abstract machines and their hierarchies. For them, we used the terms “abstract” as opposed to “physical”, denoting by abstract machine, a set of algorithms and data structures not directly present in any specific physical machine, but exe...
A programming language is an artificial formalism in which algorithms can be expressed. For all its artificiality, though, this formalism remains a language. Its study can make good use of the many concepts and tools developed in the last century in linguistics (which studies both natural and artificial languages). Without going into great detail,...
Each programming language provides constructs and mechanisms for structuring data. These constructs and mechanisms are shaped by what is called the type system of a language. Types represent one of the salient characteristics of a programming language, which substantially differentiates one language from another. In this chapter, we will examine ty...
In this chapter, we will not be concerned with programming languages but with the limits of the programs that we can write, asking whether there exist problems that no program can solve. A motivation for this research is the question that we asked at the end of Sect. 2.3: that is, is it possible to construct a static semantic analyser which can ver...
We now consider a subject that is substantially different from those seen in the previous chapters. Up to now, we have considered sequential languages, where at each moment off the execution of a program there is only one active context. However, a significant part of modern programs, from operating system functions to web services, needs to escape...
In this chapter we describe the constraint programming paradigm, a third approach to declarative programming which has a wide range of applications in artificial intelligence. We will discuss the main ideas behind Constraint programming, or Cp for short, and we will illustrate the two main approaches to Cp: Constraint logic programs (Clp) and const...
In this chapter we analyse a second main paradigm which supports declarative programming: logic programming. This paradigm includes both theoretical and fully implemented languages, of which the best known is surely Prolog. Even if there are big differences of a pragmatic and, for some, a theoretical nature between these languages, they all share t...
The integration of AI systems in education faces significant challenges in terms of transparency and accountability. Here, we propose a two-step methodology that distinguishes between epistemic and pragmatic applications, involving human experts in the process. We conduct a case study focused on predicting low student achievement, using a large Ita...
Regular expressions and related formalism are nowadays adopted by the most common programming languages, and frequently used as a pattern for matching strings. These constructs are useful and powerful but, on the downside, could pose security risks, especially for web applications. The analysis of modern programs cannot therefore be separated from...
Within scientific debate on post-digital and education, we present a position paper to describe a research project aimed at the design of a predictive model for students’ low achievements in mathematics in Italy. The model is based on the INVALSI data set, an Italian large-scale assessment test, and we use decision trees as the classification algor...
Meta-solver approaches exploit many individual solvers to potentially build a better solver. To assess the performance of meta-solvers, one can adopt the metrics typically used for individual solvers (e.g., runtime or solution quality) or employ more specific evaluation metrics (e.g., by measuring how close the meta-solver gets to its virtual best...
p>Knowledge Tracing is a well-known problem often tackled through purely data-driven approaches. In recent years, many advances have been made in research with various machine learning and deep learning techniques. Despite their satisfactory performance, they have some pitfalls, e.g. modeling one skill at a time, ignoring the relationships between...
p>Knowledge Tracing is a well-known problem often tackled through purely data-driven approaches. In recent years, many advances have been made in research with various machine learning and deep learning techniques. Despite their satisfactory performance, they have some pitfalls, e.g. modeling one skill at a time, ignoring the relationships between...
In this paper, we propose to exploit the side-tuning framework for multimodal document classification. Side-tuning is a methodology for network adaptation recently introduced to solve some of the problems related to previous approaches. Thanks to this technique it is actually possible to overcome model rigidity and catastrophic forgetting of transf...
When a robot adapts a learned task for a novel environment, any changes to objects in the novel environment have an unknown effect on its task execution. For example, replacing an object in a pick-and-place task affects where the robot should target its actions, but does not necessarily affect the underlying action model. In contrast, replacing a t...
Meta-solver approaches exploits a number of individual solvers to potentially build a better solver. To assess the performance of meta-solvers, one can simply adopt the metrics typically used for individual solvers (e.g., runtime or solution quality), or employ more specific evaluation metrics (e.g., by measuring how close the meta-solver gets to i...
SUNNY is an Algorithm Selection (AS) technique originally tailored for Constraint Programming (CP). SUNNY is based on the k-nearest neighbors algorithm and enables one to schedule, from a portfolio of solvers, a subset of solvers to be run on a given CP problem. This approach has proved to be effective for CP problems. In 2015, the ASlib benchmarks...
Programming language identification (PLI) is a common need in automatic program comprehension as well as a prerequisite for deeper forms of code understanding. Image-based approaches to PLI have recently emerged and are appealing due to their applicability to code screenshots and programming video tutorials. However, they remain limited to the reco...
The mere development of a software to predict University dropout is not sufficient for its effective implementation in the academic context. In order to exploit it as a tool supporting decision-making, such a software should be provided with information necessary for its integration into the decision-making processes of University governance. In th...
In this paper, we propose to exploit the side-tuning
framework for multimodal document classification.
Side-tuning is a methodology for network adaptation recently introduced to solve some of the problems related to previous approaches.
Thanks to this technique it is actually possible to overcome model rigidity and catastrophic forgetting of tran...
In this paper, we propose to exploit the side-tuning framework for multimodal document classification.
Side-tuning is a methodology for network adaptation recently introduced to solve some of the problems related to previous approaches.
Thanks to this technique it is actually possible to overcome model rigidity and catastrophic forgetting of tran...
Programming language detection is a common need in the analysis of large source code bases. It is supported by a number of existing tools that rely on several features, and most notably file extensions, to determine file types. We consider the problem of accurately detecting the type of files commonly found in software code bases, based solely on t...
SUNNY is an Algorithm Selection (AS) technique originally tailored for Constraint Programming (CP). SUNNY enables to schedule, from a portfolio of solvers, a subset of solvers to be run on a given CP problem. This approach has proved to be effective for CP problems, and its parallel version won many gold medals in the Open category of the MiniZinc...
Among the many open problems in the learning process, students dropout is one of the most complicated and negative ones, both for the student and the institutions, and being able to predict it could help to alleviate its social and economic costs. To address this problem we developed a tool that, by exploiting machine learning techniques, allows to...
In Choreographic Programming, a choreography specifies in a single artefact the expected behaviour of all the participants in a distributed system. The choreography is used to synthesise correct-by-construction programs for each participant.In previous work, we defined Dynamic Choreographies to support the update of distributed systems at runtime.I...
The Internet of Things (IoT) advocates for multi-layered platforms—from edge devices to Cloud nodes—where each layer adopts its own communication standards (media and data formats). While this freedom is optimal for in-layer communication, it puzzles cross-layer integration due to incompatibilities among standards. Also enforcing a unique communica...
Serverless computing, also known as Functions-as-a-Service, is a recent paradigm aimed at simplifying the programming of cloud applications. The idea is that developers design applications in terms of functions, which are then deployed on a cloud infrastructure. The infrastructure takes care of executing the functions whenever requested by remote c...
Serverless computing, also known as Functions-as-a-Service, is a recent paradigm aimed at simplifying the programming of cloud applications. The idea is that developers design applications in terms of functions, which are then deployed on a cloud infrastructure. The infrastructure takes care of executing the functions whenever requested by remote c...
Concurrent Constraint Programming (CCP) is a declarative model for concurrency where agents interact by telling and asking constraints (pieces of information) in a shared store. Some previous works have developed (approximated) declarative debuggers for CCP languages. However, the task of debugging concurrent programs remains difficult. In this pap...
Network Function Virtualization (NFV) and Software Defined Networking (SDN) are technologies that recently acquired a great momentum thanks to their promise of being a flexible and cost-effective solution for replacing hardware-based, vendor-dependent network middleboxes with software appliances running on general purpose hardware in the cloud. Del...
Choreographic Programming is a paradigm for distributed programming, where high-level “Alice and Bob” descriptions of communications (choreographies) are used to synthesise correct-by-construction programs. However, implementations of choreographic models use message routing technologies distant from their related theoretical models (e.g., CCS/ Ope...
The Internet of Things (IoT) promotes the communication among heterogeneous entities, from small sensors to Cloud systems. However, this is realized using a wide range of communication media and data protocols, usually incompatible with each other. Thus, IoT systems tend to grow as homogeneous isolated platforms, which hardly interact. To achieve a...
Humans are social animals and usually organize activities in groups. However, they are often willing to split temporarily a bigger group in subgroups to enhance their preferences. In this work we present NightSplitter, an on-line tool that is able to plan movie and dinner activities for a group of users, possibly splitting them in subgroups to opti...
Concurrent Constraint Programming (CCP) is a declarative model for concurrency where agents interact by telling and asking constraints (pieces of information) in a shared store. Some previous works have developed (approximated) declarative debuggers for CCP languages. However, the task of debugging concurrent programs remains difficult. In this pap...
In Constraint Programming (CP) a portfolio solver combines a variety of different constraint solvers for solving a given problem. This fairly recent approach enables to significantly boost the performance of single solvers, especially when multicore architectures are exploited. In this work we give a brief overview of the portfolio solver sunny-cp,...
In Constraint Programming (CP) a portfolio solver combines a variety of different constraint solvers for solving a given problem. This fairly recent approach enables to significantly boost the performance of single solvers, especially when multicore architectures are exploited. In this work we give a brief overview of the portfolio solver sunny-cp,...
Programming distributed applications free from communication deadlocks and
race conditions is complex. Preserving these properties when applications are
updated at runtime is even harder. We present a choreographic approach for
programming updatable, distributed applications. We define a choreography
language, called Dynamic Interaction-Oriented Ch...
Programming distributed applications free from communication deadlocks and race conditions is complex. Preserving these properties when applications are updated at runtime is even harder. We present a choreographic approach for programming updatable, distributed applications. We define a choreography language, called Dynamic Interaction-Oriented Ch...
Concurrent Constraint Programming (CCP) is a declarative model for concurrency where agents interact by telling and asking constraints (pieces of information) in a shared store. Some previous works have developed (approximated) declarative debuggers for CCP languages. However, the task of debugging concurrent programs remains difficult. In this pap...
The Resource-Constrained Project Scheduling Problem (RCPSP) is a well-known scheduling problem aimed at minimizing the makespan of a project subject to temporal and resource constraints. In this paper we show that hard RCPSPs can be efficiently tackled by a portfolio approach that combines the strengths of different constraint solvers Our approach...
Microservices is an emerging paradigm for the development of distributed systems that, originating from Service-Oriented Architecture, focuses on the small dimension, the loose coupling, and the dynamic topology of services. Microservices are particularly appropriate for the development of distributed systems in the Cloud. However, their dynamic na...
In the context of Constraint Programming, a portfolio approach exploits the complementary strengths of a portfolio of different constraint solvers. The goal is to predict and run the best solver(s) of the portfolio for solving a new, unseen problem. In this work we reproduce, simulate, and evaluate the performance of different portfolio approaches...
Choreographic Programming is a methodology for the development of concurrent
software based on a correctness-by-construction approach which, given a global
description of a system (a choreography), automatically generates deadlock-free
communicating programs via an EndPoint Projection (EPP). Previous works use
target-languages for EPP that, like th...
It is well recognized that a single, arbitrarily efficient solver can be significantly outperformed by a portfolio solver exploiting a combination of possibly slower on-average different solvers. Despite the success of portfolio solvers within the context of solving competitions, they are rarely used in practice. In this paper we give an overview o...
Programming distributed applications free from communication deadlocks and races is complex. Preserving these properties when applications are updated at runtime is even harder.
We present DIOC, a language for programming distributed applications that are free from deadlocks and races by construction. A DIOC program describes a whole distributed ap...
Within the Constraint Satisfaction Problems (CSP) context, a methodology that has proven to be particularly performant consists of using a portfolio of different constraint solvers. Nevertheless, comparatively few studies and investigations have been done in the world of Constraint Optimization Problems (COP). In this work, we provide a generalizat...
The Constraint Programming (CP) paradigm allows to model and solve Constraint Satisfaction/Optimization Problems (CSPs/COPs). A CP Portfolio Solver is a particular constraint solver that takes advantage of a portfolio of different CP solvers in order to solve a given problem by properly exploiting Algorithm Selection techniques. In this work we pre...
Application Programming Interfaces (APIs) are a standard feature of any application that exposes its functionalities to external invokers. APIs can be composed thus obtaining new programs with new functionalities. However API composition easily becomes a frustrating and time-costly task that hinders API reuse. The issue derives from technology-depe...
In Service-Oriented Architectures (SOA) services are composed by coordinating their communications into a flow of interactions. Coloured Petri nets (CPN) offer a formal yet easy tool for modelling abstract SOAs. Still, mapping abstract SOAs into executable ones requires a non-trivial and time-costly analysis. Here, we propose a methodology that map...
In Constraint Programming (CP), a portfolio solver uses a variety of
different solvers for solving a given Constraint Satisfaction / Optimization
Problem. In this paper we introduce sunny-cp2: the first parallel CP portfolio
solver that enables a dynamic, cooperative, and simultaneous execution of its
solvers in a multicore setting. It incorporates...
We develop a methodology for verifying distributed, adaptive software systems.•The cornerstone of our framework is the use of choreography languages.•We integrate also different techniques based on abstract interpretation and on dynamic verification.
Proving deadlock freedom for distributed applications is complex. It becomes
even harder if those applications dynamically adapt to face needs which were
unexpected when the application was deployed or even started. We present a
framework ensuring this key property by construction. Our framework includes a
language called Adaptive Interaction-Orien...
We present AIOCJ, a framework for programming distributed adaptive
applications. Applications are programmed using AIOC, a choreographic language
suited for expressing patterns of interaction from a global point of view. AIOC
allows the programmer to specify which parts of the application can be adapted.
Adaptation takes place at runtime by means o...
In Service-Oriented Architectures (SOA), services are composed by coordinating their communications into a flow of interactions. Coloured Petri nets (CPN) offer a formal yet easy tool for modelling interactions in SOAs, however mapping abstract SOAs into executable ones requires a non-trivial and time-costly analysis. Here, we propose a methodology...
We propose a timed and soft extension of Concurrent Constraint Programming. The time extension is based on the hypothesis of
bounded asynchrony
: The computation takes a bounded period of time and is measured by a discrete global clock. Action prefixing is then considered as the syntactic marker that distinguishes a time instant from the next one....
Concurrent constraint programs operate on data which is represented by a constraint of a given cylindric constraint system. Such a system provides an algebraic representation of first-order logic. It features a (binary) entailment relation, a binary union operation for adding information (formally defined as the least upper bound of two constraints...
Disasters like terrorist attacks, earthquakes, hurricanes, and volcano eruptions are usually unpredictable events that affect a high number of people. We propose an approach that could be used as a decision support tool for a post-disaster response that allows the assignment of victims to hospitals and organizes their transportation via emergency v...
Within the context of constraint solving, a portfolio approach allows one to
exploit the synergy between different solvers in order to create a globally
better solver. In this paper we present SUNNY: a simple and flexible algorithm
that takes advantage of a portfolio of solvers in order to dynamically compute
a schedule of (a subset of) them for so...
Recent research has shown that a single arbitrarily efficient solver can be
significantly outperformed by a portfolio of possibly slower on-average
solvers. The solver selection is usually done by means of (un)supervised
learning techniques which exploit features extracted from the problem
specification. In this paper we present an useful and flexi...
Program transformation is an appealing technique which allows to improve
run-time efficiency, space-consumption, and more generally to optimize a given
program. Essentially, it consists of a sequence of syntactic program
manipulations which preserves some kind of semantic equivalence. Unfolding is
one of the basic operations which is used by most p...
Constraint Handling Rules (CHR) is a committed-choice declarative language which has been originally designed for writing constraint solvers and which is nowadays a general purpose language.
Recently the language has been extended by introducing user-definable (static or dynamic) rule priorities. The resulting language allows a better control over...
Disasters like terrorist attacks, earthquakes, hurricanes, and volcano eruptions are usually unpredictable events that affect a high number of people. We propose an approach that can be used as a decision support tool for a post-disaster response that allows the assignment of victims to hospitals and organizes their transportation via emergency veh...
Recent research in areas such as SAT solving and Integer Linear Programming
has shown that the performances of a single arbitrarily efficient solver can be
significantly outperformed by a portfolio of possibly slower on-average
solvers. We report an empirical evaluation and comparison of portfolio
approaches applied to Constraint Satisfaction Probl...
In the context of Service-Oriented Architectures (SOAs), the integration of services is an important aspect that is usually addressed by using specific tools, such as Enterprise Service Bus (ESB). In this paper we propose a framework to perform service integration building on the extension of service interfaces, capturing a class of service integra...
Service-oriented architectures (SOAs) usually comprehend in-the- middle entities such as proxies or service mediators that compose services abstracting from the order in which they exchange messages. Although widely used, these entities are usually implemented by means of ad-hoc solutions.
In this paper we generalise this composition mechanism by i...
Gecode is one of the most efficient libraries that can be used for constraint
solving. However, using it requires dealing with C++ programming details. On
the other hand several formats for representing constraint networks have been
proposed. Among them, XCSP has been proposed as a format based on XML which
allows us to represent constraints define...
Bi-directional request-response interaction is a standard communication pattern in Service Oriented Computing (SOC). Such a pattern should be interrupted in case of faults. In the literature, different approaches have been considered: WS-BPEL discards the response, while Jolie waits for it in order to allow the fault handler to appropriately close...
A fundamental aspect which affects the efficiency and the performance of Service-Oriented Architectures is the mechanism which
allows to manage sessions and, in particular, to assign incoming messages to the correct sessions (also known as service instances).
A relevant mechanism for solving this problem, first introduced by BPEL and then used in o...
We study the decidability of termination for two CHR dialects which, similarly to the Datalog like languages, are defined by using a signature which does not allow function symbols (of arity >0). Both languages allow the use of the = built-in in the body of rules, thus are built on a host language that supports unification. However each imposes one...
The Italian Logic Programming community has given several contributions to the theory of Concurrent Constraint Programming. In particular, in the topics of semantics, verification, and timed extensions. In this paper we review the main lines of research and contributions of the community in this field. 1 The origins: from concurrect logic programmi...
A programming language is an artificial formalism in which algorithms can be expressed. For all its artificiality, this formalism
remains a language. Its study can thus make good use of the many concepts and tools developed in the last century in linguistics
(which studies both natural and artificial languages). Without going into great detail, thi...