Skip to main content

pystc: A simple but extensible Python module for sentences

Introduction

A sentence is an atomic sentence or a (compound) sentence. An atomic sentence consists of a predicate and constants the predicate has as its arguments. There is no variable, no function. The number of arguments of a predicate is called the arity of the predicate. A compound sentence can be obtained by joining sentences with connectives.

pystc is a simple but extensible Python module for sentences. It provides functionality to define sentences as you like by adding constants, predicates, and connectives, whether logical or non-logical. Constants, predicates, and connectives can be introduced by specifying their names and how they are associated with other well-defined objects or functions.

Installation

$ pip install pystc

Usage

Let us first create atomic sentences that can be built from a predicate = and constants T, F,

from pystc import AtomicSentence

# Let us add predicate "=" so that the arity for it is 2.
AtomicSentence.add_predicate("=",2)
AtomicSentence.add_constant("T")
AtomicSentence.add_constant("F")

# Now, sentences are ready to create.
s1 = AtomicSentence("=","T","T")
s2 = AtomicSentence("=","T","F")
s3 = AtomicSentence("=","F","T")

assert str(s2) == "=(T,F)"
assert AtomicSentence.read("=(T,F)") == s2

Let us next construct compound sentences. A Sentence in pystc module is simply a recursive type defined to be:

Sentence = Union[str, AtomicSentence, Tuple["Sentence"]]

Although it is loosely defined for simplicity, sentences are implicitly expected to fall into one of the following cases:

1. An AtomicSentence object, say s2. 1. The string representation of an AtomicSentence object, say "=(T,F)". 1. A tuple such that the initial entry is a connective name and the other entries are Sentence objects, say ("&", s2, ("!", s2)).

As the connective names "&" and "!" appears just above, let us introduce these connectives in the following codeblock and inteprete sentences.

from pystc import SentenceConverter

# Let us set an atomic sentence type and how each symbol is interpreted.
SentenceConverter.set_atom_type(AtomicSentence)
SentenceConverter.set_constant_destination("T", True)
SentenceConverter.set_constant_destination("F", False)
SentenceConverter.set_predicate_destination("=", lambda li,w: li[0]==li[1])
SentenceConverter.set_connective_destination("&",lambda li,w: not False in li)
SentenceConverter.set_connective_destination("|",lambda li,w: True in li)
SentenceConverter.set_connective_destination("!",lambda li,w: not li[0])

assert SentenceConverter.convert(s2) == False
assert SentenceConverter.convert("=(T,F)") == False
assert SentenceConverter.convert(("&", s2, ("!", s2))) == False
assert SentenceConverter.convert(("&", "=(T,F)", ("!", s2))) == False

For another example of usage, let us convert sentences into strings in infix notation.

# Clear all class variables
SentenceConverter.clear()

SentenceConverter.set_atom_type(AtomicSentence)
SentenceConverter.set_constant_destination("T", "T")
SentenceConverter.set_constant_destination("F", "F")
SentenceConverter.set_predicate_destination("=", lambda li,w: f"{li[0]}={li[1]}")
SentenceConverter.set_connective_destination("&",lambda li,w: "("+" & ".join(li)+")")
SentenceConverter.set_connective_destination("|",lambda li,w: "("+" | ".join(li)+")")
SentenceConverter.set_connective_destination("!",lambda li,w: "!"+li[0])

assert SentenceConverter.convert("=(T,F)") == "T=F"
assert SentenceConverter.convert(("&", s2, ("!", s2))) == "(T=F & !T=F)"

Let us not forget to clear class variables after everything is finished.

SentenceConverter.clear()
AtomicSentence.clear()

Bugs/Requests/Discussions

Please report bugs and requests from GitHub Issues , and ask questions from GitHub Discussions .

License

Please see LICENSE .

Download files

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

Source Distribution

pystc-2.0.0.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pystc-2.0.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file pystc-2.0.0.tar.gz.

File metadata

  • Download URL: pystc-2.0.0.tar.gz
  • Upload date:
  • Size: 5.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for pystc-2.0.0.tar.gz
Algorithm Hash digest
SHA256 f8303eba5b2058ee666c1c65cacf124c0c441c209d1ebcd3db66361f4cc0eb3e
MD5 3f32f1ad3e7bf1b5e3e5c7a3189dcfbc
BLAKE2b-256 21db940b6e86e9d3c6f7de1355a19a834e4d1705711ddbbcca95f3e45a914e12

See more details on using hashes here.

File details

Details for the file pystc-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: pystc-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for pystc-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dec1011da7299b17b162ead59fa096e80f9c361fddcf99b150c943f9f135a783
MD5 d6374091a426e8e5dd5d5fe9a950bcb0
BLAKE2b-256 7f5cc98b04feb4c7dd749e7fa3804cf95d06fc9141d889b2f25b8b502a48ebb0

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page