bmc.h
External header file
bmcInt.h
Internal header file
bmcCheck.c
Some useful functions to check propositional formulae. Temporary located into the bmc package
bmcCmd.c
BMC commands.
bmcModel.c
Model Manager for the bmc package
bmcRbc2bexp.c
Convert an RBC to corresponding Boolean Expression
bmcRbc.c
Implementation for generic interface to rbc. Temporary located in the bmc package
bmcSatsolver.c
BMC interface to SAT solvers.
bmcTest.c
Test routines for bmc package
bmcUtils.c
Useful internal functions of the bmc package
bmcVarsMgr.c
Variables Manager for the bmc package
bmcWff.c
Well Formed Formula manipulation routines

bmc.h

External header file

By: Roberto Cavada

()
Use this macro when you need to know if a string representing loopback value means "all possible loops"
()
Use this macro when you need to know if a string representing loopback value means "no loopback"

bmcInt.h

Internal header file

By: Roberto Cavada


bmcCheck.c

Some useful functions to check propositional formulae. Temporary located into the bmc package

By: Roberto Cavada

Bmc_CheckFairnessListForPropositionalFormulae()
Help function to simplify calling to 'bmc_check_wff_list' for searching of propositional only wff. Returns a new list of wffs which contains legal wff only
Bmc_WffListMatchProperty()
For each element belonging to a given list of wffs, calls the given matching function. If function matches, calls given answering function
Bmc_IsPropositionalFormula()
Given a wff returns 1 if wff is a propositional formula, zero (0) otherwise.
bmc_is_propositional_formula_aux()
Useful wrapper for Bmc_CheckFairnessListForPropositionalFormulae
bmc_check_if_wff_is_valid()
private service for Bmc_CheckFairnessListForPropositionalFormulae
bmc_add_valid_wff_to_list()
private service for Bmc_CheckFairnessListForPropositionalFormulae

bmcCmd.c

BMC commands.

By: Roberto Cavada

Command file

()
Declares a set of variables used by the options saving code
()
Use this macro in command processing functions in order to save options default values, so avoiding any side effect on those options
()
Exits from the function after have restored all options values saved using BMC_CMD_SAVE_OPTIONS.
Bmc_AddCmd()
Adds all bmc-related commands to the interactive shell
CommandBmcSetup()
Initializes the bmc sub-system, and builds the model in RBC format
UsageBmcSetup()
Usage string for CommandBmcSetup
CommandBmcSimulate()
CommandBmcSimulate generates a trace of the problem represented from the simple path from 0 (zero) to k
UsageBmcSimulate()
Usage string for UsageBmcSimulate
CommandBmcLtlsat()
Builds a problem for given k and l, then calls the solver
UsageBmcLtlsat()
Usage string for UsageBmcLtlsat
Bmc_GenSolveInvar()
Genetate DIMACS version and/or solve and INVARSPEC problem.
Bmc_GenSolvePbs()
Given a LTL property generates and solve the problems for all Ki (k_min<=i<=k_max). If bIncreaseK is 0 then k_min==k_max==k and only one problem is generated. If bIncreaseK is 1 then k_min == 0 and k_max == k. Each problem Ki takes into account of all possible loops from k_min to Ki if loopback is '*' (BMC_ALL_LOOPS).
If bCreateDimacs == TRUE then create dimacs before solving.
Solver is called only if bSolve == TRUE, otherwise each problem is only generated and dumped to dimacs file
BmcSatGenProblemKL()
BmcSatGenProblemK()
Generates the problem taking into account of k parameter, and writes the problem into a dimacs file
BmcSatGenInvar()
Generates the invariant problem taking a INVAR specification, and writes the problem into a dimacs file
BmcSatSolveFalsificationProblem()
Given a problem calls the solver and returns a counterexample if there is any
BmcSatSolveInvar()
BmcSatSolveInvar
Prop_GetRbcFsmCoi()
Builds the RBC model, applying the cone of influence if it has been enabled by user.
CommandCheckLtlSpecBmc()
Checks the given LTL specification, or all LTL specifications if no formula is given. Parameters are the maximum length and the loopback values
UsageBmcCheckLtlSpec()
Usage string for command check_ltlspec_bmc
CommandCheckLtlSpecBmcOnePb()
Checks the given LTL specification, or all LTL specifications if no formula is given. Checking parameters are the problem length and the loopback values
UsageBmcCheckLtlSpecOnePb()
Usage string for command check_ltlspec_bmc_onepb
CommandGenLtlSpecBmcOnePb()
Generates only one problem of fixed length and loopback, and dumps the problem to a dimacs file. The single problem is dumped for the given LTL specification, or for all LTL specifications if no formula is given
UsageBmcGenLtlSpecOnePb()
Usage string for command gen_ltlspec_bmc_onepb
CommandGenLtlSpecBmc()
Generates length_max+1 problems iterating length from zero to length_max, and dumps each problem to a dimacs file. Each problem is dumped for the given LTL specification, or for all LTL specifications if no formula is given. Generation parameters are the maximum length and the loopback values
UsageBmcGenLtlSpec()
Usage string for command gen_ltlspec_bmc
CommandGenInvarBmc()
Generates and dumps the problem for the given invariant or for all invariants if no formula is given. SAT solver is not invoked.
UsageBmcGenInvar()
Usage string for command gen_invar_bmc
CommandCheckInvarBmc()
Generates and solve the given invariant, or all invariants if no formula is given
UsageBmcCheckInvar()
Usage string for command check_invar_bmc
bmc_CommandsWith_k_l_OptionsHandling()
Bmc commands options handling for commands with -k and -l options
bmc_CommandsWithout_k_l_OptionsHandling()
Bmc commands options handling for commands without -k and -l options
bmcSave_k_l()
Stores current vaues of length and loopback into two given variables
bmcSaveDimacsFilenames()
Stores current default dimacs filenames into a buffer
bmcRestoreDimacsFilenames()
Restores the original value of dimacs filenames option

bmcModel.c

Model Manager for the bmc package

By: Alessandro Cimatti, Lorenzo Delana and Roberto Sebastiani

Bmc_Mk_k_Path()
Returns the path for the model from 0 to k, taking into account initial conditions and invariants
Bmc_MkTableau_k_Noloop()
Builds tableau without loop at time zero, taking account of fairnesses
Bmc_MkTableau_k_l()
Builds the tableau at time zero. Loop is allowed
Bmc_MkTableauAtTime()
Given a wff expressed in ltl builds the model-independent tableau at 'time' of a path formula bounded by [k, l]
Bmc_MkNextTableauAtTime()
Resolve the NEXT operator, building the tableau for its argument
Bmc_MkEventuallyTableauAtTime()
Resolves the future operator, and builds a conjunctive expression of tableaus, by iterating intime up to k in a different manner depending on the [l, k] interval form
Bmc_MkGloballyTableauAtTime()
As Bmc_MkEventuallyTableauAtTime, but builds a conjunctioned expression in order to be able to assure a global constraint
Bmc_MkUntilTableauAtTime()
Builds an expression which evaluates the until operator
Bmc_MkReleasesTableauAtTime()
Builds an expression which evaluates the release operator
Bmc_MkProblem_k_l()
Returns the problem at length k with loopback l (possibly BMC_NO_LOOP)
Bmc_MkProblem_k()
Returns all problems for the model at length k with all loops from 0 to k
Bmc_MkInvariantProblem()
Builds and returns the invariant problem of the given propositional formula
bmc_mk_j_k_unrolling()
Unrolls the transition relation from j to k, taking into account invars over next variables
bmc_mk_loopback()
Shifts current and next vars in trans expression respectively to k and l steps, if a loop exists. Returns truth if no loop exists
bmc_mk_fairness()
Generates and returns an expression representing all fairnesses in a conjunctioned form
bmc_succ_k_l_loop()
Given time<=k and a [l, k] interval, returns next time, or BMC_NO_LOOP if time is equal to k and there is no loop
bmc_mk_tableau_k_loops()
Builds tableau for all possible loops in [l, k], taking into account of fairness
bmc_mk_tableau_k_loops_depth1()
Builds tableau for all possible loops in [l, k], in the particular case in which depth is 1. This function takes into account of fairness
bmc_mk_untiltableau_at_time_aux()
auxiliary part of Bmc_MkUntilTableauAtTime
bmc_mk_releasestableau_at_time_aux()
auxiliary part of Bmc_MkReleasesTableauAtTime
bmc_mk_all_loops()
Builds the disjunction of all the loops from 0 to k

bmcRbc2bexp.c

Convert an RBC to corresponding Boolean Expression

By: Lorenzo Delana

Bmc_Rbc2Bexp()
Given an rbc, constructs the corresponding boolean expression
Rbc2bexpDfsData_push()
Sets a node into the stack
Rbc2bexpDfsData_head()
Rbc2bexpDfsData_head
Rbc2bexpDfsData_pop()
Rbc2bexpDfsData_pop
Rbc2bexp_Set()
Rbc2bexpSet
Rbc2bexp_First()
Rbc2bexpFirst
Rbc2bexp_Back()
Rbc2bexp_Back
Rbc2bexp_Last()
Rbc2bexp_Last

bmcRbc.c

Implementation for generic interface to rbc. Temporary located in the bmc package

By: Roberto Cavada

This implementation depends on the rbc package is being used. Implementation is currently a thin wrapper around rbc supplied interface, so functions are really minimal

Bmc_RbcIsTrue()
Returns 1 if the given rbc is the true value, otherwise returns 0
Bmc_RbcIsFalse()
Returns 1 if the given rbc is the false value, otherwise returns 0
Bmc_RbcTruth()
Builds a rbc 'true' constant value
Bmc_RbcFalsity()
Builds a rbc 'false' constant value
Bmc_RbcNot()
Negates its rbc argument
Bmc_RbcAnd()
Builds a new rbc which is the conjunction between its two arguments
Bmc_RbcOr()
Builds a new rbc which is the disjunction of its two arguments
Bmc_RbcXor()
Builds a new rbc which is the exclusive-disjunction of its two arguments
Bmc_RbcImplies()
Builds a new rbc which is the implication between its two arguments
Bmc_RbcIff()
Builds a new rbc which is the logical equivalence between its two arguments
Bmc_RbcIte()
Builds an if-then-else operation rbc
Bmc_RbcVarShift()
Creates a fresh copy G(X') of the rbc F(X) by shifting each variable index of a given amount
BmcShiftingHashInit()
Initializes private hast table member for shifting operations
BmcShiftingHashQuit()
Deletes private hast table member for shifting operations

bmcSatsolver.c

BMC interface to SAT solvers.

By: Alessandro Cimatti and Lorenzo Delana

Contains the primitives for dumping a CNF formula in a DIMACS file, calling an external solver (e.g. SATO), and calling an internal solver (e.g. SIM).

Bmc_DimacsWriteProblem()
Writes a BMC problem in Dimacs format.
Bmc_DavinciWriteProblem()
Dumps Davinci format to a specified file
Bmc_CallSimSolver()
Bmc interface to Sim as internal solver
Bmc_CallSatoSolver()
Interface to external solver SATO.
CnfWriteDimacs()
Ouput a list of clauses on a DIMACS file.
CallSimSolver()
A simple function to interface a call to Sim. If the sim solver successfully returns a model, the representation of that model can be found into the list lsResult, which must be previously created. Returns:

bmcTest.c

Test routines for bmc package

By: Roberto Cavada

Bmc_TestReset()
Call this function to reset the test sub-package (into the reset command for example)
Bmc_MkLoopbackLtl()
For each variable p in the set of state variables, generates the global equivalence of p and X^(loop length), starting from the loop start
Bmc_TestTableau()
The first time Bmc_TestTableau is called in the current session this function creates a smv file with a model and generates a random ltl spec to test tableau. The following times it is called it appends a new formula to the file.
UsageBmcTestTableau()
Usage string for Bmc_TestTableau
Bmc_TestVarsMgr()
Bmc_TestVarsMgr
bmc_gen_tableau_test()
Given a WFF in NNF, converts it into a tableau formula, then back to WFF_(k,l) and returns WFF -> WFF_(k,l)
bmc_gen_wff()
Builds a random LTL WFF with specified max depth and max connectives.
BmcBexpOutput()
Write to specified FILE stream given node_ptr formula with specified output_type format. There are follow formats: BMC_BEXP_OUTPUT_SMV, BMC_BEXP_OUTPUT_LB

bmcUtils.c

Useful internal functions of the bmc package

By: Roberto Cavada

Bmc_Init()
Initializes the BMC model manager structure
Bmc_Quit()
Frees all resources allocated for the BMC model manager
Bmc_ConvertLoopbackFromString()
Given a string representing a loopback possible value, returns the integer corresponding value as parameter. Returns SUCCESS if conversion was possible, SYNTAX_ERROR otherwise
Bmc_ConvertLoopbackFromInteger()
Given an integer containing the inner representation of the loopback value, returns as parameter the corresponding user-side value as string.
Bmc_StripPath()
Return pathname without path prefix
Bmc_StripPathExt()
Returns filename without path and extension
BmcIntFreeListOfLists()
Destroys a list of list
freeListOfLists_aux()
Private service for BmcIntFreeListOfLists

bmcVarsMgr.c

Variables Manager for the bmc package

By: Alessandro Cimatti and Lorenzo Delana

Bmc_VarsMgrGetNum()
Returns the number of variables currently handled by the Variables Manager
Bmc_VarsMgrGetMaxtime()
Returns the maximum time currently handled by the variable environment
Bmc_VarsMgrGetRbcMgr()
Returns the variable environment data structure
Bmc_MapBexp2Rbc()
Converts given boolean expressions list into correspondent reduced boolean circuits list
Bmc_Bexp2Rbc()
Converts given boolean expression into correspondent reduced boolean circuit
Bmc_ExtendsMaxtime()
Extends maxtime at given new_maxtime
Bmc_CurrShiftToNext()
Shift given current expression at next time
Bmc_CurrNextShiftAtTime()
Shift given current, next expression at specified time
Bmc_CurrNextShiftAtTimes()
Shift given current, next expression at specified ctime (current vars at time) and ntime (next vars at time)
Bmc_MkAndCurrNextInterval()
Make an AND interval of given expression using range [from, to]
Bmc_MkOrCurrNextInterval()
Make an OR interval of given expression using range [from, to]
Bmc_Statevar2Curvar()
Search the association from given state variable and its relative rbc representation, and returns the rbc form
Bmc_GetIthStatevar()
Given the relative index returns the state variable which addresses
Bmc_Curvar2Statevar()
Given a rbc representation of a variable, returns the relative state variable
Bmc_GetIthCurvar()
As Bmc_GetIthStatevar but in terms of rbc representation
Bmc_GetIthNextvar()
As Bmc_GetIthCurvar but relatively to next state variables block
Bmc_GetIthTimedvar()
As Bmc_GetIthNextvar but relatively to 'time' indexed state variables block
Bmc_Curvar2Nextvar()
Given a rbc current variable, returns the rbc variable corrisponding to the next variables block
Bmc_Statevar2Nextvar()
As Bmc_Curvar2Nextvar but current variable must be supplied in state variable form instead of rbc form
Bmc_Nextvar2Timedvar()
Given a rbc next variable, returns the rbc variable corrisponding to the 'time' index variables block
Bmc_Curvar2Timedvar()
Given a rbc current variable, returns the rbc variable corrisponding to the 'time' index variables block
Bmc_Statevar2Timedvar()
As Bmc_Curvar2Timedvar but current variable must be supplied in state variable form instead of rbc form
Bmc_Timedvar2Curvar()
Given a variable which belongs to a timed block of variables, returns the corrisponding current variable in rbc form
Bmc_Timedvar2Statevar()
Given a variable which belongs to a timed block of variables, returns the corrisponding state variable
Bmc_Nextvar2Statevar()
Given a variable which belongs to the next block of variables, returns the corrisponding state variable
Bmc_Timedvar2Nextvar()
Given a variable which belongs to a timed block of variables, returns the corrisponding variable in rbc form which belongs to the next block of variables
Bmc_Nextvar2Curvar()
Given a variable which belongs to the next block of variables, returns the corrisponding current variable in rbc form
Bmc_Time2Firstvar()
Returns the first variable in rbc form which belongs to the given block of variables indexed by 'time'
Bmc_VarIndex2Time()
Given a variable index returns the corresponding time
Bmc_VarIndex2StateVarIndex()
Given the index of a timed variable, returns the index of the corresponding state variable
BmcVarsMgrInit()
Initialize BMC Variables Manager
BmcVarsMgrQuit()
Quit from BMC Variables Manager
bmc_vars_mgr_set_env()
Stores a new variable environment data structure
bmc_vars_mgr_set_num()
Sets the number of variables handled by the Variables Manager
bmc_vars_mgr_set_maxtime()
Sets the maximum time currently handled by the variable environment
scan_state_vars_bexp()
Builds all internal structures used in order to perform searches and conversion from different variable representation forms

bmcWff.c

Well Formed Formula manipulation routines

By: Alessandro Cimatti and Lorenzo Delana

Bmc_WffMkBinary()
Make a binary WFF
Bmc_WffMkUnary()
Make a unary WFF
Bmc_WffMkConst()
Make a constant WFF
Bmc_WffMkTruth()
Make a truth WFF
Bmc_WffMkFalsity()
Make a false WFF
Bmc_WffMkNot()
Make a not WFF
Bmc_WffMkAnd()
Make an and WFF
Bmc_WffMkOr()
Make an or WFF
Bmc_WffMkImplies()
Make an implies WFF
Bmc_WffMkIff()
Make an iff WFF
Bmc_WffMkNext()
Make a next WFF
Bmc_WffMkXopNext()
Applies op_next x times
Bmc_WffMkOpNext()
Make an op_next WFF
Bmc_WffMkGlobally()
Make a globally WFF
Bmc_WffMkEventually()
Make an eventually WFF
Bmc_WffMkUntil()
Make an until WFF
Bmc_WffMkReleases()
Make a releases WFF
Bmc_LtlWffMkNnfToplevel()
Make the negative normal form of given WFF
Bmc_GetLtlWffDepth()
Returns the modal depth of the given formula

Last updated on 1011105 17h15