Incremental computation of tarjan algorithm

Author(s): Isabel Garcia-Contreras (ported from ciaopp-0.8).

This module contains predicates for computing incrementally the strongly connected components of programs using the tarjan algorithm.

Usage and interface

Documentation on exports

Usage:inc_add_source_clauses(Cls,Ds,AbsInt)

Adds incrementally clauses of list Cls with their respective dictionaries in Ds for abstract domain AbsInt to the source code database, and updates the recursivity of the clauses that may have changed .

  • The following properties should hold at call time:
    (list/1)Cls is a list.
    (list/1)Ds is a list.
    (atm/1)AbsInt is an atom.

Usage:rearrange_tarjan_after_deletion(Preds)

Preds is the list of predicates for which clauses have been deleted. This predicate updates the SCCs after deleting a set of clauses.

  • The following properties should hold at call time:
    (nonvar/1)Preds is currently a term which is not a free variable.

PREDICATEtarjan_data/1
Computed recursive classes of the tarjan algorithm. The predicate is of type data.

PREDICATEpredicates/1
predicates(Ps)

Ps is a list of the predicates of the program. The predicate is of type data.

PREDICATErec/1
rec(P/A)

Succeeds if P/A is a recursive predicate of the program. The predicate is of type data.

PREDICATEvertexes/1
The vertexes of the graph for performing the tarjan algorithm. The predicate is of type data.

PREDICATErec_preds/1

Usage:rec_preds(Ps)

Ps is the list of recursive predicates of the loaded program.

  • The following properties should hold upon exit:
    (list/1)Ps is a list.

Documentation on imports

This module has the following direct dependencies: