Skip to main content

Parser and toolkit for first-order logic formulas using Unicode operators

Project description

unicode-fol-kit

A Python toolkit for first-order logic with Unicode operatorsparse, transform, and reason about formulas — with a reasoning layer that reaches well beyond classical FOL into modal, temporal, hybrid, many-valued, fuzzy, intuitionistic, relevant, second-order, description, dependence/IF, substructural, and a range of further non-classical logics.

from unicode_fol_kit import MSFLParser, is_valid

phi = MSFLParser().parse(
    "∀x (Human(x) → Mortal(x)) ∧ Human(socrates) → Mortal(socrates)")
print(is_valid(phi))   # True

One parser class, MSFLParser, has nine modes (classical FOL, many-sorted FOL, many-sorted and single-sorted Łukasiewicz fuzzy logic, modal/temporal/epistemic/deontic/ hybrid, second-order, team-semantic dependence/IF logic, intuitionistic linear logic, and the Lambek calculus) selected by constructor flags, with natural Unicode surface syntax (∀ ∃ ∧ ∨ ¬ → ↔ ⊕ ⊗ □ ◇ @ ⊸ 𝟙 …) and no ASCII fallbacks.

On top of the AST sits a full reasoning stack — four proof methods (a built-in resolution prover, Fitch natural deduction with checker and searcher, the Gentzen sequent calculi LK/LJ, and analytic tableaux), a finite model finder, SMT (Z3) and external-prover (Prover9 / Vampire) backends, truth tables, and dedicated semantics for every logic. Formulas import/export to TPTP, Prover9, SMT-LIB, LaTeX, and JSON.

📖 Documentation

Full guide and API reference: https://unicode-fol-kit.readthedocs.io/

The documentation walks through every logic with runnable examples — start with the Quickstart and Choosing a tool.

Installation

pip install unicode-fol-kit

Requires Python 3.10+. Z3 ships with the package; Prover9, Vampire, and Isabelle are optional external tools you install separately to unlock the corresponding backends.

Logics at a glance

Logic Enable / entry point Decide / reason with
Classical FOL / MSFOL MSFLParser() / many_sorted=True resolution, Z3, Prover9/Vampire, tableaux, Fitch, LK, finite model finder
Fuzzy Łukasiewicz / Gödel / product MSFLParser(fuzzy=True) fuzzy_evaluate, fuzzy_is_valid(…, tnorm=…) (Z3 reals, quantifier grounding)
Modal / temporal / epistemic / deontic MSFLParser(modal=True) satisfies_modal, standard_translation, native is_modal_valid / modal_decide (K…S5, B, KD45)
Quantified modal KripkeModel(domains=…) qml_is_valid per domain regime + frame; THF / Isabelle export
Many-valued K3 / LP / Belnap FDE truth_table, semantics.matrix matrix_is_valid / matrix_entails over any finite TruthMatrix
Intuitionistic int_valid / int_countermodel propositional decision + bounded first-order Kripke search; LJ checker
Second-order MSFLParser(second_order=True) satisfies_so, bounded so_is_valid_finite / so_find_countermodel
Description logic ALC unicode_fol_kit.dl concept_satisfiable / subsumes / abox_consistent (tableau, TBox + ABox)
Free · public-announcement · counterfactual · circumscription semantics.free_logic / dynamic_epistemic / conditional / nonmonotonic dedicated evaluators and (non-monotonic) consequence
Hybrid H(@) (nominals, @i φ) MSFLParser(modal=True) KripkeModel(nominals=…), hybrid_is_valid per frame (standard translation + Z3)
Relevant logic B classical syntax + semantics.relevant rel_valid / rel_countermodel (Routley–Meyer, bounded exhaustive search)
Dependence / IF (team semantics) MSFLParser(dependence=True) team_satisfies / team_models over finite structures
Linear logic (ILL) · Lambek calculus MSFLParser(linear=True) / lambek=True ill_prove (cut-free; complete for !-free) · lambek_derivable (decision procedure)

With a local Isabelle installed, the hol subpackage's shallow embeddings become proofs: isabelle_decide_modal / isabelle_decide_fol actually run the prover. The hol.deepshallow subpackage goes further, emitting — for propositional modal, intuitionistic, Lewis-conditional and relevant logic — the deep, maximal-shallow and minimal-shallow embeddings side by side with machine-checked faithfulness proofs between them (Benzmüller, arXiv:2502.19311), verified end to end by Isabelle. See the higher-order guide.

Building the documentation locally

pip install -e ".[docs]"
sphinx-build -b html docs docs/_build/html

Citation

If you use this toolkit in academic work, please cite the accompanying preprint:

@misc{vossel2025advancingnaturallanguageformalization,
      title={Advancing Natural Language Formalization to First Order Logic with Fine-tuned LLMs},
      author={Felix Vossel and Till Mossakowski and Björn Gehrke},
      year={2025},
      eprint={2509.22338},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2509.22338},
}

Vossel, F., Mossakowski, T., & Gehrke, B. (2025). Advancing Natural Language Formalization to First Order Logic with Fine-tuned LLMs. arXiv preprint arXiv:2509.22338.

License

MIT

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

unicode_fol_kit-0.13.1.tar.gz (708.6 kB view details)

Uploaded Source

Built Distribution

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

unicode_fol_kit-0.13.1-py3-none-any.whl (366.4 kB view details)

Uploaded Python 3

File details

Details for the file unicode_fol_kit-0.13.1.tar.gz.

File metadata

  • Download URL: unicode_fol_kit-0.13.1.tar.gz
  • Upload date:
  • Size: 708.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for unicode_fol_kit-0.13.1.tar.gz
Algorithm Hash digest
SHA256 edd2750c4449c88c2642abfbef5e853ba7db75171420d504139029dadc65b631
MD5 2439b2be0d0254f366d41cd20fad92a9
BLAKE2b-256 894f9651bc526c3be7d34cd5dbedb5108b4696686cbdb9bec3f83de783964502

See more details on using hashes here.

File details

Details for the file unicode_fol_kit-0.13.1-py3-none-any.whl.

File metadata

File hashes

Hashes for unicode_fol_kit-0.13.1-py3-none-any.whl
Algorithm Hash digest
SHA256 81b0c5d75ad26270425c4472d3f7e934ee3d44460bceac901a33c88bac1420c7
MD5 3dc2605568d0b9435cb6a54a3be2e27b
BLAKE2b-256 8b42cd742a63eb19034613967f464feaefa95464047819f60a2695d3e8dcbcc0

See more details on using hashes here.

Supported by

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