Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm sorry you find my contribution to the discussion annoying, but how should I feel if you just "agree" with me as a way to get me to stop arguing?

But I think your annoyance may be caused by misunderstanding my argument. For example:

>> If "executing Prolog code" is reasoning, then what? I say it isn't useful to call it reasoning (in the context of this thread) because it's too broad to be a helpful definition, basically everything is reasoning, and almost nothing is not.

Everything is not reasoning, nor is executing any code reasoning, but "executing Prolog code" is, because executing Prolog code is a special case of executing code. The reason for that is that Prolog's interpreter is an automated theorem prover, therefore executing Prolog code is carrying out a proof; in an entirely literal and practical sense, and not in any theoretical or abstract sense. And it is very hard to see how carrying out a proof automatically is "not reasoning".

I made this point in my first comment under yours, here:

https://news.ycombinator.com/item?id=45909159

The same clearly does not apply to Python, because its interpreter is not an automated theorem prover; it doesn't apply to javascript because its interpreter is not an automated theorem prover; it doesn't apply to C because its compiler is not an automated theorem prover; and so on, and so forth. Executing code in any of those languages is not reasoning, except in the most abstract and, well, academic, sense, e.g. in the context of the Curry-Howard correspondence. But not in the practical, down-to-brass-tacks way it is in Prolog. Calling what Prolog does reasoning is not a definition of reasoning that's too broad to be useful, as you say. On the contrary, it's a very precise definition of reasoning that applies to Prolog but not to most other programming languages.

I think you misunderstand this argument and as a consequence fail to engage with it and then dismiss it as irrelevant because you misunderstand it. I think you should really try to understand it, because it's obvious you have some strong views on Prolog which are not correct, and you might have the chance to correct them.

I absolutely have an interest in any claim that generating Prolog code with LLMs will fix LLMs' inability to reason. Prolog is a major part of my programming work and research.



> "how should I feel if you just "agree" with me as a way to get me to stop arguing?"

Triumphant? Victorious? magnificent, successful, proud, powerful, insert any adjective which applies to a situation where someone wanted something, and then got it.

> "And it is very hard to see how carrying out a proof automatically is "not reasoning. The same clearly does not apply to Python, because its interpreter is not an automated theorem prover; it doesn't apply to javascript because its interpreter is not an automated theorem prover"

And that does not stop Python or Javascript from being used to find solutions to e.g. an Einstein Puzzle, something a human might call "a reasoning problem". This means Prolog 'doing reasoning' must not be the thing which solves the 'reasoning problem', something else must be doing that because non-reasoning systems can do it too.

If Prolog 'doing reasoning' meant it could solve 'reasoning problems' that no other programming language could, that would be a strong reason to use Prolog, but that is not something you or the other 'reasoning' commenters have claimed or offered examples of. Clearly the word 'reasoning' has different definitions in the different sentences and that is important here because I am responding to one and youall on the other.

If 'doing reasoning' is not the thing which makes it useful for 'solving reasoning problems' - if that neither compels one to use Prolog when working to 'solve a reasoning problem', nor convinces one to avoid other languages - if the definition does not influence one's decision in any way - it's very hard to see how it is the relevant version of 'reasoning' to focus on, and what point is trying to be made by this insistence on focusing on it, except academic one-upping.


>> And that does not stop Python or Javascript from being used to find solutions to e.g. an Einstein Puzzle, something a human might call "a reasoning problem". This means Prolog 'doing reasoning' must not be the thing which solves the 'reasoning problem', something else must be doing that because non-reasoning systems can do it too.

To solve an Einstein puzzle in Python et al. you have to code 1) a definition of the problem and 2) a solution that you come up with. In Prolog you only have to code a definition of the problem and then executing the definition gets to the solution.

Other languages indeed can solve problems that Prolog can, but a human programmer must code the solution, while Prolog comes built-in with a universal problem solver, SLD-Resolution, that can solve any problem a human programmer can pose to it.

I looked around for an example of this with real code and found this SO thread on programmatically solving a Zebra puzzle (same as the Einstein puzzle):

https://stackoverflow.com/questions/318888/solving-who-owns-...

There are a few proposed solutions in Python, and in Prolog. The Python solutions pull-in constraint solving libraries, encode the problem constraints and then use for-loops to iterate over the set of solutions that respect the constraints.

The Prolog solutions do not pull in any libraries and do not iterate. They declare the constraints of the problem and then execute the constraints, letting the Prolog interpreter find a solution that satisfies them.

So the difference is that Prolog can solve the problem on its own, while Python can solve it only if you hand-code the solution, which includes importing a constraint solver. Constraint solving is of course a form of reasoning, and that's how you can get Python to do reasoning: by implementing a reasoning algorithm. In Prolog you don't need to do that, because SLD-Resolution is a universal problem solver that can be applied to constraint problems, like any other problem. This is not an academic matter, as you insist that it is; it is a practical matter, of knowing how to code a universal problem solver and getting it to run on real-world hardware.

I say that solving constraints is a form of reasoning. You won't find anyone to disagree with this in the CS and symbolic AI community. While you also won't find an agreed-upon, formal definition of "reasoning", we don't need one because we've been studying reasoning since the time of Aristotle and his "Syllogisms" (literally, "Reasonings" in Greek). In the same way you won't really find an agreed-upon definition of "mathematics", but we don't need one because we've been studying maths since the time of the ancient Babylonians (at least; my memory is hazy).

You argue that what Prolog does isn't reasoning, but that's a very niche view. Not that this means you're wrong, but one reason I insist with this discussion is that your view is so unorthodox. If you're right, I'd like to know, so I can understand where I was wrong. But so far I still only see a misunderstanding of Prolog and a continued unwillingness to engage with the argument that Prolog does reasoning because it has an automated theorem prover as an interpreter.

Note that the Prolog solutions in the SO thread are a bit over-engineered for my tastes. The one in the link below is much more straightforward although it's for a simplified version of the problem. Still, it shows what I mean that you only need to define the problem and then the interpreter figures out how to solve it.

https://www.101computing.net/solving-a-zebra-puzzle-using-pr...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: