A small prolog implementation for embedded expert systems
Project description
# PyExpert 0.0.1
This is a small embeddable Prolog interpreter in Python3, designed primarily for
implementing explainable expert systems.
Usage:
```python
# Imports
from weak.prolog import prolog_driver,prolog_default_env,prolog_next_solution,prolog_core_library
# Initialise environment
env = prolog_default_env()
# Execute query
ret,vars = prolog_driver(env, '? append(A, B, [x,y]).')
print(vars)
# Inspect all the remaining solutions
while prolog_next_solution(env):
print(vars)
```
# Weak sets
The main feature of this implementation is a `weak set` - a value that unifies
with any other weak set, resulting in a new set containing elements of both
sets. This is useful for implementing certain kinds of type systems and for
higher level hacks, such as tracing a Prolog execution (e.g., for a
human-readable narration of an expert system decision), implementing
constraints, etc.
For example:
```prolog
? weak(a,W1), weak(b,W1), weak(c,W2), W1=W2.
```
results in `W1=W2=[a,b,c]`
See `weak/narrate.py` for an example of an instrumentation of a Prolog code for
producing execution traces, or a "narration", which can then be used to
generate, for example, a plain English narration of the expert system thought
process.
See `tests/demo.py` for an example of constructing an explainable expert system.
This is a small embeddable Prolog interpreter in Python3, designed primarily for
implementing explainable expert systems.
Usage:
```python
# Imports
from weak.prolog import prolog_driver,prolog_default_env,prolog_next_solution,prolog_core_library
# Initialise environment
env = prolog_default_env()
# Execute query
ret,vars = prolog_driver(env, '? append(A, B, [x,y]).')
print(vars)
# Inspect all the remaining solutions
while prolog_next_solution(env):
print(vars)
```
# Weak sets
The main feature of this implementation is a `weak set` - a value that unifies
with any other weak set, resulting in a new set containing elements of both
sets. This is useful for implementing certain kinds of type systems and for
higher level hacks, such as tracing a Prolog execution (e.g., for a
human-readable narration of an expert system decision), implementing
constraints, etc.
For example:
```prolog
? weak(a,W1), weak(b,W1), weak(c,W2), W1=W2.
```
results in `W1=W2=[a,b,c]`
See `weak/narrate.py` for an example of an instrumentation of a Prolog code for
producing execution traces, or a "narration", which can then be used to
generate, for example, a plain English narration of the expert system thought
process.
See `tests/demo.py` for an example of constructing an explainable expert system.
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
pyexpert-0.0.1.tar.gz
(16.3 kB
view hashes)
Built Distribution
Close
Hashes for pyexpert-0.0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a4fd56728f96c4c37e0bc729b1f0c926cbb253e6c560015684e8c1c73120108 |
|
MD5 | adf369e763c1569eaa6714ee2cbb5002 |
|
BLAKE2b-256 | afa13db7eca4c4e54acf8adb0720f084bcd21aa297bd5f4319f8dfdec1007219 |