What's the current consensus on 'semidet' in Prolog?

I’ve been learning Prolog and came across some interesting stuff about ‘semidet’. It seems there were two different ideas about what it means:

  1. Something that succeeds at most once
  2. Something that succeeds without leaving any choice points open

The second one includes the first, but not the other way around.

I’m wondering if the Prolog community has agreed on which one to use. Has anyone settled this?

Also, what about ‘det’? Is there a similar debate there? I’ve seen it described as:

  1. A computation that succeeds exactly once
  2. A computation that succeeds once and doesn’t leave choice points

Are these two different things? Should we use different names for them?

I’m really curious about how the Prolog community handles these terms. If anyone has info on current practices or discussions, I’d love to hear about it!

As someone who’s been working with Prolog for a while, I can share my perspective on the ‘semidet’ and ‘det’ debate. In my experience, the Prolog community tends to lean towards the more restrictive definitions for both terms. For ‘semidet’, the consensus seems to favor the ‘succeeds at most once’ interpretation. This aligns better with the determinism spectrum used in many Prolog implementations.

Regarding ‘det’, I’ve found that most practitioners use it to mean ‘succeeds exactly once without leaving choice points’. This stricter definition is more useful in practice, especially for optimization purposes.

It’s worth noting that these interpretations can vary slightly between different Prolog systems and academic circles. If you’re working on a specific project or system, it’s always best to check their documentation for the exact definitions they use.

I’ve been knee-deep in Prolog for years now, and I can tell you the ‘semidet’ and ‘det’ debate is still alive and kicking. In my projects, I’ve found it crucial to be explicit about what I mean when using these terms. Most of the time, I stick with the stricter definitions - ‘semidet’ for ‘succeeds at most once’ and ‘det’ for ‘succeeds exactly once without choice points’.

This approach has saved me countless headaches, especially when collaborating with others or maintaining large codebases. It’s just cleaner and leaves less room for misinterpretation. That said, I’ve seen some old-school Prolog gurus who prefer the looser definitions. They argue it gives more flexibility in certain scenarios.

Ultimately, I’d say the consensus is leaning towards the stricter definitions, but it’s not set in stone. My advice? Always clarify which definition you’re using in your project documentation. It’ll save you a lot of trouble down the line.

hey, i’ve seen this debate too. from what i gather, most folks lean towards the stricter definitions for both ‘semidet’ and ‘det’. it’s like, ‘semidet’ is usually taken as ‘succeeds at most once’ and ‘det’ as ‘succeeds once, no choice points’. but yeah, it can vary depending on who you ask or what system you’re using.