Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.prolog > #14461 > unrolled thread
| Started by | Mild Shock <janburse@fastmail.fm> |
|---|---|
| First post | 2025-03-03 14:18 +0100 |
| Last post | 2026-07-19 16:21 +0200 |
| Articles | 20 on this page of 33 — 1 participant |
Back to article view | Back to comp.lang.prolog
Prolog Education Group clueless about the AI Boom? Mild Shock <janburse@fastmail.fm> - 2025-03-03 14:18 +0100
Re: Prolog Education Group clueless about the AI Boom? Mild Shock <janburse@fastmail.fm> - 2025-03-03 14:20 +0100
Salary Templates if you "Grok" ML / AI [PhDs Negotiate Salaries] (Re: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-03-03 18:03 +0100
ILP is still dreaming of higher order (Was: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-03-07 23:58 +0100
Re: ILP is still dreaming of higher order (Was: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-03-08 00:00 +0100
FYI: Philip Zucker’s Co-Egraphs (Was: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-08-12 18:37 +0200
Using Hopcroft & Karp (HK) everywhere (Was: FYI: Philip Zucker’s Co-Egraphs) Mild Shock <janburse@fastmail.fm> - 2025-08-14 12:31 +0200
Confusing "decidable problem" and "complete algorithm" (Was: Using Hopcroft & Karp (HK) everywhere) Mild Shock <janburse@fastmail.fm> - 2025-08-14 14:31 +0200
DFA algorithms in a Python library (Re: Confusing "decidable problem" and "complete algorithm") Mild Shock <janburse@fastmail.fm> - 2025-08-14 15:14 +0200
Static Variable Shunting in Dogelog Player (Was: Using Hopcroft & Karp (HK) everywhere) Mild Shock <janburse@fastmail.fm> - 2025-08-16 11:22 +0200
Dynamic Variable Shunting in WebPL (Was: Static Variable Shunting in Dogelog Player) Mild Shock <janburse@fastmail.fm> - 2025-08-16 11:34 +0200
SWI-Prolog is still the OG of GC (Was: Dynamic Variable Shunting in WebPL) Mild Shock <janburse@fastmail.fm> - 2025-08-16 11:46 +0200
Cyclic Term Unification is Accounted (Was: SWI-Prolog is still the OG of GC) Mild Shock <janburse@fastmail.fm> - 2025-08-16 11:59 +0200
WebPL is an interesting project (Was: SWI-Prolog is still the OG of GC) Mild Shock <janburse@fastmail.fm> - 2025-08-17 18:00 +0200
Head to Head Race with Scryer Prolog (Was: WebPL is an interesting project) Mild Shock <janburse@fastmail.fm> - 2025-08-17 18:24 +0200
Does Variable Age make Sense? [Prolog Unification] (Was: Head to Head Race with Scryer Prolog) Mild Shock <janburse@fastmail.fm> - 2026-02-10 12:05 +0100
Type systems for non-deterministic concurrency [Amir Pnueli] (Was: Does Variable Age make Sense? [Prolog Unification]) Mild Shock <janburse@fastmail.fm> - 2026-07-20 12:20 +0200
Robin Milners fickle gives non-determinism in practice [Parallel π-WAM] (Was: Type systems for non-deterministic concurrency [Amir Pnueli]) Mild Shock <janburse@fastmail.fm> - 2026-07-20 12:34 +0200
Sleepy Joe and the Poor South (Local AI Emacs Mode) (Re: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-11-12 12:59 +0100
Beyond Sleepy Joe around the World (Was: Sleepy Joe and the Poor South (Local AI Emacs Mode)) Mild Shock <janburse@fastmail.fm> - 2025-11-12 13:12 +0100
GENESIS MISSION: Loosing it over Deep Pokets [Business wants A-Life] (Was: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2025-11-26 18:07 +0100
Vanilla Prolog: semi-decidable =\= decidable (Re: Prolog Education Group clueless about the AI Boom?) Mild Shock <janburse@fastmail.fm> - 2026-03-14 20:40 +0100
Its on the Internet, so it must be true? (Was: Vanilla Prolog: semi-decidable =\= decidable) Mild Shock <janburse@fastmail.fm> - 2026-03-16 11:01 +0100
Hack + Computed Goto = Leightweigh C_OR (Was: Vanilla Prolog: semi-decidable =\= decidable) Mild Shock <janburse@fastmail.fm> - 2026-07-04 16:58 +0200
The stack and choice points as an after match (Re: Hack + Computed Goto = Leightweigh C_OR) Mild Shock <janburse@fastmail.fm> - 2026-07-04 17:07 +0200
Introduction to AI Accelerator Prolog [π-WAM of Dogelog] (Was: The stack and choice points as an after match) Mild Shock <janburse@fastmail.fm> - 2026-07-17 10:49 +0200
Not praying to the god of lambda calculus [π beats α] (Was: Introduction to AI Accelerator Prolog [π-WAM of Dogelog]) Mild Shock <janburse@fastmail.fm> - 2026-07-17 11:13 +0200
pi in pi-WAM refers to pi-calculus (Re: Introduction to AI Accelerator Prolog [π-WAM of Dogelog]) Mild Shock <janburse@fastmail.fm> - 2026-07-18 01:22 +0200
Milners fickle() in pi-WAM [For fun and profit] (Re: pi in pi-WAM refers to pi-calculus (Re: Introduction to AI Accelerator Prolog [π-WAM of Dogelog]) Mild Shock <janburse@fastmail.fm> - 2026-07-18 01:49 +0200
Robin Milners pi calculus is typeless (Re: Milners fickle() in pi-WAM [For fun and profit]) Mild Shock <janburse@fastmail.fm> - 2026-07-18 11:00 +0200
Can the Church Turing hypotheses be refuted? [TLo @ FOM] (Re: Robin Milners pi calculus is typeless) Mild Shock <janburse@fastmail.fm> - 2026-07-18 11:10 +0200
Accelerate Lean! From Theorem 3.11 to Corollary 3.12 [ZMC] (Was: Introduction to AI Accelerator Prolog [π-WAM of Dogelog]) Mild Shock <janburse@fastmail.fm> - 2026-07-19 16:06 +0200
ANN: Library Pegg, for π-E-graphs [Not EXWM] (Was: Accelerate Lean! From Theorem 3.11 to Corollary 3.12 [ZMC]) Mild Shock <janburse@fastmail.fm> - 2026-07-19 16:21 +0200
Page 1 of 2 [1] 2 Next page →
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-03-03 14:18 +0100 |
| Subject | Prolog Education Group clueless about the AI Boom? |
| Message-ID | <vq4a7g$10843$1@solani.org> |
Concerning this boring nonsense: https://book.simply-logical.space/src/text/2_part_ii/5.3.html# Funny idea that anybody would be interested just now in the year 2025 in things like teaching breadth first search versus depth first search, or even be “mystified” by such stuff. Its extremly trivial stuff: Insert your favorite tree traversal pictures here. Its even not artificial intelligence neither has anything to do with mathematical logic, rather belongs to computer science and discrete mathematics which you have in 1st year university courses, making it moot to call it “simply logical”. It reminds me of the idea of teaching how wax candles work to dumb down students, when just light bulbs have been invented. If this is the outcome of the Prolog Education Group 2.0, then good night.
[toc] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-03-03 14:20 +0100 |
| Message-ID | <vq4aae$10843$2@solani.org> |
| In reply to | #14461 |
My suspicion, teaching WalkSAT as an altermative to DPLL, and show its limitations would maybe give more bang. We are currently entering an era that already started in the end of 1990 when some new probabilistic complexity classes were defined. Many machine learning techniques have also such an aspect, and it will only get worse with Quantum Computing. Having a grip on these things helps also distinguishing when a AI acts by chance, or whether it diverts from chance and shows some excelling adaptation to the problem domain at hand. Like here, anybody an idea what they mean by “above chance”? Intuitive physics understanding emerges from self-supervised pretraining on natural videos https://arxiv.org/abs/2502.11831 Mild Shock schrieb: > Concerning this boring nonsense: > > https://book.simply-logical.space/src/text/2_part_ii/5.3.html# > > Funny idea that anybody would be interested just now in > the year 2025 in things like teaching breadth first > search versus depth first search, or even be “mystified” > by such stuff. Its extremly trivial stuff: > > Insert your favorite tree traversal pictures here. > > Its even not artificial intelligence neither has anything > to do with mathematical logic, rather belongs to computer > science and discrete mathematics which you have in > 1st year university > > courses, making it moot to call it “simply logical”. It > reminds me of the idea of teaching how wax candles work > to dumb down students, when just light bulbs have been > invented. If this is the outcome > > of the Prolog Education Group 2.0, then good night. >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-03-03 18:03 +0100 |
| Subject | Salary Templates if you "Grok" ML / AI [PhDs Negotiate Salaries] (Re: Prolog Education Group clueless about the AI Boom?) |
| Message-ID | <vq4nce$109t7$1@solani.org> |
| In reply to | #14462 |
Hi,
Salary Templates if you "Grok" ML / AI [PhDs negotiate salaries]:
Tendency to go towards 500'000.- USD per year
https://x.com/chiefaioffice/status/1734329284821672270
But I guess you need to have the talent to train a ChatGPT.
Still very rare, I had interesting discussions on the internet.
LoL
Bye
Final Annual Initial Negotiated
Company Compensation Compensation Delta
OpenAl $865K $665K 30%
Anthropic $855K $855K 0%
Inflection* $825K NA NA
Tesla $780K $702K 11%
Amazon $719K $520K 38%
Google Brain $695K $590K 17%
TikTok $605K $430K 40%
FAIR $556K $480K 15%
Google Research $549K $310K 77%
Waymo $530K $385K 37%
Deepmind $515K $452K 13%
Bloomberg Al $460K $318K 44%
Apple $450K $337K 33%
Microsoft Research $449K $270K 66%
Salesforce Research $441K $355K 24%
Toyota Research $410K $370K 10%
Twitter $409K $359K 13%
NVIDIA $390K $340K 14%
IBM Research $377K $262K 43%
Allen Institute $350K $310K 12%
Samsung Research $285K $240K 18%
Hugging Face $238K $185K 27%
Mild Shock schrieb:
>
> My suspicion, teaching WalkSAT as an altermative
> to DPLL, and show its limitations would maybe give
> more bang. We are currently entering an era that
> already started in the end of 1990
>
> when some new probabilistic complexity classes
> were defined. Many machine learning techniques
> have also such an aspect, and it will only get
> worse with Quantum Computing. Having
>
> a grip on these things helps also distinguishing
> when a AI acts by chance, or whether it diverts from
> chance and shows some excelling adaptation to the
> problem domain at hand. Like here,
>
> anybody an idea what they mean by “above chance”?
>
> Intuitive physics understanding emerges from
> self-supervised pretraining on natural videos
> https://arxiv.org/abs/2502.11831
>
> Mild Shock schrieb:
>> Concerning this boring nonsense:
>>
>> https://book.simply-logical.space/src/text/2_part_ii/5.3.html#
>>
>> Funny idea that anybody would be interested just now in
>> the year 2025 in things like teaching breadth first
>> search versus depth first search, or even be “mystified”
>> by such stuff. Its extremly trivial stuff:
>>
>> Insert your favorite tree traversal pictures here.
>>
>> Its even not artificial intelligence neither has anything
>> to do with mathematical logic, rather belongs to computer
>> science and discrete mathematics which you have in
>> 1st year university
>>
>> courses, making it moot to call it “simply logical”. It
>> reminds me of the idea of teaching how wax candles work
>> to dumb down students, when just light bulbs have been
>> invented. If this is the outcome
>>
>> of the Prolog Education Group 2.0, then good night.
>>
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-03-07 23:58 +0100 |
| Subject | ILP is still dreaming of higher order (Was: Prolog Education Group clueless about the AI Boom?) |
| Message-ID | <vqftm2$16pcl$1@solani.org> |
| In reply to | #14461 |
The first deep learning breakthrough was AlexNet by Alex Krizhevsky, Ilya Sutskever and Geoffrey Hinton: > In 2011, Geoffrey Hinton started reaching out > to colleagues about “What do I have to do to > convince you that neural networks are the future?” > https://en.wikipedia.org/wiki/AlexNet Meanwhile ILP is still dreaming of higher order logic: > We pull it out of thin air. And the job that does > is, indeed, that it breaks up relations into > sub-relations or sub-routines, if you prefer. You mean this here: > Background knowledge (Second Order) > ----------------------------------- > (Chain) ∃.P,Q,R ∀.x,y,z: P(x,y)← Q(x,z),R(z,y) > > https://github.com/stassa/vanilla/tree/master/lib/poker Thats too general, it doesn’t adress analogical reasoning. Mild Shock schrieb: > Concerning this boring nonsense: > > https://book.simply-logical.space/src/text/2_part_ii/5.3.html# > > Funny idea that anybody would be interested just now in > the year 2025 in things like teaching breadth first > search versus depth first search, or even be “mystified” > by such stuff. Its extremly trivial stuff: > > Insert your favorite tree traversal pictures here. > > Its even not artificial intelligence neither has anything > to do with mathematical logic, rather belongs to computer > science and discrete mathematics which you have in > 1st year university > > courses, making it moot to call it “simply logical”. It > reminds me of the idea of teaching how wax candles work > to dumb down students, when just light bulbs have been > invented. If this is the outcome > > of the Prolog Education Group 2.0, then good night. >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-03-08 00:00 +0100 |
| Subject | Re: ILP is still dreaming of higher order (Was: Prolog Education Group clueless about the AI Boom?) |
| Message-ID | <vqftqi$16pcl$2@solani.org> |
| In reply to | #14467 |
You are probably aiming at the decomposition
of autoencoder or transformer into an encoder
and decoder. Making the split up automatically
from a more general ILP framework.
> The H is the bottleneck on purpose:
>
> relation(X, Y) :- encoder(X, H), decoder(H, Y).
Ok you missed the point. Lets assume for the
moment the H on purpose is not something that
happens accidential through a more general
learning algorithm. But it is a design feature
of how we want to learn. Can we incorporate
analogical reasoning, the parallelogram?
Yeah, relatively simple, just add more input
and output layers. The new parameter K indicates
how the representation was chosen:
relation(X, Y) :-
similar(X, A, K),
encoder(A, H),
decoder(H, B),
similar(Y, B, K).
Its again an autoencoder respectively transformer,
with a bigger latent space. Prominent additional input
layers that work here are convolutional neural networks.
Things like max pooling or self-attention pooling:
relation(X, Y) :-
encoder2(X, J),
decoder2(J, Y).
encoder2(X, [K|H]) :-
similar(X, A, K),
encoder(A, H),
decoder2([K|H], Y) :-
decoder(H, B),
similar(Y, B, K).
You can learn the decoder2/2 as a whole in your
autoencoder and transformer learning framework,
provided it can deal with many layers, i.e.
if it has deep learning techniques.
Mild Shock schrieb:
> The first deep learning breakthrough was
> AlexNet by Alex Krizhevsky, Ilya Sutskever
> and Geoffrey Hinton:
>
> > In 2011, Geoffrey Hinton started reaching out
> > to colleagues about “What do I have to do to
> > convince you that neural networks are the future?”
> > https://en.wikipedia.org/wiki/AlexNet
>
> Meanwhile ILP is still dreaming of higher order logic:
>
> > We pull it out of thin air. And the job that does
> > is, indeed, that it breaks up relations into
> > sub-relations or sub-routines, if you prefer.
>
> You mean this here:
>
> > Background knowledge (Second Order)
> > -----------------------------------
> > (Chain) ∃.P,Q,R ∀.x,y,z: P(x,y)← Q(x,z),R(z,y)
> >
> > https://github.com/stassa/vanilla/tree/master/lib/poker
>
> Thats too general, it doesn’t adress
> analogical reasoning.
>
> Mild Shock schrieb:
>> Concerning this boring nonsense:
>>
>> https://book.simply-logical.space/src/text/2_part_ii/5.3.html#
>>
>> Funny idea that anybody would be interested just now in
>> the year 2025 in things like teaching breadth first
>> search versus depth first search, or even be “mystified”
>> by such stuff. Its extremly trivial stuff:
>>
>> Insert your favorite tree traversal pictures here.
>>
>> Its even not artificial intelligence neither has anything
>> to do with mathematical logic, rather belongs to computer
>> science and discrete mathematics which you have in
>> 1st year university
>>
>> courses, making it moot to call it “simply logical”. It
>> reminds me of the idea of teaching how wax candles work
>> to dumb down students, when just light bulbs have been
>> invented. If this is the outcome
>>
>> of the Prolog Education Group 2.0, then good night.
>>
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-12 18:37 +0200 |
| Subject | FYI: Philip Zucker’s Co-Egraphs (Was: Prolog Education Group clueless about the AI Boom?) |
| Message-ID | <107fqjo$3m3hh$1@solani.org> |
| In reply to | #14461 |
Struggle understanding Hopcroft and Karp (1971) ? No worries Philip Zucker is the man: Co-Egraphs: Streams, Unification, PEGs, Rational Lambdas You can make egraphs support stream like things / rational terms. https://www.philipzucker.com/coegraph/ Strange I came up with the same stuff over the last weeks while discussing with @kuniaki.mukai . Lets say 2025 is the year of rational trees! Mild Shock schrieb: > Concerning this boring nonsense: > > https://book.simply-logical.space/src/text/2_part_ii/5.3.html# > > Funny idea that anybody would be interested just now in > the year 2025 in things like teaching breadth first > search versus depth first search, or even be “mystified” > by such stuff. Its extremly trivial stuff: > > Insert your favorite tree traversal pictures here. > > Its even not artificial intelligence neither has anything > to do with mathematical logic, rather belongs to computer > science and discrete mathematics which you have in > 1st year university > > courses, making it moot to call it “simply logical”. It > reminds me of the idea of teaching how wax candles work > to dumb down students, when just light bulbs have been > invented. If this is the outcome > > of the Prolog Education Group 2.0, then good night. >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-14 12:31 +0200 |
| Subject | Using Hopcroft & Karp (HK) everywhere (Was: FYI: Philip Zucker’s Co-Egraphs) |
| Message-ID | <107kduo$10b9$1@solani.org> |
| In reply to | #14774 |
Hi,
Using Hopcroft & Karp (HK) everywhere
clearly reases the bar. I decided to use
HK also in compare/3 , just to have it
detect structure sharing. But here a little
test comparing with WebPL, only (=)/2 because
I didn't find compare/3:
/* WebPL May 2025 */
test(25).
True
(1040.4ms)
https://webpl.whenderson.dev/
/* Dogelog Player 1.3.6 */
:- version.
:- time(test(25)).
Dogelog Spieler, Prolog zum Mond, 1.3.6 (02.08.2025)
(c) 1985-2025, XLOG Technologies AG, Schweiz
% Zeit 1 ms, GC 0 ms, Lips 125000, Uhr 14.08.2025 12:30
https://www.dogelog.ch/littab/doclet/live/07_basic/example01/package.html
SWI-Prolog WASM can also do it fast. The
old Trealla WASM version cannot do it fast.
Bye
P.S.: The test code:
hydra(0,_) :- !.
hydra(N,s(X,X)) :- M is N-1, hydra(M,X).
test(N) :-
hydra(N,X), hydra(N,Y), X = Y.
Mild Shock schrieb:
>
> Struggle understanding Hopcroft and Karp (1971) ?
> No worries Philip Zucker is the man:
>
> Co-Egraphs: Streams, Unification, PEGs, Rational Lambdas
> You can make egraphs support stream like things / rational terms.
> https://www.philipzucker.com/coegraph/
>
> Strange I came up with the same stuff over the last
> weeks while discussing with @kuniaki.mukai .
>
> Lets say 2025 is the year of rational trees!
>
> Mild Shock schrieb:
>> Concerning this boring nonsense:
>>
>> https://book.simply-logical.space/src/text/2_part_ii/5.3.html#
>>
>> Funny idea that anybody would be interested just now in
>> the year 2025 in things like teaching breadth first
>> search versus depth first search, or even be “mystified”
>> by such stuff. Its extremly trivial stuff:
>>
>> Insert your favorite tree traversal pictures here.
>>
>> Its even not artificial intelligence neither has anything
>> to do with mathematical logic, rather belongs to computer
>> science and discrete mathematics which you have in
>> 1st year university
>>
>> courses, making it moot to call it “simply logical”. It
>> reminds me of the idea of teaching how wax candles work
>> to dumb down students, when just light bulbs have been
>> invented. If this is the outcome
>>
>> of the Prolog Education Group 2.0, then good night.
>>
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-14 14:31 +0200 |
| Subject | Confusing "decidable problem" and "complete algorithm" (Was: Using Hopcroft & Karp (HK) everywhere) |
| Message-ID | <107kkv4$15tq$1@solani.org> |
| In reply to | #14775 |
Hi, This is a nice confusion of the highest order. > observations on the decidability Well in summary the existence of a pretest (==)/2 makes Mercio's decidable. Equality on rational trees is decidable, even if it comes in disguise as Mercio’s mathematical definition, which gives a total order which is unfortunately not a natural order: A=B :⟺ A' =lex B' A<B :⟺ A' <lex B' Natural order of rational trees? https://math.stackexchange.com/a/210730 Why is Mercio’s mathematical definition of equality decidable? Because it is semantically equivalent to bisimulation as implemented in (==)/2 , and decidable is a semantic notion: Decidability (logic) In logic, a true/false decision problem is decidableif there exists an effective method for deriving the correct answer. Decidability (logic) - Wikipedia So if you talk about semi-decidable, decidable etc.. its always about the existence of an algorithm in the large space of effective method according to the Church hypothesis. If you want to talk about a particular algorithm you would use the terminology “incomplete”. Like for example DFS algorithms are “incomplete” compared to BFS algorithms on certain problems. Bye Mild Shock schrieb: > Hi, > > Using Hopcroft & Karp (HK) everywhere > clearly reases the bar. I decided to use > HK also in compare/3 , just to have it > > detect structure sharing. But here a little > test comparing with WebPL, only (=)/2 because > I didn't find compare/3: > > /* WebPL May 2025 */ > test(25). > True > (1040.4ms) > https://webpl.whenderson.dev/ > > /* Dogelog Player 1.3.6 */ > :- version. > :- time(test(25)). > Dogelog Spieler, Prolog zum Mond, 1.3.6 (02.08.2025) > (c) 1985-2025, XLOG Technologies AG, Schweiz > % Zeit 1 ms, GC 0 ms, Lips 125000, Uhr 14.08.2025 12:30 > https://www.dogelog.ch/littab/doclet/live/07_basic/example01/package.html > > SWI-Prolog WASM can also do it fast. The > old Trealla WASM version cannot do it fast. > > Bye > > P.S.: The test code: > > hydra(0,_) :- !. > hydra(N,s(X,X)) :- M is N-1, hydra(M,X). > > test(N) :- > hydra(N,X), hydra(N,Y), X = Y. > > Mild Shock schrieb: >> >> Struggle understanding Hopcroft and Karp (1971) ? >> No worries Philip Zucker is the man: >> >> Co-Egraphs: Streams, Unification, PEGs, Rational Lambdas >> You can make egraphs support stream like things / rational terms. >> https://www.philipzucker.com/coegraph/ >> >> Strange I came up with the same stuff over the last >> weeks while discussing with @kuniaki.mukai . >> >> Lets say 2025 is the year of rational trees! >> >> Mild Shock schrieb: >>> Concerning this boring nonsense: >>> >>> https://book.simply-logical.space/src/text/2_part_ii/5.3.html# >>> >>> Funny idea that anybody would be interested just now in >>> the year 2025 in things like teaching breadth first >>> search versus depth first search, or even be “mystified” >>> by such stuff. Its extremly trivial stuff: >>> >>> Insert your favorite tree traversal pictures here. >>> >>> Its even not artificial intelligence neither has anything >>> to do with mathematical logic, rather belongs to computer >>> science and discrete mathematics which you have in >>> 1st year university >>> >>> courses, making it moot to call it “simply logical”. It >>> reminds me of the idea of teaching how wax candles work >>> to dumb down students, when just light bulbs have been >>> invented. If this is the outcome >>> >>> of the Prolog Education Group 2.0, then good night. >>> >> >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-14 15:14 +0200 |
| Subject | DFA algorithms in a Python library (Re: Confusing "decidable problem" and "complete algorithm") |
| Message-ID | <107knf3$17la$2@solani.org> |
| In reply to | #14776 |
Hi,
DFS algorithms can nevertheless gain some completness
power on rational trees when paired with loop checking.
Like @kuniaki.mukai was using in compare_with_stack/3.
They might be not as good as HK though.
You find a DFA subset and equality relation here,
implemented via DFS algorithms using a visitor set:
def find_equiv_counterexample(dfa_a, dfa_b):
# Symmetric difference: strings accepted by exactly one DFA
return find_word(dfa_a ^ dfa_b)
def find_subset_counterexample(smaller, bigger):
# Intersection of "smaller" with the complement of "bigger"
return find_word(~bigger & smaller)
https://pypi.org/project/dfa/
The later results in ordering DFAs by a partial order
and not by a total order. The project has also a DFA
minimization algorithm. But I didn’t get my head around
yet implementing it,
and I don’t know whether @kuniaki.mukai implemented
the DFA minimization algorithm that has supposedly
O(N log(N)) complexity.
Bye
Mild Shock schrieb:
> Hi,
>
> This is a nice confusion of the highest order.
>
> > observations on the decidability
>
> Well in summary the existence of a pretest (==)/2
> makes Mercio's decidable. Equality on rational trees
> is decidable, even if it comes in disguise as Mercio’s
> mathematical definition, which gives a total order
>
> which is unfortunately not a natural order:
>
> A=B :⟺ A' =lex B'
>
> A<B :⟺ A' <lex B'
>
> Natural order of rational trees?
> https://math.stackexchange.com/a/210730
>
> Why is Mercio’s mathematical definition of equality
> decidable? Because it is semantically equivalent to
> bisimulation as implemented in (==)/2 , and decidable
> is a semantic notion:
>
> Decidability (logic)
> In logic, a true/false decision problem is decidableif there
> exists an effective method for deriving the correct answer.
> Decidability (logic) - Wikipedia
>
> So if you talk about semi-decidable, decidable etc..
> its always about the existence of an algorithm in
> the large space of effective method according to
> the Church hypothesis.
>
> If you want to talk about a particular algorithm
> you would use the terminology “incomplete”. Like for
> example DFS algorithms are “incomplete” compared to
> BFS algorithms on certain problems.
>
> Bye
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-16 11:22 +0200 |
| Subject | Static Variable Shunting in Dogelog Player (Was: Using Hopcroft & Karp (HK) everywhere) |
| Message-ID | <107pik3$4csp$1@solani.org> |
| In reply to | #14775 |
There is a difference between this: /* Version I */ fun(X, Y, Z, A) :- X =< Y, !, Z = A. fun(X, Y, Z, A) :- X1 is X - 1, fun(X1, Y, Z, A1), Y1 is Y - 1, fun(Y1, Z, X, A2), Z1 is Z - 1, fun(Z1, X, Y, A3), fun(A1, A2, A3, A). And this in Dogelog Player: /* Version II */ fun(X, Y, Z, A) :- X =< Y, !, Z = A. fun(X, Y, Z, A) :- X1 is X - 1, Y1 is Y - 1, Z1 is Z - 1, fun(X1, Y, Z, A1), fun(Y1, Z, X, A2), fun(Z1, X, Y, A3), fun(A1, A2, A3, A). Usually I am benchmarking Version I, but Version II gives Dogelog Player the opportunity to do more static Variable Shunting. Which is seen in the performance. Not its JavaScript not WASM: /* Version I */ % Zeit 1723 ms, GC 6 ms, Lips 4863960, Uhr 16.08.2025 11:21 /* Version II */ % Zeit 1489 ms, GC 2 ms, Lips 5628343, Uhr 16.08.2025 11:21 Was resting: mtak :- between(1,31,_), fun(18, 12, 6, _), fail. mtak. :- time(mtak).
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-16 11:34 +0200 |
| Subject | Dynamic Variable Shunting in WebPL (Was: Static Variable Shunting in Dogelog Player) |
| Message-ID | <107pjag$4dc8$1@solani.org> |
| In reply to | #14783 |
Hi, It seems the gist of WebPL is to examine dynamic variable shunting as part of a garbage collection strategy, as found here: Variable Shunting for the WAM Sahlin, D. and Carlsson, M. - 1991 https://www.diva-portal.org/smash/get/diva2:1041385/FULLTEXT01.pdf Does it pay off? I am testing Version II of mtak: /* WebPL GC Rust-WAMS */ True (1875.2ms) No more results /* Trealla Prolog C-WASM */ True (1269.5ms) No more results /* SWI-Prolog C-WASM */ True (1368.9ms) No more results The 1875.2ms are worse than my 1489 ms. The 1269.5ms and 1368.9ms are only slightly better than my 1489 ms. I would say static shunting is the secret ingredient of Dogelog Player, that makes it fast sometimes! Just think about it, in the above JavaScript is compared to WASM. Whats going on? Of course one should repeat the test with newest and newest SWI-Prolog and Trealla Prolog. Don't know whether there is a site that does all the updates. Bye BTW: For between/2 was using: between(Lo, Lo, R) :- !, Lo = R. between(Lo, _, Lo). between(Lo, Hi, X) :- Lo2 is Lo+1, between(Lo2, Hi, X). Mild Shock schrieb: > There is a difference between this: > > /* Version I */ > fun(X, Y, Z, A) :- > X =< Y, !, > Z = A. > fun(X, Y, Z, A) :- > X1 is X - 1, > fun(X1, Y, Z, A1), > Y1 is Y - 1, > fun(Y1, Z, X, A2), > Z1 is Z - 1, > fun(Z1, X, Y, A3), > fun(A1, A2, A3, A). > > And this in Dogelog Player: > > /* Version II */ > fun(X, Y, Z, A) :- > X =< Y, !, > Z = A. > fun(X, Y, Z, A) :- > X1 is X - 1, > Y1 is Y - 1, > Z1 is Z - 1, > fun(X1, Y, Z, A1), > fun(Y1, Z, X, A2), > fun(Z1, X, Y, A3), > fun(A1, A2, A3, A). > > Usually I am benchmarking Version I, but Version II > gives Dogelog Player the opportunity to do more > static Variable Shunting. Which is seen in the > > performance. Not its JavaScript not WASM: > > /* Version I */ > % Zeit 1723 ms, GC 6 ms, Lips 4863960, Uhr 16.08.2025 11:21 > > /* Version II */ > % Zeit 1489 ms, GC 2 ms, Lips 5628343, Uhr 16.08.2025 11:21 > > Was resting: > > mtak :- between(1,31,_), fun(18, 12, 6, _), fail. > mtak. > > :- time(mtak).
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-16 11:46 +0200 |
| Subject | SWI-Prolog is still the OG of GC (Was: Dynamic Variable Shunting in WebPL) |
| Message-ID | <107pk1o$4e0v$1@solani.org> |
| In reply to | #14784 |
Hi,
BTW: Here a test without WASM:
/* Trealla Prolog 2.82.12 WSL2 */
?- time(mtak).
% Time elapsed 0.734s, 8873504 Inferences, 12.091 MLips
true.
/* SWI Prolog 9.0.4 WSL2 */
?- time(mtak).
% 3,943,790 inferences, 0.210 CPU in 0.217 seconds
(97% CPU, 18777906 Lips)
true.
/* Dogelog Player 1.3.6 Windows 11 */
?- time(mtak).
% Zeit 412 ms, GC 0 ms, Lips 20341271, Uhr 16.08.2025 11:40
true.
/* Jekejeke Prolog 1.7.3 Windows 11 */
?- time(mtak).
% Zeit 664 ms, GC 3 ms, Uhr 16.08.2025 11:41
true.
I didn't test Scryer Prolog because it has no GC.
I keep testing Jekejeke Prolog because it has
reference counting. But Dogelog Player without
reference counting and true garbage collection,
seems to be more speedy. Not as fast as SWI-Prolog.
But faster than Trealla Prolog.
So SWI-Prolog is still the Orginal Gangster (OG)
of garbage collection (GC). Some Prolog systems
like Ciao Prolog, ECLiPSe Prolog or SICStus Prolog
might be even faster, since it seems to me they use
native backend compilation schemes, AOT or JIT. The
tested systems above are all more of the
interpreter type Prolog systems.
Bye
Mild Shock schrieb:
> Hi,
>
> It seems the gist of WebPL is to examine
> dynamic variable shunting as part of a
> garbage collection strategy, as found here:
>
> Variable Shunting for the WAM
> Sahlin, D. and Carlsson, M. - 1991
> https://www.diva-portal.org/smash/get/diva2:1041385/FULLTEXT01.pdf
>
> Does it pay off? I am testing
> Version II of mtak:
>
> /* WebPL GC Rust-WAMS */
> True
> (1875.2ms)
> No more results
>
> /* Trealla Prolog C-WASM */
> True
> (1269.5ms)
> No more results
>
> /* SWI-Prolog C-WASM */
> True
> (1368.9ms)
> No more results
>
> The 1875.2ms are worse than my 1489 ms. The
> 1269.5ms and 1368.9ms are only slightly better
> than my 1489 ms.
>
> I would say static shunting is the secret ingredient
> of Dogelog Player, that makes it fast sometimes!
> Just think about it, in the above JavaScript is
>
> compared to WASM. Whats going on? Of course
> one should repeat the test with newest and newest
> SWI-Prolog and Trealla Prolog. Don't know
>
> whether there is a site that does all the updates.
>
> Bye
>
> BTW: For between/2 was using:
>
> between(Lo, Lo, R) :- !, Lo = R.
> between(Lo, _, Lo).
> between(Lo, Hi, X) :- Lo2 is Lo+1, between(Lo2, Hi, X).
>
> Mild Shock schrieb:
>> There is a difference between this:
>>
>> /* Version I */
>> fun(X, Y, Z, A) :-
>> X =< Y, !,
>> Z = A.
>> fun(X, Y, Z, A) :-
>> X1 is X - 1,
>> fun(X1, Y, Z, A1),
>> Y1 is Y - 1,
>> fun(Y1, Z, X, A2),
>> Z1 is Z - 1,
>> fun(Z1, X, Y, A3),
>> fun(A1, A2, A3, A).
>>
>> And this in Dogelog Player:
>>
>> /* Version II */
>> fun(X, Y, Z, A) :-
>> X =< Y, !,
>> Z = A.
>> fun(X, Y, Z, A) :-
>> X1 is X - 1,
>> Y1 is Y - 1,
>> Z1 is Z - 1,
>> fun(X1, Y, Z, A1),
>> fun(Y1, Z, X, A2),
>> fun(Z1, X, Y, A3),
>> fun(A1, A2, A3, A).
>>
>> Usually I am benchmarking Version I, but Version II
>> gives Dogelog Player the opportunity to do more
>> static Variable Shunting. Which is seen in the
>>
>> performance. Not its JavaScript not WASM:
>>
>> /* Version I */
>> % Zeit 1723 ms, GC 6 ms, Lips 4863960, Uhr 16.08.2025 11:21
>>
>> /* Version II */
>> % Zeit 1489 ms, GC 2 ms, Lips 5628343, Uhr 16.08.2025 11:21
>>
>> Was resting:
>>
>> mtak :- between(1,31,_), fun(18, 12, 6, _), fail.
>> mtak.
>>
>> :- time(mtak).
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-16 11:59 +0200 |
| Subject | Cyclic Term Unification is Accounted (Was: SWI-Prolog is still the OG of GC) |
| Message-ID | <107pkpt$4egd$1@solani.org> |
| In reply to | #14785 |
Hi,
In the newest test results below, Cyclic
Term Unification of Clause Heads is already
Accounted. Means I tested versions that
have Cyclic Term Unification deep in the
Prolog interpreter. Why does it not slow down
the Prolog system? Because Cyclic Term
Unification doesn't kick in for certain Prolog
system designs under certain conditions:
- If the head is linear no cyclic unification
happens. Since the machine code for head
unification is executed in write-unification
mode. All variables are "first_var" instructions.
- Even if the the calling goal is smaller than
the head, means if a switch happens to
read-unification mode, again cyclic unification
doesn't happen for linear patterns.
You can check yourself whether a head is linear
or not. Just define:
term_linear(X) :-
term_variables(X, L),
term_singletons(X, R),
L == R.
?- term_linear(fun(X, Y, Z, A)).
true.
The bad thing is this holds only for Dogelog Player
which has the smarter head unification. While it
doesn't hold for formerly Jekejeke Prolog,
which has an ancient PLM design. So Jekejeke Prolog
got indeed a little slower with Cyclic Term Unification
and I don't know much what I could do against it.
I had old versions of Jekejeke Prolog which did
indeed special head linear compilation, and linear
head unification execution, as some experiment in
occurs check. But I wont resurrect this special
compilation. I am more preparing the final graveyard
for Jekejeke Prolog. But there are still a few things
to harvest from formerly Jekejeke Prolog,
so the final stab might come in 1-2 years.
Bye
Mild Shock schrieb:
> Hi,
>
> BTW: Here a test without WASM:
>
> /* Trealla Prolog 2.82.12 WSL2 */
> ?- time(mtak).
> % Time elapsed 0.734s, 8873504 Inferences, 12.091 MLips
> true.
>
> /* SWI Prolog 9.0.4 WSL2 */
> ?- time(mtak).
> % 3,943,790 inferences, 0.210 CPU in 0.217 seconds
> (97% CPU, 18777906 Lips)
> true.
>
> /* Dogelog Player 1.3.6 Windows 11 */
> ?- time(mtak).
> % Zeit 412 ms, GC 0 ms, Lips 20341271, Uhr 16.08.2025 11:40
> true.
>
> /* Jekejeke Prolog 1.7.3 Windows 11 */
> ?- time(mtak).
> % Zeit 664 ms, GC 3 ms, Uhr 16.08.2025 11:41
> true.
>
> I didn't test Scryer Prolog because it has no GC.
> I keep testing Jekejeke Prolog because it has
> reference counting. But Dogelog Player without
>
> reference counting and true garbage collection,
> seems to be more speedy. Not as fast as SWI-Prolog.
> But faster than Trealla Prolog.
>
> So SWI-Prolog is still the Orginal Gangster (OG)
> of garbage collection (GC). Some Prolog systems
> like Ciao Prolog, ECLiPSe Prolog or SICStus Prolog
>
> might be even faster, since it seems to me they use
> native backend compilation schemes, AOT or JIT. The
> tested systems above are all more of the
>
> interpreter type Prolog systems.
>
> Bye
>
> Mild Shock schrieb:
>> Hi,
>>
>> It seems the gist of WebPL is to examine
>> dynamic variable shunting as part of a
>> garbage collection strategy, as found here:
>>
>> Variable Shunting for the WAM
>> Sahlin, D. and Carlsson, M. - 1991
>> https://www.diva-portal.org/smash/get/diva2:1041385/FULLTEXT01.pdf
>>
>> Does it pay off? I am testing
>> Version II of mtak:
>>
>> /* WebPL GC Rust-WAMS */
>> True
>> (1875.2ms)
>> No more results
>>
>> /* Trealla Prolog C-WASM */
>> True
>> (1269.5ms)
>> No more results
>>
>> /* SWI-Prolog C-WASM */
>> True
>> (1368.9ms)
>> No more results
>>
>> The 1875.2ms are worse than my 1489 ms. The
>> 1269.5ms and 1368.9ms are only slightly better
>> than my 1489 ms.
>>
>> I would say static shunting is the secret ingredient
>> of Dogelog Player, that makes it fast sometimes!
>> Just think about it, in the above JavaScript is
>>
>> compared to WASM. Whats going on? Of course
>> one should repeat the test with newest and newest
>> SWI-Prolog and Trealla Prolog. Don't know
>>
>> whether there is a site that does all the updates.
>>
>> Bye
>>
>> BTW: For between/2 was using:
>>
>> between(Lo, Lo, R) :- !, Lo = R.
>> between(Lo, _, Lo).
>> between(Lo, Hi, X) :- Lo2 is Lo+1, between(Lo2, Hi, X).
>>
>> Mild Shock schrieb:
>>> There is a difference between this:
>>>
>>> /* Version I */
>>> fun(X, Y, Z, A) :-
>>> X =< Y, !,
>>> Z = A.
>>> fun(X, Y, Z, A) :-
>>> X1 is X - 1,
>>> fun(X1, Y, Z, A1),
>>> Y1 is Y - 1,
>>> fun(Y1, Z, X, A2),
>>> Z1 is Z - 1,
>>> fun(Z1, X, Y, A3),
>>> fun(A1, A2, A3, A).
>>>
>>> And this in Dogelog Player:
>>>
>>> /* Version II */
>>> fun(X, Y, Z, A) :-
>>> X =< Y, !,
>>> Z = A.
>>> fun(X, Y, Z, A) :-
>>> X1 is X - 1,
>>> Y1 is Y - 1,
>>> Z1 is Z - 1,
>>> fun(X1, Y, Z, A1),
>>> fun(Y1, Z, X, A2),
>>> fun(Z1, X, Y, A3),
>>> fun(A1, A2, A3, A).
>>>
>>> Usually I am benchmarking Version I, but Version II
>>> gives Dogelog Player the opportunity to do more
>>> static Variable Shunting. Which is seen in the
>>>
>>> performance. Not its JavaScript not WASM:
>>>
>>> /* Version I */
>>> % Zeit 1723 ms, GC 6 ms, Lips 4863960, Uhr 16.08.2025 11:21
>>>
>>> /* Version II */
>>> % Zeit 1489 ms, GC 2 ms, Lips 5628343, Uhr 16.08.2025 11:21
>>>
>>> Was resting:
>>>
>>> mtak :- between(1,31,_), fun(18, 12, 6, _), fail.
>>> mtak.
>>>
>>> :- time(mtak).
>>
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-17 18:00 +0200 |
| Subject | WebPL is an interesting project (Was: SWI-Prolog is still the OG of GC) |
| Message-ID | <107sua1$69ve$1@solani.org> |
| In reply to | #14785 |
Hi,
The paper by Shalin and Carlson from 1991
did not yet ring a bell. But it suggest testing
something with primes and freeze. Lets do
primes as suggested but without freeze. SWI-Prolog
seems not to the OG of GC. Putting aside Shalin
and Carlson, its an typical example of a lot of
intermediate results, that can be discarded by
a garbage collection. Every candidate number that
is not a prime number can be remove from the
trail they get unreachable in the first clause
of search/3. Besides this obvious unreachability
task, I don't have statistics or don't see immediately
where large variable instantiation chains are supposed
to be created. At least not in my Prolog system, since
a result variable is passed without binding it to a
local variable, this "shunting" happens independent
of neck tests and the "shunting" there. The result variable
passing is extremly simple to implement and could
be what is effective here besides the reachability thingy.
At least the 1 ms GC time in Dogelog Player show that
the reachability thingy is the minor effort or optimization
to get nice performance:
/* WebPL GC */
(1846.1ms)
/* Dogelog Player 1.3.6 for JavaScript (16.08.2025) */
% Zeit 2992 ms, GC 1 ms, Lips 2514202, Uhr 17.08.2025 17:44
/* SWI-Prolog WASM */
(4204.2ms)
/* Trealla Prolog WASM */
(23568.9ms)
The test code was:
test :-
len(L, 1000),
primes(L, _).
primes([], 1).
primes([J|L], J) :-
primes(L, I),
K is I+1,
search(L, K, J).
search(L, I, J) :-
mem(X, L),
I mod X =:= 0, !,
K is I+1,
search(L, K, J).
search(_, I, I).
mem(X, [X|_]).
mem(X, [_|Y]) :-
mem(X, Y).
len([], 0) :- !.
len([_|L], N) :-
N > 0,
M is N-1,
len(L, M).
Bye
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-08-17 18:24 +0200 |
| Subject | Head to Head Race with Scryer Prolog (Was: WebPL is an interesting project) |
| Message-ID | <107svnd$6b13$1@solani.org> |
| In reply to | #14790 |
Hi, Here some test results when testing Desktop and not the Web. With Desktop Prolog versions I find: /* SWI-Prolog 9.3.28 */ % 7,506,637 inferences, 0.578 CPU in 0.567 seconds /* Dogelog Player 1.3.6 for Java (16.08.2025) */ % Zeit 803 ms, GC 0 ms, Lips 9367988, Uhr 17.08.2025 18:03 /* Scryer Prolog 0.9.4-592 */ % CPU time: 0.838s, 7_517_613 inferences /* Trealla Prolog 2.82.12 */ % Time elapsed 2.315s, 11263917 Inferences, 4.866 MLips Bye Mild Shock schrieb: > Hi, > > The paper by Shalin and Carlson from 1991 > did not yet ring a bell. But it suggest testing > something with primes and freeze. Lets do > > primes as suggested but without freeze. SWI-Prolog > seems not to the OG of GC. Putting aside Shalin > and Carlson, its an typical example of a lot of > > intermediate results, that can be discarded by > a garbage collection. Every candidate number that > is not a prime number can be remove from the > > trail they get unreachable in the first clause > of search/3. Besides this obvious unreachability > task, I don't have statistics or don't see immediately > > where large variable instantiation chains are supposed > to be created. At least not in my Prolog system, since > a result variable is passed without binding it to a > > local variable, this "shunting" happens independent > of neck tests and the "shunting" there. The result variable > passing is extremly simple to implement and could > > be what is effective here besides the reachability thingy. > At least the 1 ms GC time in Dogelog Player show that > the reachability thingy is the minor effort or optimization > > to get nice performance: > > > /* WebPL GC */ > (1846.1ms) > > /* Dogelog Player 1.3.6 for JavaScript (16.08.2025) */ > % Zeit 2992 ms, GC 1 ms, Lips 2514202, Uhr 17.08.2025 17:44 > > /* SWI-Prolog WASM */ > (4204.2ms) > > /* Trealla Prolog WASM */ > (23568.9ms) > > The test code was: > > test :- > len(L, 1000), > primes(L, _). > > primes([], 1). > primes([J|L], J) :- > primes(L, I), > K is I+1, > search(L, K, J). > > search(L, I, J) :- > mem(X, L), > I mod X =:= 0, !, > K is I+1, > search(L, K, J). > search(_, I, I). > > mem(X, [X|_]). > mem(X, [_|Y]) :- > mem(X, Y). > > len([], 0) :- !. > len([_|L], N) :- > N > 0, > M is N-1, > len(L, M). > > Bye
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2026-02-10 12:05 +0100 |
| Subject | Does Variable Age make Sense? [Prolog Unification] (Was: Head to Head Race with Scryer Prolog) |
| Message-ID | <10mf3dh$j9go$1@solani.org> |
| In reply to | #14791 |
Hi,
The WebPL shunting experiment still resonates. Dogelog
Players assumption is implicit shunting through
unification variable bind preferences, derived
from how unification is called. So I rearranged
the implementation of member/2 a little bit, and
now I get, a less invasive version, doesn't modify L:
/* Dogelog Player 2.1.5 Preview */
/* Not Invasive */
?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true.
[_0, _1, _2]
[_0, _1, _2]
[_0, _1, _2]
true.
/* Not Invasive */
?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true.
[_3, _4, _5]
[_3, _4, _5]
[_3, _4, _5]
true.
We can compare with SWI-Prolog:
/* SWI-Prolog 10.1.1 */
/* Invasive */
?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true.
[_13280,_13294,_13300]
[_13288,_13280,_13300]
[_13288,_13294,_13280]
true.
/* Not Invasive */
?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true.
[_18762,_18768,_18774]
[_18762,_18768,_18774]
[_18762,_18768,_18774]
true.
And the result for Scryer Prolog:
/* Scryer Prolog 0.10 */
/* Invasive */
?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true.
[_112,_131,_138]
[_123,_112,_138]
[_123,_131,_112]
true.
/* Invasive */
?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true.
[_117,_125,_133]
[_117,_120,_133]
[_117,_125,_120]
true.
Bye
Mild Shock schrieb:
> Hi,
>
> Here some test results when testing
> Desktop and not the Web. With Desktop
> Prolog versions I find:
>
> /* SWI-Prolog 9.3.28 */
> % 7,506,637 inferences, 0.578 CPU in 0.567 seconds
>
> /* Dogelog Player 1.3.6 for Java (16.08.2025) */
> % Zeit 803 ms, GC 0 ms, Lips 9367988, Uhr 17.08.2025 18:03
>
> /* Scryer Prolog 0.9.4-592 */
> % CPU time: 0.838s, 7_517_613 inferences
>
> /* Trealla Prolog 2.82.12 */
> % Time elapsed 2.315s, 11263917 Inferences, 4.866 MLips
>
> Bye
>
> Mild Shock schrieb:
>> Hi,
>>
>> The paper by Shalin and Carlson from 1991
>> did not yet ring a bell. But it suggest testing
>> something with primes and freeze. Lets do
>>
>> primes as suggested but without freeze. SWI-Prolog
>> seems not to the OG of GC. Putting aside Shalin
>> and Carlson, its an typical example of a lot of
>>
>> intermediate results, that can be discarded by
>> a garbage collection. Every candidate number that
>> is not a prime number can be remove from the
>>
>> trail they get unreachable in the first clause
>> of search/3. Besides this obvious unreachability
>> task, I don't have statistics or don't see immediately
>>
>> where large variable instantiation chains are supposed
>> to be created. At least not in my Prolog system, since
>> a result variable is passed without binding it to a
>>
>> local variable, this "shunting" happens independent
>> of neck tests and the "shunting" there. The result variable
>> passing is extremly simple to implement and could
>>
>> be what is effective here besides the reachability thingy.
>> At least the 1 ms GC time in Dogelog Player show that
>> the reachability thingy is the minor effort or optimization
>>
>> to get nice performance:
>>
>>
>> /* WebPL GC */
>> (1846.1ms)
>>
>> /* Dogelog Player 1.3.6 for JavaScript (16.08.2025) */
>> % Zeit 2992 ms, GC 1 ms, Lips 2514202, Uhr 17.08.2025 17:44
>>
>> /* SWI-Prolog WASM */
>> (4204.2ms)
>>
>> /* Trealla Prolog WASM */
>> (23568.9ms)
>>
>> The test code was:
>>
>> test :-
>> len(L, 1000),
>> primes(L, _).
>>
>> primes([], 1).
>> primes([J|L], J) :-
>> primes(L, I),
>> K is I+1,
>> search(L, K, J).
>>
>> search(L, I, J) :-
>> mem(X, L),
>> I mod X =:= 0, !,
>> K is I+1,
>> search(L, K, J).
>> search(_, I, I).
>>
>> mem(X, [X|_]).
>> mem(X, [_|Y]) :-
>> mem(X, Y).
>>
>> len([], 0) :- !.
>> len([_|L], N) :-
>> N > 0,
>> M is N-1,
>> len(L, M).
>>
>> Bye
>
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2026-07-20 12:20 +0200 |
| Subject | Type systems for non-deterministic concurrency [Amir Pnueli] (Was: Does Variable Age make Sense? [Prolog Unification]) |
| Message-ID | <113kspv$3l1m$1@solani.org> |
| In reply to | #15459 |
Hi, Probably blinded by some academic remoteness from the real world, some people really believe nonsense like the following: Deterministic Concurrency - Edward Lee deterministic models as a central part of the engineering toolkit https://icfp26.sigplan.org/track/icfp-2026-icfp-keynotes#event-overview But hey Aristoteles present us already with modal logic to talk about the future. So if I have a process calculus, with expressions π, that capture all my processes of interest, I can have a modal logic of with modal operators [π] and <π> that give necessity and possibility, the simplest first order bootstrapped types are: Product Type: A -> [π]B Sum Type: A /\ <π>B So we need more than only a ->π type? But even with two types, is there an easy equivalent of Curry Howard isomorphism? In contrast Amir Pnueli's 1977 system of temporal logic, another variant of modal logic sharing many common features with dynamic logic, differs from all of the above-mentioned logics by being what Pnueli has characterized as an "endogenous" logic, the others being "exogenous" logics. https://en.wikipedia.org/wiki/Dynamic_logic_%28modal_logic%29 The Sea Battle and the Master Argument Aristotle and Diodorus Cronus on the Metaphysics of the Future https://www.degruyterbrill.com/de/document/doi/10.1515/9783110866346/html Mild Shock schrieb: > Hi, > > The WebPL shunting experiment still resonates. Dogelog > Players assumption is implicit shunting through > unification variable bind preferences, derived > > from how unification is called. So I rearranged > the implementation of member/2 a little bit, and > now I get, a less invasive version, doesn't modify L: > > /* Dogelog Player 2.1.5 Preview */ > > /* Not Invasive */ > ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. > [_0, _1, _2] > [_0, _1, _2] > [_0, _1, _2] > true. > > /* Not Invasive */ > ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. > [_3, _4, _5] > [_3, _4, _5] > [_3, _4, _5] > true. > > We can compare with SWI-Prolog: > > /* SWI-Prolog 10.1.1 */ > /* Invasive */ > ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. > [_13280,_13294,_13300] > [_13288,_13280,_13300] > [_13288,_13294,_13280] > true. > > /* Not Invasive */ > ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. > [_18762,_18768,_18774] > [_18762,_18768,_18774] > [_18762,_18768,_18774] > true. > > And the result for Scryer Prolog: > > /* Scryer Prolog 0.10 */ > /* Invasive */ > ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. > [_112,_131,_138] > [_123,_112,_138] > [_123,_131,_112] > true. > > /* Invasive */ > ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. > [_117,_125,_133] > [_117,_120,_133] > [_117,_125,_120] > true. > > Bye > > Mild Shock schrieb: >> Hi, >> >> Here some test results when testing >> Desktop and not the Web. With Desktop >> Prolog versions I find: >> >> /* SWI-Prolog 9.3.28 */ >> % 7,506,637 inferences, 0.578 CPU in 0.567 seconds >> >> /* Dogelog Player 1.3.6 for Java (16.08.2025) */ >> % Zeit 803 ms, GC 0 ms, Lips 9367988, Uhr 17.08.2025 18:03 >> >> /* Scryer Prolog 0.9.4-592 */ >> % CPU time: 0.838s, 7_517_613 inferences >> >> /* Trealla Prolog 2.82.12 */ >> % Time elapsed 2.315s, 11263917 Inferences, 4.866 MLips >> >> Bye >> >> Mild Shock schrieb: >>> Hi, >>> >>> The paper by Shalin and Carlson from 1991 >>> did not yet ring a bell. But it suggest testing >>> something with primes and freeze. Lets do >>> >>> primes as suggested but without freeze. SWI-Prolog >>> seems not to the OG of GC. Putting aside Shalin >>> and Carlson, its an typical example of a lot of >>> >>> intermediate results, that can be discarded by >>> a garbage collection. Every candidate number that >>> is not a prime number can be remove from the >>> >>> trail they get unreachable in the first clause >>> of search/3. Besides this obvious unreachability >>> task, I don't have statistics or don't see immediately >>> >>> where large variable instantiation chains are supposed >>> to be created. At least not in my Prolog system, since >>> a result variable is passed without binding it to a >>> >>> local variable, this "shunting" happens independent >>> of neck tests and the "shunting" there. The result variable >>> passing is extremly simple to implement and could >>> >>> be what is effective here besides the reachability thingy. >>> At least the 1 ms GC time in Dogelog Player show that >>> the reachability thingy is the minor effort or optimization >>> >>> to get nice performance: >>> >>> >>> /* WebPL GC */ >>> (1846.1ms) >>> >>> /* Dogelog Player 1.3.6 for JavaScript (16.08.2025) */ >>> % Zeit 2992 ms, GC 1 ms, Lips 2514202, Uhr 17.08.2025 17:44 >>> >>> /* SWI-Prolog WASM */ >>> (4204.2ms) >>> >>> /* Trealla Prolog WASM */ >>> (23568.9ms) >>> >>> The test code was: >>> >>> test :- >>> len(L, 1000), >>> primes(L, _). >>> >>> primes([], 1). >>> primes([J|L], J) :- >>> primes(L, I), >>> K is I+1, >>> search(L, K, J). >>> >>> search(L, I, J) :- >>> mem(X, L), >>> I mod X =:= 0, !, >>> K is I+1, >>> search(L, K, J). >>> search(_, I, I). >>> >>> mem(X, [X|_]). >>> mem(X, [_|Y]) :- >>> mem(X, Y). >>> >>> len([], 0) :- !. >>> len([_|L], N) :- >>> N > 0, >>> M is N-1, >>> len(L, M). >>> >>> Bye >> >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2026-07-20 12:34 +0200 |
| Subject | Robin Milners fickle gives non-determinism in practice [Parallel π-WAM] (Was: Type systems for non-deterministic concurrency [Amir Pnueli]) |
| Message-ID | <113ktjm$3lig$1@solani.org> |
| In reply to | #15655 |
Hi, Hi take Robin Milners fickle: ?- emulate((between(1,2,Y),in(X),out(Y))). : 0 1 : 0 2 fail. If I use NUM=3, number of logical threads, and common input [0, 0, 0, 0, 0, 0]. I might get this common output: [1, 2, 1, 2, 1, 2] Or this common output: [1, 1, 2, 2, 1, 2] Or this common output: [1, 1, 1, 2, 2, 2] What else? Did I miss some case? Can be seen on GPU and CPU backend, depending on launch parameters. (*) Bye If logical threads are executed together in work groups, certain guarantees of determinism might hold. But modern GPUs usually support multiple independent work groups, also my CPU backend does support a notion of multiple independent work groups. So that the determinism guarantees only hold inside the work group. Mild Shock schrieb: > Hi, > > Probably blinded by some academic remoteness > from the real world, some people really believe > nonsense like the following: > > Deterministic Concurrency - Edward Lee > deterministic models as a central part of the engineering toolkit > https://icfp26.sigplan.org/track/icfp-2026-icfp-keynotes#event-overview > > But hey Aristoteles present us already with > modal logic to talk about the future. So > if I have a process calculus, with expressions > > π, that capture all my processes of interest, > I can have a modal logic of with modal operators > [π] and <π> that give necessity and possibility, > > the simplest first order bootstrapped types are: > > Product Type: > A -> [π]B > > Sum Type: > A /\ <π>B > > So we need more than only a ->π type? But even > with two types, is there an easy equivalent of > Curry Howard isomorphism? > > In contrast Amir Pnueli's 1977 system of temporal > logic, another variant of modal logic sharing many > common features with dynamic logic, differs from all > of the above-mentioned logics by being what Pnueli > has characterized as an "endogenous" logic, > the others being "exogenous" logics. > https://en.wikipedia.org/wiki/Dynamic_logic_%28modal_logic%29 > > The Sea Battle and the Master Argument > Aristotle and Diodorus Cronus on the Metaphysics of the Future > https://www.degruyterbrill.com/de/document/doi/10.1515/9783110866346/html > > Mild Shock schrieb: >> Hi, >> >> The WebPL shunting experiment still resonates. Dogelog >> Players assumption is implicit shunting through >> unification variable bind preferences, derived >> >> from how unification is called. So I rearranged >> the implementation of member/2 a little bit, and >> now I get, a less invasive version, doesn't modify L: >> >> /* Dogelog Player 2.1.5 Preview */ >> >> /* Not Invasive */ >> ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. >> [_0, _1, _2] >> [_0, _1, _2] >> [_0, _1, _2] >> true. >> >> /* Not Invasive */ >> ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. >> [_3, _4, _5] >> [_3, _4, _5] >> [_3, _4, _5] >> true. >> >> We can compare with SWI-Prolog: >> >> /* SWI-Prolog 10.1.1 */ >> /* Invasive */ >> ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. >> [_13280,_13294,_13300] >> [_13288,_13280,_13300] >> [_13288,_13294,_13280] >> true. >> >> /* Not Invasive */ >> ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. >> [_18762,_18768,_18774] >> [_18762,_18768,_18774] >> [_18762,_18768,_18774] >> true. >> >> And the result for Scryer Prolog: >> >> /* Scryer Prolog 0.10 */ >> /* Invasive */ >> ?- T = T, L = [X,Y,Z], member(T, L), write(L), nl, fail; true. >> [_112,_131,_138] >> [_123,_112,_138] >> [_123,_131,_112] >> true. >> >> /* Invasive */ >> ?- L = [X,Y,Z], T = T, member(T, L), write(L), nl, fail; true. >> [_117,_125,_133] >> [_117,_120,_133] >> [_117,_125,_120] >> true. >> >> Bye >> >> Mild Shock schrieb: >>> Hi, >>> >>> Here some test results when testing >>> Desktop and not the Web. With Desktop >>> Prolog versions I find: >>> >>> /* SWI-Prolog 9.3.28 */ >>> % 7,506,637 inferences, 0.578 CPU in 0.567 seconds >>> >>> /* Dogelog Player 1.3.6 for Java (16.08.2025) */ >>> % Zeit 803 ms, GC 0 ms, Lips 9367988, Uhr 17.08.2025 18:03 >>> >>> /* Scryer Prolog 0.9.4-592 */ >>> % CPU time: 0.838s, 7_517_613 inferences >>> >>> /* Trealla Prolog 2.82.12 */ >>> % Time elapsed 2.315s, 11263917 Inferences, 4.866 MLips >>> >>> Bye >>> >>> Mild Shock schrieb: >>>> Hi, >>>> >>>> The paper by Shalin and Carlson from 1991 >>>> did not yet ring a bell. But it suggest testing >>>> something with primes and freeze. Lets do >>>> >>>> primes as suggested but without freeze. SWI-Prolog >>>> seems not to the OG of GC. Putting aside Shalin >>>> and Carlson, its an typical example of a lot of >>>> >>>> intermediate results, that can be discarded by >>>> a garbage collection. Every candidate number that >>>> is not a prime number can be remove from the >>>> >>>> trail they get unreachable in the first clause >>>> of search/3. Besides this obvious unreachability >>>> task, I don't have statistics or don't see immediately >>>> >>>> where large variable instantiation chains are supposed >>>> to be created. At least not in my Prolog system, since >>>> a result variable is passed without binding it to a >>>> >>>> local variable, this "shunting" happens independent >>>> of neck tests and the "shunting" there. The result variable >>>> passing is extremly simple to implement and could >>>> >>>> be what is effective here besides the reachability thingy. >>>> At least the 1 ms GC time in Dogelog Player show that >>>> the reachability thingy is the minor effort or optimization >>>> >>>> to get nice performance: >>>> >>>> >>>> /* WebPL GC */ >>>> (1846.1ms) >>>> >>>> /* Dogelog Player 1.3.6 for JavaScript (16.08.2025) */ >>>> % Zeit 2992 ms, GC 1 ms, Lips 2514202, Uhr 17.08.2025 17:44 >>>> >>>> /* SWI-Prolog WASM */ >>>> (4204.2ms) >>>> >>>> /* Trealla Prolog WASM */ >>>> (23568.9ms) >>>> >>>> The test code was: >>>> >>>> test :- >>>> len(L, 1000), >>>> primes(L, _). >>>> >>>> primes([], 1). >>>> primes([J|L], J) :- >>>> primes(L, I), >>>> K is I+1, >>>> search(L, K, J). >>>> >>>> search(L, I, J) :- >>>> mem(X, L), >>>> I mod X =:= 0, !, >>>> K is I+1, >>>> search(L, K, J). >>>> search(_, I, I). >>>> >>>> mem(X, [X|_]). >>>> mem(X, [_|Y]) :- >>>> mem(X, Y). >>>> >>>> len([], 0) :- !. >>>> len([_|L], N) :- >>>> N > 0, >>>> M is N-1, >>>> len(L, M). >>>> >>>> Bye >>> >> >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-11-12 12:59 +0100 |
| Subject | Sleepy Joe and the Poor South (Local AI Emacs Mode) (Re: Prolog Education Group clueless about the AI Boom?) |
| Message-ID | <10f1sr7$bhsk$2@solani.org> |
| In reply to | #14461 |
Hi, Breaking News from the French conference of philisophy professors in education. They launched the Local AI Emacs Mode initiative to bring new technology to even most remote corners of the earth, such as the Poor South, i.e. Spain, Brasil, Argentinia, etc.. It consists of: - **org.joe:** This is a numpy library that can solve large band matrices via storing them on floppy disk. One speaker of the philosophy conference said, this is ideal to demonstrate algorithms such as Stable Diffusion, it might take a month though to generate an image but it servers its educatinal goals for Low-Resource teaching. - **org.sleepy:** This is a sympy library that can also do natural deduction. It uses very natural communication means such as E-mail. Its especially useful together with org.joe, since it will notify the user when to change a floppy disk via E-mail. - SWI-Prolog integration of Local AI: org.joe has a R binding, which has SWI-Prolog binding, which has a Janus Python binding, which has a JSON web server binding, etc.. etc.. And org.sleepy can be controlled via their brand new XPCE, the Emacs that runs in a Mac/Windows Window. But most Low-Resource teachers and students will not be able to use it, since they have only an ASCII terminal console on a 32-bit Unix. Bye Mild Shock schrieb: > Concerning this boring nonsense: > > https://book.simply-logical.space/src/text/2_part_ii/5.3.html# > > Funny idea that anybody would be interested just now in > the year 2025 in things like teaching breadth first > search versus depth first search, or even be “mystified” > by such stuff. Its extremly trivial stuff: > > Insert your favorite tree traversal pictures here. > > Its even not artificial intelligence neither has anything > to do with mathematical logic, rather belongs to computer > science and discrete mathematics which you have in > 1st year university > > courses, making it moot to call it “simply logical”. It > reminds me of the idea of teaching how wax candles work > to dumb down students, when just light bulbs have been > invented. If this is the outcome > > of the Prolog Education Group 2.0, then good night. >
[toc] | [prev] | [next] | [standalone]
| From | Mild Shock <janburse@fastmail.fm> |
|---|---|
| Date | 2025-11-12 13:12 +0100 |
| Subject | Beyond Sleepy Joe around the World (Was: Sleepy Joe and the Poor South (Local AI Emacs Mode)) |
| Message-ID | <10f1tje$bigu$1@solani.org> |
| In reply to | #14989 |
Hi, This is information provided by ChatGPT. I asked whether there will be similar initiatives like the MZ-80k back then in Japan, but for Local AI? In Education the Local AI, locally on your device idea, has probably not yet arrived. But there are AI initiatives: - Countries with Active AI Integration or Guidance in Education: Canada, USA, China, UAE, Australia, Some Europe, etc.. https://www.sourcesecurity.com/img/news/920/lithuania-s-ai-in-schools-nexos-ai-initiative-920x533.jpg - People’s Republic of China (e.g., Hangzhou), AI education from early age China’s Hangzhou makes AI classes compulsory in schools amid nationwide push. Local governments are beginning to take action after Beijing said it wants all primary and secondary students to study the advanced tech https://www.scmp.com/economy/china-economy/article/3323082/chinas-hangzhou-makes-ai-classes-compulsory-schools-amid-nationwide-push - Estonia Announces A Groundbreaking National Initiative: AI Leap Programme to Bring AI Tools to All Schools Estonia, one of the world's most advanced digital societies, announced today an ambitious nationwide artificial intelligence education program called AI Leap 2025 (TI-Hüpe 2025 in Estonian). The initiative, planned to be launched on 1 September 2025, will provide students and teachers with free access to the world's leading AI applications and the necessary skills to use them effectively in learning, marking the next chapter in Estonia's digital society journey. https://www.hm.ee/en/news/estonia-announces-groundbreaking-national-initiative-ai-leap-programme-bring-ai-tools-all But there are chances the Local AI, locally on your device, becomes even available for Low-Resource regions: - Likely trends by 2026: AI-capable chips everywhere, Cheaper edge AI hardware, Improved efficiency, Education-specific variants, Local models catching up. - In other words, by late 2026, the dream of a “new MZ-80K era” — affordable, compact AI learning machines for every classroom — could be technically and economically feasible. In Miniature you have already Local AI on your smartphones. Bye P.S.: Here is the chat: mz-80k education initiative https://chatgpt.com/share/6914648d-e934-8013-9388-3bcf40f753a8 Mild Shock schrieb: > Hi, > > Breaking News from the French conference of > philisophy professors in education. They launched > the Local AI Emacs Mode initiative to bring > > new technology to even most remote corners > of the earth, such as the Poor South, i.e. > Spain, Brasil, Argentinia, etc.. > > It consists of: > > - **org.joe:** This is a numpy library that > can solve large band matrices via storing > them on floppy disk. One speaker of the > philosophy conference said, this is ideal > to demonstrate algorithms such as Stable > Diffusion, it might take a month though > to generate an image but it servers its > educatinal goals for Low-Resource teaching. > > - **org.sleepy:** This is a sympy library that > can also do natural deduction. It uses > very natural communication means such as > E-mail. Its especially useful together with > org.joe, since it will notify the user when > to change a floppy disk via E-mail. > > - SWI-Prolog integration of Local AI: > org.joe has a R binding, which has SWI-Prolog > binding, which has a Janus Python binding, which > has a JSON web server binding, etc.. etc.. And > org.sleepy can be controlled via their brand new > XPCE, the Emacs that runs in a Mac/Windows Window. > But most Low-Resource teachers and students will > not be able to use it, since they have only > an ASCII terminal console on a 32-bit Unix. > > Bye > > Mild Shock schrieb: >> Concerning this boring nonsense: >> >> https://book.simply-logical.space/src/text/2_part_ii/5.3.html# >> >> Funny idea that anybody would be interested just now in >> the year 2025 in things like teaching breadth first >> search versus depth first search, or even be “mystified” >> by such stuff. Its extremly trivial stuff: >> >> Insert your favorite tree traversal pictures here. >> >> Its even not artificial intelligence neither has anything >> to do with mathematical logic, rather belongs to computer >> science and discrete mathematics which you have in >> 1st year university >> >> courses, making it moot to call it “simply logical”. It >> reminds me of the idea of teaching how wax candles work >> to dumb down students, when just light bulbs have been >> invented. If this is the outcome >> >> of the Prolog Education Group 2.0, then good night. >> >
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | comp.lang.prolog
csiph-web