Paper check About

Koka: Programming with Row-Polymorphic Effect Types

Electronic Proceedings in Theoretical Computer Science, 2014 · paper · Computer science

Proposes a programming model, implemented in the language Koka, where a function's side effects appear in its inferred type using row-polymorphic effect types. The authors show effects connect to program behavior, for example, no exn effect means no unhandled exceptions.

Checked: PDF from microsoft.com, fetched 4 Oct 2026. Page numbers are those of that PDF.

16 findings

Substance The type of map is printed as "map : ∀αβμ. (list⟨α⟩, β→ μ β) → μ list⟨β⟩"; the function argument should have type α → μ β.
  • p. 2 Section 2.3, type of map
    map : ∀αβµ. (list⟨α⟩, β→µ β) →µ list⟨β⟩

Judge's note: The crop of page 2, Section 2.3, shows 'β→ μ β'. map is described as mapping a function over all elements of a list⟨α⟩ to produce list⟨β⟩. As printed, the function cannot be applied to the elements, and α never occurs in the function's type. The domain should be α.

Second check: another model agreed

Report a problem with this finding
Substance Figure 5 (CATCH)i concludes "θ4θ3θ2θ1Γ ⊢ catch e1 e2 : θ4θ3τ2 | θ4θ3ϵ2". This gives the result the handler's type τ2, which is unified with () → θ3ϵ2 θ3θ2τ1. It should be the action's type (θ4θ3θ2τ1). The turnstile also lacks the subscript i.
  • p. 7 Figure 5, (CATCH)i conclusion
    θ4θ3θ2θ1Γ ⊢catch e1 e2 : θ4θ3τ2 | θ4θ3ϵ2
  • p. 7 Figure 5, (CATCH)i conclusion
    θ4θ3τ2
  • p. 8 Theorem 3
    Theorem 3. (Soundness)
  • p. 7 Figure 5, rule (CATCH)i conclusion
    catch e1 e2 : θ4θ3τ2 | θ4θ3ϵ2

Only the authors can say what is right here.

Judge's note: I checked Figure 5 on p7 and Figure 3 on p6. In Figure 3, (CATCH) gives catch e1 e2 the type τ of e1, where e2 : () →ϵ τ. In (CATCH)i, τ1 is the type of e1 and τ2 is the type of e2, and the premise θ3τ2 ∼ () → θ3ϵ2 θ3θ2τ1 makes θ4θ3τ2 an arrow type. My own reworking: for catch () (λx.()), the printed rule infers () →µ (), but (CATCH) and (CATCHV) give (). So the inference rule as printed cannot be sound with respect to the syntax-directed rules (Theorem 3). Replacing the result type with θ4θ3θ2τ1 repairs it. Every other conclusion in Figure 5 has ⊢i, so the missing subscript here is also visible on the image.

Second check: another model agreed

Report a problem with this finding
Substance In the proof of Lemma 6 (escaping read), "From Lemma 5, (4), and (2), it must be that h′ = h (6)" does not follow. Under the published rules (including EXTEND), an escaping read or write can be typed, which contradicts Lemma 6 as stated.
  • p. 8 Figure 8, (EXTEND)
    Γ ⊢ e : τ | ⟨l | ϵ⟩
  • p. 10 Lemma 6 and its escaping-read/write argument
    it must be that h′ = h (6)
  • p. 9 Theorem 5
    then either e ⇑ or e 7−→→ a
  • p. 10 Proof of Lemma 6, Case run (hp ϕ. R[!r])
    From Lemma 5, (4), and (2), it must be that h′ = h (6).

Only the authors can say what is right here.

Judge's note: I reworked this on pp6, 8, 9 and 10. Lemma 5 gives at most st⟨h′⟩ ∈ ⟨st⟨h⟩|ϵ⟩. Membership is defined through ≡, and (EQ-LAB) makes st⟨h1⟩ ≡ st⟨h2⟩. Separately, st⟨h′⟩ may sit in ϵ. So h′ = h is not forced. Counterexample checked against the rules: Γ = r : ref⟨h′,int⟩, h ≠ h′, ϕ = ⟨r0 ↦ ()⟩. READ+APP give Γ,ϕh ⊢ !r : int | ⟨st⟨h′⟩,div⟩. EXTEND (Fig. 8) gives ⟨st⟨h⟩, st⟨h′⟩, div⟩. HEAP gives Γ ⊢ hp ϕ. !r : int | ⟨st⟨h⟩ | ⟨st⟨h′⟩,div⟩⟩. RUN's side condition h ∉ ftv(Γ, int, ⟨st⟨h′⟩,div⟩) holds. So run(hp ϕ. !r) with r ∉ dom(ϕ) is typable. Wrapping it in hp⟨r ↦ 1⟩ gives a closed, typable term that is stuck: READ cannot cross the intervening run, and r is not in the inner heap. This bears on Lemma 6 and on Theorem 5 as printed. The paper uses EXTEND for subject reduction (p8, p10), so it belongs to the typing relation used for soundness.

Second check: another model agreed

Report a problem with this finding
Substance Theorem 2 (Completeness of the syntax directed rules) reads "When Γ ⊢ e : σ | ϵ then we also have Γ ⊢ e : τ | ϵ where σ can be instantiated to τ". The conclusion uses the declarative ⊢, not ⊢s.
  • p. 7 Theorem 2
    When Γ ⊢e : σ | ϵ then we also have Γ ⊢e : τ | ϵ where σ can be instantiated to τ.

Only the authors can say what is right here.

Judge's note: In the zoomed crop of page 7, Theorem 1 visibly uses ⊢s, while both judgements in Theorem 2 are a plain ⊢. Reworked: from Γ ⊢ e : σ | ϵ, one application of (INST) in Figure 3 already gives Γ ⊢ e : τ | ϵ for any instance τ of σ. So the theorem as printed is trivially true and does not state completeness of the syntax-directed system. Page 8 relies on 'by Theorem 1 and 2 also sound and complete to the declarative rules', which needs the ⊢s form. The intended statement presumably concludes Γ ⊢s e : τ | ϵ. As printed, the stated theorem is not the claimed result.

Second check: another model agreed

Report a problem with this finding
Substance Figure 6 (EFF-SWAP) concludes "⟨l′ | ϵ⟩ ≃ l | ⟨l | ϵ′⟩ : θ". The returned tail should be ⟨l′ | ϵ′⟩: as printed, the skipped label l′ is lost and l is duplicated.
  • p. 7 Figure 6, (EFF-SWAP)
    ⟨l ′ | ϵ⟩≃l | ⟨l | ϵ′⟩: θ
  • p. 8 Explanation of effect matching
    θϵ = ⟨θl | θϵ′⟩
  • p. 8 Section 4.1, specification of ≃
    θ such that θϵ = ⟨θl | θϵ′⟩

Only the authors can say what is right here.

Judge's note: Checked the Figure 6 image on p7: the inner tail is printed with l and no prime. On p8 the text says ϵ ≃ l | ϵ′ : θ yields θϵ = ⟨θl | θϵ′⟩. My own check: matching ⟨div, exn⟩ against exn, (EFF-HEAD) gives ⟨exn⟩ ≃ exn | ⟨⟩ : []. The printed (EFF-SWAP) then returns the tail ⟨exn⟩, so the invariant would claim ⟨div, exn⟩ ≡ ⟨exn, exn⟩. That is false because equivalence preserves label multiplicities and div ≢ exn. With the tail ⟨l′ | ϵ′⟩ the invariant holds via (EQ-SWAP).

Second check: another model agreed

Report a problem with this finding
Substance Lemma 5, "If Γ ⊢ e : τ | ⟨st⟨h⟩ | ϵ⟩ and Γ ⊢ R[e] : τ′ | ϵ′ then st⟨h⟩ ∈ ϵ′", is false as stated because the two typings are independent. The base case "By definition st⟨h⟩ ∈ ⟨st⟨h⟩ | ϵ⟩" silently identifies ϵ′ with ⟨st⟨h⟩|ϵ⟩.
  • p. 9 Lemma 5
    If Γ ⊢ e : τ | ⟨st⟨h⟩ | ϵ⟩ and Γ ⊢ R[e] : τ′ | ϵ′ then st⟨h⟩ ∈ ϵ′.
  • p. 9 Proof of Lemma 5, empty-context case
    Case R = []
  • p. 9 Proof of Lemma 5, Case R = []
    By definition st⟨h⟩ ∈ ⟨st⟨h⟩ | ϵ⟩.

Only the authors can say what is right here.

Judge's note: Checked p9 and the (UNIT) rule in Figure 3 on p6; (UNIT) allows any effect. Counterexample: e = (), R = []. Then Γ ⊢ () : () | ⟨st⟨h⟩⟩ and Γ ⊢ () : () | ⟨⟩ both hold, but st⟨h⟩ ∈ ⟨⟩ would need ⟨⟩ ≡ ⟨st⟨h⟩|ϵ″⟩, which no equivalence rule gives. The lemma presumably needs the typing of e to be the subderivation inside the typing of R[e], or a hypothesis that every typing of e carries st⟨h⟩. Only the authors can say which was intended.

Second check: another model agreed

Report a problem with this finding
Substance The definition of R ("if div ∉ ϵ and ... for all e1 ∈ R(τ1 | ϵ), we have that e e1 ∈ R(τ2 | ϵ2)") leaves R(τ2|ϵ2) empty whenever div ∈ ϵ2. Under that definition, Lemma 8 ("then θe ∈ R(τ | ϵ)") fails for well-typed functions whose latent effect includes div.
  • p. 11 Definition of R following Theorem 8
    we have that e e1 ∈ R(τ2 | ϵ2)
  • p. 11 Strengthened Lemma 8
    then θe ∈ R(τ | ϵ)

Only the authors can say what is right here.

Judge's note: Checked p11. As printed, membership in R(τ|ϵ) requires div ∉ ϵ. Take · ⊢ λx.() : () →⟨div⟩ () | ⟨⟩; (UNIT) and (LAM) allow the latent ⟨div⟩. Lemma 8's hypotheses hold because div ∉ ⟨⟩, and () ∈ R(() | ⟨⟩). But R(() | ⟨div⟩) is empty, so λx.() ∉ R. The proof's (FIX) case ('just an occurrence of fix is ok') runs into the same problem, since fix's type has div in its latent effect. The 'if' in the definition might be read as leaving R undefined when div ∈ ϵ2, but then the arrow clause is ill-defined. Only the authors can say what was intended. Separately, Lemma 8's short statement prints R(ϵ | τ) with the arguments reversed; the strengthened form uses R(τ | ϵ).

Second check: another model agreed

Report a problem with this finding
Reference or label The Figure 1 notation gives the effect-constant metavariable the effect-row kind: "l effect constant type τ^e", although effect constants have kind k (exn :: k, div :: k, ⟨_|_⟩ :: (k, e) → e).
  • p. 5 Figure 1, notation
    effect constant type τ e

Judge's note: In the zoomed crop of Figure 1, both ϵ and l are listed with superscript e (sans-serif e). The constants table gives exn, div :: k and st :: h → k, and the extension ⟨_|_⟩ takes its first argument at kind k. So l should be τ^k. The text also defines a separate kind for effect constants. This is a label error in the figure.

Second check: another model agreed

Report a problem with this finding
Reference or label Reference [20] (Milner, A theory of type polymorphism in programming) prints the pages as "17:248–375, 1978"; the start page is probably 348.
  • p. 12 Reference [20]
    17:248–375, 1978
  • p. 12 Reference [20]
    Journal of Computer and System Sciences, 17:248–375, 1978.

Only the authors can say what is right here.

Judge's note: Rests on outside knowledge: Milner's article occupies JCSS 17(3), pages 348–375. The page 12 image prints '17:248–375', a span of 128 pages, which is implausible for this article.

Second check: another model agreed

Report a problem with this finding
Reference or label Reference [4] (Damas and Milner): the venue is printed as "In 9th82, pages 207–212, 1982.", an unexpanded BibTeX string instead of the conference name.
  • p. 12 Reference [4]
    In 9th82, pages 207–212, 1982.
  • p. 12 Reference [14]
    Symp.f on Trends in Functional Programming

Judge's note: The crop of page 12 shows the italic '9th82' as the venue, so it is not an extraction artefact. The intended venue (POPL '82) rests on outside knowledge, but the printed venue is visibly garbled either way. The 'Symp.f' typo in [14] is handled under C055.

Second check: another model agreed

Report a problem with this finding
Wording Section 2.8.2 gives an inverted reason: "the variable will have type ref⟨h, a⟩ and therefore h is not free in the environment". The argument needs h to be free in the environment, which is why it 'will not generalize'.
  • p. 5 Section 2.8.2, last paragraph
    and therefore h is not free in the environment
  • p. 5 Section 2.8.2, final paragraph
    the variable will have type ref ⟨h, a⟩and therefore h is not free in the environment

Judge's note: Checked on the page 5 image. The sentence says h will *not* generalize because a shared outer variable has type ref⟨h,a⟩. That makes h occur in ftv(Γ). Generalization (GEN: ᾱ ∉ ftv(Γ); gen(Γ,τ)=∀(ftv(τ)−ftv(Γ)); RUN: ξ ∉ ftv(Γ,…)) is blocked exactly when h is free in Γ. 'Not free' contradicts the conclusion of the same sentence. The fix is to drop 'not'.

Second check: another model agreed

Report a problem with this finding
Wording Proof of Lemma 7: "Case fix ϵ1: As the previous case." The effect symbol ϵ1 is printed where the expression e1 is meant. Read literally (fix applied to e1), the (!) argument also does not carry over, because the outer arrows of (FIX) are total.
  • p. 11 Proof of Lemma 7
    Case fix ϵ1: As the previous case.
  • p. 6 Figure 3, rule (FIX)
    →(τ1 →⟨div | ϵ⟩τ2) | ϵ′

Only the authors can say what is right here.

Judge's note: The image shows 'fix ϵ1' with the lunate epsilon, a different glyph from e1 in 'Case (!) e1'. This is a typo. Substantive point: the previous case gets div ∈ ϵ from (1), ϵ2 = ϵ, because (READ)'s arrow carries div. In Figure 3 the (FIX) type is ((τ1 → ⟨div|ϵ⟩ τ2) → (τ1 → ⟨div|ϵ⟩ τ2)) → (τ1 → ⟨div|ϵ⟩ τ2). Its outer arrows have no annotation, and Figure 1's sugar defines τ1 → τ2 = τ1 →⟨⟩ τ2. So when e = fix, ϵ2 = ⟨⟩ and no div contradiction follows. The case probably still holds by another argument (for example, R at an arrow type whose latent effect contains div is empty, so the premise would be vacuous). If 'fix e1' instead means (fix v) e1, the analogy does work. Only the authors can say which is meant. The stated lemma is not shown to fail, so S3.

Second check: another model agreed

Report a problem with this finding
Wording In the proof of Lemma 2, case (RUNL), "By rule (RUN) and (HEAP) we have that Γ ⊢ λx. e : τ | ⟨st⟨h⟩ | ϵ⟩" drops the heap bindings. When a heap is present, (HEAP) yields Γ, ϕh ⊢ λx. e.
  • p. 10 Proof of Lemma 2, RUNL case
    Γ ⊢ λx. e : τ | ⟨st⟨h⟩ | ϵ⟩

Only the authors can say what is right here.

Judge's note: Checked p10 and Figure 8 on p8. Inverting (HEAP) gives a judgement under Γ, ϕh, as the proof itself writes in the next case (RUNH: "Γ, ϕh ⊢ w"). In the RUNL case the bindings are omitted, so the intermediate judgements fail when e mentions a heap-bound reference. For example, λx.(λy.()) r is not typable under Γ alone. Carrying ϕh through the intermediate steps repairs the case. The stated lemma is not refuted by this.

Second check: another model agreed

Report a problem with this finding
Wording In the proof of Lemma 8, case (APP), "θe1 θe2 ∈ R(τ2 | ϵ) and therefore θ(e1 e2) ∈ R(τ2 | ϵ)" puts the application in the argument type's set. It should be R(τ | ϵ).
  • p. 11 Proof of Lemma 8, Case (APP)
    θe1 θe2 ∈R(τ2 | ϵ) and therefore θ(e1 e2) ∈ R(τ2 | ϵ)
  • p. 11 Proof of Lemma 8, (APP) case
    θe1 θe2 ∈ R(τ2 | ϵ)

Only the authors can say what is right here.

Judge's note: Checked p11. In the same sentence θe1 ∈ R(τ2 →ϵ τ | ϵ) and θe2 ∈ R(τ2 | ϵ), so τ2 is the argument type. The definition of R for arrows (an argument in R(τ1|ϵ) gives an application in R(τ2|ϵ2)) yields R(τ | ϵ), and by (APP), e1 e2 has type τ. This is a faulty step; the case goes through once τ2 is replaced by τ.

Second check: another model agreed

Report a problem with this finding
Wording Proof of Lemma 7, last case: "by the induction hypothesis e′ e1 ∈ R(τ | ϵ2) since τ2 is smaller". The goal and the induction type are τ2, so this should read R(τ2 | ϵ2).
  • p. 11 Proof of Lemma 7, last case
    e′ e1 ∈R(τ | ϵ2) since τ2 is smaller

Only the authors can say what is right here.

Judge's note: Checked on the crop. Earlier in the proof the arrow case is set up as τ = τ1 →ϵ2 τ2, with the goal e′ e1 ∈ R(τ2 | ϵ2). The induction hypothesis is used at the smaller type τ2, as the sentence itself says. R(τ | ϵ2) would be the whole arrow type, which is neither smaller nor the goal. The step is wrong as printed; the fix is τ → τ2, and the lemma's statement stands.

Second check: another model agreed

Report a problem with this finding
Wording In the proof of Lemma 7, "By (APP), it must be ϵ2 = ϵ (1)" equates the function's latent effect ϵ2 with the evaluation effect ϵ of e. (APP) does not force this.
  • p. 11 Proof of Lemma 7
    By (APP), it must be ϵ2 = ϵ (1).

Only the authors can say what is right here.

Judge's note: Checked p11 and Figure 3 on p6. (APP) requires the function, the argument and the application to share one effect within a single derivation. It does not relate that effect to an independently chosen typing of e. Counterexample checked: e = (λz. λx. ()) () can be typed · ⊢ e : () →⟨exn⟩ () | ⟨⟩, because (LAM) and (UNIT) allow free effects, while e () : () | ⟨exn⟩. Here ϵ2 = ⟨exn⟩ ≠ ⟨⟩ = ϵ. The step is false as printed. Whether Lemma 7 can be proved another way is not settled here.

Second check: another model agreed

Report a problem with this finding
34 minor (typos and the like; most checked by the judge only)
Reference or label In Section 3.1, "It turns out this is required to ensure a sound semantics as we show in Section 5" points to the wrong section. The soundness and subject-reduction argument is in Section 6 ('Semantic soundness', 6.1), which the next sentence itself cites.
  • p. 7 Section 3.1, discussion of (GEN)
    ensure a sound semantics as we show in Section 5
  • p. 7 Section 3.1, top of left column
    It turns out this is required to ensure a sound semantics as we show in Section 5.

Judge's note: On page 7, the sentence that follows reads 'As we see in Section 6.1 … without it, we cannot prove subject reduction.' Section 5 ('Semantics of effects') defines the syntax, extra typing rules and reductions. Its opening line promises to 'show that well-typed programs cannot go wrong', but Theorem 5 and the subject-reduction proofs are in Section 6. The pointer looks like a leftover from older numbering. The page 1 note also says 'proofs of Section 5'. The pointer is loosely defensible, hence minor.

Second check: another model agreed

Report a problem with this finding
Wording The introduction says "The Koka language fully implements the effect types as described in this paper", while Section 2.7 says of the hdiv/qualified-type approach that "Currently this is not fully implemented yet in Koka".
  • p. 1 Introduction, last contribution
    The Koka language fully implements the effect types as described in this paper
  • p. 4 Section 2.7
    Currently this is not fully implemented yet in Koka

Judge's note: Both passages checked on the page 1 and page 4 images. Section 2.7 presents hdiv as what 'in Koka we use', and then says it is not fully implemented and that Koka falls back to a conservative assumption. The formal development uses the conservative div-on-read rule, so the claim can be read as consistent. The wording is still somewhat inconsistent, so this is a minor observation.

Second check: another model agreed

Report a problem with this finding
Wording Section 2.8.2 says "if the client tries to call print it will get the console effect", but Section 2.2 types print as "print : string → io ()" and no console effect is defined anywhere in the paper.
  • p. 5 Section 2.8.2
    if the client tries to call print it will get the console effect
  • p. 2 Section 2.2 signatures
    print : string →io ()
  • p. 5 2.8.2
    it will get the console effect which will
  • p. 2 Section 2.2
    print

Only the authors can say what is right here.

Judge's note: Page 2 shows print : string → io (). The basic effects listed in Section 2.2 are total, exn, div, ndet, alloc, read, write and io, with no console. Page 5 refers to a 'console' effect. The argument still works with io, which would not unify with client = ⟨dom, div⟩. Only the authors can say whether 'console' means io or an effect from the implementation that the paper does not introduce.

Second check: another model agreed

Report a problem with this finding
Wording Section 2.8.2 says "any function with a total or pure effect, like length or map, can be called by both the server and client part". However, pure = ⟨exn, div⟩ (Section 2.2), and the closed client effect is ⟨dom, div⟩, which has no exn.
  • p. 5 Section 2.8.2, client alias
    alias client = ⟨dom, div⟩
  • p. 5 Section 2.8.2, right column
    any function with a total or pure effect, like length or map, can be called by both the server and client part
  • p. 2 Section 2.2 aliases
    alias pure = ⟨exn, div⟩
  • p. 5 2.8.2
    any function with a total or pure effect, like length or map, can be called by both

Only the authors can say what is right here.

Judge's note: Page 2 has alias pure = ⟨exn, div⟩. Page 5 has alias client = ⟨dom, div⟩, and the text stresses that these closed effects reject calls whose effects do not unify. A pure function brings exn, which ⟨dom, div⟩ does not contain. Footnote 2 mentions only st in the real implementation and says nothing about exn. The claim holds as stated for total functions, but within the paper it does not hold for pure ones. The authors should say whether client includes exn.

Second check: another model agreed

Report a problem with this finding
Wording The allocation primitive has two names. The grammar has "p ::= () | fix | throw | new | (!) | (:=)", but rule (ALLOC) in Figure 3 types "ref", and Figure 7 lists "ref (new reference)".
  • p. 6 Section 3.1 primitives
    p ::= () | fix | throw | new | (!) | (:=)
  • p. 6 Figure 3 (ALLOC)
    Γ ⊢ref
  • p. 6 Figure 3 (ALLOC)
    Γ ⊢ ref : τ → ⟨st⟨h⟩ | ϵ⟩ ref⟨h, τ⟩ | ϵ′

Judge's note: On page 6 the primitives grammar lists 'new', while the Figure 3 rules are ALLOC (ref), READ, WRITE, THROW, UNIT and FIX. No rule types 'new'. On page 8, Figure 7 uses 'ref'. These are evidently the same primitive, but the names are inconsistent.

Second check: another model agreed

Report a problem with this finding
Wording Section 5 says "Also, we denote heap variables using r.", but Figure 7 defines r as "(reference variable)", and Section 3 uses ξ/h for heap type variables.
  • p. 8 Section 5
    Also, we denote heap variables using r.
  • p. 8 Figure 7
    r (reference variable)

Judge's note: Page 8 image: the text sentence and the Figure 7 grammar line 'r (reference variable)' disagree. Page 6 says ξ is used for heap type variables. This is a mislabelling in the prose. The (v :=) point is handled under C032.

Second check: another model agreed

Report a problem with this finding
Wording After Lemma 5 the paper says "Later we will generalize this lemma to arbitrary contexts and effects", but no generalized lemma is stated anywhere later.
  • p. 9 Section 6.1, after Lemma 5
    Later we will generalize this lemma to arbitrary contexts and effects

Only the authors can say what is right here.

Judge's note: I searched the text for 'generaliz' and read pages 9–11 (Sections 6–7, Theorems 6–8, Lemmas 7–8). No generalized version of Lemma 5 is stated. The forward promise is left unfulfilled.

Second check: another model agreed

Report a problem with this finding
Wording Theorem 7 ("Iff Γ ⊢ e : τ | ϵ where st⟨h⟩ ∉ ϵ then ...") and Lemma 7 ("Iff · ⊢ e : τ | ϵ, ...") print "Iff" for one-directional implications. The parallel Theorems 6 and 8 use "If".
  • p. 11 Theorem 7
    Iff Γ ⊢e : τ | ϵ where st⟨h⟩̸∈ϵ
  • p. 11 Lemma 7
    Iff · ⊢ e : τ | ϵ,
  • p. 11 Theorem 6
    If Γ ⊢ e : τ | ϵ where exn ∉ ϵ
  • p. 11 Theorem 7
    Iff Γ ⊢ e : τ | ϵ

Judge's note: Checked p11. Both statements have the form 'Iff ... then ...', and the proofs establish only one direction. Read literally, 'Iff' states a biconditional that is not proved and in general does not hold. A secondary point from one reviewer: Theorems 6–8 allow an arbitrary Γ, while the evaluation conclusions and R are about closed terms (Theorem 5 uses ·). For example, f : () →⟨⟩ () ⊢ f () : () | ⟨⟩ is stuck. The authors should also say whether Γ is meant to be empty.

Second check: another model agreed

Report a problem with this finding
Typo Contribution bullet 2 has grammar errors: "if an expression that can be typed without an exn effect, then it will never throws an unhandled exception; or if an expressions can be typed".
  • p. 1 Section 1, second contribution bullet
    if an expression that can be typed without an exn effect, then it will never throws
  • p. 1 Introduction, second bullet
    if an expression that can be typed without an exn effect, then it will never throws an unhandled exception; or if an expressions can be typed
  • p. 1 Introduction, contributions bullet 2
    if an expression that can be typed without an
  • p. 1 Contributions, second bullet
    if an expression that can be typed without an exn effect, then it will never throws an unhandled exception

Judge's note: Seen in the page 1 image (right column, second bullet): there is a stray 'that', 'throws' should be 'throw', and 'expressions' should be 'expression'.

Second check: none (judge only)

Report a problem with this finding
Typo The abstract has no space after the comma in "Finally,our system is implemented fully".
  • p. 1 Abstract
    Finally,our system
  • p. 1 Abstract
    Finally,our system is implemented fully

Judge's note: The page 1 image shows 'Finally,our' with no space after the comma.

Second check: none (judge only)

Report a problem with this finding
Typo In the signatures "error : ∀α. string → exn a" and "(:=) : ∀α. (ref⟨h, a⟩, a) → write⟨h⟩ ()", the quantifier binds Greek α but the body uses italic a.
  • p. 2 Section 2.2, signatures
    error : ∀α. string →exn a
  • p. 2 Section 2.2 signatures
    (:=) : ∀α. (ref ⟨h, a⟩, a) →write⟨h⟩()
  • p. 2 Section 2.2 signatures
    ∀α. string →exn a

Judge's note: The crop clearly shows Greek α in the quantifier and a Latin italic a in both bodies. This is a notation inconsistency; the intended meaning is clear.

Second check: none (judge only)

Report a problem with this finding
Typo Section 2 has a stray and a duplicated word: "For example, if suppose we have" and "But that that is only part of the story".
  • p. 2 Section 2, first paragraph
    For example, if suppose we have
  • p. 2 Section 2, first paragraph
    But that that is only part of the story
  • p. 2 Section 2, first paragraph
    For example, if suppose we have the type

Judge's note: Both phrases are visible in the page 2 image (Section 2, first paragraph).

Second check: none (judge only)

Report a problem with this finding
Typo Misspelling at the end of Section 2.2: "reversable operations" should be "reversible operations".
  • p. 2 Section 2.2, end
    reversable operations

Judge's note: 'reversable operations' is visible in the page 2 image, right column, before Section 2.3.

Second check: none (judge only)

Report a problem with this finding
Typo The diverge example binds with the assignment operator, "val r := ref(id)", while every other val binding uses '=' (e.g. 'val r = ref (1)').
  • p. 4 Section 2.7, diverge example
    val r := ref (id)
  • p. 4
    function diverge() { val r := ref (id)

Judge's note: The crop shows 'val r := ref(id)'. A text search finds every other val binding using '=' (lines 287, 288, 290, 359, 460).

Second check: none (judge only)

Report a problem with this finding
Typo Section 2.7 says "initialized with the identify function"; it should be "identity function" (id).
  • p. 4 Section 2.7
    identify function
  • p. 4 Section 2.7
    initialized with the identify function

Judge's note: Visible in the page 4 image below the diverge code.

Second check: none (judge only)

Report a problem with this finding
Typo Section 2.8.1 says "where it first parser block elements"; it should be "parses".
  • p. 4 Section 2.8.1
    first parser block ele- ments
  • p. 4 Section 2.8.1
    it first parser block ele-

Judge's note: Visible in the page 4 image, Section 2.8.1.

Second check: none (judge only)

Report a problem with this finding
Typo Copy-editing slips: "This is system is not polymorphic" (stray 'is') and "In the context proof systems" (missing 'of') on page 12, and "it first parser block elements" ('parses') on page 4.
  • p. 12 Section 8, Tolmach paragraph
    This is system is not polymorphic
  • p. 12 Section 8, Tolmach paragraph
    In the context proof systems
  • p. 12 Section 8, Tolmach paragraph
    This is system is not polymorphic though
  • p. 12 Section 8, Tolmach paragraph
    In the context proof systems there has been

Judge's note: All three are visible in the page images: the Tolmach paragraph on page 12 and Section 2.8.1 (Markdown) on page 4.

Second check: none (judge only)

Report a problem with this finding
Typo There is a missing conjunction in "their interaction will be more apparent they can share common functionality".
  • p. 5 Section 2.8.2
    their interaction will be more apparent they can share common functionality
  • p. 5 Section 2.8.2
    their interaction will be more apparent they can share common

Judge's note: The page 5 image shows the run-on sentence as quoted. It needs 'and' or punctuation between the clauses.

Second check: none (judge only)

Report a problem with this finding
Typo Raw LaTeX is printed in Section 3.1: "limiting the \textit{exception} type to just the unit type".
  • p. 6 Section 3.1, after Figure 3
    limiting the \textit{exception} type
  • p. 6 Section 3.1, right column
    limiting the \textit{exception} type to just the unit type
  • p. 6 Section 3.1
    \textit{exception} type

Judge's note: The page 6 image (right column, below Figure 3) shows the literal '\textit{exception}' in the typeset PDF, so this is not an extraction artefact.

Second check: none (judge only)

Report a problem with this finding
Typo The phrase "since this simplifies the presentation as where we can give direct type rules" is garbled.
  • p. 6 Section 3.1, after Figure 3
    simplifies the presentation as where we can give direct type rules

Judge's note: The page 6 image (right column, below Figure 3) shows 'as where'. One of the two words is superfluous.

Second check: none (judge only)

Report a problem with this finding
Typo A word is missing in "It turns out that is still sound to allow more effects at generalization" ('that it is').
  • p. 7 Section 3.1
    turns out that is still sound to allow more effects

Judge's note: The page 7 image (left column) shows the text as quoted.

Second check: none (judge only)

Report a problem with this finding
Typo Stray words: "we first present in a syntax directed version" in Section 4 and "we can now give a the type inference algorithm" in Section 4.1.
  • p. 7 Section 4, first paragraph
    we first present in a syntax directed version
  • p. 7 Section 4.1, first sentence
    we can now give a the type inference algorithm

Judge's note: The page 7 image shows both phrases as quoted: a superfluous 'in' and the double article 'a the'.

Second check: none (judge only)

Report a problem with this finding
Typo Misspellings "standard row unificiation" (p.8) and "and a substition θ" (Figure 6 caption, p.7).
  • p. 8 Section 4.1, top
    standard row unificiation
  • p. 7 Figure 6 caption
    and a substition θ.
  • p. 7 Figure 6 caption
    a substition θ

Judge's note: Both are visible in the images: the p.8 top paragraph and the p.7 Figure 6 caption.

Second check: none (judge only)

Report a problem with this finding
Typo A subscript is misplaced in Section 4.1: "the check tl(ϵ1) ∉ dom(θ)1 is subtle" should read dom(θ1), as in rule (UNI-EFF).
  • p. 8 Section 4.1, after tl definition
    the check tl(ϵ1) ̸∈dom(θ)1 is subtle

Judge's note: The page 8 image shows dom(θ)1 with the subscript after the closing parenthesis. Figure 6 (UNI-EFF) on page 7 prints tl(ϵ1) ∉ dom(θ1).

Second check: none (judge only)

Report a problem with this finding
Typo Stray LaTeX comment character printed at top of p.8: "θτ1 = θτ2. %The unification algorithm is standard".
  • p. 8 Section 4.1, top of page
    θτ1 = θτ2. %The unification algorithm is standard

Judge's note: Page 8 image, first line of left column: the '%' is visibly typeset before 'The unification algorithm'.

Second check: none (judge only)

Report a problem with this finding
Typo Section 5 reads "a partially applied assignments (v :=)": 'a ... assignments' is a number mismatch, and Figure 7 writes the form as (r :=).
  • p. 8 Section 5, paragraph 2
    a partially applied assignments (v :=)

Judge's note: Page 8 image: the text has 'a partially applied assignments (v :=)', while the Figure 7 grammar lists '(r :=) (partial assign)'. The grammar slip is certain. The v/r notation is a minor inconsistency, and the text may be speaking loosely.

Second check: none (judge only)

Report a problem with this finding
Typo Misspelling "der an enviroment that contains types" (Section 5, p.8); should be 'environment'.
  • p. 8 Section 5
    der an enviroment that contains types

Judge's note: Visible in the last line of the left column on the page 8 image.

Second check: none (judge only)

Report a problem with this finding
Typo Misspellings in Section 5.1: "rule (THROW) progates exceptions" and "nearest enclosing exception hander" (should be 'propagates' and 'handler').
  • p. 9 Section 5.1
    rule (THROW) progates exceptions
  • p. 9 Section 5.1
    nearest enclosing exception hander
  • p. 10 Lemma 6 title
    Faulty expresion are untypable

Judge's note: Both are visible on the page 9 image, left column. The 'expresion' misspelling in the Lemma 6 title is also real; it is handled under C042/C044.

Second check: none (judge only)

Report a problem with this finding
Typo Section 5.1: "read and write from the a heap" (duplicated article) and "reflexive and transtive closure" (should be 'transitive').
  • p. 9 Section 5.1
    and write from the a heap
  • p. 9 Section 5.1
    reflexive and transtive closure

Judge's note: Both are visible on the page 9 image, left column.

Second check: none (judge only)

Report a problem with this finding
Typo Proof of Lemma 2: "This is case is proven by induction" (duplicated 'is'); Lemma 6 title: "(Faulty expresion are untypable)" (should be 'expressions').
  • p. 10 Proof of Lemma 2
    This is case is proven by induction
  • p. 10 Lemma 6 title
    (Faulty expresion are untypable)

Judge's note: Both are visible on the page 10 image.

Second check: none (judge only)

Report a problem with this finding
Typo Lemma 8 concludes "then e ∈ R(ϵ | τ)", with the arguments swapped relative to the definition R(τ | ϵ).
  • p. 11 Lemma 8
    then e ∈R(ϵ | τ).
  • p. 11 Lemma 8
    then e ∈R(ϵ | τ)

Judge's note: Page 11 image: R(τ | ϵ) is defined with the type first, and the strengthened lemma in the proof uses θe ∈ R(τ | ϵ). Only the Lemma 8 statement writes R(ϵ | τ). The intended meaning is clear, so this is a notational slip.

Second check: none (judge only)

Report a problem with this finding
Typo Right after Theorem 8 (Divergence): "The proof of this lemma is more complicated". The result it refers to is Theorem 8, not a lemma.
  • p. 11 After Theorem 8
    The proof of this lemma is more complicated

Judge's note: Page 11: the sentence comes directly after Theorem 8, and Lemmas 7 and 8 are introduced only later. It is a minor wording slip.

Second check: none (judge only)

Report a problem with this finding
Typo Related work: "asynchronous messages respectively.They report" has no space after the full stop.
  • p. 11 Related work
    asynchronous messages respectively.They report

Judge's note: The crop of page 11 shows 'respectively.They' with no space, so this is not an extraction artefact.

Second check: none (judge only)

Report a problem with this finding
Typo Reference [14]: "Proc. of the 2005 Symp.f on Trends in Functional Programming" has a stray 'f' after 'Symp.'.
  • p. 12 Reference [14]
    the 2005 Symp.f on Trends in Functional Programming
  • p. 12 Reference [14]
    2005 Symp.f on Trends

Judge's note: The page 12 image shows 'Symp.f'.

Second check: none (judge only)

Report a problem with this finding
Something wrong with this page, or a finding we missed?