• Is there a Swiss Army Knife of launching a Prolog system (Was: Most radical approach is Novacore from Dogelog Player)

    From Mild Shock@janburse@fastmail.fm to comp.lang.prolog on Sun Jul 13 15:17:11 2025
    From Newsgroup: comp.lang.prolog


    BTW: I see what you did here:

    doge.pl: $(PROG)
    $(file >$@,false :- \+true. ?- ['$<'],$(MAIN).)

    https://github.com/hurufu/prolog-all/blob/main/rules.mk

    Yes, I do not yet have a -g option.

    Maybe should change that... The issue is a
    little tricky. Only recently I managed to handle
    some stuff that is tied to to the command line
    after the Novacore has been loaded.

    For example the top-level is now entered after
    the Novacore is loaded, and the top-level loads
    in itself library(session) etc.. To have a -g option
    there is a dependency on

    library(charsio), to convert a string into a term,
    which is not part of Novacore itself. So maybe I could
    do the same for a -g option, so that I can keep
    the Novacore small, load

    library(charsio) depending on the command line.
    I just did yesterday something to make the Novacore
    smaller. And handling a -g option this way could
    be a viable way to keep it small.

    Mild Shock schrieb:
    Hi,

    The most radical approach is Novacore from
    Dogelog Player. It consists of the following
    major incisions in the ISO core standard:

    - We do not forbid chars, like for example
    -a using lists of the form [a,b,c], we also
    -a provide char_code/2 predicate bidirectionally.

    - We do not provide and _chars built-in
    -a predicates also there is nothing _strings. The
    -a Prolog system is clever enough to not put
    -a every atom it sees in an atom table. There
    -a is only a predicate table.

    - Some host languages have garbage collection that
    -a deduplicates Strings. For example some Java
    -a versions have an options to do that. But we
    -a do not have any efforts to deduplicate atoms,
    -a which are simply plain strings.

    - Some languages have constant pools. For example
    -a the Java byte code format includes a constant
    -a pool in every class header. We do not do that
    -a during transpilation , but we could of course.
    -a But it begs the question, why only deduplicate
    -a strings and not other constant expressions as well?

    - We are totally happy that we have only codes,
    -a there are chances that the host languages use
    -a tagged pointers to represent them. So they
    -a are represented similar to the tagged pointers
    -a in SWI-Prolog which works for small integers.

    - But the tagged pointer argument is moot,
    -a since atom length=1 entities can be also
    -a represented as tagged pointers, and some
    -a programming languages do that. Dogelog Player
    -a would use such tagged pointers without
    -a poluting the atom table.

    - What else?

    Bye

    Mild Shock schrieb:

    Technically SWI-Prolog doesn't prefer codes.
    Library `library(pure_input)` might prefer codes.
    But this is again an issue of improving the
    library by some non existent SWI-Prolog community.

    The ISO core standard is silent about a flag
    back_quotes, but has a lot of API requirements
    that support both codes and chars, for example it
    requires atom_codes/2 and atom_chars/2.

    Implementation wise there can be an issue,
    like one might decide to implement the atoms
    of length=1 more efficiently, since with Unicode
    there is now an explosion.

    Not sure whether Trealla Prolog and Scryer
    Prolog thought about this problem, that the
    atom table gets quite large. Whereas codes don't
    eat the atom table. Maybe they forbit predicates

    that have an atom of length=1 head:

    h(X) :-
    -a-a-a-a write('Hello '), write(X), write('!'), nl.

    Does this still work?

    Mild Shock schrieb:
    Concerning library(portray_text) which is in limbo:

    Libraries are (often) written for either
    and thus the libraries make the choice.

    But who writes these libraries? The SWI Prolog
    community. And who doesnrCOt improve these libraries,
    instead floods the web with workaround tips?
    The SWI Prolog community.

    Conclusion the SWI-Prolog community has itself
    trapped in an ancient status quo, creating an island.
    Cannot improve its own tooling, is not willing
    to support code from else where that uses chars.

    Same with the missed AI Boom.

    (*) Code from elsewhere is dangerous, People
    might use other Prolog systems than only SWI-Prolog,
    like for exampe Trealla Prolog and Scryer Prolog.

    (**) Keeping the status quo is comfy. No need to
    think in terms of programm code. Its like biology
    teachers versus pathology staff, biology teachers
    do not everyday see opened corpses.


    Mild Shock schrieb:

    Inductive logic programming at 30
    https://arxiv.org/abs/2102.10556

    The paper contains not a single reference to autoencoders!
    Still they show this example:

    Fig. 1 ILP systems struggle with structured examples that
    exhibit observational noise. All three examples clearly
    spell the word "ILP", with some alterations: 3 noisy pixels,
    shifted and elongated letters. If we would be to learn a
    program that simply draws "ILP" in the middle of the picture,
    without noisy pixels and elongated letters, that would
    be a correct program.

    I guess ILP is 30 years behind the AI boom. An early autoencoder
    turned into transformer was already reported here (*):

    SERIAL ORDER, Michael I. Jordan - May 1986
    https://cseweb.ucsd.edu/~gary/PAPER-SUGGESTIONS/Jordan-TR-8604-OCRed.pdf >>>>

    Well ILP might have its merits, maybe we should not ask
    for a marriage of LLM and Prolog, but Autoencoders and ILP.
    But its tricky, I am still trying to decode the da Vinci code of

    things like stacked tensors, are they related to k-literal clauses?
    The paper I referenced is found in this excellent video:

    The Making of ChatGPT (35 Year History)
    https://www.youtube.com/watch?v=OFS90-FX6pg





    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Mild Shock@janburse@fastmail.fm to comp.lang.prolog on Sun Jul 13 15:19:09 2025
    From Newsgroup: comp.lang.prolog


    One problem is that the -g option is not really
    compatible with the scripting mode of a Prolog
    system, since in scripting mode the assumptions
    that after the scripts command line options

    appear that are handled by the Prolog application.
    So introducing a -g option can possibly only properly
    be done, by also introducing and -l option, so that
    we end up with this here, only it will not

    be SWI-Prolog, but Dogelog Player:

    swipl -l $< -g '$(MAIN),halt'

    This is surely doable, but wasn't priority so far.
    In SWI-Prolog there is still a choice you could also
    call -g and -g or -g and -t. You could also do the
    following, documented here on the SWI-Prolog website:

    swipl -l $< -g '$(MAIN)' -g halt

    Or this one, also documented on the SWI-Prolog website:

    swipl -l $< -g '$(MAIN)' -t halt

    I don't like this ambiguity, have to research what -e
    commandline does found in other Prolog systems. Although
    its tempting to have the version/0 call and the prolog/0
    call separately customizable, with

    an '-e' option I could also do:

    swipl -l $< -e alt_version,alt_prolog

    Crucial requirement is only that complex terms are
    accepted on the command line, and thats why I
    need library(charsio).

    Mild Shock schrieb:

    BTW: I see what you did here:

    doge.pl: $(PROG)
    -a-a-a-a$(file >$@,false :- \+true. ?- ['$<'],$(MAIN).)

    https://github.com/hurufu/prolog-all/blob/main/rules.mk

    Yes, I do not yet have a -g option.

    Maybe should change that... The issue is a
    little tricky. Only recently I managed to handle
    some stuff that is tied to to the command line
    after the Novacore has been loaded.

    For example the top-level is now entered after
    the Novacore is loaded, and the top-level loads
    in itself library(session) etc.. To have a -g option
    there is a dependency on

    library(charsio), to convert a string into a term,
    which is not part of Novacore itself. So maybe I could
    do the same for a -g option, so that I can keep
    the Novacore small, load

    library(charsio) depending on the command line.
    I just did yesterday something to make the Novacore
    smaller. And handling a -g option this way could
    be a viable way to keep it small.

    Mild Shock schrieb:
    Hi,

    The most radical approach is Novacore from
    Dogelog Player. It consists of the following
    major incisions in the ISO core standard:

    - We do not forbid chars, like for example
    -a-a using lists of the form [a,b,c], we also
    -a-a provide char_code/2 predicate bidirectionally.

    - We do not provide and _chars built-in
    -a-a predicates also there is nothing _strings. The
    -a-a Prolog system is clever enough to not put
    -a-a every atom it sees in an atom table. There
    -a-a is only a predicate table.

    - Some host languages have garbage collection that
    -a-a deduplicates Strings. For example some Java
    -a-a versions have an options to do that. But we
    -a-a do not have any efforts to deduplicate atoms,
    -a-a which are simply plain strings.

    - Some languages have constant pools. For example
    -a-a the Java byte code format includes a constant
    -a-a pool in every class header. We do not do that
    -a-a during transpilation , but we could of course.
    -a-a But it begs the question, why only deduplicate
    -a-a strings and not other constant expressions as well?

    - We are totally happy that we have only codes,
    -a-a there are chances that the host languages use
    -a-a tagged pointers to represent them. So they
    -a-a are represented similar to the tagged pointers
    -a-a in SWI-Prolog which works for small integers.

    - But the tagged pointer argument is moot,
    -a-a since atom length=1 entities can be also
    -a-a represented as tagged pointers, and some
    -a-a programming languages do that. Dogelog Player
    -a-a would use such tagged pointers without
    -a-a poluting the atom table.

    - What else?

    Bye

    Mild Shock schrieb:

    Technically SWI-Prolog doesn't prefer codes.
    Library `library(pure_input)` might prefer codes.
    But this is again an issue of improving the
    library by some non existent SWI-Prolog community.

    The ISO core standard is silent about a flag
    back_quotes, but has a lot of API requirements
    that support both codes and chars, for example it
    requires atom_codes/2 and atom_chars/2.

    Implementation wise there can be an issue,
    like one might decide to implement the atoms
    of length=1 more efficiently, since with Unicode
    there is now an explosion.

    Not sure whether Trealla Prolog and Scryer
    Prolog thought about this problem, that the
    atom table gets quite large. Whereas codes don't
    eat the atom table. Maybe they forbit predicates

    that have an atom of length=1 head:

    h(X) :-
    -a-a-a-a write('Hello '), write(X), write('!'), nl.

    Does this still work?

    Mild Shock schrieb:
    Concerning library(portray_text) which is in limbo:

    Libraries are (often) written for either
    and thus the libraries make the choice.

    But who writes these libraries? The SWI Prolog
    community. And who doesnrCOt improve these libraries,
    instead floods the web with workaround tips?
    The SWI Prolog community.

    Conclusion the SWI-Prolog community has itself
    trapped in an ancient status quo, creating an island.
    Cannot improve its own tooling, is not willing
    to support code from else where that uses chars.

    Same with the missed AI Boom.

    (*) Code from elsewhere is dangerous, People
    might use other Prolog systems than only SWI-Prolog,
    like for exampe Trealla Prolog and Scryer Prolog.

    (**) Keeping the status quo is comfy. No need to
    think in terms of programm code. Its like biology
    teachers versus pathology staff, biology teachers
    do not everyday see opened corpses.


    Mild Shock schrieb:

    Inductive logic programming at 30
    https://arxiv.org/abs/2102.10556

    The paper contains not a single reference to autoencoders!
    Still they show this example:

    Fig. 1 ILP systems struggle with structured examples that
    exhibit observational noise. All three examples clearly
    spell the word "ILP", with some alterations: 3 noisy pixels,
    shifted and elongated letters. If we would be to learn a
    program that simply draws "ILP" in the middle of the picture,
    without noisy pixels and elongated letters, that would
    be a correct program.

    I guess ILP is 30 years behind the AI boom. An early autoencoder
    turned into transformer was already reported here (*):

    SERIAL ORDER, Michael I. Jordan - May 1986
    https://cseweb.ucsd.edu/~gary/PAPER-SUGGESTIONS/Jordan-TR-8604-OCRed.pdf >>>>>

    Well ILP might have its merits, maybe we should not ask
    for a marriage of LLM and Prolog, but Autoencoders and ILP.
    But its tricky, I am still trying to decode the da Vinci code of

    things like stacked tensors, are they related to k-literal clauses?
    The paper I referenced is found in this excellent video:

    The Making of ChatGPT (35 Year History)
    https://www.youtube.com/watch?v=OFS90-FX6pg






    --- Synchronet 3.21a-Linux NewsLink 1.2