On 11/11/2012 09:40 PM, Nick Sabalausky wrote:
On Sun, 11 Nov 2012 19:37:45 +0100
Timon Gehr <timon.g...@gmx.ch> wrote:

On 11/11/2012 03:45 PM, Peter Alexander wrote:

Collatz sequence.

struct Collatz(int n)
{
      enum next = n % 2 == 0 ? n / 2 : 3 * n + 1;
      Collatz!(next)* foo;
}

It's an unsolved problem in mathematics whether or not this
instantiates an infinite number of templates.

The possible inputs are finite, so the property is decidable.

Technically, yea, but I think upwards of ~4 billion template
instantiations is quite unrealistic, to the point of being effectively
undecidable.


Undecidability has a precise definition in theoretical computer science. It means that there is no algorithm that implements the given predicate. It is a lot stronger than impracticality of implementation.

I claim that the following, very simple algorithm decides whether or not the template above terminates instantiation without errors with the given parameter:

bool collatzTerminates(int n){ return true; }

Therefore, a conforming D compiler implementation could evaluate the template above lazily.

Reply via email to