Giter Site home page Giter Site logo

vikraman / 2dtypes Goto Github PK

View Code? Open in Web Editor NEW
16.0 9.0 1.0 43.34 MB

Collaborative work on reversible computing

Agda 41.28% Makefile 0.07% TeX 57.94% Haskell 0.58% Perl 0.01% Emacs Lisp 0.01% Python 0.11% OpenQASM 0.01%
agda category-theory monoidal-categories quantum-computing reversible-computation reversible-programming-language

2dtypes's Introduction

2DTypes

Build Status

Collaborative work on reversible computing and its relationship to Homotopy Type Theory. Drafts are available in releases.

2dtypes's People

Contributors

bors[bot] avatar dreamlinuxer avatar inexxt avatar jacquescarette avatar sabry avatar vikraman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

drruisseau

2dtypes's Issues

Normalized subset of Pi+

To do:

  • Define normalized types (1 + (1 + ... + (1 + 0))) and normalized 1-combinators
  • Show that for any type, there is 1-combinator between it and its normalized version
  • Show that for any two types t1 and t2 and a 1-combinator c between them, there exists a normalized 1-combinator nc and a 2-combinator nnc such that the (obvious) diagram commutes up to nnc.

Global goal and plan

The global README leads me to believe that

Pi combinators ≃ (Fin n ≃ Fin n)

is really the desired end goal. [Though I'd prefer if the latter part was (Fin n ≃ Fin m), where it is understood/provable that for m <> n, the type is empty.] But this issue should be to clearly define the "main message", and then also a plan to get there.

Again, the global README gives a particular plan, via a sequence of equivalences - but nowhere have I seen any reasoning that these particular steps are somehow thought to be the 'easiest' path. [I don't disbelieve it, but neither am I convinced.]

Fix the problem with termination checker in Diamond

There are three functions marked as non-terminating:

  • in Pi+/Coxeter/NonParametrized/Diamond.agda: diamond and diamond-full
  • in Pi+/Coxeter/NonParametrized/LehmerReduction.agda : Listℕ-to-LehmerProper

All three of them are of similar nature, and they terminate based on the same reason. Namely, when they are called with an argument l1 : Listℕ, they are calling themselves recursively on l2, which has the property that l1 ≅* l2. Relation ≅* has the property that, if l1 ≅* l2, then l2 is lexicographically smaller than l1.

Thus, we need to:

  • define the lexicographical order on lists
  • construct some mechanism which will be able to call the functions above using this order

Hopefully, this can be done in a generic way, to not bother with the details of the functions above (they are quite messy and I can modify them to fit in the generic interface myself).

Fill in Conjectures

Some stuff will still be missing, but just to see where we are now and what's still to be done.

Taskboard for TYPES 16 POSTPROCEEDINGS submission

  • Write Introduction
  • Remove/update section 3.6
  • Change the name "division groupoid"
  • Better name for Prim⟷?
  • Change syntax for 𝓐𝓹 (@DreamLinuxer doesn't want it)
  • in 2D/Frac.agda, I currently defined "left groupoid" and "right groupoid", corresponding to // and \ more closely. The symmetric definition worked, but was really not justified. I think these are easier to explain. If you agree, I can tweak section 3.5 accordingly. But that does give us left and right division groupoids, which will mean that Pi will need adapted. I don't think that will take too long.
  • Proof sketch of lemma 7
  • In 4.1, remove all mention of information
  • In 4.1, // and \\ and # are not 'convenience'!
  • In 4.1, explain more deeply why we're influenced by compact closed categories (ccc from here on).
  • In 4.1, explain that we need to introduce fractions, so from ccc we go with generalizations of 1 = a/a, which then show up in 2 pairs.
  • in 4.1, explain that the ccc associativity A x (A* x A) ~ (A x A*) x A is not fine enough. In our situation, this shows up as #p x (q \ p) ~ (p // q) x #p. We call them 'synchr' from the effect they have in the operational semantics, even though these are induced by an associativity axiom. And not a commutativity axiom, even though that's what the syntax makes it look like!
  • In 4.1, try to hide all the parts of the definitions which have already been seen, to focus on just the new ones. And explain a lot.
  • in 4.2, introduce left and right-handed versions of 'division'. Use as appropriate in tangle.
  • in 4.2, explain that 'tangle' as a name is chosen because of the op.sem.
  • in 4.2, should prove a handed-version of lemmas at the end. And find a cleaner way to state them - the current way is quite ugly.
  • 5 should be split into sections (op.sem., properties, examples)
  • in 5.1, the definition of the action of synchr seems naive, but in the code I (JC) proved some structure lemma that says that this is the only choice. Comment.
  • in 5.1, there should be a lot more explanations throughout.

Document required Agda version

I'm attempting to build the project, but am encountering syntax errors both with Agda 2.5.2 and git HEAD (agda/agda@01798f3). Is there any chance that the Agda version needed could be noted somewhere, even if just as a comment in the Makefile?

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.