Iris from the Ground Up: A Modular Foundation for Higher-Order Concurrent Separation Logic
Journal of Functional Programming, 2018 · paper · Computer science
Presents the semantic and logical foundations of Iris 3.1, a framework for higher-order concurrent separation logic implemented in the Coq proof assistant. It sets out the design from first principles in one coherent account.
Checked: PDF from people.mpi-sws.org, fetched 4 Oct 2026. Page numbers are those of that PDF.
7 findings
Reference or label Proof of Lemma 1 opens all three parts with "For 1" (p22 "For 1, we can assume Q(γ) and A(γ)"; p23 "For 1, we can assume Q(γ). Our goal is A(γ)"; "Finally, for 1, we use SPROP0-ALLOC") and cites "(a)", but the lemma's items are numbered 1–3; the second and third should be 2 and 3, and "(a)" should be 1.
- p. 23 Proof of Lemma 1, first line of page
For 1, we can assume Q(γ ). Our goal is A(γ )
- p. 23 Proof of Lemma 1, last line
Finally, for 1, we use SPROP0-ALLOC.
- p. 22 Lemma 1 statement
2. Q(γ ) ⇒A(γ ), and,
- p. 22 Proof of Lemma 1, first case
For 1, we can assume Q(γ ) and A(γ ) and we have to show False.
Judge's note: Checked pages 22–23. Lemma 1 lists items 1. Q(γ)⇒□(A(γ)⇒False), 2. Q(γ)⇒A(γ), 3. True⇛∃γ.Q(γ). On p23 the paragraph whose goal is A(γ) proves item 2, and the SPROP0-ALLOC sentence proves item 3. Both are printed "For 1". The phrase "follows from (a)" refers to item 1, but no item is labelled (a). This looks like broken cross-references. The mathematics is fine.
Second check: another model agreed
Report a problem with this finding
Reference or label Proof of Lemma 1: "which easily follows from (a) and our Q(γ)" refers to a label "(a)" that does not exist; the lemma's items are numbered 1-3 and the intended target is item 1.
- p. 23 Proof of Lemma 1
which easily follows from (a) and our Q(γ )
Judge's note: p23 image prints '(a)'. Lemma 1 on p22 has items 1, 2, 3 and the proof has no lettered statement. The fact needed, □(A(γ) ⇒ False) from Q(γ), is item 1. A distinct defect from the repeated 'For 1' labels in C004, so not treated as a duplicate.
Second check: another model agreed
Report a problem with this finding
Reference or label §4.2 says "we will see in §5.5 how this can be used to take the fixed-point of a function", but §5.5 is "The later modality"; fixed points (Banach's theorem) are in §5.6 "Guarded fixed-points".
- p. 27 §4.2, Chains and complete OFEs
will see in §5.5 how this can be used to take the fixed-point of a function
- p. 40 Section heading
5.6 Guarded fixed-points
- p. 31 §4.5
to model a fixed-point operator in the logic (§5.6)
- p. 27 Chains and complete OFEs
we will see in §5.5 how this can be used to take the fixed-point of a function
Judge's note: p27 image shows '§5.5'. Section headings in the text: 5.5 The later modality, 5.6 Guarded fixed-points (with Banach's fixed-point Theorem 4). Other pointers for the fixed-point operator (§4.5 and §8.1) say §5.6. Wrong section pointer.
Second check: another model agreed
Report a problem with this finding
Reference or label The derived-rule block for ⋄ labels two different rules "⋄-ELIM": "P ⊢ ⋄P" (an introduction rule, presumably ⋄-INTRO) and "⋄⋄P ⊢ ⋄P".
- p. 42 §5.7, derived rules for the except-0 modality
⋄-ELIM P ⊢⋄P
- p. 42 §5.7, derived rules for the except-0 modality
⋄-ELIM ⋄⋄P ⊢⋄P
- p. 42 rules for the ⋄ modality, after the text of §5.7
⋄-ELIM
- p. 42
⋄-ELIM P ⊢⋄P ⋄-ELIM ⋄⋄P ⊢⋄P
Judge's note: The page 42 image shows the labels ⋄-MONO, ⋄-ELIM (P ⊢ ⋄P), ⋄-ELIM (⋄⋄P ⊢ ⋄P) and ⋄-TIMELESS. The two rules are different, but they share one name. The first introduces the modality.
Second check: another model agreed
Report a problem with this finding
Reference or label §7.3 says "(changes from §6.3.4 are colored red)" but the changed parts of the displayed weakest-precondition definition are printed in blue.
- p. 60 §7.3, sentence introducing the definition
(changes from §6.3.4 are colored red)
- p. 48 §6.3.2
(changes are in blue)
Judge's note: p60 image: the highlighted parts of the definition (S, S(σ), S(σ2), masks and update modalities) are blue. A pixel count on the definition region of the rendered page found no red pixels and 222 blue ones. This version of the PDF is the Cambridge Core download per the page footer. Label does not match the figure.
Second check: another model agreed · checked by hand
Report a problem with this finding
Reference or label §8.1 cites "Tassarotti et al. (2018) use a version of weakest preconditions for randomized algorithms", but the only 2018 Tassarotti entry in the reference list is the two-author "Tassarotti, Joseph, & Harper, Robert. (2018). A separation logic for concurrent randomized programs. Draft.", which §8.3 cites as "Tassarotti & Harper, 2018".
- p. 62 §8.1, end of 'View shifts versus fancy updates'
and Tassarotti et al. (2018) use a version of weakest preconditions for randomized algorithms
- p. 73 References
Tassarotti, Joseph, & Harper, Robert. (2018). A separation logic for concurrent randomized programs. Draft.
- p. 62 §8.1, paragraph before 'Differences from Iris 3.0'
Tassarotti et al. (2018) use a version of weakest preconditions for randomized
- p. 73 References
Tassarotti, Joseph, & Harper, Robert. (2018). A separation logic for concurrent randomized
Judge's note: Viewed the page 62 crop (in-text citation), the page 73 reference-list crop and the page 64 crop, and searched the text for every 'Tassarotti'. The reference list has two entries: Tassarotti & Harper (2018), two authors, on randomized programs, and Tassarotti, Jung & Harper (2017) on refinement. No 2018 entry with three or more authors exists. The paper uses '&' for two-author works elsewhere, including 'Timany & Birkedal (2018)' in the same sentence and 'Tassarotti & Harper, 2018' on page 64. The intended work is unambiguous, so this is a citation-form error: should read 'Tassarotti & Harper (2018)'.
Second check: another model agreed
Report a problem with this finding
Reference or label The reference entry for Krebbers et al. (2018), MoSeL, gives the page range as "PACMPL, 2(ICFP), 77:1–16:30": the article number changes from 77 to 16 within the range. By the format of the other PACMPL entries it should read 77:1–77:30.
- p. 72 References, Krebbers et al. (2018)
PACMPL, 2(ICFP), 77:1–16:30
- p. 72 References, Krebbers et al. (2018)
PACMPL, 2(ICFP), 77:1–16:30.
Judge's note: Viewed the page 72 crop: the image shows '77:1–16:30', so it is not an extraction artefact. The other PACMPL entries in the list keep one article number at both ends (66:1–66:34, 89:1–89:26, 64:1–64:28). The range is malformed on its face. The fix 77:1–77:30 follows from the entry's own article number and format; I did not check the true page count against an outside source.
Second check: another model agreed
Report a problem with this finding
13 minor (typos and the like; most checked by the judge only)
Wording §4.4 (p. 29) says "the camera version of a frame-preserving update implies the RA version" for a ⇝ B. With the camera definition in Fig. 9 and the RA definition in Fig. 3 (using V̄(a) ≜ ∀n. n ∈ V(a)), this holds for deterministic (and finite) B but not for arbitrary non-deterministic B.
- p. 29 Section 4.4, second bullet
the camera version of a frame-preserving update implies the RA version.
- p. 9 Figure 3, frame-preserving update definition
a ⇝B
- p. 30 Figure 9, frame-preserving update definition
a ⇝B
- p. 29 §4.4, second bullet, last sentence
the camera version of a frame-preserving update implies the RA version
Only the authors can say what is right here.
Judge's note: I checked Fig. 3 (p. 9): RA a ⇝ B ≜ ∀c?. V̄(a·c?) ⇒ ∃b∈B. V̄(b·c?). Fig. 9 (p. 30): camera a ⇝ B ≜ ∀n,c?. n∈V(a·c?) ⇒ ∃b∈B. n∈V(b·c?). In the camera version b may depend on n, so getting the RA version means swapping ∀n and ∃b, which is not valid in general. I checked reviewer 2's counterexample myself. Carrier {ε, a, ↯, b_k}, discrete OFE. ε is the identity and every other product is ↯. V(ε)=V(a)=ℕ, V(b_k)={0..k}, V(↯)=∅, and the core is always ε. ASSOC and COMM hold because ↯ absorbs. CORE-ID, CORE-IDEM and CORE-MONO hold trivially. VALID-OP holds: a product is either ↯ (validity ∅) or equal to one of its factors. EXTEND is trivial because the OFE is discrete. Camera update a ⇝ {b_k}: the only frames that keep a valid are ⊥ and ε, and b_n works at index n, so the update holds. RA update: V̄(a) holds, but V̄(b_k) fails for every k, so the update fails. The printed general claim is therefore false as stated. It is a side remark that holds for deterministic B (a ⇝ b) and for cameras built from RAs, and nothing later appears to depend on it. Hence minor, S3.
Second check: another model agreed
Report a problem with this finding
Wording §6.3.3 (p. 49) says that for an arbitrary unital camera M, "validity of • a · ◦b implies b ≼a". The printed AUTH validity only gives b ≼ⁿ a at each step index, which does not give exact inclusion b ≼ a for non-discrete M.
- p. 49 Section 6.3.3, paragraph following the authoritative camera definition
validity of • a · ◦b implies b ≼a.
- p. 30 Figure 9, CAMERA-INCL
a ≼b ≜∃c. b = a · c
Only the authors can say what is right here.
Judge's note: I checked p. 49. •a·◦b = (ex(a), b), whose validity is {n | n∈V(a) ∧ b ≼ⁿ a}. Even validity at every n only gives ∀n. b ≼ⁿ a, with a witness that may depend on n. I checked the reviewer's counterexample. M is the zero sequence plus all nonnegative rational sequences with infinite support. Composition is pointwise addition, unit and core are zero, everything is valid at every index, and x =ⁿ y means coordinates 0..n agree. M is closed under addition, because nonnegative sequences cannot cancel. EXTEND holds: copy b1 and b2 on the prefix and put a/2 on each tail, which keeps infinite support; a=0 is handled with zeros. Take a=(2,1,1,…) and b=(1,1,1,…). For each n, c_n=(1,0,…,0,1,1,…) with zeros at coordinates 1..n is in M, and b+c_n agrees with a on coordinates 0..n. The only exact remainder, a−b=(1,0,0,…), is not in M, so b ≼ a fails while •a·◦b is valid at every index. The paper elsewhere allows incomplete OFEs and cameras, so the claim is false for general M. It does hold for discrete M, such as the heap instance used right afterwards, so this is a side remark of limited impact.
Second check: another model agreed
Report a problem with this finding
Wording Fig. 10 gives "⟦μx. t : iProp⟧ρ ≜ fix⟦τ⟧(λu. ⟦t : iProp⟧ρ[x←u])": the term is typed at iProp but the fixed point is taken at ⟦τ⟧, with τ unbound in that line (the grammar has "μx : τ. t").
- p. 35 Fig. 10, line for the guarded fixed-point
μx. t : iPropρ ≜fixτ(λu. t : iPropρ[x ←u])
- p. 34 §5, grammar of terms
μx : τ. t
Only the authors can say what is right here.
Judge's note: p35 image shows the line as quoted: iProp on both sides, subscript ⟦τ⟧ on fix, and no type annotation on the binder. The p34 grammar has μx : τ. t. The line mixes the general and the iProp-specialised form; either the type should be τ throughout or the subscript should be ⟦iProp⟧. Authors to say which.
Second check: another model agreed
Report a problem with this finding
Wording §7.1.1 types the invariant registry as "W ≜ ∃I : ℕ → iProp" and "Here, I : ℕ → iProp is a registry", but Fig. 14 gives a finite partial map ℕ ⇀fin iProp, which is what dom(I) and ι ∉ dom(I) require.
- p. 52 Fig. 14, definition of W
W ≜∃I : N fin −⇀iProp.
- p. 52 §7.1.1, displayed definition of W
W ≜∃I : N →iProp.
- p. 53 §7.1.1, first line
Here, I : N →iProp is a registry of all existing invariants.
- p. 52 Fig. 14
W ≜ ∃I : ℕ ⇀fin iProp.
Judge's note: Checked pages 52–53. Fig. 14's definition of W carries a 'fin' decoration on the arrow. The §7.1.1 display and the first sentence on p53 use a plain →. The camera AUTH(ℕ ⇀fin AG(▶iProp)) and the side condition ι ∉ dom(I) both need a finite partial map. The inconsistency is in the notation; the intended meaning is clear from context.
Second check: another model agreed
Report a problem with this finding
Wording §8.1 says "As demonstrated in §7.2, view shifts P E1⇛E2 Q can be encoded ... as P −∗ E1|⇛E2 Q", omitting the □ of the §7.2/Fig. 14 definition □(P −∗ E1|⇛E2 Q).
- p. 62 §8.1, View shifts versus fancy updates
encoded in terms of the fancy update modality as P −∗ |⇛ E1 E2 Q
- p. 56 §7.2, definition of view shifts
Q ≜□(P −∗ |⇛ E1 E2 Q)
- p. 62 §8.1, 'View shifts versus fancy updates'
As demonstrated in §7.2, view shifts P E1⇛E2 Q can be encoded in terms of the fancy update modality as P −∗ E1|⇛E2 Q
- p. 56 §7.2 definition of view shifts
P E1⇛E2 Q ≜□(P −∗ E1|⇛E2 Q)
Judge's note: The page 62 image shows the encoding without □. Fig. 14 on p52 (repeated in §7.2) defines the view shift as □(P −∗ |⇛ Q). The □ makes view shifts persistent, so the restated form differs from the definition it cites. This is probably informal shorthand in the discussion.
Second check: another model agreed
Report a problem with this finding
Typo In the proof of check, list item 3 is headed "Case 2 (P "on the right", I "on the right")", repeating the label of item 2 "Case 2 (P "on the right", I "on the left")"; item 3 should be "Case 3".
- p. 17 §2.4, proof of check, list item 2
Case 2 (P “on the right”, I “on the left”)
- p. 17 §2.4, proof of check, list item 3
Case 2 (P “on the right”, I “on the right”)
- p. 17 Proof of check, list item 3
3. Case 2 (P “on the right”, I “on the right”):
- p. 17 Proof of check, list item 3
3. Case 2 (P “on the right”, I “on the right”)
Judge's note: Page 17 image shows list items 2 and 3 both with the bold label 'Case 2'; item 1 on the previous page is 'Case 1'. The three cases are distinct combinations, not sub-cases. Mislabelled case heading, cosmetic.
Second check: none (judge only)
Report a problem with this finding
Typo The counter-example for AG0(T) in §4.3 is written with the constructor ag ("ag(P) · ag(Q) = ↯ ≠ ag(P) = ag(P) · ag(P)") although AG0's constructor is ag0 and ag is only introduced for the refined AG in the next paragraph.
- p. 28 §4.3, first display
ag(P) · ag(Q) =
- p. 18 §3.1, Agreement
AG0(X) ≜ag0(x : X) |
Judge's note: p28 crop shows 'ag' with no subscript in the display and in the sentence after it, while the passage is about AG0(T) (p27) and p18 defines AG0 with constructor ag0. The subscript is missing; the meaning is clear from context, so this is a minor notation slip.
Second check: none (judge only)
Report a problem with this finding
Typo §3.2 prints "propositions of the form l ↦ v" with a plain italic l, where the paper otherwise writes the location as ℓ ("ℓ ↦ v").
- p. 19 §3.2, first paragraph
propositions of the form l →v
- p. 19 §3.2, first paragraph
propositions of the form l ↦ v
Judge's note: Crop of p19 shows an italic Latin 'l' before ↦; pages 3, 8 and 53 show the script ℓ in the same points-to notation. Typographic inconsistency only.
Second check: none (judge only)
Report a problem with this finding
Typo §7.2: "to strip laters of timeless propositions" where "off" (or "from") is meant; p42 has "strip laters off of timeless hypotheses".
- p. 56 §7.2, paragraph after the list of roles
strip laters of timeless propositions
Judge's note: Crop of p56 shows 'strip laters of timeless propositions (⋄-TIMELESS)'. p42 uses 'strip laters off of'. A small wording slip that is still readable as written.
Second check: none (judge only)
Report a problem with this finding
Typo Proof of INV-OPEN, first bullet: the enabled token is written with mask "E \ ι" instead of "E \ {ι}" (as in the next bullet and in the rule).
- p. 58 §7.2, proof of INV-OPEN, first bullet
E \ ι γEN
Judge's note: p58 crop: first bullet shows the boxed token E \ ι without braces; the second bullet and the INV-OPEN rule show E \ {ι}. Missing braces, meaning unaffected.
Second check: none (judge only)
Report a problem with this finding
Typo In the derivation of WP-INV (§7.3), the line concluded by INV-ACCESS prints the postcondition as "{x. E\N|⇛E Φ(v)}": the binder is x but the body uses v; every other line of the derivation binds v. The binder should be v.
- p. 60 §7.3, derivation of WP-INV, line labelled INV-ACCESS
x. |⇛ E\N E Φ(v)
Judge's note: Viewed the crop of the derivation on PDF page 60. The four lines above bind 'v.' and use Φ(v); the INV-ACCESS conclusion line binds 'x.' while still using Φ(v), which leaves v unbound. Clear slip with an evident fix; cosmetic, since the intended meaning is obvious.
Second check: none (judge only)
Report a problem with this finding
Typo In the WP-INV derivation, the INV-ACCESS line has postcondition "{x. E\N|⇛E Φ(v)}": the binder is x but the body uses v; it should be {v. …}.
- p. 60 Derivation of WP-INV, line obtained by INV-ACCESS
wpE\N e {x. E\N|⇛E Φ(v)}
Judge's note: The page 60 image shows 'x.' in the line above WP-ATOMIC. Every other line uses the binder v. This is a typo in the binder.
Second check: none (judge only)
Report a problem with this finding
Typo Two entries from the same journal volume give the issue differently: "Brookes, Stephen. (2007). ... TCS, 375(1–3), 227–270." and "O'Hearn, Peter W. (2007). ... TCS, 375(1), 271–307."; the page ranges are contiguous, which suggests one issue.
- p. 73 References, O'Hearn (2007)
TCS, 375(1), 271–307
- p. 71 References, Brookes (2007)
TCS, 375(1–3), 227–270
- p. 71 References, Brookes (2007)
TCS, 375(1–3), 227–270.
- p. 73 References, O’Hearn (2007)
TCS, 375(1), 271–307.
Judge's note: Rests on outside knowledge: that the two papers appeared in the same issue of Theoretical Computer Science vol. 375 and what that issue's number is (1–3 or 1). Viewed the page 71 and page 73 crops: the entries read as quoted. Contiguous pages (270 then 271) in the same volume and year make a single issue likely, so the issue field is inconsistent between the two entries, but the files cannot say which form is right. Cosmetic either way; both entries remain findable.
Second check: none (judge only)