Automata
Introduction
The automata module (arlib/automata) provides implementations of finite automata and related algorithms for formal language processing and constraint solving. It includes both classical finite automata (DFA/NFA) and symbolic automata for string constraint solving.
Key Features
Finite Automata: DFA and NFA manipulation and conversion
Symbolic Automata: Symbolic finite automata with theory-based transitions
Automata Learning: Active learning algorithms for automata inference
String Constraint Solving: Integration with SMT solvers for string theories
Components
Finite Automata (arlib/automata/fa.py)
Basic finite automata operations:
from arlib.automata.fa import DFA, NFA
# Create a DFA
dfa = DFA(
states={'q0', 'q1', 'q2'},
alphabet={'a', 'b'},
transitions={('q0', 'a'): 'q1', ('q1', 'b'): 'q2'},
initial_state='q0',
accepting_states={'q2'}
)
# Accept strings
result = dfa.accepts("ab") # True
Symbolic Automata (arlib/automata/symautomata)
Symbolic finite automata framework supporting predicates over infinite alphabets. This module is adapted from the symautomata project.
Automata Learning (arlib/automata/fa_learning.py)
Active learning algorithms for inferring automata from examples:
from arlib.automata.fa_learning import learn_automaton
# Learn DFA from membership queries
automaton = learn_automaton(examples, membership_oracle)
Applications
String constraint solving in SMT
Regular expression analysis
Program verification with string operations
Vulnerability detection in web applications
References
Hopcroft, J. E., & Ullman, J. D. (1979). Introduction to Automata Theory, Languages, and Computation
D’Antoni, L., & Veanes, M. (2014). Minimization of Symbolic Automata. POPL 2014
Angluin, D. (1987). Learning Regular Sets from Queries and Counterexamples