Fil-C on Nix

Filnix wiki

mbrock/filnix/nanofil

magic wand

Iris also wand, separating implication

Sources Reynolds, LICS 2002

The magic wand P −∗ Q holds of resources that, joined with any disjoint resources where P holds, give resources where Q holds. It is a structure with a hole that P fills: a function's precondition is a wand to its weakest precondition, and a structure that lends out a part owns part ∗ part −∗ whole.

  • Iris's triples and the continuation style of its specifications are wands: lst p xs -∗ cont -∗ WP … in the spike's sum_spec.

  • Hello's quotearg returns a buffer that stays valid only until the next call with its slot; its specification lends it out, stringret ∗ stringret −∗ slots, which a first-order logic would have to encode. Campaign 4's libc contracts frame by hand instead: local_effect says a call changes only what its writable roots reach.

See How Iris works, Separation logic.