Simple first-order logic library
Project description
first-order
Pure Python first-order logic evaluator
from first_order import ForAll, Term
w = Term("w")
x = Term("x")
y = Term("y")
s1 = x & y
s2 = w | ~x
s3 = s1 >> s2
print(ForAll(x, s3))
# output: (∀ x: ((x & y) >> (w | ~x)))
print(s3 @ {"x": True, "y": True, "w": False})
# output: False
Installation
From pypi:
pip install first-order
Latest commit:
pip install git+https://github.com/olivi-r/first-order.git#egg=first-order
Syntax
This project uses simple constructs to abstract the creation of first-order logic sentences:
&conjunction|disjunction~negation>>implication
Two special functions are required to create sentences with quantifiers:
Existsexistential quantifierForAlluniversal quantifier
from first_order import Exists, ForAll, Term
x = Term("x")
z = Term("z")
s_forall = ForAll(z, x | z)
s_exists = Exists(z, x | z)
print(s_forall @ {"x": False})
# output: False
print(s_exists @ {"x": False})
# output: True
Interpretations
Interpretations can be applied to the sentence through the usage of the @ operator (as seen in previous examples), this takes a mapping from the names of terms used in the sentence and their respective values.
Unbound terms result in an error being thrown.
from first_order import Term
x = Term("x")
y = Term("y")
print((x | y) @ {"x": True})
# output:
# Traceback (most recent call last):
# ...
# KeyError: 'y'
Terms attatched to quantifiers do not need to be in the interpretation (unless the same term name is used elsewhere)
from first_order import Exists, Term
x = Term("x")
y = Term("y")
print(Exists(y, x | y) @ {"x": True})
# output: True
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file first_order-0.1.0.tar.gz.
File metadata
- Download URL: first_order-0.1.0.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26e0a219341b15d8d4ffe7a21e42f78a174bad92ed245581c507e8312e3901fb
|
|
| MD5 |
d74da00c0dd5837e94db724b283fd8f0
|
|
| BLAKE2b-256 |
112aab62999c288cc3bb135f37647829de135f71aaf81d15146820a2a74ec144
|
File details
Details for the file first_order-0.1.0-py3-none-any.whl.
File metadata
- Download URL: first_order-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a5ce66aad25c46be5d3d2b392597a7e8e5367dbe3c73fa0ac2e97be06ef2052
|
|
| MD5 |
3f2b8bac6fc118c8edcaf498823d1015
|
|
| BLAKE2b-256 |
40188b3ab92a8c04748e20be513aca356dad727e063d605f61302abc61b55b6e
|