Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • RefinedC RefinedC
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 20
    • Issues 20
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Iris
  • RefinedCRefinedC
  • Issues
  • #8

Closed
Open
Created Aug 21, 2020 by Michael Sammler@msammlerOwner

Control which generated types can be unfolded

Currently the generated unfolding lemmas (e.g. https://gitlab.mpi-sws.org/iris/refinedc/-/blob/a08924ffbba96010976fa2e7910822799cb072a2/theories/examples/tutorial/misc_spec.v#L42) are available to both the implementation and the clients of a type. Arguably, the client should never unfold the definition and thus the unfolding lemmas should not be available for the client. Allowing the unfolding can lead to clients relying on internals of types which should be abstract and to confusing errors (talking about the unfolded type instead of the folded type).

Idea: Add a Unfoldable ty type class parameter to the unfolding lemmas such that they only apply if an instance for this type class exists. Then the implementation can provide such a type class instance while the client code does not. Maybe the type class instance can be generated from an annotation in the source code.

Assignee
Assign to
Time tracking