Skip to content

DeepSpec/InteractionTrees

 
 

Repository files navigation

Interaction Trees Build Status

A Library for Representing Recursive and Impure Programs in Coq

Introduction

For a quick overview of the core features of the library, see examples/ReadmeExample.v.

See also the tutorial.

The coqdoc documentation for this library is available here.

Top-level modules

  • ITree.ITree: Definitions to program with interaction trees.
  • ITree.ITreeFacts: Theorems to reason about interaction trees.
  • ITree.Events: Some standard event types.

Installation

Via opam

opam install coq-itree 

Dependencies

See coq-itree.opam for version details.

Axioms

This library depends on UIP for the inversion lemma:

Lemma eqit_inv_Vis : eutt eq (Vis e k1) (Vis e k2) -> forall x, eutt eq (k1 x) (k2 x).

There are a few more lemmas that depend on it, but you might not actually need it. For example, the compiler proof in tutorial doesn't need it and is axiom-free.

That lemma also has a weaker, but axiom-free version using heterogeneous equality: eqit_inv_Vis_weak.

The library exports the following axiom for convenience, though it's unlikely you'll need it, and the rest of the library does not depend on it:

Axiom bisimulation_is_eq : t1 ≅ t2 -> t1 = t2.

Contributions welcome

Feel free to open an issue or a pull request!

See also DEV.md for working on this library.

About

A Library for Representing Recursive and Impure Programs in Coq

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 21

Languages