
Jeffrey Shallit 
This book focuses on a decision procedure, which is rather easy to implement as a computer program and allows one to prove many results, classical and new, in combinatorics on words. It addresses decision problems and enumeration problems on sequences that are expressible in firstorder logic. The reader will appreciate the style, which is relaxed and pleasant to read, and the numerous examples and exercises. This book is a useful complement to the previous monograph, Automatic Sequences, coauthored by Shallit and Allouche.
Yann Bugeaud  University of Strasbourg
This is a marvelous book with a very fresh approach to the decidability and structural analysis of combinatorics on words. It combines three different mathematical research topics: firstorder logic, automatic sequences, and combinatorics on words. More precisely, it interprets infinite morphic words as automatic sequences via kautomata and expresses properties (of words) in firstorder logic. Due to the decidability of such logic, decision results and structural properties of combinatorics on words are established. A crucial role in this approach is to employ a powerful software package called Walnut. The author illustrates the power of his approach by giving a huge number of results obtained by this method. Not only are old and new results proved, but even some errors in previous ones are corrected. Anybody interested in, or curious about, this topic should be enthusiastic about this masterpiece.
Juhani Karhumäki  University of Turku (Emeritus)
Exercise 41, section 7.1.1: Part (c), second term should be F_3, not F_4. (Robbert Fokkink).
Section 8.1.9: the Walnut code for "rsrun0" is wrong; it should be
def rsrun0 "n>=1 & (At t<n => RS[i+t]=@0) & RS[i+n]!=@0 & (i=0RS[i1]!=@0)":