Saying "latently-typed language" is making a category mistake

Patricia Shanahan pats at acm.org
Fri Jun 23 17:08:39 EDT 2006


Chris Smith wrote:
> Patricia Shanahan <pats at acm.org> wrote:
>> Vesa Karvonen wrote:
>> ...
>>> An example of a form of informal reasoning that (practically) every
>>> programmer does daily is termination analysis.  There are type systems
>>> that guarantee termination, but I think that is fair to say that it is not
>>> yet understood how to make a practical general purpose language, whose
>>> type system would guarantee termination (or at least I'm not aware of such
>>> a language).  It should also be clear that termination analysis need not
>>> be done informally.  Given a program, it may be possible to formally prove
>>> that it terminates.
>> To make the halting problem decidable one would have to do one of two
>> things: Depend on memory size limits, or have a language that really is
>> less expressive, at a very deep level, than any of the languages
>> mentioned in the newsgroups header for this message.
> 
> Patricia, perhaps I'm misunderstanding you here.  To make the halting 
> problem decidable is quite a different thing than to say "given a 
> program, I may be able to prove that it terminates" (so long as you also 
> acknowledge the implicit other possibility: I also may not be able to 
> prove it in any finite bounded amount of time, even if it does 
> terminate!)
> 
> The fact that the halting problem is undecidable is not a sufficient 
> reason to reject the kind of analysis that is performed by programmers 
> to convince themselves that their programs are guaranteed to terminate.  
> Indeed, proofs that algorithms are guaranteed to terminate even in 
> pathological cases are quite common.  Indeed, every assignment of a 
> worst-case time bound to an algorithm is also a proof of termination.
> 
> This is, of course, a very good reason to reject the idea that the 
> static type system for any Turing-complete language could ever perform 
> this same kind analysis.
> 

Of course, we can, and should, prefer programs we can prove terminate.
Languages can make it easier or harder to write provably terminating
programs.

Patricia



More information about the Python-list mailing list