| Preface |
|
ix | |
|
|
|
1 | (23) |
|
|
|
1 | (7) |
|
1.2 Denotational Semantics of Predicate Logic |
|
|
8 | (4) |
|
1.3 Validity and Inference |
|
|
12 | (3) |
|
1.4 Binding and Substitution |
|
|
15 | (9) |
|
2 The Simple Imperative Language |
|
|
24 | (30) |
|
|
|
24 | (2) |
|
2.2 Denotational Semantics |
|
|
26 | (3) |
|
2.3 Domains and Continuous Functions |
|
|
29 | (6) |
|
2.4 The Least Fixed-Point Theorem |
|
|
35 | (4) |
|
2.5 Variable Declarations and Substitution |
|
|
39 | (6) |
|
2.6 Syntactic Sugar: The for Command |
|
|
45 | (2) |
|
|
|
47 | (1) |
|
2.8 Soundness and Full Abstraction |
|
|
48 | (6) |
|
3 Program Specifications and Their Proofs |
|
|
54 | (27) |
|
3.1 Syntax and Semantics of Specifications |
|
|
55 | (2) |
|
|
|
57 | (1) |
|
3.3 Rules for Assignment and Sequential Composition |
|
|
57 | (6) |
|
3.4 Rules for while Commands |
|
|
63 | (3) |
|
|
|
66 | (3) |
|
3.6 Computing Fibonacci Numbers |
|
|
69 | (2) |
|
|
|
71 | (3) |
|
3.8 Complications and Limitations |
|
|
74 | (7) |
|
|
|
81 | (16) |
|
|
|
81 | (2) |
|
4.2 Denotational Semantics |
|
|
83 | (2) |
|
|
|
85 | (5) |
|
4.4 Inference Rules for Arrays |
|
|
90 | (3) |
|
4.5 Higher-Order Assertions About Arrays |
|
|
93 | (4) |
|
5 Failure, Input-Output, and Continuations |
|
|
97 | (29) |
|
|
|
97 | (4) |
|
5.2 Intermediate Output and a Domain of Sequences |
|
|
101 | (6) |
|
5.3 The Physical Argument for Continuity |
|
|
107 | (2) |
|
5.4 Products and Disjoint Unions of Predomains |
|
|
109 | (2) |
|
5.5 Recursive Domain Isomorphisms |
|
|
111 | (2) |
|
5.6 Intermediate Input and a Domain of Resumptions |
|
|
113 | (2) |
|
5.7 Continuation Semantics |
|
|
115 | (3) |
|
5.8 Continuation Semantics of Extensions |
|
|
118 | (8) |
|
|
|
126 | (10) |
|
6.1 Configurations and the Transition Relation |
|
|
126 | (1) |
|
6.2 Inference Rules for the Simple Language |
|
|
127 | (4) |
|
6.3 Transition Semantics of fail |
|
|
131 | (1) |
|
|
|
132 | (4) |
|
7 Nondeterminism and Guarded Commands |
|
|
136 | (19) |
|
7.1 Syntax and Transition Semantics |
|
|
137 | (2) |
|
7.2 Bounded Nondeterminism and Powerdomains |
|
|
139 | (5) |
|
|
|
144 | (3) |
|
7.4 Program Specification and Proof |
|
|
147 | (2) |
|
7.5 Weakest Preconditions |
|
|
149 | (6) |
|
8 Shared-Variable Concurrency |
|
|
155 | (26) |
|
8.1 Concurrent Composition |
|
|
155 | (2) |
|
|
|
157 | (2) |
|
8.3 Mutual Exclusion and Conditional Critical Regions |
|
|
159 | (2) |
|
|
|
161 | (1) |
|
|
|
162 | (2) |
|
|
|
164 | (1) |
|
|
|
165 | (6) |
|
8.8 Stuttering and Mumbling |
|
|
171 | (10) |
|
9 Communicating Sequential Processes |
|
|
181 | (13) |
|
|
|
181 | (2) |
|
|
|
183 | (4) |
|
9.3 Possible Restrictions |
|
|
187 | (1) |
|
|
|
188 | (1) |
|
|
|
189 | (1) |
|
|
|
189 | (5) |
|
|
|
194 | (28) |
|
|
|
196 | (1) |
|
|
|
197 | (4) |
|
10.3 Normal-Order Evaluation |
|
|
201 | (5) |
|
|
|
206 | (2) |
|
10.5 Denotational Semantics |
|
|
208 | (8) |
|
10.6 Programming in the Lambda Calculus |
|
|
216 | (6) |
|
11 An Eager Functional Language |
|
|
222 | (29) |
|
|
|
222 | (1) |
|
11.2 Evaluation Semantics |
|
|
223 | (5) |
|
11.3 Definitions, Patterns, and Recursion |
|
|
228 | (3) |
|
|
|
231 | (1) |
|
|
|
232 | (3) |
|
11.6 Direct Denotational Semantics |
|
|
235 | (7) |
|
|
|
242 | (9) |
|
12 Continuations in a Functional Language |
|
|
251 | (22) |
|
12.1 Continuation Semantics |
|
|
251 | (4) |
|
12.2 Continuation as Values |
|
|
255 | (2) |
|
12.3 Continuations as a Programming Technique |
|
|
257 | (1) |
|
12.4 Deriving a First-Order Semantics |
|
|
258 | (6) |
|
12.5 First-Order Semantics Summarized |
|
|
264 | (5) |
|
12.6 Relating First-Order and Continuation Semantics |
|
|
269 | (4) |
|
|
|
273 | (25) |
|
13.1 Aliasing, References, and States |
|
|
273 | (3) |
|
13.2 Evaluation Semantics |
|
|
276 | (2) |
|
13.3 Continuation Semantics |
|
|
278 | (4) |
|
13.4 Some Syntactic Sugar |
|
|
282 | (1) |
|
13.5 First-Order Semantics |
|
|
282 | (2) |
|
|
|
284 | (3) |
|
|
|
287 | (2) |
|
|
|
289 | (2) |
|
|
|
291 | (2) |
|
|
|
293 | (5) |
|
14 A Normal-Order Language |
|
|
298 | (17) |
|
14.1 Evaluation Semantics |
|
|
298 | (3) |
|
|
|
301 | (1) |
|
|
|
302 | (2) |
|
14.4 Direct Denotational Semantics |
|
|
304 | (2) |
|
|
|
306 | (1) |
|
|
|
307 | (8) |
|
15 The Simple Type System |
|
|
315 | (34) |
|
15.1 Types, Contexts, and Judgements |
|
|
316 | (2) |
|
|
|
318 | (6) |
|
|
|
324 | (3) |
|
15.4 The Extrinsic Meaning of Types |
|
|
327 | (7) |
|
|
|
334 | (5) |
|
15.6 Set-Theoretic Semantics |
|
|
339 | (2) |
|
|
|
341 | (6) |
|
16 Subtypes and Intersection Types |
|
|
349 | (30) |
|
16.1 Inference Rules for Subtyping |
|
|
349 | (3) |
|
16.2 Named Products and Sums |
|
|
352 | (2) |
|
|
|
354 | (4) |
|
|
|
358 | (4) |
|
|
|
362 | (3) |
|
|
|
365 | (14) |
|
|
|
379 | (19) |
|
17.1 Syntax and Inference Rules |
|
|
380 | (3) |
|
17.2 Polymorphic Programming |
|
|
383 | (7) |
|
|
|
390 | (8) |
|
|
|
398 | (17) |
|
|
|
398 | (3) |
|
18.2 Existential Quantification and Modules |
|
|
401 | (5) |
|
18.3 Implementing One Abstraction in Terms of Another |
|
|
406 | (9) |
|
|
|
415 | (32) |
|
19.1 Data Types and Phrase Types |
|
|
416 | (3) |
|
19.2 Phrases and Type Inference Rules |
|
|
419 | (4) |
|
|
|
423 | (3) |
|
19.4 Arrays and Declarators |
|
|
426 | (2) |
|
19.5 A Semantics Embodying the Stack Discipline |
|
|
428 | (6) |
|
19.6 The Semantics of Variables |
|
|
434 | (2) |
|
19.7 The Semantics of Procedures |
|
|
436 | (3) |
|
19.8 Some Extensions and Simplifications |
|
|
439 | (8) |
| Appendix: Mathematical Background |
|
447 | (20) |
| A.1 Sets |
|
448 | (2) |
| A.2 Relations |
|
450 | (2) |
| A.3 Functions |
|
452 | (4) |
| A.4 Relations and Functions Between Sets |
|
456 | (3) |
| A.5 More About Products and Disjoint Unions |
|
459 | (3) |
| A.6 More About Relations |
|
462 | (5) |
| Bibliography |
|
467 | (16) |
| Index |
|
483 | |