@@ -53,12 +53,12 @@ _Preliminary_: We presented two different applications of our system: reconstruc

**ReviewersAC** _The implementation section is ... only for a simplified version of the presented system ... unclear in what the evaluation of the implementation intended to demonstrate._

We had to struggle with space constraints (probably the reviewers noticed it).

We had to struggle with space constraints (probably the reviewers noticed it) so part of the implementation is presented only in the appendix and the explanation in the text is quite terse.

We omitted from the implementation what is interesting only from a theoretical viewpoint but not in practice, that is, inferring negated arrow types for functions, but nothing else. This is exactly the same omission made by the language CDuce w.r.t. the JACM paper.

What the implementation wants to demonstrate is that our theory of occurrence typing allows us to infer meaningful intersection types for unannotated functions: this is something nobody did before in our ken. This is probably due to the fact that inference for intersection types is undecidable and that there does not exist a principal type: the most precise type for a function $f$ is the infinite intersection $\bigwedge_{x\in dom(f)} x \to f(x)$. Since such a type cannot be expressed—let alone deduced—, we infer instead an approximation of it, using the type-cases on the parameters (and the applications of other discriminating functions) to drive how to partition the domain of the function, so as to get a meaningful and useful approximation.

Code 10 in Table 1 demonstrates that our types also detect dead code that pass undetected by the flow analyses implemented by TypeScript and Flow.

Code 10 in Table 1 demonstrates that our types also detect dead code that passes undetected by the flow analyses implemented by TypeScript and Flow.