Skip to content

Instantly share code, notes, and snippets.

@calebmer
Last active February 5, 2019 17:28
Show Gist options
  • Save calebmer/2d32c189fd18e675fc97ff86e6f8555e to your computer and use it in GitHub Desktop.
Save calebmer/2d32c189fd18e675fc97ff86e6f8555e to your computer and use it in GitHub Desktop.
fresh(a') fresh(s')
(row-var) ─────────────────────────────────────────
s ≃ { p: a' | s' } : [s ↦ { p: a' | s' }] q ≠ p a ∉ ftv(a') r ∉ ftv({ q: b | s' })
(row-swap) ─────────────────────────────────────────────────────────────── (uni-varl) ───────────────── (uni-varl) ───────────────────────────────────────
{ q: b | s } ≃ { p: a' | { q: b | s' } } : [s ↦ { p: a' | s' }] a ∼ a' : [a ↦ a'] r ∼ { q: b | s' } : [r ↦ { q: b | s' }]
(uni-row) ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
{ p: a | r } ∼ { q: b | s } : [r ↦ { q: b | s' }, s ↦ { p: a | s' }]
@calebmer
Copy link
Author

A personal exercise based on the rules of “Extensible records with scoped labels”.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment