I think Prolog and logic programming will have a second renaissance. I think at the very least a general artificial intelligence would require a logical inference engine similar to Prolog.
I think it's actually the complete opposite. The current biomimetism direction being privileged by the modern A.I. trends is most likely the correct way to achieve "True" A.I.
However, Inference-based A.I. is actually needed to properly tackle many of the business problems that are being thrown at ML systems today. Explainability and bias reduction can probably only be be taken so far with the current approaches, and I suspect that this "so far" is not far enough for many tasks. It's definitely the case from a practical standpoint today.
So inference-based A.I. is due for a comeback indeed, but I'd say AGI is looking like one of the main areas where the current techniques might work.
I'm pretty sure reasoning is important towards that goal, but how that is achieved is much less clear. Perhaps some probabilistic additions at the least.
I doubt it. Prolog is inherently based on DFS that usually leads to inefficient algorithms. Cut operator then turns any source into an unreadable mess.
Our pay software at work needs a Prolog engine (SWI). I think it's exactly where it shines : a complex logic with a lot of small rules that would be a nightmare to implement and maintain with a if / else logic.
I implemented something similar to that at a payments company a while back, but not with prolog because I couldn't get buy-in. I wrote a rules engine expressed as SQL tables, and it was absolutely better than if-else or switch. It let us delete thousands of lines of code and also slap on a UI so that the people managing the payments rules could make changes themselves. Highly recommend.
At this point, I feel like it is verging into lost knowledge territory, but that use case is almost the exact use case for the Rete Algorithm. As long as your rules fit in memory and are not recursively applied, rule application is an O(1) operation.
There was a minor hype cycle with SMT solvers in 2019.
For a while I was extremely fascinated by SAT as an encoding for hard problems that somehow had heuristic fast solvers; particularly by SATPLAN, the blocks world, etc.
But there's an useful contrast with Lisp, the other thing everyone within a radius of HN would like to emerge as winner. Lisp is essentially a syntax concept. It isn't particularly opinionated about problems -- on the opposite, it's indefinitely extensible to accomodate nearly everything. So we have Clojure and Hy (a Lisp that superficially imitates Clojure but compiles to the Python AST) and people doing scikit-learn ML on Lisp.
Logic programming, on the other hand, wants problems to be formulated on its terms. It needs the world itself to change to "win big". Of course logic programming problems aren't going to disappear, as sparse linear algebra programs won't. But this isn't a paradigm, it's an application.
Prolog-style logic programming is very different from SAT, SMT and Answer Set Programming in this regard. Prolog has the same features that you describe in Lisp. It's homoiconic, infinitely malleable, meta-level programming is trivial, etc. I recommend having a look at:
Seems like it had some traction like 10 years ago.
I like the idea of controlling backtracking, but then when I tried it I thought it got a bit verbose w/all the mode decls. I should take a look and see if there's been any changes recently.
I did some work with SWI-Prolog. It is useful when the problem can be effectively translated into Prolog's preferred form of terms and rules. But the solver mechanism only solves a subset of logical inference needs. Prolog's use of logic in AI should not be conflated with the AI/ML systems which use networks of floating point operations, i.e. not boolean operations.
As always, best to choose the tool / language that best suits the problem.
Kind of offtopic, but does anyone know a good resource around implementing a simple prolog/similar language? My previous attempts at learning logic programming have failed, and it just _feels_ like a thing that becomes clear after you've seen how it works under the hood.
Along with @btwillard's suggestion, check out The Reasoned Schemer, it goes about explaining miniKanren and gives enough information to implement it yourself. It's a fantastic exercise.
Is this related to Datalog also? I've watched a few presentations by Rich Hickey (creator of the Clojure programming language) and I feel like he often name-drops Datalog as a great tool.
To the degree that it counts as 'production' Prolog, DFS-Tools -- a toolkit for Distributional Formal Semantics -- is actively used in a number of ongoing scientific projects:
https://github.com/hbrouwer/dfs-tools
Any system that uses Datalog uses a subset of Prolog. Loosely, this would include systems using Clojure's Datalog. To the degree the goal is logic programming, the looseness is more appropriate. YMMV.
[+] [-] pjmlp|5 years ago|reply
http://smallcultfollowing.com/babysteps/blog/2018/04/27/an-a...
[+] [-] TheUndead96|5 years ago|reply
[+] [-] hcarvalhoalves|5 years ago|reply
I think it will come back in programming tools / program synthesis though. There are many use cases for it and not enough people using in production.
[+] [-] Chabsff|5 years ago|reply
However, Inference-based A.I. is actually needed to properly tackle many of the business problems that are being thrown at ML systems today. Explainability and bias reduction can probably only be be taken so far with the current approaches, and I suspect that this "so far" is not far enough for many tasks. It's definitely the case from a practical standpoint today.
So inference-based A.I. is due for a comeback indeed, but I'd say AGI is looking like one of the main areas where the current techniques might work.
[+] [-] thom|5 years ago|reply
[+] [-] ragebol|5 years ago|reply
[+] [-] bitL|5 years ago|reply
[+] [-] jmnicolas|5 years ago|reply
[+] [-] ianamartin|5 years ago|reply
[+] [-] darksaints|5 years ago|reply
https://en.wikipedia.org/wiki/Rete_algorithm
[+] [-] thanatropism|5 years ago|reply
For a while I was extremely fascinated by SAT as an encoding for hard problems that somehow had heuristic fast solvers; particularly by SATPLAN, the blocks world, etc.
But there's an useful contrast with Lisp, the other thing everyone within a radius of HN would like to emerge as winner. Lisp is essentially a syntax concept. It isn't particularly opinionated about problems -- on the opposite, it's indefinitely extensible to accomodate nearly everything. So we have Clojure and Hy (a Lisp that superficially imitates Clojure but compiles to the Python AST) and people doing scikit-learn ML on Lisp.
Logic programming, on the other hand, wants problems to be formulated on its terms. It needs the world itself to change to "win big". Of course logic programming problems aren't going to disappear, as sparse linear algebra programs won't. But this isn't a paradigm, it's an application.
[+] [-] felixyz|5 years ago|reply
https://www.metalevel.at/acomip/ (A Couple of Meta-interpreters in Prolog)
and
https://github.com/triska/lisprolog
[+] [-] PedroCandeias|5 years ago|reply
[+] [-] tluyben2|5 years ago|reply
[+] [-] thelazydogsback|5 years ago|reply
[+] [-] CyberFonic|5 years ago|reply
As always, best to choose the tool / language that best suits the problem.
[+] [-] ghufran_syed|5 years ago|reply
[+] [-] q3k|5 years ago|reply
https://gerrit-review.googlesource.com/Documentation/prolog-...
[+] [-] badtuple|5 years ago|reply
[+] [-] carapace|5 years ago|reply
Slides: https://software.imdea.org/Conferences/CICLOPS2017/files/tar...
Paper: https://drops.dagstuhl.de/opus/volltexte/2018/8453/pdf/OASIc...
- - - -
The canonical method is teh WAM: https://en.wikipedia.org/wiki/Warren_Abstract_Machine
[+] [-] btwillard|5 years ago|reply
[+] [-] Jtsummers|5 years ago|reply
[+] [-] soedirgo|5 years ago|reply
https://dev.to/arcanis/introducing-yarn-2-4eh1#workspace-con...
[+] [-] carapace|5 years ago|reply
(Reminds me I've got to get to work on it! Anybody ping me if you want to help.)
[+] [-] The_rationalist|5 years ago|reply
There was a (unlikely to be merged at least in its current form) proposal for Kotlin -> https://github.com/Kotlin/KEEP/pull/199/files
Maybe LINQ from .NET could be included
There is also chalk from Rust https://github.com/rust-lang/chalk
[+] [-] ahelwer|5 years ago|reply
[+] [-] paloaltokid|5 years ago|reply
[+] [-] carapace|5 years ago|reply
https://en.wikipedia.org/wiki/Datalog
[+] [-] tmaly|5 years ago|reply
I think if they came out with a version in hardware like they use to have lisp machines, it would have much better performance.
[+] [-] rjsw|5 years ago|reply
[1] https://en.wikipedia.org/wiki/Warren_Abstract_Machine
[+] [-] felixyz|5 years ago|reply
[+] [-] segmondy|5 years ago|reply
[+] [-] _neural_|5 years ago|reply
[+] [-] unknown|5 years ago|reply
[deleted]
[+] [-] frompdx|5 years ago|reply
[+] [-] brudgers|5 years ago|reply