Skip to main content

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:

  • Exists existential quantifier
  • ForAll universal 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

first_order-0.1.0.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

first_order-0.1.0-py3-none-any.whl (4.6 kB view details)

Uploaded Python 3

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

Hashes for first_order-0.1.0.tar.gz
Algorithm Hash digest
SHA256 26e0a219341b15d8d4ffe7a21e42f78a174bad92ed245581c507e8312e3901fb
MD5 d74da00c0dd5837e94db724b283fd8f0
BLAKE2b-256 112aab62999c288cc3bb135f37647829de135f71aaf81d15146820a2a74ec144

See more details on using hashes here.

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

Hashes for first_order-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1a5ce66aad25c46be5d3d2b392597a7e8e5367dbe3c73fa0ac2e97be06ef2052
MD5 3f2b8bac6fc118c8edcaf498823d1015
BLAKE2b-256 40188b3ab92a8c04748e20be513aca356dad727e063d605f61302abc61b55b6e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page