Skip to main content

typedlogic

Project description

from typedlogic.registry import get_solver

py-typedlogic: Pythonic logic for your data models.

Define logical predicates directly in Python as Pydantic, dataclasses, SQLModel, or plain python objects:

# links.py
from pydantic import BaseModel
from typedlogic import FactMixin, Term

ID = str

class Link(BaseModel, FactMixin):
    """A link between two entities"""
    source: ID
    target: ID

class Path(BaseModel, FactMixin):
    """An N-hop path between two entities, consisting of one or more links"""
    source: ID
    target: ID
    hops: int

This data model has two classes, Link and Path. These also correspond to predicate signatures in a logical theory.

You can use this to create objects (ground terms, in logic terms) using normal Python code:

links = []
for source, target in [('CA', 'OR'), ('OR', 'WA')]:
   links.append(link)

Define logical constraints or rules using Python syntax:

from typedlogic.decorators import axiom

@axiom
def path_from_link(x: ID, y: ID):
    """If there is a link from x to y, there is a path from x to y"""
    if Link(source=x, target=y):
        assert Path(source=x, target=y, hops=1)

@axiom
def transitivity(x: ID, y: ID, z: ID, d1: int, d2: int):
    """Transitivity of paths, plus hop counting"""
    if Path(source=x, target=y, hops=d1) and Path(source=y, target=z, hops=d2):
        assert Path(source=x, target=z, hops=d1+d2)

Use a solver to infer new facts:

from typedlogic.registry import get_solver
from links import Link

solver = get_solver("clingo")
solver.load(links) 
links = [Link(source='CA', target='OR'), Link(source='OR', target='WA')]
for link in links:
    solver.add(link)
model = solver.model()
for fact in model.iter_retrieve("Path"):
    print(fact)

prints:

Path(source='CA', target='OR')
Path(source='OR', target='WA')
Path(source='CA', target='WA')

Key Features

  • Write logical axioms and rules using Python syntax (but can also be used independently of this)
  • Benefit from strong typing and mypy validation
  • Integration with multiple FOL solvers and logic programming engines
  • Interconversion between multiple syntaxes for FOL, Rules, and logical models
  • Integration with OWL-DL
  • Integration with Python libraries like Pydantic
  • Command Line and Python interfaces

Installation

Install TypedLogic using pip:

pip install "typedlogic"

Next Steps

  • Consult the main docs

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

typedlogic-0.1.1.tar.gz (70.2 kB view details)

Uploaded Source

Built Distribution

typedlogic-0.1.1-py3-none-any.whl (95.4 kB view details)

Uploaded Python 3

File details

Details for the file typedlogic-0.1.1.tar.gz.

File metadata

  • Download URL: typedlogic-0.1.1.tar.gz
  • Upload date:
  • Size: 70.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for typedlogic-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e57c8b37c1314a8ceab954c27f4b8e836cb80ac3797e1ae54f5fc89a23b631d2
MD5 91810847e8526081648db43a3a711ebe
BLAKE2b-256 917f0bb29c9db78d89193aec90fc360dc0382733c0dd7d9b61fb58db3daa3211

See more details on using hashes here.

File details

Details for the file typedlogic-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: typedlogic-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 95.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for typedlogic-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5b97ace73f38b2954ed5f8babcda65adc8cacf39835faef65d4e49bdcf360228
MD5 e121973fabe42d2acf5df3f796a0e6c4
BLAKE2b-256 e4733fd147f460840716f0ae9a4ed2ac42e817139e924c937cc63b535acd8c87

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