-
Notifications
You must be signed in to change notification settings - Fork 236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Define our logical connectives in prop
#1048
Comments
Finally found my old notes on this by Gmail search in commit messages. Hallelujah! TODO (Catalin) Switching to prop instead of Type -- punted CH: We didn't promise this but it would make the presentation much nicer. Current plan (take 3):
|
discussed a bit with Nik about this a few days back in the short run we can probably hack something up by making prop abstract in prims and bringing in stuff like squash to prims as well ... and after typechecking prims requiring that refinements and WPs use prop in the less short run we have been discussing in Paris with @kyoDralliam and @danelahman about making prop primitive in order to simplify and streamline our formalization (in particular getting rid of the separate logical entailment judgment completely, and relying on squashed arrows and inductive types for the logical part) |
Worked out some of this in @kyoDralliam's uEMFStar.org (which builds on @mtzguido's ufstar.org). The main change is adding a new -1 universe level and defining The rest is syntactically simple, and it basically only involves assuming a bunch of constants:
... before being able to define all logical connectives in
It seems simple to turn this into a bunch of axioms and definitions in
Some typing rules also need to change, but it's in the expected way, for instance:
The big advantage on the formalization side is that we can completely get rid of the whole
|
We are also looking at a variant that doesn't involve a
We also don't know if this would work without a special treatment of the |
I started implementing a least intrusive solution on the |
This would also be useful to address issues like #1041. |
We can currently define a
prop
type in various ways, for instance:or (maybe) better:
Started working on an experiment to switch our logical connectives to
prop
this fall on thecatalin_prop
branch: https://github.com/FStarLang/FStar/blob/catalin_prop/ulib/prims.fst#L127Quickly run into lots of troubles, including the fact that making
prop
abstract means that going fromprop
toType
needs to be coercive (ap2t
, something likeb2t
). There were more issues, but unfortunately I can no longer find my notes on this, so will need to rediscover them when returning to this.One big advantage of this change would be that we would get much better error messages for types that make no sense logically, and that we could get rid of the
logic
qualifier hack.The text was updated successfully, but these errors were encountered: