Properties which are native to analyzers
Author(s): Francisco Bueno, Manuel Hermenegildo, Pedro López, Edison Mera.
This library contains a set of properties which are natively understood by the different program analyzers of ciaopp. They are used by ciaopp on output and they can also be used as properties in assertions.
Usage and interface
- Library usage:
:- use_module(library(assertions(native_props)))or also as a package :- use_package(nativeprops).
Note the different names of the library and the package.
- Exports:
- Properties:
clique/1, clique_1/1, compat/1, constraint/1, covered/1, covered/2, exception/1, exception/2, fails/1, finite_solutions/1, have_choicepoints/1, indep/1, indep/2, instance/1, is_det/1, linear/1, mshare/1, mut_exclusive/1, no_choicepoints/1, no_exception/1, no_exception/2, no_signal/1, no_signal/2, non_det/1, nonground/1, not_covered/1, not_fails/1, not_mut_exclusive/1, num_solutions/2, solutions/2, possibly_fails/1, possibly_nondet/1, relations/2, sideff_hard/1, sideff_pure/1, sideff_soft/1, signal/1, signal/2, signals/2, size/2, size/3, size_lb/2, size_o/2, size_ub/2, size_metric/3, size_metric/4, succeeds/1, steps/2, steps_lb/2, steps_o/2, steps_ub/2, tau/1, terminates/1, test_type/2, throws/2, user_output/2.
- Properties:
- Imports:
- System library modules:
terms_check, terms_vars, hiordlib, sort, lists, streams, file_utils, system, odd, rtchecks/rtchecks_send. - Internal (engine) modules:
term_basic, arithmetic, atomic_basic, basic_props, basiccontrol, data_facts, exceptions, io_aux, io_basic, prolog_flags, streams_basic, system_info, term_compare, term_typing, hiord_rt, debugger_support, internals. - Packages:
prelude, nonpure, assertions, hiord.
- System library modules:
Documentation on exports
X is a set of variables of interest, much the same as a sharing group but X represents all the sharing groups in the powerset of those variables. Similar to a sharing group, a clique is often translated to ground/1, indep/1, and indep/2 properties.
Usage:clique(X)
The clique pattern is X.
- The following properties should hold globally:
(native/2)This predicate is understood natively by CiaoPP as clique(X).
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
X is a set of variables of interest, much the same as a sharing group but X represents all the sharing groups in the powerset of those variables but disregarding the singletons. Similar to a sharing group, a clique_1 is often translated to ground/1, indep/1, and indep/2 properties.
Usage:clique_1(X)
The 1-clique pattern is X.
- The following properties should hold globally:
(native/2)This predicate is understood natively by CiaoPP as clique_1(X).
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:compat(Prop)
Use Prop as a compatibility property.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
C contains a list of linear (in)equalities that relate variables and int values. For example, [A < B + 4] is a constraint while [A < BC + 4] or [A = 3.4, B >= C] are not.
(True) Usage:constraint(C)
C is a list of linear equations
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
For any call of the form X there is at least one clause whose test succeeds (i.e., all the calls of the form X are covered) [DLGH97].
Usage:covered(X)
All the calls of the form X are covered.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
All variables occuring in X occur also in Y.
(True) Usage:covered(X,Y)
X is covered by Y.
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
Usage:exception(Goal)
Calls of the form Goal throw an exception.
Usage:exception(Goal,E)
Calls of the form Goal throw an exception that unifies with E.
Calls of the form X fail.
(True) Usage:fails(X)
Calls of the form X fail.
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
Calls of the form X produce a finite number of solutions [DLGH97].
Usage:finite_solutions(X)
All the calls of the form X have a finite number of solutions.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:have_choicepoints(X)
A call to X creates choicepoints.
(True) Usage:indep(X)
The variables in pairs in X are pairwise independent.
- The following properties hold globally:
(native/2)This predicate is understood natively by CiaoPP as indep(X).
(True) Usage:indep(X,Y)
X and Y do not have variables in common.
- The following properties hold globally:
(native/2)This predicate is understood natively by CiaoPP as indep([[X,Y]]).
Usage:instance(Prop)
Use Prop as an instantiation property. Verify that execution of Prop does not produce bindings for the argument variables.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
All calls of the form X are deterministic, i.e., produce at most one solution, or do not terminate. In other words, if X succeeds, it can only succeed once. It can still leave choice points after its execution, but when backtracking into these, it can only fail or go into an infinite loop.
Usage:is_det(X)
All calls of the form X are deterministic.
X is bound to a term which is linear, i.e., if it contains any variables, such variables appear only once in the term. For example, [1,2,3] and f(A,B) are linear terms, while f(A,A) is not.
(True) Usage:linear(X)
X is instantiated to a linear term.
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
X contains all sharing sets [JL88,MH89b] which specify the possible variable occurrences in the terms to which the variables involved in the clause may be bound. Sharing sets are a compact way of representing groundness of variables and dependencies between variables. This representation is however generally difficult to read for humans. For this reason, this information is often translated to ground/1, indep/1 and indep/2 properties, which are easier to read.
Usage:mshare(X)
The sharing pattern is X.
- The following properties should hold globally:
(native/2)This predicate is understood natively by CiaoPP as sharing(X).
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Test:mshare(L)
- If the following properties should hold at call time:
(= /2)L=[[A],[p(A)]]
then the following properties should hold globally:
(fails/1)Calls of the form mshare(L) fail.
Test:mshare(L)
- If the following properties should hold at call time:
(= /2)L=[[A],[p(B)]]
then the following properties should hold globally:
(not_fails/1)All the calls of the form mshare(L) do not fail.
For any call of the form X at most one clause succeeds, i.e., clauses are pairwise exclusive.
Usage:mut_exclusive(X)
For any call of the form X at most one clause succeeds.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
Usage:no_choicepoints(X)
A call to X does not create choicepoints.
Usage:no_exception(Goal)
Calls of the form Goal do not throw any exception.
Usage:no_exception(Goal,E)
Calls of the form Goal do not throw exception E.
Usage:no_signal(Goal)
Calls of the form Goal do not send any signal.
Usage:no_signal(Goal,E)
Calls of the form Goal do not send the signal E.
All calls of the form X are non-deterministic, i.e., produce several solutions.
Usage:non_det(X)
All calls of the form X are non-deterministic.
Usage:nonground(X)
X is not ground.
- The following properties should hold globally:
(native/2)This predicate is understood natively by CiaoPP as not_ground(X).
Calls of the form X produce at least one solution, or do not terminate [DLGH97].
(True) Usage:not_fails(X)
All the calls of the form X do not fail.
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
For calls of the form X more than one clause may succeed. I.e., clauses are not disjoint for some call.
Usage:not_mut_exclusive(X)
For some calls of the form X more than one clause may succeed.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
Usage 1:num_solutions(X,N)
All the calls of the form X have N solutions.
- If the following properties should hold at call time:
(callable/1)X is a term which represents a goal, i.e., an atom or a structure.
(int/1)N is an integer.
Usage 2:num_solutions(Goal,Check)
For a call to Goal, Check(X) succeeds, where X is the number of solutions.
- If the following properties should hold at call time:
(callable/1)Goal is a term which represents a goal, i.e., an atom or a structure.
(callable/1)Check is a term which represents a goal, i.e., an atom or a structure.
Usage:solutions(Goal,Sols)
Goal Goal produces the solutions listed in Sols.
- If the following properties should hold at call time:
(callable/1)Goal is a term which represents a goal, i.e., an atom or a structure.
(list/1)Sols is a list.
Non-failure is not ensured for any call of the form X [DLGH97]. In other words, nothing can be ensured about non-failure nor termination of such calls.
Usage:possibly_fails(X)
Non-failure is not ensured for calls of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Non-determinism is not ensured for all calls of the form X. In other words, nothing can be ensured about determinacy nor termination of such calls.
Usage:possibly_nondet(X)
Non-determinism is not ensured for calls of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The goal X produces N solutions. In other words, N is the cardinality of the solution set of X.
Usage:relations(X,N)
Goal X produces N solutions.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
Usage:sideff_hard(X)
X has hard side-effects, i.e., those that might affect program execution (e.g., assert/retract).
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:sideff_pure(X)
X is pure, i.e., has no side-effects.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:sideff_soft(X)
X has soft side-effects, i.e., those not affecting program execution (e.g., input/output).
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:signal(Goal)
Calls of the form Goal throw a signal.
Usage:signal(Goal,E)
A call to Goal sends a signal that unifies with E.
Usage:signals(Goal,Es)
Calls of the form Goal can generate only the signals that unify with the terms listed in Es.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
Usage:size(X,Y)
Y is the size of argument X, for any approximation.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:size(A,X,Y)
Y is the size of argument X, for the approximation A.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The minimum size of the terms to which the argument Y is bound is given by the expression Y. Various measures can be used to determine the size of an argument, e.g., list-length, term-size, term-depth, integer-value, etc. [DL93,LGHD96b].
Usage:size_lb(X,Y)
Y is a lower bound on the size of argument X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:size_o(X,Y)
The size of argument X is in the order of Y.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The maximum size of the terms to which the argument Y is bound is given by the expression Y. Various measures can be used to determine the size of an argument, e.g., list-length, term-size, term-depth, integer-value, etc. [DL93,LGHD96b].
Usage:size_ub(X,Y)
Y is a upper bound on the size of argument X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:size_metric(Head,Var,Metric)
Metric is the metric of the variable Var, for any approximation.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:size_metric(Head,Approx,Var,Metric)
Metric is the metric of the variable Var, for the approximation Approx. Currently, Metric can be: int/1, size/1, length/1, depth/2, and void/1.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:succeeds(Prop)
A call to Prop succeeds.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The time (in resolution steps) spent by any call of the form X is given by the expression Y
Usage:steps(X,Y)
Y is the cost (number of resolution steps) of any call of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The minimum computation time (in resolution steps) spent by any call of the form X is given by the expression Y [DLGHL97,LGHD96b]
Usage:steps_lb(X,Y)
Y is a lower bound on the cost of any call of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:steps_o(X,Y)
Y is the complexity order of the cost of any call of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
The maximum computation time (in resolution steps) spent by any call of the form X is given by the expression Y [DL93,LGHD96b].
Usage:steps_ub(X,Y)
Y is a upper bound on the cost of any call of the form X.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Types contains a list with the type associations for each variable, in the form V/[T1,..,TN]. Note that tau is used in object-oriented programs only
(True) Usage:tau(TypeInfo)
Types is a list of associations between variables and list of types
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
Calls of the form X always terminate [DLGH97].
Usage:terminates(X)
All calls of the form X terminate.
- The following properties should hold globally:
(no_rtcheck/1)Declares that the assertion in which this comp property appears must not be checked at run-time. Equivalent to rtcheck(G, impossible).
Usage:test_type(X,T)
Indicates the type of test that a predicate performs. Required by the nonfailure analyisis.
Usage:throws(Goal,Es)
Calls of the form Goal can throw only the exceptions that unify with the terms listed in Es.
- The following properties should hold globally:
(rtcheck/2)The runtime check of the property have the status unimplemented.
Usage:user_output(Goal,S)
Calls of the form Goal write S to standard output.
(True) Usage:instance(Term1,Term2)
Term1 is an instance of Term2.
- The following properties hold globally:
(native/1)This predicate is understood natively by CiaoPP.
Known bugs and planned improvements
- A missing property is succeeds (not_fails = succeeds or not_terminates. -- EMM