PDF Introduction To Logic Programming 1St Edition Michael Genesereth Ebook Full Chapter
PDF Introduction To Logic Programming 1St Edition Michael Genesereth Ebook Full Chapter
PDF Introduction To Logic Programming 1St Edition Michael Genesereth Ebook Full Chapter
https://textbookfull.com/product/introduction-to-logic-3rd-
edition-michael-genesereth/
https://textbookfull.com/product/introduction-to-logic-third-
edition-michael-r-genesereth/
https://textbookfull.com/product/an-introduction-to-description-
logic-1st-edition-franz-baader/
https://textbookfull.com/product/introduction-to-logic-14th-
edition-irving-m-copi/
Introduction to Formal Logic 2nd Edition Russell Marcus
https://textbookfull.com/product/introduction-to-formal-
logic-2nd-edition-russell-marcus/
https://textbookfull.com/product/an-introduction-to-formal-
logic-2nd-edition-peter-smith/
https://textbookfull.com/product/pixel-logic-a-guide-to-pixel-
art-michael-azzi/
https://textbookfull.com/product/processing-an-introduction-to-
programming-1st-edition-nyhoff/
https://textbookfull.com/product/introduction-to-programming-
with-c-1st-edition-nhce/
Series ISSN: 1939-4608
GENESERETH • CHAUDHRI
Series Editors: Ronald J. Brachman, Jacobs Technion-Cornell Institute at Cornell Tech
Francesca Rossi, AI Ethics Global Leader, IBM Research AI
Peter Stone, University of Texas at Austin
“This is a book for the 21st century: presenting an elegant and innovative perspective on logic
“In a world where Deep Learning and Python are the talk of the day, this book is a
remarkable development. It introduces the reader to the fundamentals of traditional Logic
Programming and makes clear the benefits of using the technology to create runnable
specifications for complex systems.” – Son Cao Tran, Professor in Computer Science, New Mexico
State University
About SYNTHESIS
This volume is a printed version of a work that appears in the Synthesis
Digital Library of Engineering and Computer Science. Synthesis
store.morganclaypool.com
Ronald J. Brachman, Francesca Rossi, and Peter Stone, Series Editors
Testimonials for
Introduction to Logic Programming
This is a book for the 21st century: presenting an elegant and innovative perspective on logic
programming. Unlike other texts, it takes datasets as a fundamental notion, thereby bridg-
ing the gap between programming languages and knowledge representation languages; and
it treats updates on an equal footing with datasets, leading to a sound and practical treat-
ment of action and change.
Bob Kowalski, Professor Emeritus, Imperial College London
In a world where Deep Learning and Python are the talk of the day, this book is a re-
markable development. It introduces the reader to the fundamentals of traditional Logic
Programming and makes clear the benefits of using the technology to create runnable spec-
ifications for complex systems.
Son Cao Tran, Professor in Computer Science, New Mexico State University
Federated Learning
Qiang Yang, Yang Liu, Yong Cheng, Yan Kang, Tianjian Chen, and Han Yu
2019
Metric Learning
Aurélien Bellet, Amaury Habrard, and Marc Sebban
2015
Active Learning
Burr Settles
2012
Trading Agents
Michael P. Wellman
2011
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in
any form or by any means—electronic, mechanical, photocopy, recording, or any other except for brief quotations
in printed reviews, without the prior permission of the publisher.
DOI 10.2200/S00966ED1V01Y201911AIM044
Lecture #44
Series Editors: Ronald Brachman, Jacobs Technion-Cornell Institute at Cornell Tech
Francesca Rossi, IBM Research AI
Peter Stone, University of Texas at Austin
Series ISSN
Synthesis Lectures on Artificial Intelligence and Machine Learning
Print 1939-4608 Electronic 1939-4616
Introduction to
Logic Programming
M
&C Morgan & cLaypool publishers
ABSTRACT
Logic Programming is a style of programming in which programs take the form of sets of sen-
tences in the language of Symbolic Logic. Over the years, there has been growing interest in
Logic Programming due to applications in deductive databases, automated worksheets, Enter-
prise Management (business rules), Computational Law, and General Game Playing. This book
introduces Logic Programming theory, current technology, and popular applications.
In this volume, we take an innovative, model-theoretic approach to logic programming.
We begin with the fundamental notion of datasets, i.e., sets of ground atoms. Given this funda-
mental notion, we introduce views, i.e., virtual relations; and we define classical logic programs as
sets of view definitions, written using traditional Prolog-like notation but with semantics given
in terms of datasets rather than implementation. We then introduce actions, i.e., additions and
deletions of ground atoms; and we define dynamic logic programs as sets of action definitions.
In addition to the printed book, there is an online version of the text with an interpreter
and a compiler for the language used in the text and an integrated development environment
for use in developing and deploying practical logic programs.
KEYWORDS
logic programming, computational logic, knowledge representation, deductive
databases, aritificial intelligence
xiii
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
PART I Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Programming in Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Logic Programs as Runnable Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Advantages of Logic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Applications of Logic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Basic Logic Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Conceptualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Datasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Example – Sorority World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Example – Kinship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6 Example – Blocks World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Example – Food World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.8 Reformulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4 Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Update Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 Update Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 Simultaneous Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.5 Example – Kinship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6 Example – Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5 Query Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Evaluating Ground Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.4 Evaluating Queries With Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.5 Computational Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6 View Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2 Subgoal Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3 Subgoal Removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.4 Rule Removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.5 Example – Cryptarithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
xv
8 View Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.2 Top-Down Processing of Ground Goals and Rules . . . . . . . . . . . . . . . . . . . . . 71
8.3 Unification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.4 Top-Down Processing of Non-Ground Queries and Rules . . . . . . . . . . . . . . . 76
8.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.2 Example – Kinship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.3 Example – Blocks World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9.4 Example – Modular Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.5 Example – Directed Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
12 Metaknowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.2 Natural Language Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.3 Boolean Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
B Sierra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
B.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
B.2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
xviii
B.3 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
B.4 Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
B.5 Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
B.6 View Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
B.7 Operation Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
B.8 Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
B.9 File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
B.10 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Preface
This book is an introductory textbook on Logic Programming. It is intended primarily for use at
the undergraduate level. However, it can be used for motivated secondary school students, and
it can be used at the start of graduate school for those who have not yet seen the material.
There are just two prerequisites. The book presumes that the student understands sets
and set operations, such as union, intersection, and so forth. The book also presumes that the
student is comfortable with symbolic mathematics, at the level of high-school algebra or beyond.
Nothing else is required.
While experience in computational thinking is helpful, it is not essential. And prior pro-
gramming experience is not necessary. In fact, we have observed that some students with pro-
gramming backgrounds have more difficulty at first than students who are not accomplished
programmers! It is almost as if they need to unlearn some things in order to appreciate the
power and beauty of Logic Programming.
The approach to Logic Programming taken here emerged from more than 30 years of
research, applications, and teaching of this material in both academic and commercial settings.
The result of this experience is an approach to the subject matter that differs somewhat from the
approach taken in other books on the subject in two essential ways.
First of all, in this volume, we take a model-theoretic approach to specifying semantics
rather than the traditional proof-theoretic approach. We begin with the fundamental notion of
datasets, i.e., sets of ground atoms. Given this fundamental notion, we introduce classic logic
programs as view definitions, written using traditional Prolog notation but with semantics given
in terms of datasets rather than implementation. (We also talk about implementation, but it
comes later in the presentation.)
Another difference from other books on Logic Programming is that we treat change on
an equal footing with state. Having talked about datasets, we introduce the fundamental notion
of updates, i.e., additions and deletions of ground atoms. Given this fundamental notion, we
introduce dynamic logic programs as sets of action definitions, where actions are conceptualized
as sets of simultaneous updates. This extension allows us to talk about logical agents as well as
static logic programs. (A logical agent is effectively a state machine in which each state is modeled
as a dataset and each arc is modeled as a set of updates.)
In addition to the text of the book in print and online, there is a website with automatically
graded online exercises, programming assignments, Logic Programming tools, and a variety of
sample applications. The website (http://logicprogramming.stanford.edu) is free to use
and open to all.
xx PREFACE
In conclusion, we first of all want to acknowledge the influence of two individuals who
had a profound effect on our work here - Jeff Ullman and Bob Kowalski. Jeff Ullman, our col-
league at Stanford, inspired us with his popular textbooks and helped us to appreciate the deep
relationship between Logic Programming and databases. Bob Kowalski, co-inventor of Logic
Programming, listened to our ideas, nurtured our work, and even collaborated on some of the
material presented here.
We also want to acknowledge the contributions of a former graduate student - Abhijeet
Mohapatra. He is a co-inventor of dynamic logic programming and the co-creator of many
of the programming tools associated with our approach to Logic Programming. He helped to
teach the course, worked with students, and offered invaluable suggestions on the presentation
and organization of the material.
Finally, our thanks to the students who have had to endure early versions of this material,
in many cases helping to get it right by suffering through experiments that were not always
successful. It is a testament to the intelligence of these students that they seem to have learned
the material despite multiple mistakes on our part. Their patience and constructive comments
were invaluable in helping us to understand what works and what does not.
Introduction
3
CHAPTER 1
Introduction
1.1 PROGRAMMING IN LOGIC
Logic Programming is a style of programming in which programs take the form of sets of sen-
tences in the language of Symbolic Logic. Programs written in this style are called logic programs.
The language in which these programs are written is called logic programming language. And a
computer system that manages the creation and execution of logic programs is called a logic
programming system.
Data Integration. The language of Logic can be used to relate the concepts in different vocab-
ularies and thereby allow users to access multiple, heterogeneous data sources in an integrated
fashion, giving each user the illusion of a single database encoded in his own vocabulary.
Enterprise Management. Logic Programming has special value in expressing and imple-
menting business rules of various sorts. Internal business rules include enterprise policies (e.g.,
expense approval) and workflow (who does what and when). External business rules include the
details of contracts with other enterprises, configuration and pricing rules for company products,
and so forth.
Computational Law. Computational Law is the branch of Legal Informatics concerned with
the representation of rule and regulations in computable form. Encoding laws in computable
form enables automated legal analysis and the creation of technology to make that analysis
available to citizens, and monitors and enforcers, and legal professionals.
General Game Playing. General game players are systems able to accept descriptions of arbi-
trary games at runtime and able to use such descriptions to play those games effectively without
human intervention. In other words, they do not know the rules until the games start. Logic
Programming is widely used in General Game Playing as the preferred way to formalize game
descriptions.
6 1. INTRODUCTION
1.5 BASIC LOGIC PROGRAMMING
Over the years, various types of Logic Programming have been explored (Basic Logic Pro-
gramming, Classic Logic Programming, Transaction Logic Programming, Constraint Logic
Programming, Disjunctive Logic Programming, Answer Set Programming, Inductive Logic
Programming, etc.). Along with these different types of Logic Programming, a variety of logic
programming languages have been developed (e.g., Datalog, Prolog, Epilog, Golog, Progol,
LPS, etc.). In this volume, we concentrate on Basic Logic Programming, a variant of Transac-
tion Logic Programming; and we use Epilog in writing our examples.
In Basic Logic Programming, we model the states of an application as sets of simple facts
(called datasets), and we write rules to define abstract views of the facts in datasets. We model
changes to state as primitive updates to our datasets, i.e., sets of additions and deletions of facts,
and we write rules of a different sort to define compound actions in terms of primitive updates.
Epilog (the language we use in this volume) is closely related to Datalog and Prolog.
Their syntaxes are almost identical. And the three languages are nicely ordered in terms of
expressiveness—with Datalog being a subset of Prolog and Prolog being a subset of Epilog.
For the sake of simplicity, we use the syntax of Epilog throughout this course, and we talk about
the Epilog interpreter and compiler. Thus, when we mention Datalog in what follows, we are
referring to the Datalog subset of Epilog; and, when we mention Prolog, we are referring to the
Prolog subset of Epilog.
As we shall see, all three of these languages (Datalog and Prolog and Epilog) are less ex-
pressive than the languages associated with more complex forms of Logic Programming (such
as Disjunctive Logic Programming and Answer Set Programming). While these restrictions
limit what we can say in these languages, the resulting programs are computationally better be-
haved and, in most cases, more practical than programs written in more expressive languages.
Moreover, due to these restrictions, Datalog and Prolog and Epilog are easy to understand; and,
consequently, they have pedagogical value as an introduction to more complex Logic Program-
ming languages.
In keeping with our emphasis on Basic Logic Programming, the material of the course is
divided into five units. In this unit, Unit 1, we give an overview of Logic Programming and Basic
Logic Programming, and we introduce datasets. In Unit 2, we talk about queries and updates. In
Unit 3, we talk about view definitions. In Unit 4, we concentrate on operation definitions. And,
in Unit 5, we talk about variations, i.e., other forms of Logic Programming.
HISTORICAL NOTES
In the mid-1950s, computer scientists began to concentrate on the development of high-level
programming languages. As a contribution to this effort, John McCarthy suggested the language
of Symbolic Logic as a candidate, and he articulated the ideal of declarative programming. He
1.5. BASIC LOGIC PROGRAMMING 7
gave voice to these ideas in a seminal paper, published in 1958, which describes a type of system
that he called an advice taker.
“The main advantage we expect the advice taker to have is that its behavior will be
improvable merely by making statements to it, telling it about its ... environment and
what is wanted from it. To make these statements will require little, if any, knowledge
of the program or the previous knowledge of the advice taker.”
The idea of declarative programming caught the imaginations of subsequent researchers—
notably Bob Kowalski, one of the fathers of Logic Programming, and Ed Feigenbaum, the
inventor of Knowledge Engineering. In a paper written in 1974, Feigenbaum gave a forceful
restatement of McCarthy’s ideal.
“The potential use of computers by people to accomplish tasks can be ‘one-
dimensionalized’ into a spectrum representing the nature of the instruction that must
be given the computer to do its job. Call it the what-to-how spectrum. At one ex-
treme of the spectrum, the user supplies his intelligence to instruct the machine with
precision exactly how to do his job step-by-step. ... At the other end of the spectrum
is the user with his real problem. ... He aspires to communicate what he wants done ...
without having to lay out in detail all necessary subgoals for adequate performance.”
The development of Logic Programming in its present form can be traced to subsequent
debates about declarative vs. procedural representations of knowledge in the Artificial Intelli-
gence community.
Advocates of procedural representations were mainly centered at MIT, under the lead-
ership of Marvin Minsky and Seymour Papert. Although it was based on the proof methods
of logic, Planner, developed at MIT, was the first language to emerge within the procedural-
ist paradigm. Planner featured pattern-directed invocation of procedural plans from goals (i.e.,
goal-reduction or backward chaining) and from assertions (i.e., forward chaining). The most
influential implementation of Planner was the subset of Planner, called Micro-Planner, imple-
mented by Gerry Sussman, Eugene Charniak and Terry Winograd. It was used to implement
Winograd’s natural-language understanding program SHRDLU, which was a landmark at that
time.
Advocates of declarative representations were centered at Stanford (associated with John
McCarthy, Bertram Raphael, and Cordell Green) and in Edinburgh (associated with John Alan
Robinson, Pat Hayes, and Robert Kowalski). Hayes and Kowalski tried to reconcile the logic-
based declarative approach to knowledge representation with Planner’s procedural approach.
In 1973, Hayes developed an equational language, Golux, in which different procedures could
be obtained by altering the behavior of a theorem prover. Kowalski, on the other hand, de-
veloped SLD resolution, a variant of SL-resolution, and showed how it treats implications as
goal-reduction procedures. Kowalski collaborated with Colmerauer in Marseille, who developed
these ideas in the design of the programming language Prolog, which was implemented in the
Another random document with
no related content on Scribd:
—Qu’y avait-il dans ce verre? dis-je épouvanté.
—Du poison, me répondit Pauline.
—Et vous l’avez bu! m’écriai-je.
—Savais-je que vous alliez venir? me dit Pauline en s’appuyant
contre la grille; car alors seulement elle se rappela qu’elle avait vidé
ce verre une heure ou deux avant mon arrivée.
—Souffrez-vous? lui dis-je.
—Pas encore, me répondit-elle.
Alors un espoir me vint.
—Et y avait-il longtemps que le poison était dans ce verre?
—Deux jours et deux nuits à peu près, car je n’ai pas pu calculer
le temps.
Je regardai de nouveau le verre, le détritus qui en couvrait le
fond me rassura un peu: pendant ces deux jours et ces deux nuits,
le poison avait eu le temps de se précipiter. Pauline n’avait bu que
de l’eau, empoisonnée il est vrai, mais peut-être pas à un degré
assez intense pour donner la mort.
—Il n’y a pas un instant à perdre, lui dis-je en l’enlevant sous un
de mes bras, il faut fuir pour trouver du secours.
—Je pourrai marcher, dit Pauline en se dégageant avec cette
sainte pudeur qui avait déjà coloré son visage.
Aussitôt nous nous acheminâmes vers la première porte, que
nous refermâmes derrière nous; puis nous arrivâmes à la seconde,
qui s’ouvrit sans difficulté, et nous nous retrouvâmes sous le cloître.
La lune brillait au milieu d’un ciel pur; Pauline étendit les bras, et
tomba une seconde fois à genoux.
—Partons, partons, lui dis-je, chaque minute est peut-être
mortelle.
—Je commence à souffrir, dit-elle en se relevant. Une sueur
froide me passa sur le front, je la pris dans mes bras comme j’aurais
fait d’un enfant, je traversai les ruines, je sortis du cloître et je
descendis en courant la montagne: arrivé sur la plage, je vis de loin
le feu de mes deux hommes.
—A la mer, à la mer! criai-je de cette voix impérative qui indique
qu’il n’y a pas un instant à perdre.
Ils s’élancèrent vers la barque et la firent approcher le plus près
qu’ils purent de la rive, j’entrai dans l’eau jusqu’aux genoux; ils
prirent Pauline de mes bras et la déposèrent dans la barque. Je m’y
élançai après elle.
—Souffrez-vous davantage?
—Oui, me dit Pauline.
Ce que j’éprouvais était quelque chose de pareil au désespoir:
pas de secours, pas de contre-poison; tout-à-coup je pensai à l’eau
de mer, j’en remplis un coquillage qui se trouvait au fond de la
barque, et je le présentai à Pauline.
—Buvez, lui dis-je.
Elle obéit machinalement.
—Qu’est-ce que vous faites donc? s’écria un des pêcheurs; vous
allez la faire vomir, c’te p’tite femme.
C’était tout ce que je voulais: un vomissement seul pouvait la
sauver. Au bout de cinq minutes elle éprouva des contractions
d’estomac d’autant plus douloureuses que, depuis trois jours, elle
n’avait rien pris que ce poison. Mais, ce paroxisme passé, elle se
trouva soulagée; alors je lui présentai un verre plein d’eau douce et
fraîche, qu’elle but avec avidité. Bientôt les douleurs diminuèrent,
une lassitude extrême leur succéda. Nous fîmes au fond de la
barque un lit des vestes de mes pêcheurs et de mon paletot: Pauline
s’y coucha, obéissante comme un enfant; presque aussitôt ses yeux
se fermèrent, j’écoutai un instant sa respiration; elle était rapide,
mais régulière: tout était sauvé.
—Allons, dis-je joyeusement à mes matelots, maintenant à
Trouville, et cela le plus vite possible: il y a vingt-cinq louis pour vous
en arrivant.
Aussitôt mes braves bateliers, jugeant que la voile était
insuffisante, se penchèrent sur leurs rames, et la barque glissa sur
l’eau comme un oiseau de mer attardé.
V.