| I don't think at all that "value semantics" without any mention of complexity is an end in and of itself. Any sensible programmer will either (a) intentionally decide that performance is minimally important at the moment (and hopefully later benchmark) or (b) concern themselves also with a semantic model which admits a cost model. Or, to unpack that last statement, simulate the machine instructions. I'm never one to argue that a single semantic model should rule them all. Things are wonderful then multiple semantic models can be used in tandem. But while I'd like to argue for the value of cost models, at this point I'd like to also fight for the value-based ones. Totality is important not because it has a practical effect. I vehemently agree with how you are arguing here to that end. It's instead important because in formal systems which ignore it you completely lose the notion of time. Inclusion of non-termination and handling for it admits that there is at least one way which we are absolutely unjustified in ignoring the passage of time: if we accidentally write something that literally will never finish. It is absolutely a shallow way of viewing things. You're absolutely right to say that practical termination is more important that black-and-white non-termination. But that's why it's brought up. It's a criticism of certain value-based models: you guys can't even talk about termination! And then it's also brought up because the naive way of adding it to a theorem prover makes your logic degenerate. |
Well, I'd argue that disallowing non-termination in your logic doesn't help in the least[1], so you may as well allow it. :) But we already discussed in the past (I think) the equivalence classes of value-based models, and I think we're in general agreement (more or less).
[1]: There are still infinitely many different ways to satisfy the type a -> a (loop once and return x, loop twice, etc. all of them total functions), and allowing (and equating) all of them loses the notion of time just as completely as disallowing just one of them, their limit (I see no justification for assuming a "discontinuity" at the limit).