Home

Awesome

NASALib

NASALib is a continuing collaborative effort that has spanned over 3 decades, to aid in research related to theorem proving sponsored by NASA (https://shemesh.larc.nasa.gov/fm/pvs/). It consists of a collection of formal development (i.e., <i>libraries</i>) written in the Prototype Verification System (PVS), contributed by SRI, NASA, NIA, and the PVS community, and maintained by the Formal Methods Team at LaRC.

Release

The current version of NASALib is 7.1.2 (2023/09/01) and requires PVS 7.1.

Libraries

Currently, NASALib consists of 62 top-level libraries, containing about 38K proven formulas in total.

LibraryDescription
ACCoRDFramework for the analysis of air traffic conflict detection and resolution algorithms
affine_arithFormalization of affine arithmetic and strategy for evaluating polynomial functions with variables on interval domains
algebraGroups, monoids, rings, etc
analysisReal analysis, limits, continuity, derivatives, integrals
ASPDenotational semantics of Answer Set Programming
aviationSupport definitions and properties for aviation-related formalizations
BernsteinFormalization of multivariate Bernstein polynomials
CCGFormalization of diverse termination criteria
complexComplex numbers
complex_altAlternative formalization of complex numbers
complex_integrationComplex integration
co_structuresSequences of countable length defined as co-algebraic datatypes
digraphsDirected graphs: circuits, maximal subtrees, paths, DAGs
dLDifferential Dynamic Logic
exact_real_arithExact real arithmetic including trig functions
examplesExamples of application of the functionality provided by NASALib
extended_nnrealExtended non-negative reals
fast_approxApproximations of standard numerical functions
fault_toleranceFault tolerance protocols
floatFloating point arithmetic
graphsGraph theory
interval_arithInterval arithmetic and numerical approximations. Includes automated strategies numerical for computing numerical approximations and interval for checking satisfiability and validity of simply quantified real-valued formulas. This development includes a formalization of Allen interval temporal logic
intsInteger division, gcd, mod, prime factorization, min, max
lebesgueLebesgue integral with connection to Riemann Integral
linear_algebraLinear algebra
line_segments2-dimensional line segments
lnexpLogarithm, exponential and hyperbolic functions. & Foundational definitions of logarithm, exponential and hyperbolic functions
LTLLinear Temporal Logic
matricesExecutable specification of MxN matrices. This library includes computation of inverse and basic matrix operations such as addition and multiplication
measure_integrationSigma algebras, measures, Fubini-Tonelli Lemmas
MetiTarskiIntegration of MetiTarski, an automated theorem prover for real-valued functions
metric_spaceDomains with a distance metric, continuity and uniform continuity
mv_analysisMultivariate real analysis: norms, limits, continuity, derivatives, optimization, etc.
mult_polyMultivariate polynomials and semi-algebriac sets.
nominalNominal equational reasoning
numbersElementary number theory
ODEsOrdinary Differential Equations
ordersAbstract orders, lattices, fix points
polygons2-dimensional polygons
polygon_mergeMerge of 2-dimensional polygons without generating holes
powerGeneralized Power function (without ln/exp)
probabilityProbability theory
PVS0Formalization of fundamental computability concepts
pvsio_utilsAdditions to PVSio, a PVS standard library for animation of PVS specifications
realsSummations, sup, inf, sqrt over the reals, absolute value, etc
RiemannRiemann integral
scottScott topology
seriesPower series, comparison test, ratio test, Taylor's theorem
sets_auxPower sets, orders, cardinality over infinite sets. Includes functional and relational facts based on Axiom of Choice and refinement relations based on equivalence relations
shapes2D-Shapes: triangle, parallelogram, rectangle, circular segment
sigma_setSummations over countably infinite sets
sortingSorting algorithms
structuresBounded arrays, finite sequences, bags, and several other structures
SturmFormalization of Sturm's theorem for univariate polynomials. Includes strategies sturm and mono-poly for automatically proving univariate polynomial relations over a real interval
TarskiFormalization of Tarski's theorem for univariate polynomials. Includes strategy tarski for automatically proving systems of univariate polynomial relations on the real line
topologyContinuity, homeomorphisms, connected and compact spaces, Borel sets/functions
trigTrigonometry: definitions, identities, approximations
TRSTerm rewrite systems and Robinson unification algorithm
TU_gamesCooperative TU-games
vect_analysisLimits, continuity, and derivatives of vector functions
vectors2-D, 3-D, 4-D, and n-dimensional vectors
whileSemantics for the programming language While

Structure

NASALib dependency graph

Scripts

NASALib also provides a collection of scripts that automates several tasks.

Click here for more details on these scripts.

(*) Already included in the PVS 7.1 distribution.

Getting NASALib

Via VSCode-PVS (recommended for new PVS users)

NASALib (v7.0.1) is fully compatible with VSCode-PVS, a modern graphical interface to PVS based on Visual Studio Code. The latest version of NASALib can be installed from VSCode-PVS.

Development Version

For PVS advanced users, the development version is available from GitHub. To clone the development version, type the following command inside directory where PVS 7.0 is installed. Henceforth, that directory will be referred to as <pvsdir>. In the following commands, the dollar sign represents the prompt of the operating system.

$ git clone http://github.com/nasa/pvslib nasalib 

The command above will put a copy of the library in the directory <pvsdir>/nasalib.

Major Recent Changes

Manual Installation

The following instructions assume that NASALib is located in the directory <pvsdir>/nasalib.

1) Add this directory to the environment variable PVS_LIBRARY_PATH

If it does not exists, creates such variable and with the path of this directory as only content. It is usually very useful to have your shell systems creating this variable at startup. To this end, and depending upon your shell, you may want to add one of the following lines in your startup script. For C shell (csh or tcsh), you may add this line in ~/.cshrc:

setenv PVS_LIBRARY_PATH "<pvsdir>/nasalib"

For Borne shell (bash or sh), add this line in either ~/.bashrc or ~/.profile:

export PVS_LIBRARY_PATH="<pvsdir>/nasalib"

2) Additional steps to protect previous NASALib configurations (optional)

If you had a previous installation of NASALib, either remove the file ~/.pvs.lisp or, if you have a special configuration in that file, remove the following line

(load "<pvsdir>/nasalib/pvs-patches.lisp") 

3) Install Scripts

Finally, go to the directory <pvsdir>/nasalib and run the following shell scripts (the dollar sign represents the prompt of the operating system).

The install-scripts command will update and install NASALib scripts as needed.

$ ./install-scripts

Older Versions

Older versions of NASALib are available from http://shemesh.larc.nasa.gov/fm/ftp/larc/PVS-library.

Contributors

NASALib has grown over the years thanks to the contribution of several people, among them:

If we have incorrectly attributed a PVS development or you have contributed to NASALib and your name is not included here, please let us know.

If you want to contribute please read this guide.

DISCLAIMER

NASALib is a collection of formal specifications most of which have been in the public domain for several years. The Formal Methods Team at NASA LaRC still maintains these developments. For the developments originally made by the Formal Methods Team, these developments are considered fundamental research that do not constitute software. Contributions made by others may have particular licenses, which are listed in the file top.pvs in each respective directory. In case of doubt, please contact the developers of each contribution, which are also listed in that file.

PVS patches, which are included in the directory pvs-patches, are part of the PVS source code and they are covered by the PVS open source license.

Some proof strategies require third party research tools, e.g., MetiTarski and Z3. For convenience, they are included in this repository with permission from their authors. Licenses for these tools are also included as appropriate.

Enjoy it.

The Formal Methods Team at LaRC

Maintainers

César Muñoz Mariano Moscato