Skip to content
Agentmart
Submit a tool

Unicode Logic Kit

Parse, check, prove and translate logic formulas: first-order, modal, description, higher-order.

Connector by fvossel · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/fvossel-unicode-logic-kit

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Parse, check, prove and translate logic formulas: first-order, modal, description, higher-order.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
24 read · 0 write · 0 delete · 13 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 37

Read from the source code; the running server may list different tools.

Read 24 · Look things up without changing anything.

  • check_consistency
  • check_equivalence
  • check_formula
  • check_molecule
  • check_molecules
  • compare_formulas
  • detect_dialect
  • dl_abox_consistent
  • dl_classify
  • dl_concept_satisfiable
  • dl_instance_check
  • dl_parse_manchester
Show 12 more tools
  • drs_to_fol
  • explain_molecule_failure
  • find_countermodel
  • get_signature
  • get_syntax_spec
  • list_backends
  • list_translations
  • molecule_to_structure
  • parse_formula
  • probability_query
  • score_batch
  • translate

Not yet classified 13 · We could not tell from the name and description.

  • chemical_signature
  • diagnose
  • dl_equivalent
  • dl_instance_retrieval
  • dl_subsumes
  • normalize
  • probability_bounds
  • prove
  • render
  • repair_formula
  • simplify_definition
  • truth_table
Show 1 more tools
  • verbalize

Network hosts it talks to 28

  • allenai.org · found in code
  • cs.unm.edu · found in code
  • cvc5.github.io · found in code
  • docker.com · found in code
  • doi.org · found in code
  • eprover.org · found in code
  • ex.org · found in code
  • github.com · found in code
  • graphviz.org · found in code
  • hermit-reasoner.com · found in code
  • huggingface.co · found in code
  • iltp.de · found in code
  • leancop.de · found in code
  • leanprover-community.github.io · found in code
  • nick8325.github.io · found in code
  • nlp.stanford.edu · found in code
  • ontohub.org · found in code
  • openai.com · found in code
  • opendatacommons.org · found in code
  • openreview.net · found in code
  • owl.cs.manchester.ac.uk · found in code
  • pmb.let.rug.nl · found in code
  • potassco.org · found in code
  • purl.obolibrary.org · found in code
  • tptp.org · found in code
  • unicode-logic-kit.invalid · found in code
  • vprover.github.io · found in code
  • x.org · found in code

Files it touches

  • /home/me/vampire
  • /mnt/...
  • /mnt/d/prover9/Prover9-LADR-2026-8A/bin/prover9
  • /tmp/hetsUserFolder_zvNMsf
  • /tmp/hetsUserFolder_zvNMsf/probe.casl
  • /usr/local
  • Your home directory (~)
  • ~/.elan/bin
  • ~/.local/bin/twee

Tools (37)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • check_consistency

    Is this SET of formulas jointly satisfiable? Encoding: a fresh nullary atom ``q`` (guaranteed absent from the input vocabulary) gives the contradiction ``q ∧ ¬q``; classically (and under the kit's local-consequence modal reading) the set is unsatisfiable iff it entails that contradiction, and a countermodel to that entailment IS a model of the set. Verdicts: ``consistent=True`` carries the model witness + English gloss (``method="model"``), ``consistent=False`` carries the refutation verdict (``method="refutation"``), ``consistent=None`` means both searches came back empty within the budgets …

  • check_equivalence

    Graded equivalence (exact -> canonical -> aligned -> solver).

  • check_formula

    Well-formedness + optional signature conformance for formula text. ``signature`` is what ``get_signature`` returns (its whole result, or just its ``signature`` value), or the loose form ``{"predicates": {"Human": 1}, "functions": {"father": 1}, "constants": ["socrates"]}``. The truth constants ``⊤`` / ``⊥`` are logical constants, never an unknown predicate. A malformed ``signature`` comes back as the structured ``{"error": ...}``.

  • check_molecule

    Does ``formula`` hold of the molecule ``smiles`` describes? Parses ``formula`` (see the module docstring's "Chemical formulas MUST be written in TPTP"), builds the molecule's structure, and model-checks directly (:func:`unicode_logic_kit.semantics.model_eval.evaluate_detailed` — no CNF/prenex normal form, so a negated existential or a top-level disjunction never blows up the way it does for a normal-form-requiring checker; see that module's own docstring). Args: formula: a class-definition formula, TEXT (see ``dialect``). smiles: the molecule to check it against. all_different: t…

  • check_molecules

    :func:`check_molecule`, batched over a corpus — the core feedback loop: one call shows which positive examples a definition actually covers, without a round trip per molecule. ``formula`` is parsed ONCE; a parse failure aborts the whole call (the uniform ``ok=False`` shape, ``argument="formula"``). RDKit missing likewise aborts the whole call (an environment problem, not a per- molecule one). Everything else is per-molecule: one bad SMILES in the list does not lose the results for the rest — it gets its own ``{"smiles": ..., "ok": False, "error": ...}`` entry and the batch continues, because …

  • chemical_signature

    The full ChemLog vocabulary a chemical class definition may use (https://github.com/sfluegel05/chemlog-peptides) — so a generator never has to GUESS a predicate name or arity (a hallucinated predicate name is a pure-SYNTAX failure that burns a whole generation attempt; an unknown-predicate/wrong-arity slip is exactly what this catches before a definition ever reaches model checking, via ``api.check(formula, signature=chem.CHEMLOG_SIGNATURE)``). Returns: ``{"ok": True, "signature": <chem.CHEMLOG_SIGNATURE.to_dict()>, "stored_predicates": [...], "computed_predicates": [...], "groups…

  • compare_formulas

    The full prediction-vs-gold error-analysis breakdown for one pair. Layers, strictest first: ``structural_equal`` (raw AST equality), ``canonical_exact_match`` (alpha-renaming, commutativity/associativity, duplication, double negation quotiented out), ``aligned_exact_match`` (canonical match after Levenshtein-guided, namespace- and arity-aware symbol renaming; ``aligned_predicted`` shows the renamed prediction), ``equivalence`` (the graded ladder's full verdict dict, solver level included). ``vocabulary`` lists the symbols (``Name/arity`` for predicates/functions) each side uses and the other …

  • detect_dialect

    What syntax does this text look like, and what does it parse as? ``candidates`` is the detector's ordered nomination list (always ending in ``"unicode"``, the mode-ladder catch-all); ``parsed_as`` is the dialect that actually accepted the text (``None`` if nothing did, with every attempt's diagnostic in ``errors``).

  • diagnose

    One diagnose round of the repair loop; YOU are the fixer. Returns ``{ok, diagnostics, suggestion, converged}`` for the given text, plus ``spec_topic`` when it did not parse. Apply the suggestion to the text yourself and call again; ``converged=True`` means the text parses and checks clean. ``signature`` is read as ``check_formula`` reads it (``get_signature``'s whole result, or its ``signature`` value); a malformed one comes back as the structured ``{"error": ...}``.

  • dl_abox_consistent

    Is the knowledge base ``(tbox, abox)`` consistent (does it have a model)? ``concepts``/``roles``/``distinct``/``same``/``negative_roles``/``data``/ ``negative_data`` build the ABox — see :func:`_build_dl_abox`; ``tbox`` follows :func:`_build_dl_tbox`. A knowledge base with DATA assertions or a data box is expressible here, but the in-house tableau REFUSES it by name (it has no data domain): the reply is then an ``{"error": ...}`` naming the refused kinds, never an answer about a weaker knowledge base. Returns ``{"ok": True, "consistent": bool}``.

  • dl_classify

    Classify every named concept of ``tbox`` into a subsumption hierarchy. ``tbox`` follows :func:`_build_dl_tbox` (``None``/``[]`` classifies the empty TBox — every concept is then its own isolated node). ``concepts`` is extra concept TEXT to bring names of interest into the vocabulary even when they never occur in a ``tbox`` axiom (see :func:`~unicode_logic_kit.dl.classify`'s own ``concepts`` parameter) — parsed under the same ``syntax``. Returns ``{"ok": True, "equivalents": {name: [str, ...]}, "parents": {name: [str, ...]}, "children": {name: [str, ...]}, "ancestors": {name: [str, ...]}}`` —…

  • dl_concept_satisfiable

    Is ``concept`` satisfiable with respect to ``tbox`` (the ALCHQ tableau)? ``concept``/``tbox`` text and ``syntax`` follow this section's own header comment; ``tbox`` rows follow :func:`_build_dl_tbox`. Returns ``{"ok": True, "satisfiable": bool, "concept_unicode": str}``.

  • dl_equivalent

    Does ``tbox`` entail ``c ≡ d`` (mutual subsumption)? Returns ``{"ok": True, "equivalent": bool, "c_unicode": str, "d_unicode": str}``.

  • dl_instance_check

    Does the knowledge base entail ``individual : concept``? Open-world (:func:`~unicode_logic_kit.dl.instance_check`'s own contract): ``entailed=False`` means "not entailed", never "entailed to be false". ``concepts``/``roles``/``distinct``/``tbox`` build the KB exactly like :func:`dl_abox_consistent`; ``concept`` is the query, parsed the same way. Returns ``{"ok": True, "entailed": bool, "individual": str, "concept_unicode": str}``.

  • dl_instance_retrieval

    Every ABox individual the knowledge base entails is a ``concept``. Sweeps :func:`~unicode_logic_kit.dl.instance_check` over every individual named in the ABox — including one that appears only in a role assertion. Arguments as :func:`dl_instance_check`. Returns ``{"ok": True, "individuals": [str, ...], "concept_unicode": str}`` (``individuals`` sorted, for a deterministic payload).

Show 22 more tools
  • dl_parse_manchester

    Parse OWL 2 Manchester Syntax text, three ways. ``kind="concept"`` (default): a class expression via ``dl.parse_manchester`` — returns the parsed concept's unicode rendering plus a ``to_manchester`` round-trip (``dl.to_manchester(dl.parse_manchester(text))``), so a caller can confirm ``text`` normalises the way it expects. ``kind="axiom"``: a ``SubClassOf``/``EquivalentTo`` axiom via ``dl.parse_manchester_axiom``. ``kind="role_axiom"``: a ``SubPropertyOf``/``Characteristics: Transitive`` RBox axiom via ``dl.parse_manchester_role_axiom`` (see :mod:`unicode_logic_kit.dl.tableau`'s "Role hierarc…

  • dl_subsumes

    Does ``tbox`` entail ``sub ⊑ sup`` (every model puts ``sub`` in ``sup``)? Returns ``{"ok": True, "subsumes": bool, "sub_unicode": str, "sup_unicode": str}``.

  • drs_to_fol

    Translate a discourse representation structure into provable FOL. ``format="box"`` parses the compact box notation (``[x, y | Farmer(x), Donkey(y), Owns(x, y)] -> [ | Beats(x, y)]``), ``format="sbn"`` the documented Parallel-Meaning-Bank SBN subset. ``resolve_pronouns=True`` runs accessibility-respecting anaphora resolution first (PRONOUN-marked referents; ambiguity/no-candidate failures surface as structured errors) and reports each resolution. The result is the standard translation — donkey-sentence universals come out right — as a formula ``prove``/``check_formula`` accept.

  • explain_molecule_failure

    The full counterexample-explanation view for ONE molecule — the piece a bare classifier does not give you (a plain model checker returns only proved/not-proved, never a witness). Runs the identical check :func:`check_molecule` does (same holds/ exhausted/steps/witness/failing_conjunct), plus the molecule's own structure rendered for a human/LLM to read at a glance: every atom grouped by element type, every other fact about each atom (hydrogen count, charge, chirality, and — when ``include_computed=True`` — ring/aromaticity/connectivity), and the full bond list. Reading the failing conjunct ag…

  • find_countermodel

    A countermodel to premises |= formula, with an English explanation.

  • get_signature

    Extract the inferred vocabulary (Signature) of a formula set. The result dict is ``fol.Signature.from_formulas(...)``'s rich form — predicates/functions with arities and inferred sorts, constants, sort names — ready to pass back as ``check_formula``'s / ``diagnose``'s ``signature`` argument to hold FURTHER generations to this vocabulary: the whole result, ``{"ok": True, "signature": {...}}``, or just its ``signature`` value are both accepted.

  • get_syntax_spec

    Retrieve the kit's syntax specification — look up the rule you broke. Topics: ``overview`` (dialects and the mistake everyone makes), ``naming`` (what makes a symbol a variable / constant / predicate / function, and how TPTP inverts the convention), ``dialects``, ``operators`` (precedence table), ``quantifiers`` (scope rules), ``counting`` (the cardinality quantifier and why it replaces long existential chains), ``chemistry`` (molecule-as-structure signature), ``description-logic`` (the ALC glyph and OWL Manchester concept syntaxes the ``dl_*`` tools accept, plus their TBox/ABox JSON row shap…

  • list_backends

    Registry introspection: what can decide, and what runs by default.

  • list_translations

    Enumerate the logic-to-logic edges the translate tool can follow. The kit's own comorphism registry (BFS-composable); after a Hets bridge refresh the dynamic ``hets:<Name>`` edges appear here too. ``logics`` is every label ``translate`` accepts as ``from_logic`` / ``to_logic``. ``lossy`` edges do not preserve the full source semantics; ``note`` carries the conventions a consumer must know. ``guarantee`` is what the edge preserves (``faithful`` / ``validity`` / ``satisfiability`` / ``lossy``, or ``null`` when the edge declares none — not the same as faithful). ``options`` are the ``translate``…

  • molecule_to_structure

    Translate a SMILES string into the finite structure a definition is checked against — lets the caller SEE what it is generating formulas for. Args: smiles: a SMILES string (e.g. ``"CCO"`` for ethanol). naming: ``"chemlog"`` (default — ``c``, ``bSINGLE``, ``has_1_hs``, ...; what :func:`check_molecule` and friends require) or ``"paper"`` (the human-readable prose spelling — ``c``, ``singleBond``, ``has1H``, ...; use this only to reproduce a worked example written that way, never to feed a ``dialect="tptp_bare"`` formula, which always comes back …

  • normalize

    Rewrite a formula into a normal form. ``form``: ``nnf`` / ``pnf`` / ``cnf`` / ``dnf`` (equivalence-preserving), ``canonical`` (the eval layer's comparison normal form: alpha-renaming, commutativity/associativity, duplication, double negation quotiented out), ``tseitin_cnf`` (EQUISATISFIABLE only — fresh definitional atoms), ``skolemize`` (satisfiability-preserving — existentials become Skolem terms). The ``semantics`` key states which of those relations the result bears to the input, and ``is_horn`` reports whether the input's clausal form is Horn (``None`` where that computation is not appli…

  • parse_formula

    Parse formula text (dialect auto-detected) to the kit's JSON AST.

  • probability_bounds

    Nilsson-style probabilistic entailment: tightest bounds on P(conclusion). Each constraint dict: ``{"formula": <text>}`` plus either ``"probability"`` (pins the value exactly) or ``"lower"``/``"upper"`` (interval; missing ends default to 0/1), plus optional ``"given"`` (formula text — makes it the conditional ``P(formula | given)``). Probabilities travel as ``"7/10"`` / ``"0.7"`` strings, ints, or JSON numbers (read decimally). Propositional only; the answer is the EXACT ``[lower, upper]`` interval (fraction strings, with float shadows for convenience) entailed by the constraint polytope — ``l…

  • probability_query

    Exact ProbLog-style query under Sato's distribution semantics. ``facts``: ``{"atom": <ground atom text>, "prob": <"3/10" | 0.3 | …>}`` — independent Bernoulli facts. ``rules``/``hard_facts``: definite clauses (a ground atom, or ``∀``-quantified ``body → head`` with a positive conjunctive body and a single positive head atom — anything else is refused loudly). The goal may use ∧/∨/¬ and ∀/∃ over the program's finite constants; negation reads closed-world against each total choice's least model (the ProbLog convention). The result is the exact probability as a fraction string (float shadow incl…

  • prove

    Decide premises |= conclusion; the Verdict dict carries provenance.

  • render

    Render a formula in another concrete syntax. ``to``: ``unicode`` / ``tptp`` / ``prover9`` / ``latex`` / ``smtlib`` (a standalone SMT-LIB2 problem: ``(set-logic ...)``, the declaration preamble, and one ``(assert ...)`` — no premises through this tool; use ``unicode_logic_kit.atp.z3_input.to_smtlib`` directly for an entailment with premises) / ``casl`` (a bare CASL formula via ``formula_to_casl``) / ``json`` (the versioned ``serialize`` envelope — the only target whose ``rendered`` is a dict, not a string) / ``english`` (deterministic verbalization). A family without the requested rendering su…

  • repair_formula

    Mechanically repair what CAN be repaired; report the rest. The counterpart to ``diagnose`` (where you are the fixer): this fixes the two failure shapes that have one right answer, so they cost you no attempt. A name no symbol class of this dialect accepts (a chemical name with digits, commas or hyphens) is renamed to a legal predicate, with the original kept in ``names`` — nothing is lost. A free variable is reported and, with ``close_free_variables=True``, closed. What it deliberately does NOT do is bracket a formula that mixes ∧ and ∨ at the same level: the readings differ and choosing one…

  • score_batch

    Corpus-level NL->FOL metrics over aligned prediction/reference lists. The six-key dict of ``eval.compute_fol_metrics``: ``exact_match``, ``equivalence_accuracy`` (honest — undecided pairs are NOT counted as refuted), ``mean_partial_credit``, ``parse_failure_rate``, ``solver_unknown_rate``, ``n``. ``converses`` (same JSON shape as ``compare_formulas``'s own parameter — see its docstring) is forwarded to every pair; when non-empty the dict gains a seventh key, ``converse_matched_rate`` — the fraction of pairs the solver proved equivalent USING the declared axioms, separately visible from (and s…

  • simplify_definition

    Shrink a class definition for model checking, and report exactly what changed — the fix for the standard timeout cause (a redundant O(n²) pairwise-inequality chain, e.g. 780 literals for "at least 40 carbons"). Two independent, differently-scoped rewrites are applied (see :mod:`unicode_logic_kit.fol.simplify_check`'s own module docstring for the full soundness argument of each): 1. :func:`~unicode_logic_kit.fol.simplify_check.simplify_for_checking` (``all_different=True`` by default here — see the module docstring) — a conservative, EVERYWHERE-applicable pass: drops trivial ``t=t`` …

  • translate

    Translate between logics over the comorphism registry — and pass every entry of the returned ``axioms`` as a SEPARATE premise next to ``result`` (never conjoined onto it, never dropped), or the translated formula answers a different question and a valid formula comes back refuted. The result is ``{result, unicode, axioms, axioms_unicode, guarantee, source, target, path, lossy, note}``. ``result`` is the translated term (JSON AST) and ``unicode`` its text; ``axioms`` are the side conditions of the translation, already in the TARGET logic (``axioms_unicode`` is the same list as text, entry for …

  • truth_table

    Decide a propositional formula by full enumeration. ``logic``: ``classical`` (values {0,1}), ``K3`` (strong Kleene) or ``LP`` (Priest, paraconsistent designation). Quantified formulas and tables beyond 4096 rows are refused as structured errors. ``rows`` aligns each assignment with ``atoms``; ``markdown`` is the rendered table for direct display.

  • verbalize

    Render a formula as deterministic English (fol.to_english).

Signals

Stars
0
Forks
0
Open issues
0
Weekly downloads
148
Last commit
Oct 21, 2026 (8 days ago)
Last release
Oct 25, 2026 (4 days ago)
Last package publish
Oct 21, 2026 (8 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.fvossel/unicode-logic-kit
Version
0.35.0
Auth
No auth
Packages
pypi unicode-logic-kit
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 26, 2026
Cite this page

Unicode Logic Kit MCP server. Agent Mart. https://agentmart.dev/connectors/fvossel-unicode-logic-kit (last updated 2026-10-26)