jvanbruegge / binder_datatypes Goto Github PK
View Code? Open in Web Editor NEWA new foundational package for Isabelle/HOL that implements binding-aware datatypes
License: Other
A new foundational package for Isabelle/HOL that implements binding-aware datatypes
License: Other
Currently you have to use a typedef
to restrict the type of the parameters in the recursor. This is e.g. necessary to allow only small support functions in vvsubst.
It would be nice if the user could specify a predicate that is threaded through all the recursor proofs that can be used to proof the axioms.
Prerequisites:
Currently the package only defines a recursor. This makes it impossible to have infinitely deep types. Defining the corecursor would fix that.
Currently you can already specify mixfix syntax, but it is not used by the implementation.
Currently, datatypes have to be created from ML. Similar to normal datatypes, binder_datatypes should have custom syntax to define datatypes easily. The idea at the moment is to support syntax like this:
binder_datatype (FVars: 'a, 'b) foo =
Var 'a
| Ann 'b
| Lam x::'a t::"('a, 'b) foo" binds x in t
| App "('a, 'b) foo" "('a, 'b) foo"
| LetRec "(xs::'a * ts::(('a, 'b) foo)) list" t::"('a, 'b) foo" binds xs in ts t
for
map: vvsubst
Open questions about syntax:
Prerequisites:
This would allow to easily express a global binding like XML, or get rid of the mutual types trick for Pi-commitments
Currently all positions have to be part of the fixpoint. Most of the complexity is in defining the map/set/rel constants using the recursor such that the passive positions are accounted for.
Additionally, types cannot be mutually recursive at the moment. Doing this generalization at the same time as passive variables is probably easier than afterwards
Prerequisites:
This theorem was removed because of difficulties proving it, but the solution is to generate a theorem on the fly that re-associates the set unions as needed.
This involves defining set functions via the recursor. The relator can be defined corecursively. This might be possible for sets as well.
Prerequisites:
Currently it still struggles with those
Similar to #15
In general we usually deal with either natLeq
or card_suc natLeq
. Instead of creating the same class over and over again we should create it once (probably even in normal Isar) and then use it when appropriate.
This has several advantages:
print_theorems
after creating a binder type shows a ton of class theorems that are irrelevant for the uservar_finite
and var_countable
See rule induction proofs in STLC
During #14 this feature was removed. It is necessary however for tvsubst with more than one variable position
Currently the only way to define a function on a binder_datatype is to drop down to ML and call the recursor axiomatization directly. There should be an easier way for the user to do this by transforming primitve recursive equations into the fold that is the recursor.
Open questions:
For most syntaxes singular or list substitution is enough. This would have the advantage that all cardinality assumptions could be discharged automatically making it easier to use.
Currently some constants have a hard coded name based of their type. In the future we should allow to specify any name for user-facing constants and types.
This should not be hard, the proofs should stay the same
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.