DOCUMENT
DOCUMENT
  **module** lang = html
    MACROS
      *import standard
        NUMBERING ON
        *exec
          grand titre pour les onglets
            TITLE_ALL_PAGES = "APPLICATIONS IN PROLOG"
        *base64 ON
      MON_TEXTE
        TITLE
          ETUDE DES APPLICATIONS PROLOG
        HEADER
          page de garde
            BR 3
              BR
              BR
                CENTER
                  XXLARGE
                    BOLD
                      APPLICATIONS IN PROLOG
              BR
                BOLD
                  2 avril 2022
              BR 3
        STYLE
          STYLES_2
        NAV
          NAV_SOMMAIRE
        TEXT
          GOSUB
  # TEXTE
    LARGE
      BLUE
        PROLOG n'est pas qu'un langage universitaire, mais a servi et sert encore dans des applications réelles, où il joue un rôle clef.
        On essaie d'inventorier les applications de Prolog et leurs orientations.
    RED
      CENTER
        XXLARGE
          WORK IN PROGRESS
          This document is presently not a report, only a knowledge base
          This document will be updated on a regular basis, according to contributions.
    Personnes ayant participé à cette rédaction
      COLUMNS_2
          Laurent Gouzènes
          Laurent Cervoni
          Eric de la Clergerie
          Jean Rohmer
          Bob Kowalski
          Veronica Dahl
    Quelques éléments préliminaires sur Prolog aujourdhui
      Le classement Tiobe des langages cite Prolog en 21 place.
      et avec quelques questions complémentaires
          Is Prolog professionally useful?
          prolog nécessite un état d'esprit particulier
            et de l'expérience (beaucoup ?)
          logic programming career ???
          Prolog is a crazy language :
            Unless you use it constantly, you end up forgetting it
          limitations of prolog (on wikipedia)
          comment documenter des programmes prolog ?
      Notes
          RED
            XLARGE
              BOLD
                Comparison of Prolog implementations
      Some history
        The history of prolog and derivates can be understood at different scales, and according to different views (theoretic, implementation, system features, syntex, etc, ...)
          More details can be read
              here.
              Colmerauer's blog
        COTECOTE
        A global view of the surrounding fields is depicted by the following image :
          Cartographie et typologie des outils et concepts basés sur ou inspirés par prolog
    LES APPLICATIONS
      Ce paragraphe ne recense que des applications qui ont réellement tourné dans des contextes opérationnels.
      Difficultés du recensement
        Le recensement présente plusieurs difficultés
            peu/pas de publicité des solutions mises en oeuvre.
            solutions remplacées après quelques années par des outils plus efficaces dans d'autres langages.
            ne prend pas en compte les applications "jouet" de laboratoires.
        Les applications prolog souffrent de :
            outils d'interface limités
                entrées sorties
                graphique
                modules de calcul auxiliaire
                  échanges de données efficaces .. ou complexes à mettre en oeuvre.
            programmeurs maîtrisant
                l'outil
                capacité d'abstraction nécessaire
        Some requests
            applications in prolog
                https://www.metalevel.at/prolog/web
                applications of prolog
                  quite complete set of algorithms and basic examples
                XPROLOG : prolog on android
                https://ieeexplore.ieee.org/document/5387386
                web development
                    http://pbrown.me/blog/swi_spa/
                https://avaxgfx.com/ebooks/275088-programmer-passport-prolog.html
                formal european policies in prolog (project Light)
                Formal Models and Techniques for Analyzing Security Protocol
      Les programmes jouets
        On désigne par "programme jouet" un programme destiné à démontrer un principe ou un outil, mais qui n'a pas été jusqu'au bout d'une implémentation en vraie grandeur ou opérationnelle dans le monde réel.
        Il y a beaucoup de programmes jouets intéressants pour des raisons de pédagogie :
            APPLICATION
              le monde des cubes
                Des cubes empilables sont sur une table.
                  Objectif
                Il s'agit
                  Objectif
                    de trouver une séquence qui permet d'une configuration à une autre
                    de guider un "robot manipulateur" pour déplacer les cubes
                COTECOTE
                  Objectif
                    Exemple
                résolution de problèmes
                  techniques utilisées
                traitement du langage naturel
                  techniques utilisées
                graphique
                  techniques utilisées
                peu de contraintes (ex : cubes vs Hanoï)
                  notes
                  ou place limitée sur la table
                se cantone souvent à des cas triviaux (3 cubes, pas 1000 cubes)
                  notes
                les programmes présentés ne passent pas à l'échelle.
                  notes
                formalisme pas toujours évident
                  notes
                  si beaucoup plus de cubes
                documentation pauvre
                  notes
                possible d'avoir plus d'objets (boules, pyramides, etc), et couleurs ?
                  notes
              le problème des dames aux échecs
                Placer N dames sur un échiquier sans prise mutuelle
                  Objectif
                backtracking
                  notes
                  simple jusquà 20
                  plus aléatoire 20 -> 29
                  impraticable N > 30
                discussion sur les stratégies possibles
                  notes
                  strategies for N queens - advanced programming.pdf
                  backtrack
                  labelling plus astucieux
                  positionnement
        On peut même constater que les programmes "jouets" n'ont pas permis la constitution de librairies ré-utilisables
      Exemples applications du passé
        Le tableau suivant présente un recensement de quelques applications:
          Thème
            thématique
              contexte industriel, quantifier si possible
                Contexte
              résultats tangibles,
                Résultats
                qualitatifs
                quantitatifs
                autres
              xxxx
                Année
              où en est on aujourd'hui ?
                Note
                toujours en service ?
              une nouvelle technologie ?
                Note
            traitement de textes
              traitement des doublons et fautes d'orthographe dans les adresses postales d'une base de données.
                Contexte
              plusieurs dizaines de millions d'adresses.
                Contexte
              temps de traitement = ...
                Résultats
              1995
                Année
              Solutions avec programme impératif classique( /java)
                Note
            conception de pièces en matériaux composites
              Besoin d'un outil de CAO pour produire des plans de fabrication de pièces en matériaux composites d'épaisseur variable (et donc le nomre de couches et leur orientations).
                Contexte
              problème combinatoire
                Contexte
              1988
                Année
              Arrangement des couches produit en quelques secondes.
                Résultats
              Production des plans identiques avec plans d'atelier du processus de fabrication
                Résultats
              fabrication de centaines de pièces pour l'A320.
                Résultats
              ??
                Note
            conception de molécules
              recherche de structures ayant les bonnes propriétés de spectre et d'organisation moléculaire.
                Contexte
              problème combinatoire
                Contexte
              identification de centaines de molécules
                Résultats
              1988-1992
                Année
              solution réécrite complètement en C, puis en python et C
                Note
            windows NT
              Along with its C++ code and SProlog interpreter, the NCPA.CPL file has a 700-line SProlog program embedded into it as a textual Windows "resource."
                Contexte
                cf here
                  The SProlog algorithm has several features, but primarily it exploits Prolog's inherent backtracking mechanism by exhaustively checking each extant component with every other to determine compatibility. A set of potential "bindings" (one-directional links) is asserted into the Prolog database in the first pass. Then the other constraints are checked, and any associations which would violate negative constraints are retracted. Finally, the remaining database information is used to construct NT namespace device names for each component's "bindings."
                  This network configuration methodology was designed to facilitate the installation of component ensembles which could not be foreseen in 1991, when the work began. Since components declare their classes and constraints themselves, the Prolog interpreter can be counted upon to perform correctly without requiring updates to the NT binaries themselves.
                  This program is the actual network-configuration algorithm; a C++ class "wrapper" encapsulates the SProlog engine and exposes C++ member functions for facilities such as consulting and querying. Network configuration is performed by consulting the "rules" (the resource-based algorithm), consulting the "facts" (the Registry-derived declarative information), and performing a single query which runs the configure everything predicate. Then the C++ code performs many smaller queries to enumerate the results of the main query from the SProlog database. This information is rearranged and written back into each network component's Registry area. Then, when the network is started, this updated information is used by each software process to determine what other software modules are to be dynamically connected to it.
              not in use anymore
                Résultats
                https://www.drdobbs.com/cpp/extending-c-with-prolog/184409294
              code available here
                Résultats
                prolog en C
                  https://www.drdobbs.com/cpp/extending-c-with-prolog/184409294#00a1_003a
              1994
                Année
      Exemples actuels
          Thème
            thématique
              contexte industriel, quantifier si possible
                Contexte
              quelques détails et implémentation
                Résultats
              xxxx
                Année
              où en est on aujourd'hui ?
                Note
                toujours en service ?
              une nouvelle technologie ?
                Note
            compréhension du langage naturel
              analyse de pages html et suivi des news des agences
                Contexte
              analyse quotidienne de milions de news
                Résultats
              au dessus d'une couche de TLN en python.
                Résultats
                après spacy.
              2020 ->
                Année
              cf
                Note
                causality link
            production
            Marque commerciale
              Watson / IBM
                Contexte
                  surtout Java et C
                  des gros morceaux en prolog
                    Articles :
                      https://www.cs.nmsu.edu/ALP/2011/03/natural-language-processing-with-prolog-in-the-ibm-watson-system/
            Logical English
              traduction d'un mini langage de règles en prolog (Kowalski)
                Contexte
              usages
                Contexte
                  représentation standardisée de règles de comportement et calcul
              the most popular approach to building Computational Law systems today is based on Computational Logic”, (Genesereth ),
                Contexte
                Genesereth M (2015) Computational law: the cop in the backseat. In third annual futurelaw conference
            programmation low code / GeneXUs
              GeneXus is a Low Code, cross-platform, knowledge representation-based development tool,[1][2] mainly oriented towards enterprise-class applications for web applications, smart devices, and the Microsoft Windows platform.
                Contexte
                GeneXus site
            Knowledge Graphs (TerminusDB
              TerminusDB is an open source knowledge graph and document store. It is used to build versioned data products. It is a native revision control database that is architecturally similar to Git. It is listed on DB-Engines.
                Contexte
                cf WOQL as a web object query language
    ATTENDUS ET REALITES DE PROLOG
      Les prolog modernes
        Il y a de nombreuses variantes modernes de prolog
            caractéristiques communes
            différences
        Les avantages des prolog modernes :
            rapidité d'exécution :
              les machines de 2002 sont 1 millird de fois plus puissantes que les machines de 1985.
            solvers autres que unification
                avec contraintes
                    avec intervalles
                    sur ensembles
      Critères d'évaluation
        critère
          critère
          lisibilité
            formalisme compact pour problèmes complexes
              Attendu
            programmes souvent illisibles pour celui qui ne les a pas écrit.
              Réel
            programmes mal documentés
              Réel
            Liens entre formalisme et réalité peu clairs.
              Réel
            Sous-sujet 3
              Remarque
          simplicité
          efficacité
          dialogue avec utilisateur
          généralité d'usage
            la logique devrait résoudre tous les problèmes
              Attendu
            besoin de flou
              Réel
            besoin d'évaluer des solutions avec une/des fonction/S d'évaluation
              Réel
            calcul fonctionnel ou impératif nécessaire
              Réel
            existence de prologs flous ?
              Remarque
            lenteur ?
              Remarque
            modèles à base de NN plus efficaces
              Remarque
          langage naturel
            production de textes pour explications
              Attendu
            toujours un sujet plutôt absent, peut-être par manque de systèmes capables de raisonner de façon non triviale.
              Réel
            modèles avec des RN plus souples ?
              Remarque
          apprentissage
            en opposition à la programmation de règles
              Attendu
            problème bien compris dans les cas simples,
              Réel
              mais pas dans les cas complexes.
            impact sur le coût du calcul souvent non mesurée.
              Réel
          intégration avec des processus algorithmiques.
      NOTES
          dès qu'une application est bien comprise et maîtrisée en prolog, elle est réécrite pour plus d'éfficacité.
          difficulté de maîtriser des centaines de règles
          le noyau prolog, qui est concentré sur l'unification, ne fournit pas d'outils d'interface homme-machine confortables.
            Les programmeurs se tournent vers d'autres outils.
      Nouveaux axes
        stats + neuronal
          Via Eric de la Clergerie
            Nom
              Pedro Domingos
                Alchemy
                  Outil
                https://alchemy.cs.washington.edu/
                  Lien
                software package providing a series of algorithms for statistical relational learning and probabilistic logic inference, based on the Markov logic representation. Alchemy allows you to easily develop a wide range of AI applications, including:
                  Info
                    Collective classification
                    Link prediction
                    Entity resolution
                    Social network modeling
                    Information extraction
              Jason Eisner
                Dyna
                  Outil
                https://dyna.readthedocs.io/en/latest/
                  Lien
                Dyna is an new declarative programming language developed at Johns Hopkins University.
                  Info
                logic + solver
                  notes
              ProbLog2 was developed in the DTAI group of KULeuven,
                Problog
                  Outil
                https://dtai.cs.kuleuven.be/problog/
                  Lien
                Probabilistic logic programs are logic programs in which some of the facts are annotated with probabilities.
ProbLog is a tool that allows you to intuitively build programs that do not only encode complex interactions between a large sets of heterogenous components but also the inherent uncertainties that are present in real-life situations.
                  Info
                tutorial
                  notes
              ProbLog2 was developed in the DTAI group of KULeuven,
                DeepProbLog
                  Outil
                https://github.com/ML-KULeuven/deepproblog
                  Lien
                BOLD
                  Info
                  DeepProbLog is an extension of ProbLog
                en python
                  notes
                    besoin de
                      ProbLog
                      PySDD
                      PyTorch
                      TorchVision
                      PySwip
                that integrates Probabilistic Logic Programming with deep learning by introducing the neural predicate. The neural predicate represents probabilistic facts whose probabilites are parameterized by neural networks. For more information, consult the papers listed below.
                  Info
                    exemples
                    tutorial
                      42 mn
        usages au sein de frameworks
          Exemple
            Jupyter
              au point ou pas ?
                notes
    LIBRAIRIES EXISTANTES
      DEF_DB BASE__
        prolog system
          name of the system
            possibilité de faire tourner un server web 100% prolog
              web server
            avec et à partir des sources
              doc generator
            interface with sql for large databases
              sql interface
            Sous-sujet 4
              web client server
            if known
              price
            Sous-sujet 6
              description
            Sous-sujet 7
              other
            Sous-sujet 8
              platforms
            university
              company
            Sous-sujet 10
              constraints
          swi_prolog
            yes
              web server
            XPCE library
              graphics
              only linux ?
            rustique
              graphics
            ??
              sql interface
            yes
              doc generator
            free
              price
            interface -> C/C++, python, java, JPL, C#
              other
            Edinburgh Prolog standard
              other
            Unix, Mac, Windows
              platforms
            university
              company
          tau prolog
            manipulation du DOM
              web client server
            free
              price
            An open source Prolog interpreter in JavaScript
              description
            university/GIT
              company
            by definition
              web server
            on line tool
              platforms
          visual prolog
            free
              price
            professional edition - 100$
              price
            PDC
              company
          Prolog IV
            free
              price
            university
              company
          SWISH
            https://swish.swi-prolog.org/example/projections.swinb
            outil interactif pour programmer en prolog
              description
          other ?
            GUI
              graphics
      Usages
          EXTRACT TABLE description, web server, graphics, doc generator, sql interface, web client server, constraints
            TABLE
              {BASE__}
          USAGES
            TTS Text to speech
              swi prolog
                note
                pack_install(cowsay)
          Open Source projects used by SWI-Prolog
          COLUMNS_2
              CMake Configuration and build management
              dtoa.c (Float <-> text conversion by David M. Gay).
              GMP (Unbounded and rational arithmetic)
              GNU (Linux, development tools, libraries, etc.)
              LibYAML (A C library for parsing and emitting YAML)
              MacPorts (Porting environment for MacOS)
              MurmurHash (string hashing)
              Nullsoft (Windows installer)
              NetBSD (crypt implementation for Windows)
              OpenSSL (secure sockets)
              PCRE (Perl Compatible Regular Expressions)
              SHA routines by Brian Gladman
              Snowball NLP stemmer library
              UnixODBC (Database connectivity on Unix)
              utf8proc (unicode normalization)
              X.org (Graphics on Unix)
              Zlib (compression)
              Qt GUI console
          BOLD
            CENTER
              LARGE
                RED
                  Il y a un paradoxe : alors que Prolog est censé être excellent en génération de texte, il n'y a pas de module Text-To-Speech dans prolog
                    ==>
                      Il faut utiliser des outils externes
          mais il yen a un en python !
            ou librairies C, etc
      implémentation
          EXTRACT TABLE company, price, platforms, other
            TABLE
              {BASE__}
      Voir aussi
    Recommandations pour un futur de prolog
          développer un git spécialisé prolog
              librairies de résolutions de problèmes
              pousser les jouets à l'extrème. Par exemple :
                  monde des cubes = 1000 cubes, pas juste 3 cubes
                  dialogue en langage naturel avec centaines de phrases et mots
                    pas juste 20 mots de vocabulaire
              librairies d'interfaces
          publiciser les solutions développées.
              chaque conférence prolog doit avoir des papiers invités sur les applications
          install an interactive Prolog insinde the Jupyter framewordk
              it seems that existing solutions are not fully ok
                .... but you can
                  find more answers here
              http://alexriina.com/2019/02/11/ipython-prolog/
                works ?
    Notes pour le challenge
        Connaissances de base
          quelques sites intéressants
            méta site avec plein de liens
            sur github
                https://github.com/klaussinani/awesome-prolog#math
        COLUMNS_2
          Faire une hiérarchie de problèmes du plus simple au plus complexe
              Prolog de base
                  pour apprendre
                      revers d'une liste
                      compter en prolog
                        cf Jean Rohmer
                  simples
                      tours de hanoi
                      jeu de permutations
                      dessiner des fractales en prolog
                      mini eliza
                      traduction mot à mot angalis français
                  moyens
                      cubes avec <= 5 cubes
                      fonction dérivation
                      eliza mieux
                      améliorer la qualité de l'anglais par des règles de grammaire et de complémentation
                  difficiles
                      cubes avec <= 50 cubes
                          manipulation interactive
                          résolution de problèmes
                  utilisation des librairies
                      graphiques
                          animation des tours de Hanoi
                          animation des cubes
                      mini serveur web
                  très difficiles
                      graphique plus sophistiqué
                      cubes avec > 100 cubes
                        variantes
                            espace contraint
                            sur un plan
                            optimisation des trajets
                            etc
                      fonction intégration
                      agent conversationnel pour aider à écrire un programme
              prolog avec solver et autres variantes
                ???
    Bibliographie
      via Laurent Cervoni
          sémantique pour le ML
            https://arxiv.org/pdf/2202.09868v1.pdf
              2022
          Bâtment
            https://doi.org/10.1016/j.autcon.2021.103756
              accessible si paywall
                ou ici
              logic representation for BIM building offsite construction.pdf
          (psy et démonstrateur de théories)
              https://www.sciencedirect.com/science/article/pii/S0732118X20302130
                accessible si paywall
                  ou ici
                using logic programming for theory representation and scientific inference (2021).pdf
              https://jeanchristopherohner.github.io/theory-toolbox-2
                https://jeanchristopherohner.github.io/theory-toolbox-2/#writtenDoc
                  cf discussion sur "Advantages of Logic Programming"
          explicabilité en IA
            Prolog-based agnostic explanation module for structured pattern classification (2021)
          (modélisation empreinte carbone)
            Green Application Placement in the Cloud-IoT Continuum( 2021)
          Résolution des puzzles de Bongard (1967) en Prolog et en DeepLearning :
              Using Program Synthesis and Inductive Logic Programming to solve Bongard Problems - 2021
              https://k10v.github.io/2018/02/25/Solving-Bongard-problems-with-deep-learning/
                http://www.foundalis.com/res/diss_research.html
                  http://www.foundalis.com/soc/why_no_more_Bongard.html
                  Bongard Problems - Critique of RF4 : The RF4 approach to input representation, and why it should be avoided in cognitive science.
        RED
          Doc générale
        (Click on triangle to see more)
          DETAILS
            GOSUB
    APPENDIX
      CENTER
        BLUE
          BOLD
            main source
      Prolog implementations
        Name
          AllegroProlog
            Unix, Windows, Mac OS X
              OS
            Commercial, limited free edition available
              Licence
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
            Yes
              Object Oriented
            Yes, via Lisp
              Native OS Control
            Yes
              Stand Alone Executable
            Yes, via Lisp
              C Interface[3]
            Yes, via Lisp
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes, via Lisp
              Code Profiler
            S-expressions. Full Common Lisp integration.
              Syntax
          BProlog
            Unix, Windows, Mac OS X
              OS
            Free for non-commercial uses
              Licence
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
            Yes
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            ISO-Prolog, plus event-handling, CLP(FD), and tabling
              Syntax
          Ciao
            Unix, Windows, Mac OS X
              OS
            GPL, LGPL
              Licence
              Native Graphics
            Yes
              Compiled Code
              Unicode
            Yes
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            ISO-Prolog, plus extensions
              Syntax
          DOS-PROLOG
            MS-DOS
              OS
            Shareware
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
              C Interface[3]
              Java Interface[3]
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            Edinburgh Prolog
              Syntax
          ECLiPSe
            Linux, Windows, Solaris, macOS
              OS
            MPL
              Licence
              Native Graphics
            Yes
              Compiled Code
              Unicode
              Object Oriented
            Yes
              Native OS Control
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            Extended Prolog, Multi-dialect, including ISO
              Syntax
          GNU Prolog
            Unix, Windows, Mac OS X
              OS
            GPL, LGPL
              Licence
              Native Graphics
            Yes
              Compiled Code
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            ISO-Prolog
              Syntax
          JIProlog
            JVM, Android
              OS
            Shareware/Commercial and AGPL
              Licence
            Yes
              Native Graphics
              Compiled Code
            Yes
              Unicode
              Object Oriented
            Yes via Java
              Native OS Control
            Yes
              Stand Alone Executable
            Yes via Java
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            ISO-Prolog
              Syntax
          JLog
            JVM
              OS
            GPL
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
              Unicode
              Object Oriented
              Native OS Control
              Stand Alone Executable
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
              Debugger
              Code Profiler
            ISO-Prolog
              Syntax
          JScriptLog
            Web Browser
              OS
            GPL
              Licence
              Native Graphics
              Compiled Code
              Unicode
              Object Oriented
              Native OS Control
              Stand Alone Executable
              C Interface[3]
              Java Interface[3]
            Yes
              Interactive Interpreter
              Debugger
              Code Profiler
            ISO-Prolog
              Syntax
          jTrolog
            JVM
              OS
            LGPL
              Licence
              Native Graphics
              Compiled Code
            Yes
              Unicode
              Object Oriented
              Native OS Control
              Stand Alone Executable
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            ISO-Prolog tests[permanent dead link]
              Syntax
          LPA-PROLOG
            Windows
              OS
            Commercial
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
            Yes
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            Edinburgh Prolog with extensions
              Syntax
          Open Prolog
            Mac OS
              OS
            Freeware
              Licence
              Native Graphics
              Compiled Code
              Unicode
              Object Oriented
              Native OS Control
              Stand Alone Executable
              C Interface[3]
              Java Interface[3]
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
              Syntax
          Poplog Prolog
            Linux (32- and 64-bit), Unix, Windows
              OS
            Free Open Source
              Licence
            Only through POP-11, on Linux
              Native Graphics
            Yes
              Compiled Code
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            Edinburgh Prolog, with interfaces to Poplog Common Lisp and Pop-11
              Syntax
          SICStus Prolog
            Unix, Linux, Windows, macOS
              OS
            Commercial
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
            Yes
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            ISO-Prolog
              Syntax
          Strawberry Prolog
            Windows, Unix
              OS
            Freeware, Commercial
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
              Object Oriented
              Native OS Control
            Yes
              Stand Alone Executable
              C Interface[3]
              Java Interface[3]
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            Not ISO-Prolog + extensions
              Syntax
          SWI-Prolog
            Unix, Linux, Windows, macOS
              OS
            BSD License
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            ISO-Prolog, Edinburgh Prolog
              Syntax
          tuProlog
            JVM, Android
              OS
            LGPL
              Licence
            Yes
              Native Graphics
              Compiled Code
            Yes
              Unicode
              Object Oriented
              Native OS Control
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            ISO-Prolog
              Syntax
          Visual Prolog
            Windows
              OS
            Freeware, Commercial
              Licence
            Yes
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
            Yes
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
              Java Interface[3]
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
              Syntax
          XSB Prolog
            Linux, Windows, Solaris, macOS
              OS
            LGPL
              Licence
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
            Yes
              Code Profiler
            ISO-Prolog, tabled WFS
              Syntax
          YAP-Prolog
            Linux, Windows, Solaris, Mac OS X, HP-UX
              OS
            GPL or Artistic (user choice)
              Licence
              Native Graphics
            Yes
              Compiled Code
            Yes
              Unicode
              Object Oriented
            Yes
              Native OS Control
            Yes
              Stand Alone Executable
            Yes
              C Interface[3]
            Yes
              Java Interface[3]
            Yes
              Interactive Interpreter
            Yes
              Debugger
              Code Profiler
            Edinburgh, ISO-Prolog, Quintus and SICStus Prolog compatible
              Syntax
      Operating system and Web-related features
        Name
          BProlog
              Conditional compilation
              Sockets
              Multi-threading
            Yes
              Tabling
              HTTP client
              HTTP server
              HTML Parser
              RDF Triple store
          Ciao
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
            Yes
              Tabling
            Yes
              HTTP client
            Yes
              HTTP server
            Yes
              HTML Parser
              RDF Triple store
          ECLiPSe
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
              Tabling
            Yes
              HTTP client
              HTTP server
            Yes
              HTML Parser
              RDF Triple store
          GNU Prolog
              Conditional compilation
            Yes
              Sockets
              Multi-threading
              Tabling
              HTTP client
              HTTP server
              HTML Parser
              RDF Triple store
          LPA-Prolog
              Conditional compilation
            Yes
              Sockets
              Multi-threading
              Tabling
            Yes
              HTTP client
            Yes
              HTTP server
            Yes
              HTML Parser
              RDF Triple store
          SICStus Prolog
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
              Tabling
              HTTP client
              HTTP server
              HTML Parser
              RDF Triple store
          SWI-Prolog
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
            Yes
              Tabling
            Yes
              HTTP client
            Yes
              HTTP server
            Yes
              HTML Parser
            Yes
              RDF Triple store
          Visual Prolog
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
              Tabling
            Yes
              HTTP client
            Yes
              HTTP server
            Yes
              HTML Parser
              RDF Triple store
          XSB
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
            Yes
              Tabling
            Yes
              HTTP client
              HTTP server
              HTML Parser
              RDF Triple store
          YAP-Prolog
            Yes
              Conditional compilation
            Yes
              Sockets
            Yes
              Multi-threading
            Yes
              Tabling
      Optimizations
        Name
          Ciao
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            ?
              Just-in-Time Indexing
          ECLiPSe
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            multi-argument (compile time)
              Just-in-Time Indexing
          GNU Prolog
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            ?
              Just-in-Time Indexing
          SICStus Prolog
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
              Just-in-Time Indexing
          SWI-Prolog
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            Yes
              Just-in-Time Indexing
          Visual Prolog
            Yes (compile time)
              Tail-Call Optimization
            Yes (compile time)
              Choice Point Elimination
            N/A
              Environment Trimming
            N/A (compile time)
              Just-in-Time Indexing
          XSB
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            ?
              Just-in-Time Indexing
          YAP-Prolog
            Yes
              Tail-Call Optimization
            Yes
              Choice Point Elimination
            Yes
              Environment Trimming
            Yes
              Just-in-Time Indexing
      Static analysis
        Name
          Ciao
            Yes
              Type checker
            Yes
              Determinacy checker
            Yes
              Call-pattern checker
          GNU Prolog
              Type checker
              Determinacy checker
              Call-pattern checker
          SICStus Prolog
              Type checker
            Yes
              Determinacy checker
              Call-pattern checker
          SWI-Prolog
              Type checker
            Yes
              Determinacy checker
              Call-pattern checker
          Visual Prolog
            Yes
              Type checker
            Yes
              Determinacy checker
            Yes
              Call-pattern checker
          XSB
              Type checker
              Determinacy checker
              Call-pattern checker
          YAP-Prolog