GithubHelp home page GithubHelp logo

nathsou / girafe Goto Github PK

View Code? Open in Web Editor NEW
6.0 1.0 0.0 1.8 MB

Term Rewriting Systems infrastructure

Home Page: https://nathsou.github.io/Girafe/

License: MIT License

TypeScript 96.18% JavaScript 3.58% Dockerfile 0.10% HTML 0.14%
term-rewriting rewriting-system rewriting functional-programming girafe compiler decision-trees

girafe's Introduction

NPM Package Build Size

Girafe

Try it in the playground.

Term Rewriting Systems infrastructure

Girafe provides a set of tools based on a minimal term rewriting systems language that can be interpreted or compiled to various targets.

See the examples/ folder for small demos.

Multiple preprocessors and transformations can be applied to support laziness, imports, currying, non-linearity etc.. see src/Compiler/Passes/

Installing

$ npm install -g girafe

Compiling

Girafe programs can be compiled to javascript, ocaml or haskell using:

$ grf src.grf out.ext js/ocaml/haskell

Or interpreted using:

$ grf src.grf [query]

Use Cases

  • Target language for functional (lazy or eager) programming languages (see croco)
  • Symbolic computation
  • Automated theorem proving
  • Abstract data type specifications

Todo

  • Use a necessity heuristic when building decision-trees
  • Simulate lazy rewriting correctly
  • Add targets (c/rust/wasm)
  • Confluence checks
  • Tail call elimination
  • Simple optimizations

References

  1. Maranget, Luc (2008) Compiling Pattern Matching to Good Decision Trees
  2. Martelli & Montanari (1982) An Efficient Unification Algorithm
  3. Fokkink, Wan & Kamperman, Jasper & Walters, Pum. (1999). Lazy Rewriting on Eager Machinery. ACM Transactions on Programming Languages and Systems. 22. 10.1145/345099.345102.
  4. Klop, jan willem. (2000). Term Rewriting Systems.

girafe's People

Contributors

nathsou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

girafe's Issues

Commutative laws can cause infinite loops

I'm trying to express Boolean identities. These ones work:

Or(q, q) -> q
And(q, q) -> q
And(a, Or(b, c)) -> Or(And(a, b), And(a, c))
Or(a, And(b, c)) -> And(Or(a, b), Or(a, c))
Or(a, 1) -> 1
And(a, 0) -> 0
And(a, Or(a, b)) -> a
Or(a, And(a, b)) -> a
And(a, 1) -> a
Or(a, 0) -> a
Not(Not(q)) -> q
Or(a, Not(a)) -> 1
And(a, Not(a)) -> 0
Not(Or(a, b)) -> And(Not(a), Not(b))
Not(And(a, b)) -> Or(Not(a), Not(b))

but when I add the commutative laws,

Or(a, b) -> Or(b, a)
And(a, b) -> And(b, a)

Girafe gets stuck in a loop.

The cummutative laws are needed to simplify the first expression:

> grf binary.grf "And(a, Or(b, a))"     
And_sim2(a, Or_sim1(b, a))
> grf binary.grf "And(a, Or(a, b))"
a

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.