100% found this document useful (1 vote)
45 views

The Haskell Road to Logic Maths and Programming Kees Doets all chapter instant download

Road

Uploaded by

gustiberylfm
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
45 views

The Haskell Road to Logic Maths and Programming Kees Doets all chapter instant download

Road

Uploaded by

gustiberylfm
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download the Full Version of textbook for Fast Typing at textbookfull.

com

The Haskell Road to Logic Maths and Programming


Kees Doets

https://textbookfull.com/product/the-haskell-road-to-logic-
maths-and-programming-kees-doets/

OR CLICK BUTTON

DOWNLOAD NOW

Download More textbook Instantly Today - Get Yours Now at textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Haskell The Ultimate Beginner s Guide to Learn Haskell


Programming Step by Step 1st Edition Claudia Alves

https://textbookfull.com/product/haskell-the-ultimate-beginner-s-
guide-to-learn-haskell-programming-step-by-step-1st-edition-claudia-
alves/
textboxfull.com

Programming in Haskell 2nd Edition Graham Hutton

https://textbookfull.com/product/programming-in-haskell-2nd-edition-
graham-hutton/

textboxfull.com

Sets logic and maths for computing 3rd Edition Makinson D

https://textbookfull.com/product/sets-logic-and-maths-for-
computing-3rd-edition-makinson-d/

textboxfull.com

Introduction to Logic Programming 1st Edition Michael


Genesereth

https://textbookfull.com/product/introduction-to-logic-
programming-1st-edition-michael-genesereth/

textboxfull.com
Programming in Haskell Second Edition, 5Th Printing
Edition Hutton

https://textbookfull.com/product/programming-in-haskell-second-
edition-5th-printing-edition-hutton/

textboxfull.com

Thinking with Types Type level Programming in Haskell


Sandy Maguire

https://textbookfull.com/product/thinking-with-types-type-level-
programming-in-haskell-sandy-maguire/

textboxfull.com

Programmable Logic Controllers Hardware and Programming


4th Edition Max Rabiee

https://textbookfull.com/product/programmable-logic-controllers-
hardware-and-programming-4th-edition-max-rabiee/

textboxfull.com

Scientific Integrity The Rules Of Academic Research Kees


Schuyt

https://textbookfull.com/product/scientific-integrity-the-rules-of-
academic-research-kees-schuyt/

textboxfull.com

4G, LTE-advanced pro and the road to 5G Dahlman

https://textbookfull.com/product/4g-lte-advanced-pro-and-the-road-
to-5g-dahlman/

textboxfull.com
The Haskell Road to Logic,
Math and Programming
Kees Doets and Jan van Eijck
March 4, 2004
Contents
Preface v

1 Getting Started 1
1.1 Starting up the Haskell Interpreter . . . . . . . . . . . . . . . . . 2
1.2 Implementing a Prime Number Test . . . . . . . . . . . . . . . . 3
1.3 Haskell Type Declarations . . . . . . . . . . . . . . . . . . . . . 8
1.4 Identifiers in Haskell . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Playing the Haskell Game . . . . . . . . . . . . . . . . . . . . . 12
1.6 Haskell Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.7 The Prime Factorization Algorithm . . . . . . . . . . . . . . . . . 19
1.8 Themap andfilter Functions . . . . . . . . . . . . . . . . . . . 20
1.9 Haskell Equations and Equational Reasoning . . . . . . . . . . . 24
1.10 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2 Talking about Mathematical Objects 27


2.1 Logical Connectives and their Meanings . . . . . . . . . . . . . . 28
2.2 Logical Validity and Related Notions . . . . . . . . . . . . . . . . 38
2.3 Making Symbolic Form Explicit . . . . . . . . . . . . . . . . . . 50
2.4 Lambda Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.5 Definitions and Implementations . . . . . . . . . . . . . . . . . . 60
2.6 Abstract Formulas and Concrete Structures . . . . . . . . . . . . 61
2.7 Logical Handling of the Quantifiers . . . . . . . . . . . . . . . . 64
2.8 Quantifiers as Procedures . . . . . . . . . . . . . . . . . . . . . . 68
2.9 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3 The Use of Logic: Proof 71


3.1 Proof Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.2 Proof Recipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.3 Rules for the Connectives . . . . . . . . . . . . . . . . . . . . . . 78
3.4 Rules for the Quantifiers . . . . . . . . . . . . . . . . . . . . . . 90

i ii CONTENTS
3.5 Summary of the Proof Recipes . . . . . . . . . . . . . . . . . . . 96
3.6 Some Strategic Guidelines . . . . . . . . . . . . . . . . . . . . . 99
3.7 Reasoning and Computation with Primes . . . . . . . . . . . . . . 103
3.8 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

4 Sets, Types and Lists 113


4.1 Let’s Talk About Sets . . . . . . . . . . . . . . . . . . . . . . . . 114
4.2 Paradoxes, Types and Type Classes . . . . . . . . . . . . . . . . . 121
4.3 Special Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
4.4 Algebra of Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.5 Pairs and Products . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.6 Lists and List Operations . . . . . . . . . . . . . . . . . . . . . . 139
4.7 List Comprehension and Database Query . . . . . . . . . . . . . 145
4.8 Using Lists to Represent Sets . . . . . . . . . . . . . . . . . . . . 149
4.9 A Data Type for Sets . . . . . . . . . . . . . . . . . . . . . . . . 153
4.10 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

5 Relations 161
5.1 The Notion of a Relation . . . . . . . . . . . . . . . . . . . . . . 162
5.2 Properties of Relations . . . . . . . . . . . . . . . . . . . . . . . 166
5.3 Implementing Relations as Sets of Pairs . . . . . . . . . . . . . . 175
5.4 Implementing Relations as Characteristic Functions . . . . . . . .
182
5.5 Equivalence Relations . . . . . . . . . . . . . . . . . . . . . . . . 188
5.6 Equivalence Classes and Partitions . . . . . . . . . . . . . . . . . 192
5.7 Integer Partitions . . . . . . . . . . . . . . . . . . . . . . . . . . 202
5.8 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

6 Functions 205
6.1 Basic Notions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
6.2 Surjections, Injections, Bijections . . . . . . . . . . . . . . . . . 218
6.3 Function Composition . . . . . . . . . . . . . . . . . . . . . . . 222
6.4 Inverse Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
6.5 Partial Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 229
6.6 Functions as Partitions . . . . . . . . . . . . . . . . . . . . . . . 232
6.7 Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
6.8 Congruences . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
6.9 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

7 Induction and Recursion 239


7.1 Mathematical Induction . . . . . . . . . . . . . . . . . . . . . . . 239
7.2 Recursion over the Natural Numbers . . . . . . . . . . . . . . . . 246
7.3 The Nature of Recursive Definitions . . . . . . . . . . . . . . . . 251

CONTENTS iii

7.4 Induction and Recursion over Trees . . . . . . . . . . . . . . . . 255


7.5 Induction and Recursion over Lists . . . . . . . . . . . . . . . . . 265
7.6 Some Variations on the Tower of Hanoi . . . . . . . . . . . . . . 273
7.7 Induction and Recursion over Other Data Structures . . . . . . . .
281
7.8 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

8 Working with Numbers 285


8.1 A Module for Natural Numbers . . . . . . . . . . . . . . . . . . . 286
8.2 GCD and the Fundamental Theorem of Arithmetic . . . . . . . . 289
8.3 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
8.4 Implementing Integer Arithmetic . . . . . . . . . . . . . . . . . . 297
8.5 Rational Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . 299
8.6 Implementing Rational Arithmetic . . . . . . . . . . . . . . . . . 305
8.7 Irrational Numbers . . . . . . . . . . . . . . . . . . . . . . . . . 309
8.8 The Mechanic’s Rule . . . . . . . . . . . . . . . . . . . . . . . . 313
8.9 Reasoning about Reals . . . . . . . . . . . . . . . . . . . . . . . 315
8.10 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . 319
8.11 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

9 Polynomials 331
9.1 Difference Analysis of Polynomial Sequences . . . . . . . . . . . 332
9.2 Gaussian Elimination . . . . . . . . . . . . . . . . . . . . . . . . 337
9.3 Polynomials and the Binomial Theorem . . . . . . . . . . . . . . 344
9.4 Polynomials for Combinatorial Reasoning . . . . . . . . . . . . . 352
9.5 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
10 Corecursion 361
10.1 Corecursive Definitions . . . . . . . . . . . . . . . . . . . . . . . 362
10.2 Processes and Labeled Transition Systems . . . . . . . . . . . . .
365
10.3 Proof by Approximation . . . . . . . . . . . . . . . . . . . . . . 373
10.4 Proof by Coinduction . . . . . . . . . . . . . . . . . . . . . . . . 379
10.5 Power Series and Generating Functions . . . . . . . . . . . . . . 385
10.6 Exponential Generating Functions . . . . . . . . . . . . . . . . . 396
10.7 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

11 Finite and Infinite Sets 399


11.1 More on Mathematical Induction . . . . . . . . . . . . . . . . . . 399
11.2 Equipollence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
11.3 Infinite Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
11.4 Cantor’s World Implemented . . . . . . . . . . . . . . . . . . . . 418
11.5 Cardinal Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . 420
iv CONTENTS
The Greek Alphabet 423
References 424 Index 428

Preface
Purpose
Long ago, when Alexander the Great asked the mathematician
Menaechmus for a crash course in geometry, he got the famous
reply “There is no royal road to mathematics.” Where there was no
shortcut for Alexander, there is no shortcut for us. Still, the fact that
we have access to computers and mature programming languages
means that there are avenues for us that were denied to the kings
and emperors of yore.

The purpose of this book is to teach logic and mathematical


reasoning in practice, and to connect logical reasoning with
computer programming. The programming language that will be our
tool for this is Haskell, a member of the Lisp family. Haskell emerged
in the last decade as a standard for lazy functional programming, a
programming style where arguments are evaluated only when the
value is actually needed. Functional programming is a form of
descriptive programming, very different from the style of
programming that you find in prescriptive languages like C or Java.
Haskell is based on a logical theory of computable functions called
the lambda calculus.

Lambda calculus is a formal language capable of expressing arbitrary


computable functions. In combination with types it forms a compact
way to denote on the one hand functional programs and on the
other hand mathematical proofs. [Bar84]

Haskell can be viewed as a particularly elegant implementation of


the lambda calculus. It is a marvelous demonstration tool for logic
and math because its functional character allows implementations to
remain very close to the concepts that get implemented, while the
laziness permits smooth handling of infinite data structures.

v vi

Haskell syntax is easy to learn, and Haskell programs are


constructed and tested in a modular fashion. This makes the
language well suited for fast prototyping. Programmers find to their
surprise that implementation of a well-understood algorithm in
Haskell usually takes far less time than implementation of the same
algorithm in other programming languages. Getting familiar with
new algorithms through Haskell is also quite easy. Learning to
program in Haskell is learning an extremely useful skill.

Throughout the text, abstract concepts are linked to concrete


representations in Haskell. Haskell comes with an easy to use
interpreter, Hugs. Haskell compilers, interpreters and documentation
are freely available from the Internet [HT]. Everything one has to
know about programming in Haskell to understand the programs in
the book is explained as we go along, but we do not cover every
aspect of the language. For a further introduction to Haskell we refer
the reader to [HFP96].

Logic in Practice
The subject of this book is the use of logic in practice, more in
particular the use of logic in reasoning about programming tasks.
Logic is not taught here as a mathematical discipline per se, but as
an aid in the understanding and construction of proofs, and as a tool
for reasoning about formal objects like numbers, lists, trees,
formulas, and so on. As we go along, we will introduce the concepts
and tools that form the set-theoretic basis of mathematics, and
demonstrate the role of these concepts and tools in
implementations. These implementations can be thought of as
representations of the mathematical concepts.
Although it may be argued that the logic that is needed for a proper
understanding of reasoning in reasoned programming will get
acquired more or less automatically in the process of learning
(applied) mathematics and/or programming, students nowadays
enter university without any experience whatsoever with
mathematical proof, the central notion of mathematics.

The rules of Chapter 3 represent a detailed account of the structure


of a proof. The purpose of this account is to get the student
acquainted with proofs by putting emphasis on logical structure. The
student is encouraged to write “detailed” proofs, with every logical
move spelled out in full. The next goal is to move on to writing
“concise” proofs, in the customary mathematical style, while keeping
the logical structure in mind. Once the student has arrived at this
stage, most of the logic that is explained in Chapter 3 can safely be
forgotten, or better, can safely fade into the subconsciousness of the
matured mathematical mind.

PREFACE vii

Pre- and Postconditions of Use


We do not assume that our readers have previous experience with
either programming or construction of formal proofs. We do assume
previous acquaintance with mathematical notation, at the level of
secondary school mathematics. Wherever necessary, we will recall
relevant facts. Everything one needs to know about mathematical
reasoning or programming is explained as we go along. We do
assume that our readers are able to retrieve software from the
Internet and install it, and that they know how to use an editor for
constructing program texts.

After having worked through the material in the book, i.e., after
having digested the text and having carried out a substantial number
of the exercises, the reader will be able to write interesting
programs, reason about their correctness, and document them in a
clear fashion. The reader will also have learned how to set up
mathematical proofs in a structured way, and how to read and digest
mathematical proofs written by others.

How to Use the Book


Chapters 1–7 of the book are devoted to a gradual introduction of
the concepts, tools and methods of mathematical reasoning and
reasoned programming.

Chapter 8 tells the story of how the various number systems (natural
numbers, integers, rationals, reals, complex numbers) can be
thought of as constructed in stages from the natural numbers.
Everything gets linked to the implementations of the various Haskell
types for numerical computation.

Chapter 9 starts with the question of how to automate the task of


finding closed forms for polynomial sequences. It is demonstrated
how this task can be automated with difference analysis plus
Gaussian elimination. Next, polynomials are implemented as lists of
their coefficients, with the appropriate numerical operations, and it is
shown how this representation can be used for solving combinatorial
problems.

Chapter 10 provides the first general textbook treatment (as far as


we know) of the important topic of corecursion. The chapter
presents the proof methods suitable for reasoning about corecursive
data types like streams and processes, and then goes on to
introduce power series as infinite lists of coefficients, and to
demonstrate the uses of this representation for handling
combinatorial problems. This generalizes the use of polynomials for
combinatorics.

Chapter 11 offers a guided tour through Cantor’s paradise of the


infinite, while providing extra challenges in the form of a wide range
of additional exercises. viii
The book can be used as a course textbook, but since it comes with
solutions to all exercises (electronically available from the authors
upon request) it is also well suited for private study. Courses based
on the book could start with Chapters 1–7, and then make a choice
from the remaining Chapters. Here are some examples:

Road to Numerical Computation Chapters 1–7, followed by 8


and 9.
Road to Streams and Corecursion Chapters 1–7, followed by 9
and 10.
Road to Cantor’s Paradise Chapters 1–7, followed by 11.

Study of the remaining parts of the book can then be set as


individual tasks for students ready for an extra challenge. The
guidelines for setting up formal proofs in Chapter 3 should be
recalled from time to time while studying the book, for proper
digestion.

Exercises
Parts of the text and exercises marked by a * are somewhat harder
than the rest of the book.

All exercises are solved in the electronically avaible solutions volume.


Before turning to these solutions, one should read the Important
Advice to the Reader that this volume starts with.

Book Website and Contact


The programs in this book have all been tested with Hugs98, the
version of Hugs that implements the Haskell 98 standard. The full
source code of all programs is integrated in the book; in fact, each
chapter can be viewed as a literate program [Knu92] in Haskell. The
source code of all programs discussed in the text can be found on
the website devoted to this book, at addresshttp://www.cwi.nl/
~jve/HR. Here you can also find a list of errata, and further relevant
material.

Readers who want to share their comments with the authors are
encouraged to get in touch with us at email [email protected].
PREFACE ix

Acknowledgments
Remarks from the people listed below have sparked off numerous
improvements. Thanks to Johan van Benthem, Jan Bergstra, Jacob
Brunekreef, Thierry Coquand (who found the lecture notes on the
internet and sent us his comments), Tim van Erven, Wan Fokkink,
Evan Goris, Robbert de Haan, Sandor Heman, Eva Hoogland, Rosalie
Iemhoff, Dick de Jongh, Anne Kaldewaij, Breannd´an ´O Nuall´ain,
Alban Ponse, Vincent van Oostrom, Piet Rodenburg, Jan Rutten,
Marco Swaen, Jan Terlouw, John Tromp, Yde Venema, Albert Visser
and Stephanie Wehner for suggestions and criticisms. The beautiful
implementation of the sieve of Eratosthenes in Section 3.7 was
suggested to us by Fer-Jan de Vries.

The course on which this book is based was developed at ILLC (the
Institute of Logic, Language and Computation of the University of
Amsterdam) with financial support from the Spinoza Logic in Action
initiative of Johan van Benthem, which is herewith gratefully
acknowledged. We also wish to thank ILLC and CWI (Centrum voor
Wiskunde en Informatica, or Centre for Mathematics and Computer
Science, also in Amsterdam), the home institute of the second
author, for providing us with a supportive working environment. CWI
has kindly granted permission to reuse material from [Doe96].

It was Krzysztof Apt who, perceiving the need of a deadline, spurred


us on to get in touch with a publisher and put ourselves under
contract.
x
Chapter 1
Getting Started
Preview
Our purpose is to teach logic and mathematical reasoning in
practice, and to connect formal reasoning to computer programming.
It is convenient to choose a programming language for this that
permits implementations to remain as close as possible to the formal
definitions. Such a language is the functional programming language
Haskell [HT]. Haskell was named after the logician Haskell B. Curry.
Curry, together with Alonzo Church, laid the foundations of
functional computation in the era Before the Computer, around 1940.
As a functional programming language, Haskell is a member of the
Lisp family. Others family members are Scheme, ML, Occam, Clean.
Haskell98 is intended as a standard for lazy functional programming.
Lazy functional programming is a programming style where
arguments are evaluated only when the value is actually needed.

With Haskell, the step from formal definition to program is


particularly easy. This presupposes, of course, that you are at ease
with formal definitions. Our reason for combining training in
reasoning with an introduction to functional programming is that
your programming needs will provide motivation for improving your
reasoning skills. Haskell programs will be used as illustrations for the
theory throughout the book. We will always put computer programs
and pseudo-code of algorithms in frames (rectangular boxes).

The chapters of this book are written in so-called ‘literate


programming’ style [Knu92]. Literate programming is a programming
style where the program and its documentation are generated from
the same source. The text of every chapter in
1 this book can be viewed as the documentation of the program
code in that chapter. Literate programming makes it impossible for
program and documentation to get out of sync. Program
documentation is an integrated part of literate programming, in fact
the bulk of a literate program is the program documentation. When
writing programs in literate style there is less temptation to write
program code first while leaving the documentation for later.
Programming in literate style proceeds from the assumption that the
main challenge when programming is to make your program
digestible for humans. For a program to be useful, it should be easy
for others to understand the code. It should also be easy for you to
understand your own code when you reread your stuff the next day
or the next week or the next month and try to figure out what you
were up to when you wrote your program.

To save you the trouble of retyping, the code discussed in this book
can be retrieved from the book website. The program code is the
text intypewriterfont that you find in rectangular boxes throughout
the chapters. Boxes may also contain code that is not included in the
chapter modules, usually because it defines functions that are
already predefined by the Haskell system, or because it redefines a
function that is already defined elsewhere in the chapter.

Typewriter font is also used for pieces of interaction with the Haskell
interpreter, but these illustrations of how the interpreter behaves
when particular files are loaded and commands are given are not
boxed.

Every chapter of this book is a so-called Haskell module. The


following two lines declare the Haskell module for the Haskell code
of the present chapter. This module is calledGS.

module GS where

1.1 Starting up the Haskell Interpreter


We assume that you succeeded in retrieving the Haskell interpreter
hugs from the Haskell homepagewww.haskell.org and that you
managed to install it on your computer. You can start the interpreter
by typinghugsat the system prompt. When you start hugs you
should see something like Figure (1.1). The stringPrelude> on the
last line is the Haskell prompt when no user-defined files are loaded.

You can use hugs as a calculator as follows:


__ __ __ __ ____ ___ _________________________________________ || || || || || ||
||__ Hugs 98: Based on the Haskell 98 standard ||___|| ||__|| ||__|| __|| Copyright (c)
1994-2003
||---|| ___|| World Wide Web: http://haskell.org/hugs || || Report bugs to: hugs-
[email protected] || || Version: November 2003
_________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions
Type :? for help Prelude>

Figure 1.1: Starting up the Haskell interpreter.

Prelude> 2^16 65536


Prelude>

The string Prelude> is the system prompt.2^16 is what you type.


After you hit the return key (the key that is often labeled with Enter
or←), the system answers 65536 and the promptPrelude>
reappears.

Exercise 1.1 Try out a few calculations using* for multiplication,+


for addition,
- for subtraction,^ for exponentiation,/ for division. By playing with
the system, find out what the precedence order is among these
operators.

Parentheses can be used to override the built-in operator


precedences:
Prelude> (2 + 3)^4 625
To quit the Hugs interpreter, type:quit or:q at the system prompt.
1.2 Implementing a Prime Number Test
Suppose we want to implement a definition of prime number in a
procedure that recognizes prime numbers. A prime number is a
natural number greater than 1 that has no proper divisors other than
1 and itself. The natural numbers are 0, 1, 2, 3, 4, . . . The list of
prime numbers starts with 2, 3, 5, 7, 11, 13, . . . Except for2, all of
these are odd, of course.
Letn > 1 be a natural number. Then we use LD(n) for the least
natural number greater than 1 that dividesn. A numberd dividesn if
there is a natural number a witha·d = n. In other words,d dividesn if
there is a natural numbera with n = a , i.e., division ofn byd leaves
no remainder. Note that LD(n) exists ford
every natural numbern > 1, for the natural numberd = n is greater
than 1 and dividesn. Therefore, the set of divisors ofn that are
greater than 1 is non-empty. Thus, the set will have a least element.

The following proposition gives us all we need for implementing our


prime number test:
Proposition 1.2
1. Ifn > 1 then LD(n) is a prime number.
2. Ifn > 1 andn is not a prime number, then(LD(n))2 n.
In the course of this book you will learn how to prove propositions
like this.

Here is the proof of the first item. This is a proof by contradiction


(see Chapter 3). Suppose, for a contradiction thatc = LD(n) is not a
prime. Then there are natural numbersa andb withc = a·b, and also
1 < a anda < c. But thena dividesn, and contradiction with the fact
that c is the smallest natural number greater than1 that dividesn.
Thus, LD(n) must be a prime number.

For a proof of the second item, suppose that n > 1,n is not a prime
and that p = LD(n). Then there is a natural numbera > 1 withn =
p·a. Thus,a dividesn. Sincep is the smallest divisor ofn withp > 1, we
have thatp a, and thereforep2 p·a = n, i.e.,(LD(n))2 n.

The operator· ina·b is a so-called infix operator. The operator is


written between its arguments. If an operator is written before its
arguments we call this prefix notation. The product ofa andb in
prefix notation would look like this:·a b.

In writing functional programs, the standard is prefix notation. In an


expression op a b,op is the function, anda andb are the arguments.
The convention is that function application associates to the left, so
the expressionop a b is interpreted as(op a) b.

Using prefix notation, we define the operation divides that takes two
integer expressions and produces a truth value. The truth values
true and false are rendered in Haskell asTrue andFalse, respectively.

The integer expressions that the procedure needs to work with are
called the arguments of the procedure. The truth value that it
produces is called the value of the procedure.
Obviously,m dividesn if and only if the remainder of the process of
dividingn bym equals 0. The definition ofdivides can therefore be
phrased in terms of a predefined procedurerem for finding the
remainder of a division process:

divides d n = rem n d == 0
The definition illustrates that Haskell uses= for ‘is defined as’ and==
for identity. (The Haskell symbol for non-identity is/=.)

A line of Haskell code of the form foo t = ... (or foo t1 t2 = ..., or foo
t1 t2 t3 = ..., and so on) is called a Haskell equation. In such an
equation,foo is called the function, andt its argument.

Thus, in the Haskell equationdivides d n = rem n d == 0,divides is


the function,d is the first argument, andn is the second argument.
Exercise 1.3 Put the definition ofdivides in a file prime.hs. Start the
Haskell interpreter hugs (Section 1.1). Now give the command:load
prime or:l prime, followed by pressing Enter. Note thatl is the letterl,
not the digit 1. (Next to:l, a very useful command after you have
edited a file of Haskell code is:reload or :r, for reloading the file.)

Prelude> :l prime Main>

The string Main>is the Haskell prompt indicating that user-defined


files are loaded. This is a sign that the definition was added to the
system. The newly defined operation can now be executed, as
follows:

Main> divides 5 7 False


Main>

The string Main> is the Haskell prompt, the rest of the first line is
what you type. When you press Enter the system answers with the
second line, followed by the Haskell prompt. You can then continue
with:

Main> divides 5 30 True

It is clear from the proposition above that all we have to do to


implement a primality test is to give an implementation of the
function LD. It is convenient to define LD in terms of a second
function LDF, for the least divisor starting from a given thresholdk,
withk n. Thus, LDF(k)(n) is the least divisor ofn that is k. Clearly,
LD(n) = LDF(2)(n). Now we can implement LD as follows:

ld n = ldf 2 n
This leaves the implementationldfof LDF (details of the coding will be
explained below):

ldf k n | divides k n = k
| k^2 > n = n
| otherwise = ldf (k+1) n
The definition employs the Haskell operation^ for exponentiation,>
for ‘greater than’, and+ for addition.

The definition of ldf makes use of equation guarding. The first line of
theldf definition handles the case where the first argument divides
the second argument. Every next line assumes that the previous
lines do not apply. The second line handles the case where the first
argument does not divide the second argument, and the square of
the first argument is greater than the second argument. The third
line assumes that the first and second cases do not apply and
handles all other cases, i.e., the cases wherek does not dividen
andk2< n.

The definition employs the Haskell condition operator| . A Haskell


equation of the form
foo t | condition = ...
is called a guarded equation. We might have written the definition
ofldf as a list of guarded equations, as follows:

ldf k n | divides k n = k
ldf k n | k^2 > n = n
ldf k n = ldf (k+1) n

The expressioncondition, of typeBool (i.e., Boolean or truth value), is


called the guard of the equation.
A list of guarded equations such as

foo t | condition_1 = body_1


foo t | condition_2 = body_2
foo t | condition_3 = body_3
foo t = body_4

can be abbreviated as

foo t | condition_1 = body_1


| condition_2 = body_2
| condition_3 = body_3
| otherwise = body_4

Such a Haskell definition is read as follows:


• in casecondition_1 holds,foo t is by definition equal tobody_1,

in casecondition_1 does not hold butcondition_2 holds,foo t is by
definition equal tobody_2,

in case condition_1 and condition_2 do not hold but condition_3
holds,foo t is by definition equal tobody_3,

and in case none ofcondition_1,condition_2 andcondition_3 hold, foo
t is by definition equal tobody_4.
When we are at the end of the list we know that none of the cases
above in the list apply. This is indicated by means of the Haskell
reserved keywordotherwise.

Note that the procedure ldf is called again from the body of its own
definition. We will encounter such recursive procedure definitions
again and again in the course of this book (see in particular Chapter
7).
Exercise 1.4 Suppose in the definition ofldf we replace the
conditionk^2 > n byk^2 >= n, where>= expresses ‘greater than or
equal’. Would that make any difference to the meaning of the
program? Why (not)?

Now we are ready for a definition ofprime0, our first implementation


of the test for being a prime number.

prime0 n | n < 1 = error "not a positive integer" | n == 1 = False


| otherwise = ld n == n

Haskell allows a call to the erroroperation in any definition. This is


used to break off operation and issue an appropriate message when
the primality test is used for numbers below 1. Note thaterror has a
parameter of typeString (indicated by the double quotes).

The definition employs the Haskell operation< for ‘less than’.


Intuitively, what the definitionprime0 says is this:

1. the primality test should not be applied to numbers below 1,


2. if the test is applied to the number1 it yields ‘false’,

3. if it is applied to an integer n greater than 1 it boils down to


checking that LD(n) = n. In view of the proposition we proved
above, this is indeed a correct primality test.

Exercise 1.5 Add these definitions to the file prime.hs and try them
out.

Remark. The use of variables in functional programming has much


in common with the use of variables in logic. The definitiondivides d
n = rem n d == 0 is equivalent todivides x y = rem y x == 0. This is
because the variables denote arbitrary elements of the type over
which they range. They behave like universally quantified variables,
and just as in logic the definition does not depend on the variable
names.

1.3 Haskell Type Declarations


Haskell has a concise way to indicate thatdivides consumes an
integer, then another integer, and produces a truth value (calledBool
in Haskell). Integers and
1.3. HASKELLTYPEDECLARATIONS 9

truth values are examples of types. See Section 2.1 for more on the
typeBool. Section 1.6 gives more information about types in general.
Arbitrary precision integers in Haskell have typeInteger. The
following line gives a so-called type declaration for thedivides
function.
divides :: Integer -> Integer -> Bool

Integer -> Integer -> Bool is short forInteger -> (Integer -> Bool).
A type of the forma -> b classifies a procedure that takes an
argument of typea to produce a result of typeb. Thus,divides takes
an argument of typeInteger and produces a result of typeInteger ->
Bool, i.e., a procedure that takes an argument of typeInteger, and
produces a result of typeBool.

The full code fordivides, including the type declaration, looks like
this:
divides :: Integer -> Integer -> Bool divides d n = rem n d == 0
Ifd is an expression of typeInteger, thendivides d is an expression of
type Integer -> Bool. The shorthand that we will use for
d is an expression of typeInteger
is:d :: Integer.
Exercise 1.6 Can you gather from the definition ofdivides what the
type declaration forrem would look like?

Exercise 1.7 The hugs system has a command for checking the
types of expressions. Can you explain the following (please try it
out; make sure that the file with the definition ofdivides is loaded,
together with the type declaration for divides):

Main> :t divides 5
divides 5 :: Integer -> Bool Main> :t divides 5 7
divides 5 7 :: Bool
Main>

The expression divides 5 :: Integer -> Bool is called a type


judgment. Type judgments in Haskell have the formexpression ::
type.

In Haskell it is not strictly necessary to give explicit type


declarations. For instance, the definition ofdivides works quite well
without the type declaration, since the system can infer the type
from the definition. However, it is good programming practice to give
explicit type declarations even when this is not strictly necessary.
These type declarations are an aid to understanding, and they
greatly improve the digestibility of functional programs for human
readers. A further advantage of the explicit type declarations is that
they facilitate detection of programming mistakes on the basis of
type errors generated by the interpreter. You will find that many
programming errors already come to light when your program gets
loaded. The fact that your program is well typed does not entail that
it is correct, of course, but many incorrect programs do have typing
mistakes.

The full code forld, including the type declaration, looks like this:
ld :: Integer -> Integer ld n = ldf 2 n
The full code forldf, including the type declaration, looks like this:

ldf :: Integer -> Integer -> Integer ldf k n | divides k n = k


| k^2 > n = n
| otherwise = ldf (k+1) n

The first line of the code states that the operationldf takes two
integers and produces an integer.
The full code forprime0, including the type declaration, runs like this:
1.4. IDENTIFIERSINHASKELL 11

prime0 :: Integer -> Bool


prime0 n | n < 1 = error "not a positive integer" | n == 1 = False
| otherwise = ld n == n

The first line of the code declares that the operationprime0 takes an
integer and produces (or returns, as programmers like to say) a
Boolean (truth value).

In programming generally, it is useful to keep close track of the


nature of the objects that are being represented. This is because
representations have to be stored in computer memory, and one has
to know how much space to allocate for this storage. Still, there is
no need to always specify the nature of each data-type explicitly. It
turns out that much information about the nature of an object can
be inferred from how the object is handled in a particular program,
or in other words, from the operations that are performed on that
object.

Take again the definition of divides. It is clear from the definition


that an operation is defined with two arguments, both of which are
of a type for whichrem is defined, and with a result of typeBool
(forrem n d == 0 is a statement that can turn out true or false). If
we check the type of the built-in procedurerem we get:

Prelude> :t rem
rem :: Integral a => a -> a -> a

In this particular case, the type judgment gives a type scheme rather
than a type. It means: ifa is a type of classIntegral, thenrem is of
typea -> a -> a. Here a is used as a variable ranging over types.

In Haskell, Integral is the class (see Section 4.2) consisting of the


two types for integer numbers,Int andInteger. The difference
betweenInt andInteger is that objects of typeInt have fixed
precision, objects of typeInteger have arbitrary precision.

The type ofdivides can now be inferred from the definition. This is
what we get when we load the definition ofdivides without the type
declaration:
Main> :t divides
divides :: Integral a => a -> a -> Bool

1.4 Identifiers in Haskell


In Haskell, there are two kinds of identifiers:

Variable identifiers are used to name functions. They have to start
with a lower-case letter. E.g.,map,max,fct2list,fctToList,fct_to_list.

Constructor identifiers are used to name types. They have to start
with an upper-case letter. Examples areTrue,False.
Functions are operations on data-structures, constructors are the
building blocks of the data structures themselves (trees, lists,
Booleans, and so on).

Names of functions always start with lower-case letters, and may


contain both upper- and lower-case letters, but also digits,
underscores and the prime symbol ’. The following reserved
keywords have special meanings and cannot be used to name
functions.

case class data default deriving do else if import in infix infixl infixr
instance let module newtype of then type where

The use of these keywords will be explained as we encounter them.


at the beginning of a word is treated as a lower-case character. The
underscore character all by itself is a reserved word for the wild card
pattern that matches anything (page 141).

There is one more reserved keyword that is particular to Hugs:


forall, for the definition of functions that take polymorphic
arguments. See the Hugs documentation for further particulars.

1.5 Playing the Haskell Game


This section consists of a number of further examples and exercises
to get you acquainted with the programming language of this book.
To save you the trouble of keying in the programs below, you should
retrieve the moduleGS.hs for the present chapter from the book
website and load it in hugs. This will give you a system promptGS>,
indicating that all the programs from this chapter are loaded.

In the next example, we useInt for the type of fixed precision


integers, and[Int] for lists of fixed precision integers.
Example 1.8 Here is a function that gives the minimum of a list of
integers:

mnmInt :: [Int] -> Int


mnmInt [] = error "empty list" mnmInt [x] = x
mnmInt (x:xs) = min x (mnmInt xs)

This uses the predefined function min for the minimum of two
integers. It also uses pattern matching for lists . The list pattern[]
matches only the empty list, the list pattern[x] matches any
singleton list, the list pattern(x:xs) matches any non-empty list. A
further subtlety is that pattern matching in Haskell is sensitive to
order. If the pattern[x] is found before(x:xs) then(x:xs) matches any
non-empty list that is not a unit list. See Section 4.6 for more
information on list pattern matching.

It is common Haskell practice to refer to non-empty lists as


x:xs,y:ys, and so on, as a useful reminder of the facts thatx is an
element of a list ofx’s and thatxs is a list.

Here is a home-made version ofmin:

min’ :: Int -> Int -> Int min’ x y | x <= y = x | otherwise = y

You will have guessed that<= is Haskell code for .


Objects of typeInt are fixed precision integers. Their range can be
found with:

Prelude> primMinInt
-2147483648
Prelude> primMaxInt 2147483647

Since 2147483647 = 231 1, we can conclude that the hugs


implementation uses−
four bytes (32 bits) to represent objects of this type.Integer is for
arbitrary precision integers: the storage space that gets allocated
forInteger objects depends on the size of the object.
Exercise 1.9 Define a function that gives the maximum of a list of
integers. Use the predefined functionmax.
Conversion from Prefix to Infix in Haskell A function can be
converted to an infix operator by putting its name in back quotes,
like this:

Prelude> max 4 5 5
Prelude> 4 ‘max‘ 5 5

Conversely, an infix operator is converted to prefix by putting the


operator in round brackets (p. 21).

Exercise 1.10 Define a functionremoveFst that removes the first


occurrence of an integerm from a list of integers. Ifm does not occur
in the list, the list remains unchanged.

Example 1.11 We define a function that sorts a list of integers in


order of increasing size, by means of the following algorithm:
• an empty list is already sorted.

if a list is non-empty, we put its minimum in front of the result of
sorting the list that results from removing its minimum.
This is implemented as follows:

srtInts :: [Int] -> [Int]


srtInts [] = []
srtInts xs = m : (srtInts (removeFst m xs)) where m = mnmInt xs

Here removeFstis the function you defined in Exercise 1.10. Note


that the second clause is invoked when the first one does not apply,
i.e., when the argument of srtInts is not empty. This ensures
thatmnmInt xs never gives rise to an error.

Note the use of awhere construction for the local definition of an


auxiliary function.
Remark. Haskell has two ways to locally define auxiliary
functions,where and let constructions. Thewhere construction is
illustrated in Example 1.11. This can also expressed withlet, as
follows:

srtInts’ :: [Int] -> [Int]


srtInts’ [] = []
srtInts’ xs = let

m = mnmInt xs
in m : (srtInts’ (removeFst m xs))
Thelet construction uses the reserved keywordslet andin.

Example 1.12 Here is a function that calculates the average of a


list of integers. The average ofm andn is given by m+n, the average
of a list ofk integers n

1
,...,n
k
is given by
n
1
+
···
+
n
2
k
. In general, averages are fractions, so the result
k

type of average should not beInt but the Haskell data-type for
floating point numbers, which isFloat. There are predefined
functionssum for the sum of a list of integers, andlength for the
length of a list. The Haskell operation for division / expects
arguments of typeFloat (or more precisely, ofFractional type, and
Exploring the Variety of Random
Documents with Different Content
The Project Gutenberg eBook of Ronda tanár

ur (regény)
This ebook is for the use of anyone anywhere in the United States
and most other parts of the world at no cost and with almost no
restrictions whatsoever. You may copy it, give it away or re-use it
under the terms of the Project Gutenberg License included with this
ebook or online at www.gutenberg.org. If you are not located in the
United States, you will have to check the laws of the country where
you are located before using this eBook.

Title: Ronda tanár ur (regény)

Author: Heinrich Mann

Translator: Dezső Kosztolányi

Release date: January 11, 2024 [eBook #72687]

Language: Hungarian

Original publication: Békéscsaba: Tevan, 1914

Credits: Albert László from page images generously made available


by the Hungarian Electronic Library

*** START OF THE PROJECT GUTENBERG EBOOK RONDA TANÁR


UR (REGÉNY) ***
HEINRICH MANN:

RONDA TANÁR UR
(REGÉNY)

FORDITOTTA:

KOSZTOLÁNYI DEZSŐ

1914
TEVAN-KIADÁS BÉKÉSCSABA
TEVAN ADOLF KÖNYVNYOMDÁJA BÉKÉSCSABA
I.

Mivel a neve Gonda volt, az egész iskola csak ugy hivta, hogy
Ronda. A többi professzor időnként változtatta a csufnevét. Uj
diákcsapat került egy-egy osztályba, vérszomjas tekintettel felfedezte
valamelyik tanárnak az elmult esztendőben még nem eléggé
méltányolt kómikus tulajdonságát és kiméletlenül csufnevet adott
neki. Ronda azonban már sok generáción keresztül viselte a magáét,
az egész város igy nevezte, a kollégái is igy hivták, a gimnáziumban
és a gimnáziumon kivül a háta mögött. Azok a tanárok, akik kosztos-
diákokat vagy privátosokat tartottak, naponta beszéltek növendékeik
előtt Ronda tanár urról. De az a megfigyelő, aki a hetedik osztály
osztályfőnökén valami ujat akart volna észrevenni és egy uj nevet
akart volna adni neki, sohase érte el a célját; már csak azért sem,
mert az öreg tanár rég megszokott csufneve olyan brilliánsul hatott,
mint huszonhat esztendővel ezelőtt. Mikor az iskola udvarán
keresztül ment, az egyik diák átkiabált a másiknak:
– Nem érzed, milyen ronda szag van itt?
Vagy:
– Phü, micsoda ronda bogár!
És azonnal hevesen rángani kezdett az öreg válla, mindig a jobb
válla és ferde-zöld tekintetet vetett pápaszeme mögül, amely tele
volt sanda félelemmel és boszuvággyal: egy rossz lelkiismeretü
zsarnok pillantása volt ez, aki köpenyek redőiben elrejtett tőrök után
szaglász. Gyér sárgásszürke szőrökkel fedett merev álla fel és
lebillent. Semmit sem tudott »bizonyitani« a kiabáló fiura és szó
nélkül kellett elódalognia, cingár és mégis trotyakos lábszáraival,
zsiros karimáju kőmüves kalapjával.
Tavaly, amikor jubileumát ülte, a gimnázium fáklyásmenetet
rendezett a tiszteletére. Ronda kiment a lakása erkélyére és
beszédet mondott. Mig minden fej meredt nyakkal bámult a
magasba, hogy hallja, hirtelen valami kellemetlen, nyivákoló hang
szólalt meg:
– Phü, de ronda szag van itt!
Mások ismételték:
– Phü, de ronda szag van itt!
– Phü, de ronda szag!
A professzor odafent elkezdett dadogni – bár előre sejtette az
incidenset – és valamennyi orditónak jól belelátott a tátott szájába. A
többi tanár ur a közelben állott; ő pedig érezte, hogy ujra nem tud
semmit »bizonyitani«; de az összes neveket beirta a fekete könyvbe.
És másnap a nyivákoló hang tulajdonosát – mert szegény nem tudta,
hol született az orleánsi szüz – jóindulatuan biztositotta, hogy még
sok kellemetlenséget szerez neki ebben az életben.
És csakugyan, Kieselackot nem engedte át a vizsgán. Vele együtt
hasaltak el mindazok, akik azon az emlékezetes jubileumi estén
orditoztak. Igy Ertzum is. Lohmann azonban nem orditott, mégis
megbukott. Az egyik a hanyagságával, a másik a
tehetségtelenségével segitette Ronda boszuját.
Félévvel később, egy őszi délelőtt 11 órakor, tiz perc alatt –
mielőtt iskolai dolgozatot irtunk volna az orleánsi szüzről – történt,
hogy Ertzum, aki még mindig nem tudott közelebb férkőzni a
szüzhöz és egy előrelátott katasztrófától félt, kétségbeesésében
felrántotta az ablakot és nyivákoló hangon – csak ugy találomra –
kiorditotta a ködbe:
– Ronda!
Nem tudta, hogy a tanár ur a közelben van-e és nem is törődött
vele. A szegény vállas vidéki kamaszt elragadta a szenvedélye, hogy
még egyszer utóljára egy pillanatra recsegtesse hangját, mielőtt két
óra hosszat kuporog egy üres fehér lap előtt, amelyet neki kell majd
– ugyancsak üres koponyája segitségével – szavakkal tele szántani.
Véletlenül Ronda csakugyan akkor ment keresztül az udvaron.
Mikor meghallotta a kiáltást, félreugrott. Fent a ködben felismerte
Ertzum tömzsi körvonalait. Egyetlen diák se volt lent az udvaron,
senkinek sem szólhatott Ertzum kiáltása.
– Most az egyszer – gondolta magában kárörömmel Ronda –
engem értett. Most az egyszer tetten értem.
Öt ugrással felrohant a lépcsőn, kitárta az osztály ajtaját,
keresztül rontott a padok között és rápattant a katedrára. Itt
reszketve megállott, fuldokolt, lélekzetet kellett vennie. A diákok
felállottak, hogy üdvözöljék, a fülsiketitő lárma egy pillanat alatt
bénult némasággá változott. Ugy tekintették az osztályfőnöküket,
mint egy közveszélyes állatot, akit sajnos, lebunkózni nem lehet, sőt,
aki rövid ideig veszedelmes fölényt nyert rajtuk. Ronda melle
hevesen zihált; végül vésztjósló hangon kibökte:
– Az imént ujból hallottam egy bizonyos szót, valaki felém
kiáltotta, egy jelzőt – egy nevet, amelyet egyáltalán nem türök. Nem
türöm, hogy olyan valaki, mint ön, akinek jellemét és tudását sajnos,
nagyon is van szerencsém ismerni, engem gyalázatos csufnévvel
illessen. Nem türöm, érti, nem türöm. Az ön elvetemültsége Ertzum
határtalan, de biztositom, hogy megtanitom keztyübe dudálni. Még
ma jelentést teszek az igazgató urnak és ami engem illet, minden
befolyásomat latba vetem, – jól jegyezzük meg – hogy az intézet
legalább az emberiség ilyen söpredékétől megtisztittassék.
Utána ledobta válláról a köpenyét és igy hörgött:
– Leülni!
Az osztály leült, csupán Ertzum maradt állva. Vastag, szeplős feje
most oly tüzvörös volt, mint sörtéi, a feje bubján. Valamit akart
mondani, többször pedzette, de benne rekedt a szó. Végre kinyögte:
– Nem én voltam, tanár ur kérem.
Több hang támogatta őt, áldozatkészen és barátian:
– Nem ő volt, tanár ur kérem.
Ronda felhördült:
– Csend legyen!… És ön, Ertzum, jegyezze meg, hogy már volt
egy éppen ilyen nevü ember – nemde, ugyebár – akinek a pályáját
hátráltattam és azt is jegyezze meg, hogy az ön további
előmenetelét ha nem is lehetetlenné, de mint annak idején a
nagybátyjáét, kinos-keservessé fogom tenni. Maga tiszt akar lenni,
ugy-e Ertzum? A nagybátyja is az akart lenni. Mivel azonban az előirt
tananyagot sohasem tudta sikeresen befejezni és az egy évi
önkéntesi szolgálathoz szükséges érettségi bizonyitványt – ennek
következéseképpen és folytán – sokáig nem kapta meg, afféle
svindli-gimnáziumba ment, ahol szintén megbukhatott és később
csak őfelsége legmagasabb kegyelme folytán lehetett tiszt, bár – ugy
látszik – ezt a pályát is hamar abba kellett hagynia. Nos tehát!
Ugyanez a sors, legalább is hasonló sors vár önre is, Ertzum. Sok
szerencsét hozzá! Egyébként a véleményem az ön egész familiájáról
Ertzum, már tizenöt esztendeje megvan és nem változott… Mivel
pedig –
Itt Ronda hangja siri karaktert öltött.
– Ön szellemtelen fajankó, meg se érdemli, hogy foglalkozzék
annak a magasztos szüznek az alakjával, akire most áttérünk:
takarodjék innen, ki a dutyiba!
Von Ertzum, aki kissé nehézfejü volt, még mindig figyelt, ámult-
bámult, hogy mit akar. Észre se vette, hogy a megfeszitett figyeléstől
állkapcsával öntudatlanul utánozta a professzor állának a
mozdulatait. Ronda álla, amelynek felső részéből több sárgás tüske
meredezett kifelé, ugy forgott a két feszes szájszöglet között, mintha
tengelyen keringene, a nyála pedig egész az első padig fröccsent.
Orditani kezdett:
– Még merészkedik, szemtelen kölyök!… Takarodjék ki –
mondtam már – ki a dutyiba!
Ertzum riadtan szédült ki a padból. Kieselsack odasugott neki:
– Vigyázz.
Lohmann fojtott hangon bátoritotta:
– Ne félj, majd elbánunk vele.
Az elitélt a katedra előtt ódalgott a kis helyiségbe, amely az
osztály ruhatárául szolgált és vak sötétség uralkodott benne. Ronda
megkönnyebbülten sóhajtott fel, amikor az ajtó a vállas legény
mögött becsukódott.
– Most pedig igyekezzünk pótolni, a mulasztott időt, mondta,
amelyet ez a lurkó ellopott tőlünk. Angst, itt van a feladat, fogja, irja
a táblára.
Az eminens fogta a cédulát, közellátó szemeihez emelte és lassan
nekifogott az irásnak. Valamennyien izgalmas várakozással lesték,
hogy milyen betük támadnak a kréta nyomán. Minden ettől függött.
Ha olyan jelenetről lesz szó, amelyet véletlenül sohasem »vettek át«,
akkor egyiknek sincs »dunsztja« a dologról és akkor »benne vannak
a pácban«, Babonából már előre mondogatták, még mielőtt a betük
a táblán kialakultak volna:
– Boldog Isten, dacit kapok.
Végre felirta:

JOHANNA: Három imát mondtál az ég urához;


Figyelj, dauphin, hogy tudom-e imáid.
(Az orleánsi szüz, első felvonás, tizedik jelenet.)

Feladat: A dauphin harmadik imája.

Mikor elolvasták, valamennyien egymásra néztek. Mindnyájan


»benne voltak a pácban«, Ronda »megfogta« őket. »Hamiskás«
mosolygással dült bele karosszékébe, fönn a katedrán és lapozgatni
kezdett a noteszében.
– Nos? – kérdezte anélkül, hogy felnézett volna, mintha minden
rendben lenne, – akarnak még valamit tudni?… Tehát kezdjék!
A legtöbben füzeteik fölé kuporodtak és ugy tettek, mintha máris
irnának. Néhányan bambán bámultak maguk elé.
– Még van ötnegyed órájuk, jegyezte meg Ronda közönyösen és
belsejében ujjongott. Ezt a dolgozatot még senkise adta fel,
egyetlenegy lelkiismeretlen tanárfinak se jutott ezsébe, hogy ez a
banda eddig hitvány »puskák«-ból irta ki a dolgozatait és ugy
csuszott át egyik osztályból a másikba.
Egyesek az osztályban emlékeztek az első felvonás tizedik
jelenetére és konyitottak valamit a dauphin két első imájához. De a
harmadikra nem emlékeztek, mintha nem is olvasták volna sohase.
Angst és még ketten, hárman, köztük Lohmann is, egész bizonyosak
voltak benne, hogy sohasem olvasták. Hiszen a dauphin csupán két
esti imáját ismételteti el a szüzzel; ez tökéletesen meggyőzi Johanna
isteni küldetésében való hitéről. A harmadik egyáltalán nincs is meg.
Akkor biztosan más helyen van, vagy valahol kiviláglik – közvetve – a
cselekményekből; vagy talán egyszerüen beteljesedik anélkül, hogy
tudhatná az ember, hogy itt valami beteljesedett? Hogy itt valami
bibi van, azt Angst, az eminens is bevallotta magának titokban.
Mindenesetre erről a harmadik imáról, sőt egy negyedikről és
ötödikről is kell, hogy valami mondani valója legyen az embernek, ha
Ronda ugy kivánja.
Azokról a dolgokról, amelyek létezéséről, legalább meg voltak
győződve mint a hüség kötelességéről, az iskola áldásáról, a
hazaszeretetről, már megszokták, hogy egy csomó lapot
gondolkozás nélkül irjanak tele frázisokkal, a német dolgozatok évek
óta erre nevelték őket. Ez a téma sem érdekelt senkit; de ők azért
körmöltek. A drámai költemény, amelyből ezt a feladatot a tanár
kipicézte, a lednagyobb közundort keltette, mert már hónapok óta
egyébre se szolgált, mint hogy a diákokat »pácba ültesse«.
Az orleánsi szüzzel már husvét óta foglalkozott az osztály, szóval
éppen háromnegyed éve. Az ismétlők pedig két kerek éve rágódtak
rajta. Olvasták már előlről hátra és visszafelé, jeleneteket tanultak
belőle kivülről, történelmi fejtegetéseket firkáltak róla, poetikai és
grammatikai szabályokat állapitottak meg; verseit prózába ültették át
és a prózát megint vissza versbe. Mindazok, akik az első olvasásnál
valami fényt és szint éreztek ki ezekből a versekből, már rég
eltompultak varázsa iránt. A lehangolt lant hurjain nem tudtak már
semmiféle melódiát kipengetni. Senki sem hallotta többé a sajátos
fehér leányhangot, amelyben kisérteties, zordon kardok emelkedtek
ütésre, amelyben nem boritotta többé páncél a szivet és amelyben
kiterjesztett angyalszárnyak fényeskedtek tündökölve és szörnyüen.
Akit e fiatal kamaszok közül egyszer később e pásztorleány csaknem
fullasztó ártatlansága reszketésbe hozott volna, aki egyszer
megszerette volna benne gyöngeségének diadalát, aki megsiratta
volna egyszer ennek az Istentől elhagyott gyermeki szüziségnek a
sorsát, hogy itt a földön egy szegény, gyámoltalan és szerelmes
leánnyá változott, az a diák örökre lemondhat ezekről a friss
szenzációkról, miután Ronda professzor vezetése mellett átrágta
magát a drámán. Annak a diáknak legalább is husz évre van
szüksége, amig Johannában ujból mást láthat, mint egy poros és
száraz aggszüzet.
A tollak percegtek; Ronda tanár ur a legnagyobb
lelkinyugalommal ölbetett kezekkel nézett el a meggörbült nyakak
fölött. Az mindig jó nap volt, amikor »megcsipett« valakit, különösen
ha olyan valakit, aki a csufnevét kimondta. Sajnos, már két
esztendeje, hogy egyetlenegyet sem sikerült »megcsipnie« a sunyi
csufolódók közül. Ezek sovány esztendők voltak. Az évek aszerint
voltak soványak vagy kövérek, amint Ronda »megcsipett« néhányat
vagy pedig »nem tudott bizonyitani«.
Ronda, aki tudta, hogy a diákok a háta mögött ellenségei, hogy
becsapják és gyülölik, ugy bánt velök, mint halálos ellenségeivel,
akik közül sohasem lehet eleget »pácba ültetni« és megbuktatni a
vizsgán. Mivel egész életét iskolában töltötte, a diákokat és csip-csup
ügyeiket sohasem tolhatta ki a tapasztalt ember perspektivájába. Oly
közelről látta őket, mintha hasonszőrü lenne és csak véletlenül jutott
volna a hatalomhoz és a katedrára. Ugy beszélt és gondolkozott,
mint ők, használta a csibészkifejezéseket, az öltözőt »dutyi«-nak
hivta.
Feddő beszédeit abban a stilusban tartotta, amilyen stilusban a
diákok a klasszikusokat forditották, latinos körmondatokban, át meg
átszőve ilyen szavakkal, mint »nemde«, »ugyebár«, »valóban« és
hasonló halmozásával apró, ostoba kötőszavaknak, amelyeket
különösen a nyolcadik osztály Homérosz-óráin kultivált; mert a görög
klasszikusok henye pedantériáit, a jelentés nélkül való kötőszavakat
– a nyelv ez apró muslicáit – »szóról-szóra« kellett forditani. Mivel
neki magának merevek voltak a tagjai, ugyanezt követelte meg az
intézet minden egyes növendékétől is. A fiatal agyvelők és fiatal
izomzatok folytonos mozgási vágya, teljesen idegen maradt tőle.
Ronda elfelejtette és sohasem tudta megérteni a diákoknak, ezeknek
a fiatal csikóknak hancurozását és dübörgő kedvét, a hirigeléseket, a
csinyeket, azt, hogy egymásnak néha jókora testi fájdalmakat
okoznak és annyi fölösleges erőt és bátorságot pazarolnak
haszontalan és értelmetlen dolgok véghezvitelére. Ha büntetett, nem
azzal az előre megfontolt fenntartással tette, hogy: »ti huncutok
vagytok, ez igy van jól; de azért fegyelemnek mégis kell lenni«;
hanem komolyan büntetett, a fogát vicsoritva. Mindaz, ami az
iskolában történt, Ronda számára véresen komoly volt és az igazi
élet erejével hatott. A hanyagságot egy mélyen elzüllött,
semmirekelő polgár romlottságához hasonlitotta, a figyelmetlenséget
és nevetést az államhatalom ellen való erőszaknak minősitette, egy
békarakéta a forradalom szellemét reprezentálta és a »csalási
kisérlet« minden időkre megbecstelenitést vont maga után. Ilyen
esetekbe Ronda belesápadt. Ha valakit a dutyiba hesselt, ugy érezte
magát, mint egy zsarnok, aki megint egy csomó országháboritót
küldött gályarabságba és a félelem és győzelem érzésével, korlátlan
hatalmát, de egyuttal a saját pusztulásának viharát is érzi. És a
»dutyi«-ból visszajötteket és mindazokat, akikkel valaha is baja volt,
Ronda sohasem felejtette el. Mivel negyedszáz éve müködött már az
intézetnél, a város és a környék tele volt régi tanitványaival,
olyanokkal, akiket a csufneve kimondásában »megcsipett« vagy
olyanokkal, akikre »nem tudott semmit bizonyitani« és akik még ma
is mind igy hivták őt! Az iskola az ő számára nem zárult be a
falkeritéssel, kiterjeszkedett az egész városra és minden korhatárra.
Mindenütt megátalkodott, elvetemült fickók voltak, akik
»feladataikat« nem vették át és »nem präparálták« és a tanár iránt
ellenséges rosszindulattal viseltettek. Ha husvéttájt keze alá került
egy zöldfülü uj diák, aki csak otthon hallotta, amint idősebb rokonai
kigunyolták Ronda tanár urat és nevettek rajta, mint egy kedves,
humoros ifjukori emlékükön, a professzor az első alkalommal –
amikor a szegény diák nem tudott felelni, – sziszegve ráfujt, mint
egy vadmacska:
– Az önök fajtájából már háromszor volt itt szerencsém. Gyülölöm
az egész retyerutyáját.
Ronda a fönséges magaslatról, ahová került élvezte képzelt
biztonságát; közben azonban uj veszély fenyegetett. Lohmann volt a
merénylő.
Lohmann nagyon gyorsan összeütötte a dolgozatát és valami
privát foglalkozás után látott. Ez azonban sehogyse ment, mert
barátjának, Ertzumnak az esete nem hagyta nyugton. Ő bizonyos
fokig erkölcsi védencének tekintette a pufók, fiatal, nemes fiut és
ugy érezte, a saját becsületének tartozik azzal, hogy barátjának
szellemi gyöngéit – ahol csak teheti – saját képességeivel
takargassa. Abban a pillanatban, amikor Ertzum valami hallatlan
ostobaságot akart kinyögni, Lohmann hangosan krákogni kezdett és
közben halkan odasugta neki a helyes feleletet. Ha pedig ez nem
sikerült, a legértelmetlenebb badarságot is érthetővé és tiszteltté
tudta tenni a többi fiu előtt, annak a kijelentésével, hogy Ertzum
csak azért mondott ilyesmit, hogy halálra boszantsa a tanárt.
Lohmann feketehaju fickó volt. Haja elől a homlokára csapzott és
mélabus tincsekbe csavarodott. Az arca sápadt volt, mint Luciferé és
nagyon mozgékony. Heinés verseket irt és szerelmes volt egy
harminc éves asszonyba. Irodalmi müveltségének fejlesztése nagyon
igénybe vette és az iskolára nem sok időt fordithatott. A tanári
testületnek feltünt, hogy Lohmann csak az utolsó negyedben lát neki
a munkának és bár mindig elég jól vizsgázott, mégis megbuktatták,
már két osztályban. Igy tehát Lohmann, akárcsak a barátja, tizenhét
éves kora dacára, tizennégy, tizenöt éves fiukkal járt együtt. És ha
Ertzum testi fejlettségénél fogva husz évesnek látszott, Lohmannt a
muzsa öregbitette meg, aki homlokon csókolta.
Hogy hathatott Lohmannra ez a fabábu, ez a paprikajancsi ott a
katedrán, ez a fixa ideában szenvedő szegény majom? Ha Ronda
felszólitotta, lassan letette a könyvet, amit a pad alatt olvasott,
széles, halványsárga homlokát barátságtalan redőkbe vonta és
megvetően lehunyt szempillái mögül bámulta a kérdező silány és
epés zavarát, bőrén a fekete atkákat, kabátja hajtókáján a hajkorpát.
Végül aztán a saját manikürözött körmeire bámult. Ronda talán
mindegyiknél jobban gyülölte Lohmannt és nemcsak az elvetemült
nyakassága miatt, de azért is, mert Lohmann nem mondta ki soha a
csufnevét; tompán sejtette, hogy valami még rosszabbat rejteget a
tarsolyában, valami nagyon, nagyon rosszat. Lohmann a szegény
öreg gyülöletét minden jóakarata mellett is csak fakó lenézéssel
viszonozta. Undorral vegyes szánalmat érzett iránta. De hogy
Ertzum-mal ugy bánt, azt személyes provokálásnak látta. A harminc
diák közül ő egyedül tartotta alacsony hitványságnak, amit a tanár ur
Ertzum nagybácsijáról mondott. Ez már mégis több a soknál.
Lohmann elhatározta magát. Felkelt, kezét a pad peremére
támasztotta, kiváncsian a tanárja szemébe nézett, mintha valami
különös dolgot cselekednék és előkelően, higgadtan szólt:
– Tanár ur kérem, nem lehet irni. Olyan ronda szag van itt.
Ronda felpattant a székéről, egyik tenyerét rimánkodva
szétterjesztette, az állkapcsait némán egymásba harapta. Erre nem
volt elkészülve, – hiszen csak az imént idézte egy elvetemült diák
eszébe a vallást és az erkölcsöt. »Megcsipje« ezt a Lohmannt is?
Semmire se áhitozott igy. De hogy »táncoltassa meg?«… Ebben a
lélekzetállitó pillanatban a kis Kieselsack felnyujtotta kék ujjait,
amelyeken a körmök össze-vissza voltak harapdálva, csattintott velük
és elkényszeredetten nyafogott:
– Lohmann nem hagy dolgozni, mindig azt mondogatja, hogy itt
olyan ronda szag van.
Kuncogtak és vihogtak, néhányan csoszogtak a padlón. Ekkor
Rondát, akinek a forradalom vihara már az arcába fujt, elfogta a
pánik. Felrobbant a székről, a katedráról ide és oda bökött,
mindenfelé, hogy a sok-sok lázadót és ostromlót elhesselje és
orditott:
– A dutyiba! Mind a dutyiba!
Nem csillapodott el; azt hitte, hogy csak valami bravuros erőszak
mentheti meg. Egy pillanat se telt belé, Lohmannra vetette magát,
megragadta a karját, össze-vissza rázta és fulladtan kiabált:
– Ki innen. Ön többé nem méltó arra, hogy az emberi társadalom
jótéteményeit élvezze.
Lohmann unottan és kelletlenül szót fogadott neki. Végül Ronda
nekilóditotta és az öltöző ajtajához akarta vágni; de ez nem sikerült.
Lohmann leporolta ruháját, ott, ahol Ronda megfogta és higgadt
léptekkel a »dutyiba« tünt el. Erre a tanár ur Kieselsackot kezdte
keresni. Ez azonban a háta mögött elsiklott és már ott kuksolt
duzzogva és grimaszokat vágva a dutyiban. Az első eminensnek
kellett felvilágositani a tanár urat, hol van Kieselsack. Ronda pedig
rögtön azt követelte, folytassák a gyakorlatirást s ez a kis epizód
semmikép se téritse el figyelmüket az orleánsi szüztől.
– Miért nem irnak? Még csak tizenöt percük van. Amelyik
dolgozat befejezetlen – jól jegyezzük meg – azt át se olvasom.
A fenyegetés következtében a legtöbbnek egyáltalán semmi se
jutott eszébe és elfanyarodtak az arcok. Ronda sokkal izgatottabb
volt, semhogy ebben igazi öröme teljen. Valami ösztön munkálkodott
benne, hogy minden ellenállást megtörjön, minden készülő
merényletet meghiusitson és köröskörül csendet teremtsen, halotti
csendet, mint a temetőben. A három rebellisnek »kitette a szürét«,
de füzeteik még mindig ott hevertek a padon, szétteregetve s
belőlük a lázadás szelleme áradt.
Ertzum és Kieselsack dolgozataiban verejtékes és ügyetlen
mondatszerkezetek voltak, amelyek legalább jóakaratról
tanuskodtak. Lohmannnál azonban érthetetlen, hogy még nem is
»taglalta« a feladatot, dolgozatát be se osztotta A, B, C, a, b, c és 1.,
2., 3.-ra. Csak néhány oldalt irt tele, amit Ronda növekvő
felháborodással vett tudomásul. Ezt irta:
»A dauphin harmadik imája. (Az orleánsi szüz I. 10.)
A fiatal Johanna bevezetteti magát az udvarhoz holmi szélhámos
fogással, sokkal ügyesebben, mintsem éveiből és paraszti mivoltából
következtetni lehetne. A dauphin-nak odaadja a három ima tartalmi
kivonatát, amit az utolsó éjen az éghez intézett s a tudatlan nagyur
nagyon elcsodálkozik, hogy milyen jó gondolatolvasó. Ismétlem: a
dauphin három imájáról van szó; de tulajdonképpen csak kettőt
mond el a szüz: a harmadikat már elengedi a dauphin, aki látja,
hogy mindent tud. A szüz szerencséjére: mert a harmadikat már
nehezen tudta volna. A szüz már a két első imára vonatkozóan
megmondta a dauphinnak, miért imádkozott az Istenhez; ha van
őseinek le nem vezekelt büne, őt vegye el áldozatul a népe helyett;
ha pedig el kell vesziteni országát és koronáját, hagyja meg neki
barátját és szeretőjét. A legfontosabbról, az uralkodásról ezzel
lemondott. Miért imádkozott volna? Ne is firtassuk a dolgot. Ő maga
se tudja. Johanna se tudja. Schiller se tudja. A költő egy kukkot se
tud és igy szól: »és igy tovább«. Ez az egész titok és az, aki ismeri a
müvészek könnyüvérüségét, csöppet se csodálkozik rajta«.
Pont. Ez volt minden – és Ronda, aki reszketni kezdett, most
világosan látott: ezt a tanulót kell eltávolitani, ettől a rákfenétől kell
megoltalmazni az emberi társadalmat, ez sürgősebb, mint Ertzum
eltávolitása. Aztán a következő lapra tekintett, amelyre még valami
volt firkálva és félig kitépve fityegett ki a füzetből. Mikor azonban a
tanár ur megértette a firkálás értelmét, rózsálló felhő szállt ráncos
arcára. Gyorsan és lopvást csukta be a füzetet, mintha látni se
akarná többet; még egyszer kinyitotta, a többi közé dobta, hevesen
fellélegzett. Érezte a kényszeritő szükséget: itt az idő, hogy
»megcsipje!« Egy ember, aki odáig züllött, hogy egy szinésznőt…
egy szinésznővel… egy szinésznőnek… Rózának hivják… Rózának…
Harmadszor is megragadta Lohmann füzetét. Ekkor csöngettek.
– Beadni! – kiabált Ronda, mert roppantul félt, hogy egy diák, aki
nem fejezhette be, még befejezheti és jobb kalkulust kap. Az
eminens összegyüjtötte a dolgozatokat; néhányan az öltözőnek
estek.
– Ne tolakodjanak. Várjanak! – orditotta Ronda, rémülten.
Legjobban szerette volna zár alatt tartani a három nyomorultat,
addig, amig elő nem késziti nekik a biztos és gyilkos kelepcét. Ez
azonban nem megy oly gyorsan, erről logikusan kell gondolkozni.
Lohmann esete egyelőre az elvetemültség roppantságával minden
mást tulragyogott.
A kisebbek közül sokan sértett jogérzettel álltak a katedra elé.
– Tanár ur kérem, tessék haza engedni!
Rondának be kellett engednie őket a »dutyi« – ba. A tolongásból
egymásután kijött a három számüzött, immár felöltözködve,
köpenyekben. Lohmann már a küszöbön megállapitotta, hogy füzete
Ronda kezében van és unottan szánta szegény tanárnak a
tulbuzgalmát. – Most valószinüen az öregjének is be kell jönnie és
beszélni kell az igazgatóval.
Ertzum magasra felhuzta hirtelenszőke szemöldökeit, mintha
eltört volna a mécses. Kieselsack a »dutyi«-ban elkészitette a
védőbeszédet.
– Tanár ur kérem, nem igaz, nem mondtam, hogy itt ronda szag
van. Csak azt mondtam, ő mondta…
– Hallgasson! – torkolta le Ronda remegve. Nyakát előre tolta és
hátrahuzta, uralkodott magán és tompán hozzátette:
– A sorsuk egy hajszálon függ a fejük fölött. Menjenek. Mind a
hárman elmentek haza ebédelni, vitték a sorsukat is, amely egy
hajszálon függött a fejük fölött.
II.

Ronda is evett, és utána leheveredett a pamlagra. De pont abban


a pillanatban, amikor elszunyadt, a gazdasszonya egy edényt vágott
csörömpölve a földhöz, mint minden áldott nap. Ronda felriadt és
sietve nyult ismét Lohmann irásbeli dolgozata után és elpirult,
mintha a benne levő szeméremsértő passzust most olvasná először.
Amellett már nem is lehetett becsukni a füzetet, annyira összevissza
volt hajtogatva azon a helyen, ahol ez volt:
»Hódolat az isteni müvésznőnek, Frölich Róza kisasszonynak.«
A felirást néhány olvashatatlanná tett sor követte, azután egy
darabon üresen maradt, utána pedig ez következett:

„Rothadt vagy, százszor és ezerszer,


De nagy szinésznő, isteni,
S ha majd a gyermekágyba fekszel…“

A rimet erre még nem találta meg a hetedikes. De a feltételes


mód a harmadik sorban sokat mondott. Arra engedett következtetni,
hogy Lohmann személyesen is érdekelve van a dologban. Hogy ezt
kifejezetten bizonyitsa, arra szolgált volna a negyedik verssor. Ronda,
hogy a hiányzó negyedik verssort kisüsse, ugyanolyan
kétségbeesetten erőlködött, mint a diákok a dauphin harmadik
imájánál. Ez a Lohmann ugy látszik, ezzel a hiányzó negyedik sorral
Rondát akarta boszantani. Ronda pedig növekvő szenvedéllyel
küzdött, hogy megmutassa ennek a Lohmannak, hogy a végén
mégis csak ő az erősebb. Meg akarta »csipni« a fiut.
A még ki nem alakult tervek nem hagyták Rondát nyugodni. Nem
tudott otthon maradni, magára kapta malaclopóját és elment
hazulról. Hideg eső szitált. Hátratett kezekkel, lesunyt homlokkal és
mérges mosollyal a szája körül osont a külvárosi utcán. Egy szenes
szekérrel meg néhány apró gyerekkel találkozott, mással senkivel. A
szatócsnál a sarkon az ajtó mögött volt kifüggesztve a városi szinház
szinlapja: Tell Vilmos. Ronda egy gondolattól megkapva, elébe
guggolt… Nem, semmiféle Frölich Róza nem volt a cédulán.
Mindamellett könnyen lehet, hogy az a bizonyos fehérszemély azért
ennél a müintézetnél van alkalmazva.
Dröge ur, a szatócs, bizonyára jártas az idevágó kérdésekben.
Ronda keze már az ajtókilincsen tétovázott: de ijedten
visszakapta és sietve odébb állott. Egy szinésznő után kérdezősködni
a saját utcájában! Nem szabad kihivnia az ilyen humánus
tudományokban járatlan és alacsony nivón álló polgárok pletykáit.
Annak a Lohmann kölyöknek a leleplezését titokban és ügyesen kell
keresztülvinni… Befordult a városba vezető fasorba.
Ha sikerül neki, akkor Lohmann Ertzumot és Kieselsackot is
magával rántja a bukásba. Előbb nem akart a direktornak jelentést
tenni arról, hogy megint »csufolták« őt. Majd kiderül, magától, hogy
azok, akik ezt tették, minden egyéb erkölcstelenségben is ludasok.
Ronda tudta ezt; a saját fián tapasztalta. Ez a fiu egy özvegy
asszonytól való volt, aki egyszer fiatal korában anyagilag támogatta
őt, hogy tanulmányait befejezhesse és akit aztán – mihelyt állást
kapott – feleségül is vett. Csontos és szigoru nő volt, de már
meghalt. A fia nem volt szebb, mint ő maga és ezenfelül félszemü.
Már diákkorában nyilvánosan mutogatta magát kétes hirü nőkkel.
Rengeteg pénzt vert el rossz társaságban, nem kevesebbszer, mint
négyszer bukott meg a vizsgán, de azért hasznavehető hivatalnok
lehetett volna, ha leteszi az érettségit. Szörnyü távolság választotta
el azoktól a magasabbrendü emberektől, akik államvizsgáikat
letették. Ronda, aki erős elhatározással szakitott a fiával, megértett
mindent, ami történt; sőt csaknem előrelátott mindent, mióta
egyszer kihallgatta a fiát, amint a pajtásaival beszélgetett és a saját
apját csufnevén nevezte!
Hasonló sorsot remélhetett tehát Kieselsack, Ertzum és Lohmann
számára, különösen Lohmann számára, aki hála Frölich Róza
kisasszonynak, a müvésznőnek, már jobb uton van. Lohmann iránti
boszujával sietett Ronda. A másik kettő csaknem eltünt ez
elviselhetetlen modoru ember mellett, aki kiváncsi sajnálkozással
fogadja tanitója dühét. Miféle diák ez voltaképpen?… Ronda emésztő
gyülölettel gondolt Lohmannra. A csucsos tetejü városkapuja előtt
hirtelen megállott és hangosan mondta:
– Ezek a legkomiszabbak!
Az egyik tanuló egy patkányszürke, alázatos és alattomos fickó,
akinek semmi más élete nincs, mint az iskolai és aki folytonosan kéz
alatt hadakozik a zsarnokkal: ez Kieselsack; vagy a másik, egy erős
bamba kölyök, aki a zsarnok szellemi fölényével szemben állandó
zavarban van, – mint Ertzum. De annak a Lohmannak, annak már
ugy látszik, hogy nem is imponál a zsarnok! Ronda lassacskán főni
kezdett a rosszul fizetett autoritás megaláztatásaitól, hogy
akármelyik alárendeltje elegánsan szabott ruhában feszithet és
csörgetheti előtte a pénzét. Ez egyszerre tisztán állt előtte, igen, ez
szemtelenség, semmi egyéb! Hogy Lohmann ruhája sohasem poros,
hogy tiszta kézelőt visel és ilyen pofákat vág, az mind:
szemtelenség. A mai dolgozat minden tudása, amit az iskolán kivül
szerzett és – a legszörnyübb dolog – Frölich Róza kisasszony, a
müvésznő. Mindez: szemtelenség. És kiderült, szemtelenség az is,
hogy Lohmann Rondát nem nevezte a csufnevén!
Ronda felkaptatott a meredek uton a tornyos házak között, egy
templomhoz érkezett, ahol erősen fujt a szél, malaclopóját maga
köré csavarta és megint ment lefelé. Most egy mellékutca
következett, és az első házak egyikénél Ronda megállott. Jobbra és
balra a kapu mellett két faszekrényke függött, amelynek drótrácsa
mögött a szinlap volt felragasztva, Tell Vilmos szereposztásával.
Ronda előbb elolvasta az egyik szekrénykében, azután a másikban.
Végre félénken körülnézett és belépett a nyitott kapun. Egy kis ablak
mögött a lámpa mellett egy férfi ült; az izgatottságtól csak nehezen
birta Ronda felismerni. Ezen a helyen már legalább husz esztendeje
nem volt; és a zsarnok aggodalma szállta meg, aki elhagyta szokott
terrénumát: még félreismerhetik, a közelébe léphetnek, arra is
kényszerithetik, hogy egyszerüen ugy cselekedjék, mint más
közönséges halandó.
Jó darabig álldogált az ablakocska mellett és halkan krákogott.
Miután ennek semmi eredménye sem lett, meggörbitett
mutatóujjával bekopogott. A fej az ablak mögött felijedt és azonnal
kinyilt a félretolt rács mögül.
– Mi tetszik? – kérdezte rekedten.
Rondának eleinte csak az ajkai mozogtak. Egymásra meredtek ő
és a kiérdemesült szinész, akinek a vonásai mélyek, kékfeketék
voltak, az orra hegye lapos és csiptetőt viselt. Ronda dadogott:
– Kérem szépen. Szóval önök a Tell Vilmost játszák. Nagyon szép
önöktől.
A pénztáros válaszolt:
– Azt tetszik talán gondolni, hogy passzióból csináljuk?
– Persze, persze – hebegett Ronda, mert félt a bonyodalmaktól.
– Csupa üres ház. A várossal azonban szerződésünk van és néha
muszáj klasszikusokat is adni.
Ronda most már szükségesnek látta, hogy bemutatkozzék:
– Én vagyok tudniillik a hetedik osztály osztályfőnöke, az itteni
gimnáziumban, a nevem… Ron… Gonda…
– Örülök. Nevem Blumenberg.
– Én az osztályommal szivesen végignézném egy klasszikus költői
mü előadását.
– Ó ez igazán kedves öntől, tanár ur. Ha megmondom, nagyon
örül majd a diri.
– De – mondta Ronda és felemelte az ujját – a mi Schillerünk
ama drámájára lennénk kiváncsiak, amelyet az osztályom olvas,
tudniillik ugyanis – Az orleánsi szüzre.
A szinész ajka lekonyult, lehajtotta a fejét és alulról – gyászosan
és szemrehányóan – sanditott fel Rondára.
– Rém sajnálom. Mert tetszik tudni, ezt ujra be kellene
tanulnunk. Hát a Tell Vilmos nem lesz jó? Az ifjuság számára ez is
megfelel.
– Nem, – szólt Ronda – ez semmi esetre sem. És a legfontosabb,
– jól jegyezzük meg!
Ronda lélekzetet vett, a szive dobogott:
– A legeslegfontosabb Johanna személyesitője. Mert ennek
valami igazán fenkölt szinmüvésznőnek kell lennie, aki a tanuló
ifjusághoz egészen közel tudja hozni – nemde ugyebár – a szüz
fönséges alakját.
– Persze, persze – mondta a szinész mély meggyőződéssel.
– Én a magam részéről az önök egyik szinmüvésznőjére
gondoltam, akit – reménylem, nem ok nélkül – sokszor hallottam
dicsérni.
– Ojjé.
– Frölich Róza kisasszonyra.
– Kire kérem?
– Frölich Rózára – és Ronda visszatartotta a lélekzetét.
– Frölich? Az nincs is nálunk.
– Biztosan tetszik tudni? – kérdezte Ronda mekegve és halálos
zavarban.
– Bocsánat, nem vagyok paralitikus.
Ronda most már rá se mert nézni a szinészre.
– De hisz akkor…
A szinész segitségére sietett:
– Valami tévedés lesz.
– Igen, igen – monda Ronda gyerekes hálával.
– Bocsánatot kérek.
És jobbra-balra bókolt, amig kifelé ment.
– De kedves tanár ur, talán mégis beszélhetünk a dologról. Hány
jegyet parancsol? Kedves tan…
Ronda az ajtóban még egyszer sarkon fordult, mosolya eltorzult,
félt az üldözőjétől.
– Bocsánatot kérek.
És menekült.
Észrevétlenül jutott le az utcára és a kikötőbe. Körülötte a
zsákhordólegények lépései döngtek, mások a padlásablakokba
kiabáltak fel harsányan. Az egész kikötő büzlött a haltól, a
kátránytól, az olajtól és a spiritusztól. Az árbocok és kémények a
folyó ágyán már egymásba olvadtak az alkonyi sötétségben. A
sürgés-forgás közepette, amely napszállat előtt sietve fellobogott,
Ronda tépelődve baktatott tovább. Két dolog foglalkoztatta: hogy
lehetne Lohmannt megcsipni és hogyan lehetne Frölich
szinmüvésznő tartózkodási helyét megtudni.
Meglökdösték, angolos elegánciával öltözött urak, akik
szállitólevéllel a kezükben loholtak jobbra-balra, és munkások, akik
azt orditották feléje: »Vigyázz!« Az általános sietség őt is magával
ragadta; mielőtt felocsudott volna, benyitott egy ajtón, az ajtó
szemöldökfájára ez volt irva: »Borozó« és még valamilyen svéd vagy
dán felirás.
A boltban felgöngyölt kötelek hevertek, kétszersült és sok kis,
erősszagu hordó. Egy papagály rikácsolta: te szamár, te szamár!
Néhány matróz ivott, mások zsebredugott kézzel beszéltek egy
óriási, veresszakállu ember gyomrába. A veresszakállu kibontakozott
a pipafüstfelhőből, jó ideig tartott, mig ez sikerült neki, a pult mögé
állott, ugy hogy a fali karlámpás bádogreflektora intenziv fényt vetett
tar koponyájára, rátette mancsát a boroskannára és otrombán
kérdezte:
– Akar valamit tőlem az ur?
– Adjon nékem – kérte Ronda könnyedén – egy belépőjegyet a
nyári szinházba.
– Mi… mit akar? – kérdezte a veresszakállu.
– Hát igen, a nyári szinházba. Minthogy – nemde, ugyebár – a
boltja ablakában azt olvastam, hogy itt jegyek kaphatók a nyári
szinház előadásaira.
– Na, ilyet még nem hallottam, mióta élek – és nyitva maradt a
szája – hiszen a nyári szinház csak nem játszik télen, vagy mi?
Ronda indignálódva fortyant fel:
– De hiszen ki van téve az ablakába, nemde, ugyebár?
– Hásze, ha ott van, akkor jó helyen van!
Ez kipukkant belőle; de aztán rögtön ujra tiszteletteljesen beszélt
a pápaszemes urral. Okokat keresett, hogy meggyőzhesse az idegent
arról, hogy a nyári szinház most tényleg csukva van. Hogy nehézkes
gondolatmenetét testileg siettesse, rémes, veres, szőrös kezével
óvatosan simogatta az asztallap oldalát. Végre meglelte, amit
mondani akart:
– No bizony azt a legostobább kölök is tuggya – mondotta
kedélyesen – hogy télen nincs nyári szinház.
– Már megbocsásson tisztelt ur! – utasitotta rendre Ronda
fontoskodva a veresszakállut.
Az segitség után kiáltott:
– Hennrik! Laurenz!
A matrózok közelebb vonultak.
– Nem tom, mi baja ennek itt la, minden áron a nyári szinházba
akarna menni.
A matrózok rágták az összegöngyölgetett bagót és a
veresszakálluval együtt nagy erőlködéssel meredtek Rondára, mintha
valami exotikus idegen lenne, akit nem értenek, talán kinai.
Ronda észrevette és sietett, hogy hamarjában elintézze a dolgát:
– Akkor talán megmondhatná nekem, hogy a mult nyáron egy
bizonyos Frölich Róza nevezetü szinmüvésznő tagja volt-e a
föntemlitett müintézetnek?
– Honnan a fenéből tudjam én azt, – rőkönyödött a veresszakállu
– tán azt hiszi, hogy én afféle komédiásokkal szóba állok?
– És még azt szeretném tudni, – szólt Ronda pironkodva – hogy
az emlitett hölgyet a legközelebbi nyáron – jól jegyezzük meg! –
lesz-e szerencsénk láthatni.
A veresszakállu megrémült; egy szót sem értett többé az
egészből. A matrózok egyike gondolt valamit:
– Ne mókázzon itt velünk az ur, mer maj mingyár a markomba
köpök!
Azután nyakába huzta a fejét és kotkodácsolva és fenyegetve
kezdett röhögni feketére tátott torkából. A többiek meglökdösték
egymást, azután ők is ugy csináltak. A veresszakállu ugyan
egyáltalában nem hitte, hogy Ronda tréfál; de látta, hogy a
respektusa veszélyben forog, amit vendégeitől mindig megkövetelt:
mert a vendégei az alantasai voltak, matrózok, akiket mintegy ide
szegődtetett és később – a kétszersülttel és a pálinkával együtt –
befuvarozott a hajón a kapitányokhoz.
Minden átmenet nélkül müdühbe gurult, roppant elvörösödött,
öklével az asztalra csapott és parancsoló mozdulattal nyujtotta ki az
egyik ujját:
– Hallja az ur! Nekem egyéb dolgom is van. Tegye lóvá az
öregapját! Oszt jó lesz már odébbállani, amondó vagyok!
És mivel Ronda még mindig kábultan állott a helyén, a gazda
fenyegető előkészületeket tett, hogy a pult mögül előjöjjön. Ronda
lóhalálában nyomta le a kilincset. A papagály még utána kiáltott: te
szamár! A matrózok bömböltek a röhögéstől. Ronda betette maga
után az ajtót.
Sietve befordult a legközelebbi sarkon.
A kikötő környékét elhagyta és csendes, kis utcába jutott.
Összegezte az eseményeket:
– Hibát követtem el, – jól jegyezzük meg! – hibát követtem el.
A szinmüvésznő tartózkodási helyét más módon kell kipuhatolni.
Ronda aszerint nézegette az embereket, hogy ki mit tudhat Frölich
kisasszonyról. Hordárok, cselédek, lámpagyujtogatók jöttek vele
szemközt és egy ujságárus asszony. Ezzel a népséggel nem sokra
mehet: ezt tapasztalásból tudta. Különben az iménti élménye is arra
intette, hogy ilyenfajta emberekkel óvatos legyen. Bölcsebbnek
tartotta várni, hátha előkerül valamilyen ismert arc. És csakugyan a
legközelebbi utcáról éppen most bukkant fel egy volt diák, aki egy
évvel ezelőtt még dühöngve fujta Ronda fülébe a latin verseket. Ez a
diák is egyike volt azoknak, akik sohasem »készültek« és ugy látszik,
hogy most boltosinas lett belőle. Csomó levél volt a kezében és
hányaveti módon közeledett. Ronda feléje tartott, már feltátotta a
száját, csak azt várta, hogy köszönjön előbb a fiu. De hiába várta. A
tavalyi diák gunyosan szembenézett professzorával és oly közel,
hogy Ronda magas vállát surolta, elment mellette és szőke pofája
szélesen vigyorgott.
Ronda sietve tünt el az utcában, ahonnan az imént a fiatalember
kibukkant. Ez a kikötő felé vezető lejtős, kis utca volt; és mivel
meredekebb volt a többinél, rengeteg gyerek verődött benne össze,
hogy kis szánokon, lármás játékkocsikon leiramodjanak a lejtőn. Az
anyák és cselédlányok a járdán állottak, felemelték a karjaikat és
kiabálták: »vacsorázni«; de az aprónépség szakadatlanul csuszkált,
térdelve a kis kocsiban, vagy lábát a levegőbe merevitve, lobogó
kendőcskével a nyakuk körül, fülükre kötött sipkával, csetlettek-
botlottak lefelé a hepehupás aszfalthegyről. Rondának, mig
keresztülvágott az utcán, jobbra-balra kellett ugornia, nehogy a kis
szekérrudak lépen lökjék. Körülötte fröcskölt a pocsolyaviz. Az egyik
elrohanó kocsiból hirtelen egy átható hang hallatszott:
– Ronda!
Ronda összerezzent. Rögtön rá néhányan ismételték. Ezek a kis
elemisták és polgáristák bizonyára a gimnáziumi diákoktól tudták
meg a nevét: és azok, akik nem is tudták, miről van szó, együtt
orditották a többiekkel. Ebben a növekvő viharban kellett Rondának
megmászni a meredek utcát. Zihálva érkezett egy templomtérre.
Ezt ő már mind megszokta; a volt diákokat, akik nem köszöntek,
sőt a képibe vigyorogtak, az utcakölyköket, akik utána kiabálták a
nevét. Csakhogy nagy buzgalmában ma nem is számolt ezzel: ma az
egész emberiség adósa volt egy felelettel. Ha valamikor nem is
tudtak semmit Virgilius verseiből, legalább Frölich Róza
szinmüvésznőről tudnának most valamilyen felvilágositással
szolgálni.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like