nnf is a Python package for creating and manipulating logical sentences
written in the
negation normal form
(NNF).
NNF sentences make statements about any number of variables. Here's an example:
>>> from nnf import Var
>>> a, b = Var('a'), Var('b')
>>> sentence = (a & b) | (a & ~b)
>>> sentence
Or({And({a, b}), And({a, ~b})})
This sentence says that either a is true and b is true, or a is true and b is false.
You can do a number of things with such a sentence. For example, you can ask whether a particular set of values for the variables makes the sentence true:
>>> sentence.satisfied_by({'a': True, 'b': False})
True
>>> sentence.satisfied_by({'a': False, 'b': False})
False
You can also fill in a value for some of the variables:
>>> sentence.condition({'b': True})
Or({And({a, true}), And({a, false})})
And then reduce the sentence:
>>> _.simplify()
a
This package takes much of its data model and terminology from A Knowledge Compilation Map.
Complete documentation can be found at readthedocs.
Installing
At least Python 3.4 is required.
Recommended
Install with support for a variety of SAT solvers.
pip install nnf[pysat]
Vanilla
pip install nnf
Serialization
A parser and serializer for the
DIMACS sat format are
implemented in nnf.dimacs, with a standard load/loads/dump/dumps
interface.
DSHARP interoperability
DSHARP is a program that compiles CNF
sentences to (s)d-DNNF sentences. The nnf.dsharp module contains tools for
parsing its output format and for invoking the compiler.
Algebraic Model Counting
nnf.amc has a basic implementation of
Algebraic Model Counting.
Command line interface
Some functionality is available through a command line tool, pynnf, including a
(slow) SAT solver and a sentence visualizer. For more information, see
the documentation.
Credits
python-nnf up to version 0.2.1 was created by Jan Verbeek
under mentorship of Ronald de Haan
at the University of Amsterdam. It was the subject of an
undergraduate thesis, Developing a Python Package for Reasoning with NNF Sentences.
Metadata
Release files for nnf 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nnf-0.4.1.tar.gz | 593.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nnf-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / nnf-0.4.1.tar.gz
| Download URL | nnf-0.4.1.tar.gz |
|---|---|
| Size | 593.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e972e7c1130d9e457241c8096e45ad3f16311c66e810e8c227deb3a43b4a3537
|
|
BLAKE2b-256 checksum How to use checksums |
821612221f3c9d21340ca8378df5c047545e3e01ffb088b5177620e5bc8dd128
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.16
|
Release files / nnf-0.4.1-py3-none-any.whl
| Download URL | nnf-0.4.1-py3-none-any.whl |
|---|---|
| Size | 598.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
96d0d5797b829941cbbb816304690849cbfefd5361b4d78b378a6bd989c66ba2
|
|
BLAKE2b-256 checksum How to use checksums |
6601e82d4848bc67cd02b11cd274dbe352f3f4490149361d83456ee63a766959
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.16
|