Clone wiki

libalf / Home

libalf: The Automata Learning Framework

Table of Contents

  1. Introduction
  2. Dependencies
  3. Installation
  4. Usage
  5. Development

1. Introduction

Source: libalf About page

The libalf library is a comprehensive, open-source library for learning finite-state automata covering various well-known learning techniques (such as Angluin's L*, Biermann's learning approach, and RPNI), as well as novel learning algorithms (e.g. for NFA and visibly one-counter automata).

libalf is highly flexible and allows for facilely interchanging learning algorithms and combining domain-specific features in a plug-and-play fashion. Its modular design and its implementation in C++ make it the ideal platform for adding and engineering further, efficient learning algorithms for new target models (e.g., B├╝chi automata, timed automata, or probabilistic automata).

2. Dependencies

Source: libalf Documentation page

Before you build libalf, please make sure that you fulfill the prerequisites.

  • Linux
    • For compiling the C++ sources in Linux, you require a C++ compiler (we suggest that you use the GNU C++ compiler) and the make utility, which is used to automate the build process. Both tools should be installed by default on most Linux machines.
  • Windows
    • To compile the C++ sources on Windows, we recommend using the Minimalist GNU for Windows (MinGW) compiler and MSYS, a Unix-style shell for Windows. Both can be obtained from
  • Java
    • If you want to use jALF, you need Java 6.0 or later installed on your system.

3. Installation

Source: libalf Documentation page

Compiling and installing libalf (and the other components) is easy. Just follow these simple steps:

  1. Download and extract the sources.
  2. Change into the folder of the software you want to compile (e.g. libalf).
  3. Type make install to build and install the component.

The build and installation routines are designed for Linux. By default, the install script tries to install the component in /usr/local/lib and /usr/local/include. On Windows, or if you do not want the libraries and headers to be installed on your system, you can let the variable PREFIX point to some arbitrary folder, in which you want to install the software. Then, you have to invoke PREFIX=some_path make install.

Please make sure the components in the right order. E.g. jALF needs to find libalf's header files and the compiled library in order to compile. Moreover, you may need to specify the location of Java's JNI headers using the variable JAVA_INCLUDE when compiling jALF.

All sources (except the dispatcher) compile on both Linux and Windows (32-bit and 64-bit). However, the dispatcher uses POSIX system calls and does only compile and run on POSIX-compliant systems such as Linux. (Cygwin may be one way to do so. If you managed to compile and run the dispatcher on Windows, please let us know!)

The libalf Compilation Guide v0.2 is an (outdated) quick guide on how to compile and install libalf v0.2. However, even if guide is no longer up-to-date, it may be useful and provides insights into the build process and the usage.

  • Get the libalf compilation guide v0.2

4. Usage

See Usage page.

5. Development

Source: libalf Team page

The following people are or were involed in the libalf project (in alphabetical order):

  • Benedikt Bollig (ENS Cachan)
  • Joost-Pieter Katoen (RWTH Aachen University)
  • Carsten Kern (RWTH Aachen University)
  • Martin Leucker (TU Munich)
  • Daniel Neider (RWTH Aachen University)
  • David R. Piegdon (RWTH Aachen University, Student Assistant)
  • Stefan Schulz (RWTH Aachen University)