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
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.
About
Reviews
Write a reviewNo 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_consistencycheck_equivalencecheck_formulacheck_moleculecheck_moleculescompare_formulasdetect_dialectdl_abox_consistentdl_classifydl_concept_satisfiabledl_instance_checkdl_parse_manchester
Show 12 more tools
drs_to_folexplain_molecule_failurefind_countermodelget_signatureget_syntax_speclist_backendslist_translationsmolecule_to_structureparse_formulaprobability_queryscore_batchtranslate
Not yet classified 13 · We could not tell from the name and description.
chemical_signaturediagnosedl_equivalentdl_instance_retrievaldl_subsumesnormalizeprobability_boundsproverenderrepair_formulasimplify_definitiontruth_table
Show 1 more tools
verbalize
Network hosts it talks to 28
allenai.org· found in codecs.unm.edu· found in codecvc5.github.io· found in codedocker.com· found in codedoi.org· found in codeeprover.org· found in codeex.org· found in codegithub.com· found in codegraphviz.org· found in codehermit-reasoner.com· found in codehuggingface.co· found in codeiltp.de· found in codeleancop.de· found in codeleanprover-community.github.io· found in codenick8325.github.io· found in codenlp.stanford.edu· found in codeontohub.org· found in codeopenai.com· found in codeopendatacommons.org· found in codeopenreview.net· found in codeowl.cs.manchester.ac.uk· found in codepmb.let.rug.nl· found in codepotassco.org· found in codepurl.obolibrary.org· found in codetptp.org· found in codeunicode-logic-kit.invalid· found in codevprover.github.io· found in codex.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_consistencyIs 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_equivalenceGraded equivalence (exact -> canonical -> aligned -> solver).
check_formulaWell-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_moleculeDoes ``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_signatureThe 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_formulasThe 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_dialectWhat 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``).
diagnoseOne 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_consistentIs 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_classifyClassify 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_satisfiableIs ``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_equivalentDoes ``tbox`` entail ``c ≡ d`` (mutual subsumption)? Returns ``{"ok": True, "equivalent": bool, "c_unicode": str, "d_unicode": str}``.
dl_instance_checkDoes 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_retrievalEvery 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_manchesterParse 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_subsumesDoes ``tbox`` entail ``sub ⊑ sup`` (every model puts ``sub`` in ``sup``)? Returns ``{"ok": True, "subsumes": bool, "sub_unicode": str, "sup_unicode": str}``.
drs_to_folTranslate 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_failureThe 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_countermodelA countermodel to premises |= formula, with an English explanation.
get_signatureExtract 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_specRetrieve 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_backendsRegistry introspection: what can decide, and what runs by default.
list_translationsEnumerate 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_structureTranslate 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 …
normalizeRewrite 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_formulaParse formula text (dialect auto-detected) to the kit's JSON AST.
probability_boundsNilsson-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_queryExact 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…
proveDecide premises |= conclusion; the Verdict dict carries provenance.
renderRender 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_formulaMechanically 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_batchCorpus-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_definitionShrink 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`` …
translateTranslate 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_tableDecide 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.
verbalizeRender 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
- Repository
- github.com/fvossel/unicode-logic-kit
- 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)