# logic ![Example](https://logic-lang.github.io/assets/img/logic-example.png) **structural logic based on equivalence graphs** [![License](https://img.shields.io/github/license/logic-lang/logic.svg?color=informational&style=flat-square)](https://github.com/logic-lang/logic/blob/master/LICENSE) [![Crate](https://img.shields.io/crates/v/logic-lang?style=flat-square)](https://crates.io/crates/logic-lang) [![Docs](https://img.shields.io/docsrs/logic-lang?style=flat-square&logo=docsdotrs)](https://docs.rs/logic-lang) [![Build](https://img.shields.io/github/actions/workflow/status/logic-lang/logic/ci.yml?branch=main&style=flat-square&logo=githubactions)](https://github.com/logic-lang/logic/actions)

Logic is a modern structural logic library based on equivalence graphs. It allows defining a (term-based) language as a generic abstract syntax tree (AST) associated with rewriting rules expressing equivalence relations. Lowering expressions to index-based hir then allows for matching and substituting the current representation using equality saturation. Minimizing rule sets or determining if a rewriting system is terminating through graph algorithms might be investigated in the future.


Note: this is an exploratory project.

Current state

Getting started

An extensive tutorial is currently under construction, but you can still read the documentation for the latest version or browse the sources.

Try the web demo running on WebAssembly.