--
You received this message because you are subscribed to the Google Groups "VeriFast" group.
To unsubscribe from this group and stop receiving emails from it, send an email to verifast+u...@googlegroups.com.
To post to this group, send email to veri...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/verifast/636e26bc-f283-4047-a3fb-d37a69e847f1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Building on that, I made a small fork of verifast which adds a `predicate_nonempty` declaration and changed prelude to mark character, u_character, ..., pointer as nonempty.
Non empty predicates are added to the Verify_expr.nonempty_pred_symbs map.
My fork is really just a toy, I am not checking validity of non-emptiness assertions.
However if you think it is a way worth pursuing, I can look at inferring non-emptiness for user-defined predicates by checking that all paths have a non-empty chunk.
Otherwise, induction on nats is fine for me :).
Naive thoughts: the logic seems powerful enough to make precise statements about the memory (for instance, consider contiguous bytes as the primitive heap resource, on which a type can be put). Non-emptiness would be an axiom only on a byte predicate and inferred for everything that is derived.
Yet the scheme that derives predicates from C definitions seems to have a quite coarse-grained memory model.
Sorry if what I say is non-sensical, I am just discovering the project and haven't had time to digest all the available resources. That's all very exciting, thanks for this project.
To view this discussion on the web visit https://groups.google.com/d/msgid/verifast/9ceb25b6-b8b7-41d3-be35-f3f75742438f%40googlegroups.com.