Skip to main content

A simple but extensible Python module for sentences

Project description

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 .

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

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

Uploaded Source

Built Distribution

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.

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