I will pick a rather large nit: “for example a web server definitely doesn’t halt” is true, but for this to be surprising or interesting or a problem for Turing reasons, it just means you are modelling it incorrectly. Agda solves this using corecursion, and the idea is to use a data type that represents a computation that provably never halts. Think infinite streams, defined as “an infinite stream is a pair, $S_0 = (x, S_1)$, where $S_1$ is an infinite stream”. This data type will provably keep producing values forever (it is “productive”), and that’s what you want for a web server.
I think a better way of putting my point is, can we express the particular behaviors I’m interested in proving, and only have the compiler care about those, rather than checking everything it might be interested in.
I will pick a rather large nit: “for example a web server definitely doesn’t halt” is true, but for this to be surprising or interesting or a problem for Turing reasons, it just means you are modelling it incorrectly. Agda solves this using corecursion, and the idea is to use a data type that represents a computation that provably never halts. Think infinite streams, defined as “an infinite stream is a pair, $S_0 = (x, S_1)$, where $S_1$ is an infinite stream”. This data type will provably keep producing values forever (it is “productive”), and that’s what you want for a web server.
That’s fair.
I think a better way of putting my point is, can we express the particular behaviors I’m interested in proving, and only have the compiler care about those, rather than checking everything it might be interested in.