Science Score: 57.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 2 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.5%) to scientific vocabulary
Keywords
Repository
A ω-regular language inclusion checker
Basic Info
Statistics
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
- Releases: 1
Topics
Metadata Files
README.md
bait - Büchi Automata Inclusion Tester

A ω-regular language inclusion checker.
Introduction
bait is an ω-regular language inclusion checker which relies on an algorithm
derived from Abstract Interpretation techniques.
The tool accepts as input two
ω-regular languages represented as
Büchi automata and outputs
whether the inclusion holds or not.
The automata are represented with the the .ba format.
bait is the implementation of an algorithm presented at the conference CONCUR in 2021.
A link to the article is given here.
Prerequisites
- Java 8+
Building and Running
Use ./gradlew build to build bait.
The easiest way to run bait is to execute the bait.jar file with java -jar
bait.jar -a path/to/A.ba -b path/to/B.ba.
You can download it from the release page.
Alternatively, you can build the jar file with:
{bash}
git clone https://github.com/parof/bait
cd bait
./gradlew installDist
This command will build the executable .jar file in build/libs.
Once you built the executable you can run:
{bash}
java -jar build/libs/bait.jar -a path/to/A.ba -b path/to/B.ba
You can also run bait using gradlew run:
{bash}
./gradlew run --args='-a /path/to/A.ba -b /path/to/B.ba'
Run with argument --help to see the all the available options.
The .ba format
The input automata must be specified in the .ba format.
The official description of the format, written by its authors, has been archived
here.
Other tools, for example RABIT,
accept the same input format.
One .ba file must respect the following specification:
{}
(initial state)
...
(transitions)
...
(accepting states)
Observe that automata in .ba format have only one initial state.
One state is simply a sequence of characters. Here there are some examples:
{}
state
state1
a
iB
[0][1][2]
Observe that [0][1][2] is a single state: the squared brackets are just part
of the name of the state and they don't have a semantic meaning.
Additionally, we require that the states don't include in the names the
strings , or ->, because they will be used to define the transitions.
One transition is defined as
{}
symbol,firstState->secondState
where symbol is a sequence of characters, and firstState and secondState are states.
Similarly to the states, the symbols can't contain -> or , as substrings.
Here there are some examples of valid transitions:
{}
a,s1->s2
1,s->s'
sym,[0][0]->[0][1]
If no initial state is specified, the first state in the first transition of the automaton is considered to be the initial one. If no final state is specified, then each state in the automaton is considered to be final.
Consider the following automaton:

It can be represented in the .ba format as:
{}
q0
a,q0->q1
b,q1->q1
c,q1->q0
q1
Observe that since the initial state is also the first state of the first transition, and then we can omit to specify it:
{}
a,q0->q1
b,q1->q1
c,q1->q0
q1
Working example
We want to compute whether the inclusion holds between the following automata:

The first automaton A is represented in the .ba format as:
{}
a,q0->q0
b,q0->q0
a,q0->q1
a,q1->q1
q1
While the second automaton B is represented in the .ba format as:
{}
a,q0->q1
b,q1->q0
q1
You can finally compute whether the inclusion holds or not using bait.jar
with the following command:
{bash}
java -jar bait.jar -a A.ba -b B.ba
This command will give you the following output:

Since the language of A is (a+b)*aω and the language of B is (ab)ω the
inclusion doesn't hold, and then False is correctly returned.
Benchmarks
In the test-automata directory there are some examples of automata in the
.ba format.
We benchmarked bait with a large set of automata, and they can be found in a
separate repository:
https://github.com/parof/buchi-automata-benchmark.
Authors
Owner
- Name: Francesco Parolini
- Login: phreppo
- Kind: user
- Location: London, UK
- Company: Lacework
- Website: phreppo.github.io
- Repositories: 1
- Profile: https://github.com/phreppo
Making programs more secure (WIP)
Citation (CITATION.cff)
cff-version: 1.1.0
message: "If you use this software, please cite it as below."
authors:
- family-names: Doveri
given-names: Kyveli
orcid: https://orcid.org/0000-0001-9403-2860
- family-names: Ganty
given-names: Pierre
orcid: https://orcid.org/0000-0002-3625-6003
- family-names: Parolini
given-names: Francesco
orcid: https://orcid.org/0000-0002-1077-7812
- family-names: Ranzato
given-names: Francesco
orcid: https://orcid.org/0000-0003-0159-0068
title: "bait - Büchi Automata Inclusion Tester"
version: 0.1
date-released: 2021-04-26
CodeMeta (codemeta.json)
{
"@context": "https://doi.org/10.5063/schema/codemeta-2.0",
"@type": "SoftwareSourceCode",
"license": "https://spdx.org/licenses/GPL-3.0",
"codeRepository": "git+https://github.com/parof/bait",
"contIntegration": "https://github.com/parof/bait/actions",
"dateCreated": "2021-04-26",
"datePublished": "2021-04-26",
"dateModified": "2021-04-26",
"downloadUrl": "https://github.com/parof/bait/archive/refs/heads/master.zip",
"issueTracker": "https://github.com/parof/bait/issues",
"name": "bait",
"version": "v0.1",
"description": "bait is an omega-regular language inclusion checker.",
"applicationCategory": "Computer Science",
"releaseNotes": "Initial release",
"developmentStatus": "active",
"keywords": [
"abstract interpretation",
"language inclusion",
"omega regular languages",
"bchi automata"
],
"programmingLanguage": [
"Java"
],
"runtimePlatform": [
"JVM"
],
"operatingSystem": [
"Linux",
"Windows",
"macOS"
],
"author": [
{
"@type": "Person",
"@id": "https://orcid.org/0000-0001-9403-2860",
"givenName": "Kyveli",
"familyName": "Doveri",
"email": "kyveli.doveri@imdea.org",
"affiliation": {
"@type": "Organization",
"name": "IMDEA Software Institute and Universidad Politcnica de Madrid, Spain"
}
},
{
"@type": "Person",
"@id": "https://orcid.org/0000-0002-3625-6003",
"givenName": "Pierre",
"familyName": "Ganty",
"email": "pierre.ganty@imdea.org",
"affiliation": {
"@type": "Organization",
"name": "IMDEA Software Institute, Spain"
}
},
{
"@type": "Person",
"@id": "https://orcid.org/0000-0002-1077-7812",
"givenName": "Francesco",
"familyName": "Parolini",
"email": "francesco.parolini@lip6.fr",
"affiliation": {
"@type": "Organization",
"name": "Sorbonne Universit, France"
}
},
{
"@type": "Person",
"@id": "https://orcid.org/0000-0003-0159-0068",
"givenName": "Francesco",
"familyName": "Ranzato",
"email": "ranzato@math.unipd.it",
"affiliation": {
"@type": "Organization",
"name": "Universit degli Studi di Padova, Italy"
}
}
]
}
GitHub Events
Total
Last Year
Dependencies
- actions/checkout v2 composite
- actions/setup-java v1 composite
- org.junit.jupiter:junit-jupiter-api 5.4.2 testImplementation
- org.junit.jupiter:junit-jupiter-engine 5.4.2 testRuntimeOnly