<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Some Enhancements to the Prolog Playground and ALD Notebooks for the Modern Prolog Classroom*</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jose F. Morales</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniela Ferreiro</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marco Pérez</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Manuel V. Hermenegildo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IMDEA Software Institute</institution>
          ,
          <addr-line>Madrid</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Universidad Politécnica de Madrid (UPM)</institution>
          ,
          <addr-line>Madrid</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <fpage>9</fpage>
      <lpage>13</lpage>
      <abstract>
        <p>One of the main objectives of the Prolog Playground and ALD-style notebooks (Active Logic Documents) is to facilitate the task of teaching and learning Prolog. The Playground allows teachers and students to develop, run, debug, verify, and test Prolog programs directly on the browser, without needing a Prolog installation. It also greatly facilitates the sharing of Prolog code and adding click-to-run capabilities to any kind of teaching materials. ALD-style notebooks further facilitate the generation of web-based materials with embedded running examples and exercises. Fundamental to these tools is that they run locally on the student's browser, with no need for a server infrastructure. We will report on (and demo) some recent important extensions which include a) being able to develop the notebooks with embedded running examples and quizzes now directly within the Playground, b) also being able to develop slides with such examples and quizzes as well as doing presentations within the Playground, c) a fully reactive mode where feedback and results are given on-the-fly, as the student types, d) new facilities for interactive collaboration in the classroom, and e) integration with the LPTP theorem prover. We hope these facilities will be of interest to teachers and students of the Prolog language.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Active Logic Documents</kwd>
        <kwd>Prolog Playground</kwd>
        <kwd>Prolog Notebooks</kwd>
        <kwd>Teaching Prolog</kwd>
        <kwd>Prolog</kwd>
        <kwd>Ciao Prolog</kwd>
        <kwd>Logic Programming</kwd>
        <kwd>WebAssembly</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        The Prolog Playground [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ] 1 and ALD-style notebooks (Active Logic Documents) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] constitute a
toolset designed to facilitate the task of teaching and learning Prolog, both online and in the classroom.
An important characteristic of these tools, is that everything (editors, queries, applications, etc.) runs
locally on the student’s browser, with no need for a server infrastructure. This is based on the use of
the ciaowasm build grade of Ciao Prolog (i.e., using WebAssembly [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] compiled with Emscripten [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]).
This is in contrast to other tools which are generally server-based.2 After providing a brief overview of
the previous characteristics of this toolset in Section 2, our purpose herein is to report on (and demo)
some recent extensions to these tools, presented in Section 3.
      </p>
    </sec>
    <sec id="sec-2">
      <title>2. Previous Playground and ALD Characteristics</title>
      <p>The Prolog Playground: Since its first versions, the first component of the toolset, the Prolog
Playground, allows teachers and students to perform a number of tasks directly within the browser,
providing essentially a full IDE, without any need for a Prolog installation or being connected to a
server. These include:
• Code can be loaded from the user’s local files or the web, edited, run and debugged using the
classic and familiar top-level interaction model (see Fig. 1), and saved, all locally on the user’s web
).
browser. The debugger allows stepping through the code in the traditional way, with the position
(as well as errors, etc.) being marked on the source in the editor window (Fig. 2). Solutions to
goals can be portrayed in ways other than just printing them out, allowing output of graphical
and user-interface components. An example is giving explanations in the s(CASP) Playground
(see later).
• Code sharing: clicking on the</p>
      <p>
        button, a link is generated that opens a Playground with the
contents of the editor window (see this link and Fig. 3 for a LaTeX example; note that the link with
the code is stored within this document and has not been uploaded to any server). This link can be
mailed or pasted into applications or documents. This allows very easily embedding “click-to-run”
links to runnable code examples in any kind of teaching materials, including tutorials, manuals,
slides, exercises, technical papers, notebooks, etc., developed with any tool.
• Developing Prolog code documentation: the LPdoc documentation generator [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ] is also
embedded within the Playground. This allows generating and previewing documentation obtained
from the source code itself and any machine-readable comments and/or assertions, also locally
within the browser ( button; Fig. 4).
• Advanced features ( button) include running any unit tests [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] that may be present in the
program; analyzing and verifying properties such as modes, types, determinacy, non-failure,
etc. [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ]; partial evaluation and code specialization; etc., again all running locally within the
browser.
      </p>
      <p>
        The Playground can be easily specialized for particular applications, an example of which is
the s(CASP) Playground [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] 3 or the LPTP Playground (see later). More information on the
implementation of the Ciao WebAssembly back-end and the Playground architecture can be found in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
Active Logic Documents: The other main component of the toolset is Active Logic Documents
(ALDs) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. ALDs are notebooks which incorporate embedded Prolog engines. For example, this
document4 is an ALD containing Werner Hett’s 99 Prolog problems encoded as executable exercises.
ALDs are composed from simple .md (markdown) files, where examples and queries can be marked as
runnable. These are then included in the document in embedded Prolog mini-Playground cells, so that
interaction with these examples is possible within the documents produced. The actual generation of
the html files is performed by LPdoc (Fig. 5). Runnable cells can also contain interactive exercises with
hints (to help students find a solution) and solutions, tests (for self-evaluation of the student-provided
solutions), non-visible parts, etc. (as in the 99 Prolog problems example). There is also an escape
mechanism to javascript that allows easily implementing additional functionality, graphical output, etc.
(jseval) and ALD fragments can be dynamically generated from programs (dynpreview). ALDs can
3https://ciao-lang.org/playground/scasp.html
4https://cliplab.org/logalg/doc/99problemsALD.html/
tutorial.md
1 A *list* processing example:
2
3 ‘‘‘ciao_runnable
4 app([],Y,Y).
5 app([X|Xs], Ys, [Xs|Zs])
:67 ‘‘‘ app(Xs,Ys,Zss).
be used to very easily create editable and runnable educational resources for teaching Prolog and logic
programming, such as on-line tutorials, slides, activities, runnable examples, programming exercises,
web sites, manuals, etc. It is also possible to develop tutorials for advanced features, such as analyzers
and verifiers [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
      </p>
      <p>
        In comparison with other approaches to notebooks [
        <xref ref-type="bibr" rid="ref12 ref13 ref14 ref15">12, 13, 14, 15</xref>
        ], a fundamental aspect of the ALD
approach is that all the reactive parts run locally on the user’s web browser without any dependency
on a central server or a local Prolog installation. Also, output can be generated from and stored in
simple source files that can be developed with any editor. Arguably, the ALD approach has advantages
from the point of view of scalability, low maintenance cost, security, privacy, ease of packaging and
distribution, etc.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Some New Features</title>
      <p>
        We now turn to describing some new extensions and improvements to the Prolog Playground and
ALD-style notebooks since the first versions of [
        <xref ref-type="bibr" rid="ref2 ref3">2, 3</xref>
        ] that we described in the previous section:
In-Playground creation and editing of Active Logic Documents. One of the main improvements
since the early versions has been to better support within the Playground the process of developing
ALD notebooks with embedded running examples and quizzes. To this end the Playground has two
distinct modes, code mode and document mode (see Figure 6). The current mode is identified by the
or button shown in the button bar, which also allows changing the mode (Figure 6). You can see
an example by clicking on ‘run ▶’ in Figure 6. The ALD can then be edited by clicking on the pencil
icon on the top right. The link was obtained as usual with the button. These two modes
open slides ▶
enable a flexible and integrated workflow: in code mode one can write and test code snippets, and also
annotate them with documentation and explanations, and in document mode one can incorporate these
examples into documents as exercises, notes, etc., all fully within the browser.
      </p>
      <p>Presentation mode. The mode in which the ALD notebook appears when clicking on ’run ▶’ in
Figure 6 is another improvement: presentation mode. Presentation mode provides the traditional full
view of ALD notebooks but within the Playground. I.e., in presentation mode, only the document panel
(the right panel in Figure 6) is visible, without buttons or menus, similarly to a statically generated ALD.
However, in contrast to statically generated ALDs, by clicking on the pencil icon on the top right,
one can enter (or return to) the normal Playground to view and edit the ALD notebook. Presentation
mode can also be entered from the editing view via the button. Links obtained with the
button in document mode will open by default in presentation mode so that they can be used directly
as notes, exercises, etc. For example, instructors can prepare exercises and notes in the editor view, and
then send the links to students (or include them in an exercise sheet, slides, etc.), and the students see
the presentation view when they click on these links.</p>
      <p>
        ALD slides. A further improvement is the possibility of creating ALDs as slides for presentations (still
with embedded examples and quizzes), and of delivering the presentations directly with the Playground.
An example is ’these slides’ (a subset of the presentation of [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]; see Figure 7). Any ALD can be presented
in slides form by clicking on the rectangular icon top right , which switches modes. By default in
slides mode the ALD is split into separate slides at section boundaries (other mechanisms exist, but this
one is the simplest and has proved useful in practice). Slides mode also uses presentation-friendly fonts
and layout. Slides mode can be exited using the escape key and then the pencil icon can be used to
edit the slides in the standard way. And again the button can be used to share the slides. These
presentations are full ALDs, written with the same markdown-style syntax and allowing the inclusion
of interactive components, such as code editors, query boxes, etc.. This has proven particularly useful
for class lectures including live demonstrations, and also workshops, etc.
      </p>
      <p>Reactive (on-the-fly) mode. A fully reactive mode is now available (toggled via the button),
in which feedback and results are shown on-the-fly as the student types. This includes real-time
syntax checking, incremental goal evaluation, incremental testing, incremental analysis/verification,
incremental documentation, and in general dynamic result previews. As a result, errors and warnings
(from compilation, testing, static analysis/verification, etc.) are immediately highlighted on the source,
and partial solutions and hints displayed, as the code is typed. As a simple example, Figure 8 shows
a situation in which an error is introduced (in line 7), the tests are automatically triggered, and a
failing test is underlined in red, indicating on the fly that the change causes that test to not pass.
Figure 9 is a snapshot of how analysis results are also generated dynamically as the program is typed.
Also, documentation is generated and the preview pane updated dynamically as the comments or
assertions are typed in the code pane. The same applies to ALD notebooks, which are generated
and visualized incrementally in the visualization pane. Figure 10 shows a snapshot of an ALD being
generated dynamically in on-the-fly mode as the markdown source is being typed.</p>
      <p>Interactive collaboration. New facilities have been added for this purpose ( button). In particular,
Prolog Playground and ALD notebook instances can now be shared among several users and worked
on concurrently. This is particularly useful for collaboration between the lecturer and students in the
classroom (both in person and remote), and for collaborative work among students.</p>
      <p>
        Integration of the LPTP prover. A recent extension is the integration of the LPTP theorem prover
for Prolog [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] within the Playground, which has been completed in collaboration with Fred Mesnard
and colleagues. Figure 12 shows an example program and part of a lemma and its proof, as well as the
menu with entries for checking the proofs, choosing tactics, etc. It is also possible to include programs
with proofs and run the prover within runnable cells in ALD notebooks. Space limitations do not
allow us to go into more details about this very interesting topic, but this integration opens the door to
teaching within the Playground and ALDs how to carry out theorem proving tasks for Prolog programs,
and develop active materials, exercises, assignments, etc.
      </p>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusions: The Tools in Classroom Practice</title>
      <p>We conclude with some comments on the use of these tools in practice in and for the classroom.</p>
      <p>Regarding teaching materials, some lecturers and course creators often prefer to develop (or have
already developed) these with their favorite tools (LaTeX, Word, PowerPoint, Keynote, Pages, etc.),
and may be reluctant to use a new platform. The Playground “click-to-run” functionality is ideal here:
examples in course materials can be loaded into the Playground and links generated which can then
be included in these materials next to the examples, independently of the tools used or the generated
format (pdf, html, etc.). Code remains in the teaching materials themselves with no dependencies on
any code server. Examples of this approach can be found in the pdfs labeled “slides with embedded code”
from our (C)LP courses.5 However, for new materials or for renewing existing materials, ALDs are
5See https://cliplab.org/logalg.
very useful, since they allow developing engaging, interactive exercises and assignments, class notes,
tutorials, etc. with built-in self-assessment. The new ALD slides are also instrumental for developing
material for lectures containing runnable examples. Finally, the new interactive collaboration facilities
greatly facilitate involving students during lectures, keeping them engaged.</p>
      <p>
        Regarding the personal work of students, we have observed that some of our (college-level, CS)
students6 still do install the Prolog system in their laptops and use VSC or Emacs, as we actually suggest,
since this is always closer to how a programming language is used in application development. But the
majority of students prefer the Playground, because it saves them installation time and hassle. Also, the
Playground is clearly preferable in other contexts such as younger, non CS, no laptop, etc. students, The
Playground and the runnable cells in ALDs ofer performance that is competitive with native Prolog
implementations (around 50% of Ciao Prolog native speed) and provide access to most of Ciao Prolog’s
functionality, including Pure LP (with several search rules), ISO-Prolog, higher-order, functional syntax,
constraints, imperative syntax, ASP/s(CASP), etc. Fair search rules in particular are very useful in the
early stages of LP instruction for running examples under a pure, declarative view. This avoids having
to face non-termination prematurely and force introducing operational aspects too early, which can
hamper the first learning steps (see [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] and [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] for arguments in favor of this approach).
      </p>
      <p>The new features that we have presented are aimed at further lowering the barrier to creating and
delivering interactive, browser-based, server-independent Prolog material. At the same time, they help
improve the student learning experience by making it more active, responsive, and self-directed. We
believe these developments make the Playground+ALDs toolset particularly well-suited for modern
logic programming education. We hope these new additions to the Playground and ALDs, as well as
our reflections, will be of interest to the PEG audience and in general to all those interested in Prolog
Education.
6We teach a full semester of Prolog/(C)LP to upwards of 400 CS undergraduate and graduate students every year.</p>
      <p>Declaration on Generative AI: The authors have not employed any GenAI tools for this paper.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G.</given-names>
            <surname>Garcia-Pradales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          , The Ciao Prolog Playground,
          <source>Technical Report</source>
          , Technical University of Madrid (UPM) and
          <source>IMDEA Software Institute</source>
          ,
          <year>2021</year>
          . URL: https://ciao-lang. org/ciao/build/doc/ciao_playground.html/ciao_playground_manual.html.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>G.</given-names>
            <surname>Garcia-Pradales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Arias</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Carro</surname>
          </string-name>
          ,
          <article-title>An s(CASP) In-Browser Playground based on Ciao Prolog, in: Proceedings of the 38th ICLP Workshops - Goal-directed Execution of Answer Set Programs</article-title>
          , volume
          <volume>3193</volume>
          , CEUR-WS.org,
          <year>2022</year>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>3193</volume>
          /short3GDE.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Ferreiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <article-title>Teaching Prolog with Active Logic Documents</article-title>
          , in: D. S. Warren,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dahl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eiter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kowalski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Rossi</surname>
          </string-name>
          (Eds.),
          <source>Prolog - The Next 50 Years, number 13900 in LNCS</source>
          , Springer,
          <year>2023</year>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>183</lpage>
          . URL: https://cliplab.org/papers /ActiveLogicDocuments-PrologBook.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.</given-names>
            <surname>Haas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rossberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. L.</given-names>
            <surname>Schuf</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. L.</given-names>
            <surname>Titzer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Holman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gohman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Wagner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Zakai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. F.</given-names>
            <surname>Bastien</surname>
          </string-name>
          ,
          <article-title>Bringing the web up to speed with webassembly</article-title>
          , in: A.
          <string-name>
            <surname>Cohen</surname>
          </string-name>
          , M. T. Vechev (Eds.),
          <source>Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation</source>
          ,
          <string-name>
            <surname>PLDI</surname>
          </string-name>
          <year>2017</year>
          , Barcelona, Spain, June 18-23,
          <year>2017</year>
          , ACM,
          <year>2017</year>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>200</lpage>
          . URL: https://doi.org/10.1145/3062341.3062363. doi:
          <volume>10</volume>
          .1145/3062341.3062363.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zakai</surname>
          </string-name>
          ,
          <article-title>Emscripten: an LLVM-to-JavaScript compiler</article-title>
          ,
          <source>in: Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications</source>
          ,
          <source>SPLASH '11</source>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York, NY, USA,
          <year>2011</year>
          , pp.
          <fpage>301</fpage>
          -
          <lpage>312</lpage>
          . URL: http://doi.acm.
          <source>org/10</source>
          .1145/
          <year>2048</year>
          147.2048224. doi:
          <volume>10</volume>
          .1145/2048147.2048224.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <article-title>A Documentation Generator for (C)LP Systems</article-title>
          , in: International Conference on Computational Logic, CL2000, number 1861 in LNAI, Springer-Verlag,
          <year>2000</year>
          , pp.
          <fpage>1345</fpage>
          -
          <lpage>1361</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <article-title>The LPdoc Documentation Generator</article-title>
          . Ref.
          <source>Manual (V3.0)</source>
          ,
          <source>Technical Report, UPM</source>
          ,
          <year>2011</year>
          . Available at https://ciao-lang.
          <source>org.</source>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>E.</given-names>
            <surname>Mera</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lopez-Garcia</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Hermenegildo, Integrating Software Testing and Run-Time Checking in an Assertion Verification Framework</article-title>
          ,
          <source>in: 25th Int'l. Conference on Logic Programming (ICLP'09)</source>
          , volume
          <volume>5649</volume>
          <source>of LNCS</source>
          , Springer-Verlag,
          <year>2009</year>
          , pp.
          <fpage>281</fpage>
          -
          <lpage>295</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lopez-Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Carro</surname>
          </string-name>
          ,
          <article-title>Types, modes and so much more - the Prolog way</article-title>
          , in: D. S. Warren,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dahl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eiter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kowalski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Rossi</surname>
          </string-name>
          (Eds.),
          <source>Prolog - The Next 50 Years, number 13900 in LNCS</source>
          , Springer,
          <year>2023</year>
          , pp.
          <fpage>23</fpage>
          -
          <lpage>37</lpage>
          . URL: https: //cliplab.org/papers/AssertionsAndOther-PrologBook.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Puebla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Bueno</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lopez-Garcia</surname>
          </string-name>
          ,
          <article-title>Integrated Program Debugging, Verification, and Optimization Using Abstract Interpretation (and The Ciao System Preprocessor)</article-title>
          ,
          <source>Science of Computer Programming</source>
          <volume>58</volume>
          (
          <year>2005</year>
          )
          <fpage>115</fpage>
          -
          <lpage>140</lpage>
          . doi:
          <volume>10</volume>
          .1016/j.scico.
          <year>2005</year>
          .
          <volume>02</volume>
          .006.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ferreiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Abreu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <article-title>Demonstrating (Hybrid) Active Logic Documents and the Ciao Prolog Playground, and an Application to Verification Tutorials</article-title>
          ,
          <source>in: Technical Communications of the 39th International Conference on Logic Programming (ICLP</source>
          <year>2023</year>
          ), volume
          <volume>385</volume>
          <source>of Electronic Proceedings in Theoretical Computer Science (EPTCS)</source>
          ,
          <source>Open Publishing Association (OPA)</source>
          ,
          <year>2023</year>
          , pp.
          <fpage>324</fpage>
          -
          <lpage>330</lpage>
          . URL: https://cliplab.org/papers/hald
          <article-title>-demo-iclp-tc</article-title>
          .pdf, see also associated poster at https://cliplab.org/papers/hald-poster-iclp.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wielemaker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Riguzzi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. A.</given-names>
            <surname>Kowalski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Lager</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Sadri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Calejo</surname>
          </string-name>
          ,
          <article-title>Using SWISH to realize interactive web-based tutorials for logic-based languages</article-title>
          ,
          <source>Theory Pract. Log. Program</source>
          .
          <volume>19</volume>
          (
          <year>2019</year>
          )
          <fpage>229</fpage>
          -
          <lpage>261</lpage>
          . URL: https://doi.org/10.1017/S1471068418000522. doi:
          <volume>10</volume>
          .1017/S1471068418000522.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>P.</given-names>
            <surname>Flach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Sokol</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wielemaker</surname>
          </string-name>
          , Simply Logical - The First Three Decades, in: D. S. Warren,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dahl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eiter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kowalski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Rossi</surname>
          </string-name>
          (Eds.),
          <source>Prolog - The Next 50 Years, number 13900 in LNCS</source>
          , Springer,
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>Brecklinghaus</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Koerner</surname>
          </string-name>
          ,
          <article-title>A Jupyter kernel for Prolog</article-title>
          ,
          <source>in: Proc. 36th Workshop on (Constraint) Logic Programming (WLP 2022), Lecture Notes in Informatics (LNI)</source>
          ,
          <source>Gesellschaft für Informatik</source>
          , Bonn,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>G.</given-names>
            <surname>Sartor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Wyner</surname>
          </string-name>
          ,
          <article-title>Teaching Prolog and Logic Programming with Jupyter Notebooks</article-title>
          ,
          <source>in: Proceedings of the 41st ICLP Workshops</source>
          ,
          <year>2025</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. F.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lopez-Garcia</surname>
          </string-name>
          ,
          <article-title>Teaching Pure LP with Prolog and a Fair Search Rule</article-title>
          , in
          <source>: Proceedings of the 40th ICLP Workshops</source>
          , volume
          <volume>3799</volume>
          , CEUR-WS.org,
          <year>2024</year>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>3799</volume>
          /
          <year>paper2PEG2</year>
          .0.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>R. F.</given-names>
            <surname>Stärk</surname>
          </string-name>
          ,
          <article-title>The theoretical foundations of LPTP (A logic program theorem prover)</article-title>
          ,
          <source>J. Log. Program</source>
          .
          <volume>36</volume>
          (
          <year>1998</year>
          )
          <fpage>241</fpage>
          -
          <lpage>269</lpage>
          . URL: https://doi.org/10.1016/S0743-
          <volume>1066</volume>
          (
          <issue>97</issue>
          )
          <fpage>10013</fpage>
          -
          <lpage>9</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0743-106
          <volume>6</volume>
          (
          <issue>97</issue>
          )
          <fpage>10013</fpage>
          -
          <lpage>9</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lopez-Garcia</surname>
          </string-name>
          ,
          <article-title>Some Thoughts on How to Teach Prolog</article-title>
          , in: D. S. Warren,
          <string-name>
            <given-names>V.</given-names>
            <surname>Dahl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eiter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kowalski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Rossi</surname>
          </string-name>
          (Eds.),
          <source>Prolog - The Next 50 Years, number 13900 in LNCS</source>
          , Springer,
          <year>2023</year>
          , pp.
          <fpage>107</fpage>
          -
          <lpage>123</lpage>
          . URL: https://cliplab.org/papers/Teach ingProlog-PrologBook.pdf.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>