For EFL University Students
Read the free textbook on Zenodo, then explore each chapter’s introduction, five core topics, video lesson, and podcast.
Branch: Theoretical Linguistics
Series: English Language Studies for EFL University Students
Project Director: Prof. Munassir Alhamami
First Edition | Version 1 | 2026
Read. Open the free textbook on Zenodo and use the printed page range shown for each chapter.
Watch. Watch the video lesson for the same chapter.
Listen. Use the matching podcast to revisit the chapter’s ideas and examples.
Study the chapters in order or choose one from the chapter directory. Try the textbook activities before reading their explained answers.
Watch all 15 video lessons · Listen to all 15 podcast episodes
Choose a chapter to explore its five core topics, read the textbook pages, and open the matching video lesson or podcast.
Textbook pp. 18–32
Computational linguistics studies language through explicit models and procedures. This chapter introduces the field’s scientific and practical goals, compares major approaches, and asks what a successful model can actually explain.
Watch Chapter 1 · Listen to Chapter 1
Central question: What does it mean to study language from a computational perspective, and what can a computational model tell us about language?
Five core topics
1.1 Computational Linguistics, Natural Language Processing, and Language Technology
Compare the overlapping aims of computational linguistics, natural language processing, and language technology, including understanding and generation.
1.2 Scientific and Technological Goals
Distinguish building a useful language tool from testing an explanation of how language works.
1.3 Levels of Linguistic Analysis and the Problem of Ambiguity
Identify ambiguity in sounds, words, sentence structure, meaning, and connected discourse.
1.4 Knowledge-Based, Statistical, and Neural Approaches in Historical Perspective
Compare knowledge-based, statistical, and neural approaches and place them in the field’s historical development.
1.5 Models, Prediction, and Linguistic Explanation
Separate describing a pattern, predicting an outcome, and explaining linguistic behavior.
Study clarifications
In the checker example, 21 of 30 errors were detected (70%). This measures detection on the tested errors; it does not establish overall accuracy or the false-alarm rate on correct text. For word-level ambiguity, consider duck in ‘I saw her duck’: it can be a noun or a verb. Cat and cut are different word forms (pp. 19–24).
Predictive success alone does not establish a linguistic explanation. A model can contribute to explanation when its principles are tested against new cases (pp. 25–26).
Textbook pp. 33–49
Language must be represented as data before a computer can process it. This chapter examines writing systems, digital encoding, normalization, and segmentation, showing how each choice can preserve or remove linguistic information.
Watch Chapter 2 · Listen to Chapter 2
Central question: How is language turned into data that a computer can count and process, and why does this step differ across languages, scripts, and varieties?
Five core topics
2.1 Speech, Writing, and Digital Text
Examine what a written or digital representation preserves, changes, or leaves out from spoken language.
2.2 Writing Systems and Unicode Encoding
Compare writing systems and distinguish visible characters, Unicode code points, and encoded bytes.
2.3 Text Normalization: Case, Diacritics, and Spelling Variation
Evaluate changes to case, diacritics, and spelling by the distinctions they preserve or remove.
2.4 Tokenization and Sentence Segmentation Across Languages
Divide text into tokens and sentences while accounting for different scripts and language conventions.
2.5 Corpora, Language Variation, and Data Quality
Assess a corpus through its language varieties, sampling choices, licensing, and data quality.
Study clarifications
A detailed transcript differs from edited text, but neither preserves every feature of speech: melody, accent, voice quality, and gesture may be lost. In Unicode, ب is U+0628 ARABIC LETTER BEH. NFC é is U+00E9; NFD é is U+0065 + U+0301. Accent-removing Pipeline B maps él to el, while Pipeline A keeps él; the Spanish article is unaccented el (pp. 34–39).
The chapter distinguishes reader units, code points, and UTF-8 bytes: مرحبا has 5, 5, and 10; नमस्ते has 3, 6, and 18. Their code points are مرحبا = U+0645 U+0631 U+062D U+0628 U+0627 and नमस्ते = U+0928 U+092E U+0938 U+094D U+0924 U+0947 (p. 37).
Textbook pp. 50–65
A language-processing method needs instructions that can be followed step by step. This chapter introduces algorithms, pattern matching, edit distance, and finite-state machines, then relates their capabilities to different classes of formal language.
Watch Chapter 3 · Listen to Chapter 3
Central question: How can patterns in language be described as explicit procedures, and what kinds of patterns can simple machines recognize?
Five core topics
3.1 Algorithms and Explicit Procedures
Trace a procedure by hand and use tables to make each operation and its result explicit.
3.2 Regular Expressions and Pattern Matching
Use regular expressions to find and replace patterns, checking both missed matches and unwanted matches.
3.3 String Similarity and Minimum Edit Distance
Calculate the smallest permitted sequence of edits between strings while distinguishing spelling similarity from meaning.
3.4 Finite-State Automata
Follow input symbols through states and transitions to determine whether a machine accepts a string.
3.5 Formal Languages, Grammars, and the Chomsky Hierarchy
Compare regular, context-free, and context-sensitive patterns and the limits of their associated models.
Study clarifications
In grammer → grammar, the sixth letter changes from e to a, giving an edit distance of 1. In the regular expression /colou?r/, ? allows zero or one u: color and colour match, but colouur does not (pp. 53–55).
Textbook pp. 66–82
A word analyzer must connect surface forms with their internal structure and grammatical information. This chapter compares morphological systems, traces finite-state mappings, and distinguishes linguistically meaningful units from data-driven subword segments.
Watch Chapter 4 · Listen to Chapter 4
Central question: How can a computer analyze and generate word forms in languages with very different morphological systems?
Five core topics
4.1 Morphological Structure as a Computational Problem
Compare the computational challenges posed by different ways of building words, including agglutinative and root-and-pattern morphology.
4.2 Morphological Analysis, Features, Lemmatization, and Stemming
Distinguish full morphological analysis from finding a lemma or reducing a word to a stem.
4.3 Finite-State Transducers and Two-Level Mappings
Trace a finite-state transducer between lexical analyses and surface forms in analysis and generation.
4.4 Spelling and Sound Alternations as Finite-State Mappings
Represent spelling and sound alternations as explicit mappings, retaining the conditions under which each rule applies.
4.5 Morphological Ambiguity and Data-Driven Segmentation
Examine competing word analyses and explain why learned subword units do not necessarily coincide with morphemes.
Study clarifications
Studies can be a plural noun or study VERB with Person=3, Number=Sing, Tense=Pres; context selects the reading. Porter stemming can rewrite an ending, as in studies → studi. Turkish saat is a lexical exception: despite its back vowels, it takes front-vowel suffix forms in saatler and saatte (pp. 70–77).
Table 4.4 uses constructed BPE counts: e+v (13), e+r (9), l+er (9), d+e (7), ev+ler (6), e+l (5). These merges give evler + de for evlerde. In the transducer example, the letters of cat are copied; only the +N and +SG feature arcs output ε (pp. 71, 75–76, 81).
Textbook pp. 83–100
Language models assign probabilities to word sequences using evidence from data. This chapter develops frequency-based and n-gram estimates, addresses unseen events, and explains what model probabilities and evaluation scores can and cannot establish.
Watch Chapter 5 · Listen to Chapter 5
Central question: How can the probability of a word sequence be estimated from data, and what do such estimates capture and miss about language?
Five core topics
5.1 Word Frequency, Zipf’s Law, and Probability
Calculate relative frequency and use Zipf’s law to describe the uneven distribution of word counts.
5.2 Conditional Probability, N-Grams, and the Markov Assumption
Estimate sequence probabilities from a limited context and make the Markov assumption explicit.
5.3 Sparse Data, Unknown Words, and Smoothing
Explain zero counts and unknown words, then compare unsmoothed estimates with add-one smoothing.
5.4 Evaluating and Sampling Language Models
Use perplexity and sampled text to assess a model while keeping probability separate from grammaticality and truth.
5.5 The Noisy-Channel Model and Spelling Correction
Combine a language model with a model of errors to compare possible spelling corrections.
Study clarifications
For i like tea with lemon, including the sentence-end marker, the worked bigram probability is 2/3 × 1/2 × 1/2 × 2/3 × 1/2 × 1 = 1/18 ≈ 0.056. The ten predicted types are i, like, green, tea, drink, with, milk, you, lemon, and END, so the illustrated add-one denominator is 3 + 10 = 13 (pp. 88–90).
Perplexity is (1/P(text))^(1/N). With N = 4 in the example, 16^(1/4) = 2: take the fourth root, not the square root (pp. 91, 99).
Textbook pp. 101–117
A classifier learns to assign labels from examples, but a high score needs careful interpretation. This chapter connects features and annotation with Naive Bayes, evaluation measures, and the analysis of errors on new data.
Watch Chapter 6 · Listen to Chapter 6
Central question: How can computers learn to sort texts from examples, and how can we judge whether they have learned a useful language pattern?
Five core topics
6.1 Features, Labels, and Training, Development, and Test Data
Represent examples with features and labels while keeping training, development, and test sets separate.
6.2 Naive Bayes Classification and Sentiment Analysis
Trace a Naive Bayes decision for a short text and compare it with a simple baseline.
6.3 Annotation, Gold Standards, and Inter-Annotator Agreement
Examine how labels are created and use agreement measures to assess consistency among annotators.
6.4 Measuring Performance: Accuracy, Precision, Recall, and F-Score
Calculate accuracy, precision, recall, and F-score from counts and select measures suited to the task.
6.5 Error Analysis, Overfitting, and Generalization
Group errors by linguistic cause and assess whether performance extends beyond the training data.
Study clarifications
Cohen’s kappa adjusts observed agreement for chance agreement: (.80 − .515)/(1 − .515) = .285/.485 ≈ .59. The difference .285 is the numerator, not kappa itself (pp. 107–108).
Textbook pp. 118–132
A word’s label often depends on its context rather than its dictionary entry alone. This chapter explores part-of-speech tagging, probabilistic sequence decoding, and named-entity labels while examining ambiguity and annotation differences across languages.
Watch Chapter 7 · Listen to Chapter 7
Central question: How can a computer assign word classes and other labels to words in context, and why is this harder than looking words up in a dictionary?
Five core topics
7.1 Word Classes Across Languages and Tagsets
Compare evidence for word classes and examine universal and language-specific choices in tagsets.
7.2 Ambiguity in Tagging and Baseline Methods
Measure tagging ambiguity and test a most-frequent-tag baseline before using a more complex method.
7.3 Hidden Markov Models and Decoding
Trace how a hidden Markov model combines tag transitions and word evidence to choose a sequence.
7.4 Named Entities and the BIO Labeling Scheme
Mark entity spans with beginning, inside, and outside labels and preserve the boundaries of each entity.
7.5 Tagging Errors, Annotation Disagreement, and Other Languages
Analyze tagging mistakes in relation to language variation, ambiguous categories, and annotation decisions.
Study clarifications
In the cited Japanese example, の and は both have UPOS ADP; XPOS distinguishes the case particle from the topic/binding particle. In English, levels has UPOS NOUN and Penn/XPOS NNS. In prices can rise, two correct labels out of three give 2/3 accuracy; the textbook’s separate nine-token baseline gives 6/9 with NOUN tie-breaking. In that sentence, labeling rise as a noun is a POS-tagging error (pp. 119–123).
P(can | AUX) = 1 says every AUX token in the toy language is can; it says neither that can follows another auxiliary nor that P(AUX | can) = 1. Three tags across three words give 27 paths. Dividing the scaled score 48,000 by 1,000,000 removes six factors of ten; .048 is the joint probability of the winning tag path and the words (pp. 123–124).
Textbook pp. 133–147
Sentences can have more than one possible structure. This chapter compares constituency and dependency analyses, then shows how grammatical features, search procedures, and probabilities help parsers choose among them.
Watch Chapter 8 · Listen to Chapter 8
Central question: How can constituency and dependency representations describe sentence structure, and how can a computer find a structure when several analyses are possible?
Five core topics
8.1 Constituency and Context-Free Grammars
Use phrase-structure rules and constituent tests to describe how words form larger units.
8.2 Agreement and Feature Constraints
Apply number, gender, and case constraints to reject analyses that conflict with the marked grammatical features.
8.3 Heads, Dependents, and Universal Dependencies
Compare links between heads and dependents across languages, recognizing that head choices depend on the annotation scheme.
8.4 Parsing as Search and Structural Ambiguity
Trace top-down, bottom-up, and chart-based searches while keeping alternative structures for ambiguous sentences.
8.5 Treebanks and Probabilistic Parsing
Use annotated treebanks to estimate rule probabilities and evaluate parses, while treating the highest-scoring analysis as a model prediction.
Study clarifications
For the NP-attachment reading of ‘We discussed the report on the train,’ the object NP contains both the report and on the train; ‘We discussed it’ replaces that whole NP. Constituency trees group phrases, whereas UD dependency arcs connect word heads to dependents: customer → mine (nmod), sent → you (obl), and you → to (case) in the chapter’s example (pp. 134, 137–138).
In Try It 8.2 (We love everything about the fence), UAS = 5/6 ≈ 83.3% and LAS = 4/6 ≈ 66.7%. LAS requires both the correct head and label, so it cannot exceed UAS. Left recursion repeats the same rule, NP → NP PP: NP ⇒ NP PP ⇒ NP PP PP ⇒ … . An unguarded top-down parser can therefore loop before consuming words (pp. 140–142).
Textbook pp. 148–164
A word can have several senses, and words can be related in different ways. This chapter compares dictionary-based resources with representations learned from patterns of language use.
Watch Chapter 9 · Listen to Chapter 9
Central question: How can computers represent what words mean and how word meanings relate to one another?
Five core topics
9.1 Word Senses, Polysemy, and Multiword Expressions
Distinguish word senses and related meanings, and explain why some multiword expressions must be interpreted as units.
9.2 Lexical Relations and WordNet
Explore synsets and lexical relations in WordNet, keeping shared senses separate from differences in use or style.
9.3 Word Sense Disambiguation
Compare a frequent-sense baseline with context-based methods such as simplified Lesk, and judge them against labeled examples.
9.4 The Distributional Hypothesis and Vector Representations
Represent context counts as vectors and calculate cosine similarity, noting that one vector can mix several senses of a word.
9.5 Word Embeddings: Similarity, Analogy, and Bias
Examine how dense word vectors capture patterns of similarity and analogy while also reflecting biases in their training data.
Study clarifications
The WordNet paths are key (sense 1) → device → instrumentality and key (sense 15) → lever → bar → implement → instrumentality. They meet after two and four ‘is a kind of’ steps. In the WSD comparison, 0.70 is five percentage points below the 0.75 baseline (pp. 152, 156, 162).
For the cosine calculation, use all five contexts—open, lock, play, note, music—with key=(2,4,2,1,0), door=(8,6,0,0,0), and piano=(0,0,4,2,4). The resulting similarities are 0.80 for key–door and 0.33 for key–piano. In a projection illustration, removing the component along the gender axis leaves a vector orthogonal to that axis. Reducing measured bias does not eliminate bias. The Short Quiz is on p. 162, with answers on p. 164 (pp. 156–159).
Textbook pp. 165–181
Sentence meaning depends on both its words and their arrangement. This chapter uses logical forms and semantic roles to represent events, distinguish readings, and test what follows from a statement.
Watch Chapter 10 · Listen to Chapter 10
Central question: How can the meaning of a sentence be built from its parts and represented in a form that shows who did what, what is denied, and what follows?
Five core topics
10.1 Compositionality and Meaning Representation
Explain how the meanings of parts combine, and consider why idioms and metaphors challenge a simple compositional account.
10.2 Predicates, Arguments, and Logical Form
Build logical forms with predicates, arguments, connectives, and quantifiers, then check them against a small model.
10.3 Semantic Roles and Semantic Role Labeling
Identify participants by their roles in an event, keeping roles such as agent and patient distinct from grammatical subjects and objects.
10.4 Negation, Quantification, and Scope
Trace the scope of negation and quantifiers to distinguish readings that may share the same sentence structure.
10.5 Inference and Natural Language Inference
Distinguish entailment, contradiction, and neutrality, and examine why a high inference-test score can conceal shortcut strategies.
Study clarifications
Semantic roles describe participants in an event: agent and patient differ from grammatical functions such as subject and object. To represent the active and passive baking examples with the same event record, use predicate bake, agent chef, and patient cake. In the passive sentence, baked is the predicate and by the chef is the agent span; by is not part of the predicate (pp. 170–171).
Spanish No vino nadie means ‘Nobody came’: ¬∃x(person(x) ∧ came(x)). The two negative words express a single negation (p. 173).
Textbook pp. 182–197
Connected texts and conversations communicate more than isolated sentences. This chapter examines reference, coherence, implied meaning, and the steps dialogue systems use to respond appropriately.
Watch Chapter 11 · Listen to Chapter 11
Central question: How does interpretation change when we move from a single sentence to a connected text or a conversation?
Five core topics
11.1 Reference and Coreference Resolution
Link mentions of the same entity using grammar and context, while distinguishing coreference from bridging reference and nonreferential pronouns.
11.2 Discourse Coherence and Discourse Relations
Identify relations such as cause, contrast, and elaboration, and distinguish meaningful coherence from visible cohesive links.
11.3 Pragmatic Meaning as a Computational Problem
Separate presuppositions, conversational implicatures, and indirect speech acts from literal entailments.
11.4 Dialogue Acts, Turns, and Grounding
Analyze the functions of turns and the confirmations or repairs speakers use to establish shared understanding.
11.5 Language Generation and Dialogue Systems
Trace a language-generation pipeline and compare pattern-based responses with dialogue systems that maintain task information in slots.
Study clarifications
Spanish estaba and cansada help recover a subject without identifying Ana uniquely. Context may favor ‘she,’ but a woman saying ‘I was tired’ is also possible; polite usted also takes estaba. Implicit confirmation communicates an interpreted value back to the user, as in ‘A table for four. What time?’ (pp. 184–185, 189–190, 193, 195).
‘The courier stopped leaving parcels at the door’ presupposes an earlier habit; that inference normally survives ‘didn’t stop.’ ‘Some of the books arrived’ may suggest ‘not all,’ but ‘in fact, all did’ cancels that inference. Again in a request to stop a subscription presupposes an earlier stopping or attempt to stop, which the system should check against its records (pp. 187–189, 195).
Textbook pp. 198–213
Neural language models learn numerical patterns from text. This chapter explains networks, contextual representations, attention, and text generation, while examining what successful outputs do and do not establish.
Watch Chapter 12 · Listen to Chapter 12
Central question: How do neural language models learn from text, and what do their outputs show, and fail to show, about language?
Five core topics
12.1 Neural Networks in Plain Terms
Trace how a unit combines weighted inputs and how training changes weights in response to errors.
12.2 Neural Language Models and Contextual Embeddings
Compare fixed word vectors with representations that change according to a token’s context.
12.3 Attention and the Transformer
Follow how attention forms a weighted combination of token information within a Transformer.
12.4 Pretraining, Fine-Tuning, Prompting, and Text Generation
Distinguish changes to model weights during training from prompting and the decoding choices used to generate text.
12.5 Capabilities and Failure Modes of Large Language Models
Assess reported abilities and failures against the evidence, keeping fluent output separate from reliable facts or demonstrated understanding.
Study clarifications
In Figure 12.1’s hand-set hidden-layer network, ‘not bad’ correctly produces ‘positive’: h1 is off, h2 fires, and the output fires. This differs from the earlier single-unit training error. The chapter’s similarity values are constructed examples, not measured BERT/GPT results; cosine similarity is (v·w)/(||v|| ||w||), reducing to a dot product only for unit-normalized vectors (pp. 200–202, 212; Section 9.4).
Structural success alone does not establish human-like understanding. The chapter presents disagreement about understanding, so conclusions should remain tied to what the tested evidence supports (pp. 207–208).
Textbook pp. 214–228
Speech systems must connect changing acoustic signals with linguistic categories and written words. This chapter follows recognition and synthesis processes and examines how accent and variation affect evaluation.
Watch Chapter 13 · Listen to Chapter 13
Central question: How can a computational system connect a variable speech signal with linguistic categories and written forms?
Five core topics
13.1 Speech Sounds, Phonological Categories, and Transcription
Distinguish individual speech sounds, contrastive phonological categories, and the transcription systems used to represent them.
13.2 Acoustic Representations: Waveforms and Spectrograms
Read time, frequency, amplitude, and acoustic patterns in waveforms and spectrograms without confusing the two displays.
13.3 Automatic Speech Recognition
Trace how a recognizer uses acoustic and linguistic information to produce a written hypothesis from speech.
13.4 Text-to-Speech, Pronunciation, and Prosody
Follow the steps from written text to pronunciation and prosody in synthesized speech.
13.5 Accent, Variation, and the Evaluation of Speech Systems
Calculate word error rate and compare performance across varieties, recognizing that one aggregate score can hide important differences.
Study clarifications
Tack has three phonemes, /tæk/. Text normalization reads 555-1212 as ‘five five five one two one two.’ Compare the reference ‘please send the report to my office today’ with the recognition output ‘please sent the report my office to day.’ In this eight-word reference example, S=2, D=1, and I=1 give WER=(2+1+1)/8=50%. WER is not the percentage of incorrect reference words: five of the eight reference words match, or 62.5% (pp. 215–216, 220–221).
Textbook pp. 229–245
Languages differ in how they organize words and express meanings. This chapter compares translation approaches and multilingual methods, then evaluates their outputs through human judgments and automatic measures.
Watch Chapter 14 · Listen to Chapter 14
Central question: Why is translation difficult for computers, and which assumptions must change when a model processes more than one language?
Five core topics
14.1 Linguistic Diversity, Typology, and the Resource Gap
Compare word order, morphology, scripts, and digital resources without treating limited data as limited linguistic complexity.
14.2 Translation Divergences Across Languages
Analyze how differences in word order, morphology, lexical distinctions, omitted pronouns, light verbs, and idioms challenge word-for-word translation.
14.3 Rule-Based and Statistical Translation
Compare direct, transfer, interlingua, and statistical approaches, including the role of parallel data and word alignment.
14.4 Neural Translation, Cross-Lingual Transfer, and Low-Resource Languages
Explain encoder-decoder translation, cross-lingual transfer, and ways to support languages with limited parallel data.
14.5 Evaluating Translation: Human Judgment and Automatic Metrics
Distinguish adequacy from fluency and use automatic metrics as partial evidence, rather than a complete judgment of translation quality.
Study clarifications
The textbook’s ten-token example is ドアを開けました with GPT-2 byte-level BPE. Its token count depends on the tokenizer’s learned vocabulary and English-centered training, not simply on Japanese being written without spaces. With six distinct languages L1–L6, directional transfer requires 6 × 5 = 30 rule sets; an interlingua uses six analyzers and six generators (pp. 231, 234, 236).
Textbook pp. 246–262
A model’s score is only the beginning of a claim about language. This chapter asks what evidence supports generalization or cognitive explanations and how linguists can evaluate systems responsibly.
Watch Chapter 15 · Listen to Chapter 15
Central question: What can computational models show about human language, and how should their claims and consequences be judged?
Five core topics
15.1 Descriptive Adequacy and Linguistic Generalization
Use minimal pairs, unfamiliar forms, and suitable controls to separate linguistic generalization from memorization or shortcuts.
15.2 Computational Models and Human Language Processing
Calculate surprisal and compare predictions with human processing evidence, keeping engineering success distinct from a cognitive explanation.
15.3 Form, Meaning, and Learned Linguistic Structure
Compare accounts of learned structure and meaning, and distinguish information recoverable by a probe from information a model demonstrably uses.
15.4 Bias and Fairness in Language Data and Models
Analyze performance gaps and sources of bias as properties of systems and data, rather than defects in languages or varieties.
15.5 Ethics, Documentation, and the Role of Linguists
Apply consent, licensing, documentation, and community considerations when collecting language data or evaluating a system’s effects.
Study clarifications
Surprisal = log₂(1/P(word | context)), measured in bits. A probe’s ability to recover information does not establish whether the model uses it. In the cited English test, the probe recovered 82.5% of dependency links from the best pretrained layer, versus 48.9% for the chain baseline and 59.8% for the random network—gains of 33.6 and 22.7 percentage points. Direction and punctuation were ignored (pp. 250, 252, 259).
The world-linked account of meaning is Bender and Koller’s position. The chapter also discusses Manning’s view that connections among words can provide partial meaning; these are debated accounts (pp. 252–253).
Foundations of Computational Linguistics: For EFL University Students
First Edition | Version 1 | 2026
Alhamami, M. (2026). Foundations of computational linguistics: For EFL university students (First Edition, Version 1). Zenodo. https://doi.org/10.5281/zenodo.23095075
Original textbook content is licensed under Creative Commons Attribution 4.0 International except where otherwise stated. Material credited to other sources remains subject to its stated terms.
The textbook acknowledges development assistance from ChatGPT, Claude, Gemini, and NotebookLM. The videos and podcasts are AI-generated Gemini Notebook (NotebookLM) study companions.
Use the textbook for complete explanations, examples, calculations, practice activities, and explained answers. The chapter introductions and topic explanations on this page are supplementary study support.
Open the free textbook on Zenodo