Ann: SWI-Prolog 8.1.21

Dear SWI-Prolog user,

I’m happy to announce SWI-Prolog 8.1.21. The main enhancements are
related to tabling, but there are quite a few smaller but important
fixes as well as many documentation enhancements thanks to the
continuous comments on documentation on this forum. Highlights:

  • Much better support for tabling with answer subsumption, also
    known as mode directed tabling. These patches notably allow
    answer subsumption and normal tabled predicates to have mutual
    dependencies and provide well founded semantics for predciates
    using answer subsumption. With these changes,
    PLOW, A Meta-Interpreter
    for Fuzzy (Probabilistic) Logic Programming
    developed for XSB now
    runs on SWI-Prolog.

  • Matt Lilley redesigned much of the library(ssl) handling of
    certificates. This supports more reasoning about certificate
    and more fine grained support of accepted certificates. Basic
    usage (using the default system certificates or no certificate
    checking) is compatible. Applications using more advanced
    certificate handling may need updating. See the changelog and
    documentation for details.

  • When and where to prompt the user is rationalized and documented
    after discussion here.

  • format/3 now raises an exception on excess arguments.

  • Fixed a possible crash in stream_pair/3.

  • Several extensions to the XSB compatibility framework.

    Enjoy — Jan

SWI-Prolog Changelog since version 8.1.20

  • FIXED: Compilation of single threaded version

  • ENHANCED: Tabling with answer subsumption. This elaborate patch is a
    fundamental rewrite on how answer subsumption stores the aggregated
    answers and how it relates to the default tabling. It realises the
    following: - Support well founded semantics under answer subsumption

    • Support tabling SCCs (Strongly Connected Components) holding
      both normally tabled goals and goals subject to answer subsumption.
    • Add XSB compatible not_exist/1. - Simplify notably the Prolog
      code for tabling completion for
      better performance.
  • FIXED: build without O_PLMT.

  • FIXED: crash in ‘$tbl_worklist_data’/2 (for table debugging).

  • FIXED: Issue#537: stream_pair/3 crashed if the first argument is not
    a blob (atom or stream pair). Reported by Peter Ludemann.

  • FIXED: xpce isue#17: predicate_label/2 should call
    prolog_predicate_name/2 using a head rather than a predicate
    indicator
    . Paulo Moura.

  • PORT: Add -with-zlib to the MinGW build instructions for library
    archive. Matt Lilley.

  • FIXED: Docs says that prompting only depends on the tty property of
    user_input. Implementation also demanded user_output to be a
    tty. Now according to docs, which is compatible with e.g., bash.

  • DOC: Updated docs for prompt/2.

  • MODIFIED: Do not prompt if user_input is not connected to a terminal,
    i.e., stream_property(user_input, tty(true)) is false. After forum
    messages by Peter Ludemann and Boris Vassilev.

  • DOC: deprecate old meta predicates and explain +/1 vs. not/1.

  • FIXED: XSB get_residual/2: also deal with answer subsumption.

  • FIXED: table/1: answer subsumption (mode) specifications with only
    indexed arguments.

  • ENHANCED: tabling with answer subsumption: as normal tabling, only
    add the unbound answer skeleton to the answer table.

  • XSB: properly implement not_exists/1.

  • XSB: abort/1 is an XSB built-in rather than defined in error_handler.

  • FIXED: Avoid predicate_property(_:Head, visible) with instantiated
    Head creating empty predicates in all existing modules. This is
    not a semantic problem, but it wastes resources.

  • ADDED: Collect statistics on shared tabling: deadlocks and events where
    a thread has to wait for a table to be completed by another thread.

  • FIXED: mutex_statistics/0: keeping trackof known mutexes was broken.

  • FIXED: Create the shared_table_space Prolog flag.

  • MODIFIED: resource_error(table_space) is now
    one of resource_error(private_table_space) or
    resource_error(shared_table_space).

  • XSB: :- table/1: accept as private.

  • MODIFIED: format/1-3: raise an exception if there are more argument
    than are consumed by the format. Issue raised by Boris Vassilev
    on the forum. Note that this may result in good programs now being
    aborted with an exception. I have little clue as to how many problems
    this may raise. Introducing a flag to choose between silent operation,
    warning or error seems an overkill as well though.

  • XSB: Added coninc/1,2 to the gensym module.

  • XSB: Added thread module.

  • XSB: provide thread_shared/1.

  • FIXED: Possibly use-after-free while inserting a node in a trie.
    This patch also fixes the trie/tabling memory usage admin.

  • ENHANCED: read_term/2,3 should not create a new module if the option
    module(Module) is given but the target module does not exist. Now uses
    user as this is the default module from which new modules inherit.
    Made this behaviour explicit in the documentation.

  • DOC: Added library(thread) to main documentation.

  • ADDED: prolog:deprecated//1 to generate dedicated deprecated messages.

  • ADDED: tbacktrace/1,2: print the stack of another thread in the
    console for debugging purposes.

  • ADDED: library(thread): call_in_thread/2 to run a goal synchronously
    in another thread, allowing to obtain information from a thread.

  • DOC: Updated man/gen/swipl.bbl, the generated LaTeX bbl file used
    for the HTML documentation.

  • DOC: predicate_property/2 enhancements.

  • DOC: Add library(prolog_jiti) to the manual.

Package http

  • FIXED: Missing cut

  • MODIFIED: http_open/3: map cacerts_file(File) to cacerts options.

Package ltx2htm

  • ENHANCED: Map some more mathematical symbols to HTML entities.

Package plunit

  • DOC: Fix documentation link. Also removes some old files from
    pre-cmake eras.

Package semweb

  • ENHANCED: library(semweb/rdf_portray): recognise HTTPS URLs.
    Joos Geurts.

Package ssl

  • MODIFIED: ssl_context/3 option processing. The option cacert_file(File)
    has been deprecated in favor of cacerts(List) to ensure unambiguous
    merging of options. This notably affects the hook http:open_options/2
    when both cacert_file and cacerts options are provided. New rules:

    • Only use cacerts(List) - If there are multiple answers,
      http:open_options/2 earlier values
      for cacerts(List) overrule later. For each solution of this hook,
      cacert_file(File) is mapped to cacerts([file(File)]) before options
      are merged. - An explicit cacerts(List) in the option list
      overrules defaults.

    If a cacert_file(File) term is mapped the system prints a deprecated
    message.

Package table

  • PORT: Fix for MacOS by Abramo Bagnara.
2 Likes

Fuzzy (Probabilistic) Logic Programming

I hope this is a valid reference: Fuzzy-probabilistic logic for common sense


EDIT

See better reference in this post.

Matt Lilley redesigned much of the library(ssl) handling of certificates.

Thanks Matt.

1 Like

When and where to prompt the user is rationalized and documented after discussion here.

I believe this is the proper post: How to turn off "|:" prompt for reading from user_input?

1 Like

I think the correct reference is http://ceur-ws.org/Vol-2350/xposter1.pdf

1 Like