Web Prolog and the programmable Prolog Web

Dear All,

I joined this community group some months ago, but have been lurking
up till now. With this message, and in the hope that it may lead to a
discussion, I'd like to inform you what I'm working on.

It's an approach to AI and KR on the Web which is based on a mixture
of the Prolog programming language, the Erlang programming language,
and various standard web technologies. A lot of it is based on Prolog
- a programming language which I guess at least some of you are at
least somewhat familiar with. I'd like to "webize" Prolog, and
"rebrand" it as a web logic programming language. Here are two
"elevator pitches" that might whet your appetite:

Web Prolog - the elevator pitch: Imagine a dialect of Prolog with
actors and mailboxes and send and receive - all the means necessary
for powerful concurrent and distributed programming. Alternatively,
think of it as a dialect of Erlang with logic variables, backtracking
search and a built-in database of facts and rules - the means for
logic programming, knowledge representation and reasoning. Also, think
of it as a web logic programming language. This is what Web Prolog is
all about.

The Prolog Web - the elevator pitch: Imagine the Web wrapped in
Prolog, running on top of a distributed architecture comprising a
network of nodes supporting HTTP and WebSocket APIs, as well as web
formats such as JSON. Think of it as a high-level Web, capable of
serving answers to queries - answers that follow from what the Web
"knows". Moreover, imagine it being programmable, allowing Web Prolog
source code to flow in either direction, from the client to the node
or from the node to the client. This is what the Prolog Web is all
about.

If you've read this far, you probably want some more flesh on these
bones, and perhaps a proof-of-concept implementation to play with. So
here, in the order that you should probably look at them, is a list of
relevant material:

1. In mid August this year, I went to ICFP in Berlin and presented a
paper in the co-located Erlang'19 workshop. Here's the title and an
abstract:

**Intro to Web Prolog for Erlangers**

We describe a programming language called *Web Prolog*. We think of it
as a *web programming language*, or, more specifically, as a web
*logic* programming language. The language is based on Prolog, with a
good pinch of Erlang added. We stay close to traditional Prolog, so
close that the vast majority of programs in Prolog textbooks will run
without modification. Towards Erlang we are less faithful, picking
only features we regard as useful in a web programming language, e.g.
features that support concurrency, distribution and inter-process
communication. In particular, we borrow features that make Erlang into
an *actor programming language*, and on top of these we define the
concept of a *pengine* -- a programming abstraction in the form of a
special kind of actor which closely mirrors the behaviour of a Prolog
top-level. On top of the pengine abstraction we develop a notion of
*non-deterministic RPC* and the concept of *the Prolog Web*.

The paper is here: https://gup.ub.gu.se/file/207827

2. A first draft of a manual covering the most interesting proposed
additions to the ISO Prolog standard:
https://raw.githubusercontent.com/Web-Prolog/swi-web-prolog/master/book/web-prolog-predicate-api.pdf

3. Should you want to know more, there is a github repo from which a
proof-of-concept implementation can be downloaded and taken for a
trail run - and there's a comprehensive tutorial too! The repo is
here: https://github.com/Web-Prolog/swi-web-prolog

4. A longer (> 170 pages) manuscript “Web Prolog and the programmable
Prolog Web”: https://github.com/Web-Prolog/swi-web-prolog/raw/master/book/web-prolog.pdf


The plan is to set up a separate W3C Community Group devoted to this
idea in a not-too-distant future. Perhaps a language such as Web
Prolog deserves to be standardised by the W3C?

What do you think? Questions, comments, etc. are most welcome!

Best regards,
Torbjörn Lager

Received on Thursday, 19 September 2019 12:23:30 UTC