Welcome to CIVL, the Concurrency Intermediate Verification
Language tool. CIVL is a Java project for verifying concurrent
programs written in CIVL-C, which is a C dialect with extensions to
concurrent language constructs. The CIVL project uses ABC, SARL and
GMC. The CIVL tool can be used to perform a number of tasks, including
the following:
- preprocess or pass a CIVL-C program;
- verify a CIVL-C program;
- run a CIVL-C program;
- replay traces for a program.
In addition, it provides a framework for developing your own libraries
or transformations on ASTs of various language extensions and
libraries.
There is a simple command-line interface for CIVL (see {@link
dev.civl.mc.CIVL CIVL}), but most users will want to use CIVL
through the user interface (see {@link
dev.civl.mc.run.IF.UserInterface UserInterface}). To use the
API, it is helpful to have some understanding of the modular structure
of CIVL. The CIVL source code is decomposed into modules, each with a
well-defined interface and set of responsibilities. Some of these
modules are decomposed further into sub-modules. The top-level modules
are:
- util
- responsibilities: simple general-purpose utility classes
that do not use other parts of CIVL
- uses: nothing
- interface: {@link dev.civl.mc.util.IF}
- entry point: none
- config
- responsibilities: static configurations of the system
- uses: gmc
- interface: {@link dev.civl.mc.config.IF}
- entry point: CIVLConfiguration
- transform
- responsibilities: transformations of an AST
- uses: config, abc, sarl
- interface: {@link dev.civl.mc.transform.IF}
- entry point: CIVLTransform
- model
- responsibilities: definitions of the control flow graph
representation of a CIVL-C program
- uses: util, config, abc,
gmc, sarl
- interface: {@link dev.civl.mc.model.IF}
- entry point: Models
- submodules
- expression
- responsibilities: definitions of various expressions of
CIVL
- interface: {@link
dev.civl.mc.model.IF.expression}
- entry point: none
- location
- responsibilities: definitions a location in the control
flow graph of a CIVL-C program
- interface: {@link
dev.civl.mc.model.IF.location}
- entry point: none
- statement
- responsibilities: definitions of various statements of
CIVL
- interface: {@link
dev.civl.mc.model.IF.statement}
- entry point: none
- type
- responsibilities: definitions of various types of CIVL
- interface: {@link dev.civl.mc.model.IF.type}
- entry point: none
- variable
- responsibilities: definitions of a variable of CIVL
- interface: {@link
dev.civl.mc.model.IF.variable}
- entry point: none
- state
- responsibilities: creation and manipulation of states of a
CIVL model.
- uses: config, model, gmc,
sarl
- interface: {@link dev.civl.mc.state.IF}
- entry point: States
- log
- responsibilities: data structures for logging errors during
verification.
- uses: model, state, gmc,
sarl
- interface: {@link dev.civl.mc.log.IF}
- entry point: none
- dynamic
- responsibilities: general computations of symbolic
expressions, including the pretty printing method.
- uses: util,model, state,
log, sarl
- interface: {@link dev.civl.mc.dynamic.IF}
- entry point: Dynamics
- semantics
- responsibilities: implementation of the semantics of
CIVL-C.
- uses: util, config, model,
state, log, dynamic,
sarl
- interface: {@link dev.civl.mc.semantics.IF}
- entry point: Semantics
- kripke
- responsibilities: implementation of the semantics of
CIVL-C.
- uses: util, config, model,
state, log, dynamic,
semantics, gmc, sarl
- interface: {@link dev.civl.mc.kripke.IF}
- entry point: Kripkes
- predicate
- responsibilities: definitions of predicates that are
required to hold for any CIVL-C programs.
- uses: model, state, log,
dynamic, semantics, kripke,
gmc, sarl
- interface: {@link dev.civl.mc.predicate.IF}
- entry point: none
- gui
- responsibilities: graphical interfaces for viewing
counterexample traces.
- uses: model, state, dynamic,
kripke, gmc, sarl
- interface: {@link dev.civl.mc.gui.IF}
- entry point: none
- library
- responsibilities: base implementation of libraries.
- uses: model, state, log,
dynamic, semantics, kripke,
sarl
- interface: {@link dev.civl.mc.library.IF}
- entry point: none
- run
- responsibilities: parsing command line inputs and initial
configurations of the tool.
- uses: kripke, model, state,
transform, util, abc,
gmc, sarl
- interface: {@link dev.civl.mc.run.IF}
- entry point: UserInterface
- main
- responsibilities: parsing command line inputs and initial
configurations of the tool
- uses: run
- interface: {@link dev.civl.mc}
- entry point: CIVL