Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • Iris Iris
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 171
    • Issues 171
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 15
    • Merge requests 15
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Iris
  • IrisIris
  • Merge requests
  • !839

add limit_preserving_impl'

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Ralf Jung requested to merge jung/iris:limit_preserving_iff into master Aug 11, 2022
  • Overview 2
  • Commits 3
  • Pipelines 3
  • Changes 1

This will help porting lambda-rust to Coq 8.16, where a proof using limit_preserving_impl now fails.

Specifically this line. The first subgoal there is

Proper (dist 0 ==> impl) (λ x : typeO, shr_locsE y3 (ty_size x + 1) ⊆ y2)

which after a bunch of f_equiv becomes

shr_locsE y3 (ty_size y6 + 1) ⊆ shr_locsE y3 (ty_size x + 1)

and we don't have Proper instances for shr_locsE and ⊆.

On old Coq, something very strange happens when one does f_equiv on that goal: it turns into

  (ty_size y6 + 1)%nat ⊆ (ty_size x + 1)%nat

which, uh, shouldn't even typecheck? Without notation the term prints as

  @subseteq nat (@eq nat) (Init.Nat.add (@ty_size Σ typeGS0 y6) 1)
    (Init.Nat.add (@ty_size Σ typeGS0 x) 1)

So, this is actually =@{nat}, but using subseteq to print like ⊆... amazing. And also clearly nonsense. But this explains why the proof then used to complete: now we have an = and f_equiv continues to work fine.

In contrast, with the _iff lemma, f_equiv produces

  shr_locsE y3 (ty_size x + 1) ≡ shr_locsE y3 (ty_size y6 + 1)

using the ≡ on gset. Another f_equiv creates a goal with ≡@{nat}, using ofe_equiv natO. With this, solve_proper_core is able to complete the proof.

Edited Aug 12, 2022 by Ralf Jung
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: limit_preserving_iff