> Languages like Coq require you to prove a function halts before it will compile.
Well, that's incredibly stupid. That means you can't write, for example, a web server in Coq unless you intentionally introduce undesirable behavior to satisfy the compiler.
> because you can't prove all functions halt it's a waste of time proving any functions halt
No. That's obviously a straw man. Can you please consider the possibility that I might not be a complete idiot?
My argument is: because the halting problem is undecidable, there are an infinite number of properties of programs that are also undecidable. So there are only two possibilities:
1. None of the infinite undecidable properties of programs are things we will ever care about or
2. There are properties of interest that cannot be decided by static typing
Which of those is the case is an empirical question but I submit that #2 is much more likely to be the case. Therefore, static typing cannot obviate the need to be prepared for your program to exhibit unexpected behavior at run time except in the most trivial cases.