A tool for writing definitions of programming languages and calculi, generating LaTeX and formal proof assistant code from a concise ASCII notation.
Ott is a tool for writing definitions of programming languages and calculi in a concise ASCII notation. It generates typeset LaTeX documentation and formal definitions for proof assistants like Coq, HOL, and Isabelle from a single source, helping to catch errors and ensure consistency. It supports functions for free variables, substitutions, and binding, and can be used as a filter to process embedded terms in source files.
Researchers and semanticists working on formal definitions of programming languages, type systems, or calculi, especially those who need to produce both informal papers and formal proofs.
Ott reduces duplication and errors by allowing a single definition to generate both human-readable documentation and machine-checkable formal code. Its concise notation and multi-format output streamline the workflow from informal to formal mathematics.
The Ott tool for writing definitions of programming languages and calculi
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Generates LaTeX, Coq, HOL, Isabelle/HOL, Lem, and OCaml from a single definition, ensuring consistency across documentation and formal proofs, as highlighted in the README's examples table.
Parses and sort-checks input to catch inconsistencies in judgement forms or metavariable naming, reducing errors early in the definition process, as noted in the README's philosophy section.
Automatically generates functions for free variables, substitutions, and binding auxiliary functions, saving manual effort in formalization, with support detailed in the binding documentation.
Used for substantial projects like OCaml Light and Java module systems, demonstrating reliability and scalability for real-world semantics, as cited in the README's examples.
Only fully concrete binding is fully supported, with an experimental locally-nameless backend; this restricts use for systems requiring advanced alpha-equivalence handling, as admitted in the README.
The project notes limited resources for fixing issues in the bug tracker section, and the codebase dates back to 2007, which may affect long-term support and compatibility with newer tools.
Requires OCaml and ocamlgraph for installation, with opam or manual build steps; this can be a barrier for users not familiar with the OCaml ecosystem, as outlined in the installation instructions.