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
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
typedlogic-0.1.1.tar.gz
(70.2 kB
view details)
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | e57c8b37c1314a8ceab954c27f4b8e836cb80ac3797e1ae54f5fc89a23b631d2 |
|
MD5 | 91810847e8526081648db43a3a711ebe |
|
BLAKE2b-256 | 917f0bb29c9db78d89193aec90fc360dc0382733c0dd7d9b61fb58db3daa3211 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b97ace73f38b2954ed5f8babcda65adc8cacf39835faef65d4e49bdcf360228 |
|
MD5 | e121973fabe42d2acf5df3f796a0e6c4 |
|
BLAKE2b-256 | e4733fd147f460840716f0ae9a4ed2ac42e817139e924c937cc63b535acd8c87 |