Iteration¶
Core Idea¶
Iteration is the repeated application of a process or step, with each application building on the results of the previous one, in order to converge toward a result, refine a candidate, or explore a space. The essential commitment is not merely repetition but the use of what each iteration produces: the output of step n becomes part of the input to step n+1, and progress is measured across iterations by a stated notion of improvement, convergence, or coverage. Every iterative process specifies (1) a single iteration step (what happens in one round), (2) the state carried between iterations (what persists and is updated), (3) the stopping condition (when to halt), and (4) the notion of progress by which iterations are judged.
How would you explain it like I'm…
Try Again and Improve
Each Round Builds on the Last
Iteration (Loop with Feedback)
Structural Signature¶
- The bounded-or-unbounded loop construct [1]
- The loop-invariant for correctness reasoning [2]
- The variant function for termination proof [3]
- The index-or-condition-driven control flow [4]
- The imperative-versus-functional iteration duality [5]
- The tail-recursion as iteration-equivalent [5]
What It Is Not¶
- Not recursion. Recursion defines a solution in
terms of itself applied to a smaller instance;
iteration applies a step repeatedly while carrying
state across applications. Many recursive
definitions can be iteratively implemented and vice
versa, but the conceptual commitment is different.
See
recursionfor the paired distinction. - Not pure repetition. Repeating a step with independent inputs each time (e.g., running a test suite on identical inputs) is not iteration unless later runs build on earlier ones.
- Not feedback. Feedback routes a measured output
back to the input in a continuous or cyclic
dynamic; iteration is a discrete sequence of
applications with explicit state handoff. Feedback
mechanisms often underlie iterative processes, but
iteration as a concept is about the sequential
structure. See
feedbackfor the paired distinction. - Not convergence. Convergence is a possible property of an iterative process, not a defining one. Divergent iteration is still iteration, and non-convergent methods (search, enumeration) can be designed deliberately.
- Not algorithm. An algorithm is a procedure for
computing a result; iteration is one structural
pattern an algorithm can use. Many algorithms are
iterative; many iterative processes (e.g.,
experimental cycles) are not algorithms in the
formal sense. See
algorithm. - Common misclassification. Calling something iterative because it is repeated without the state-carrying, progress-measuring structure — a sequence of unrelated attempts is not iteration. The "use the last result" is the defining feature.
Broad Use¶
- Mathematics
- Iterative methods for equations (Newton, fixed-point iteration, power iteration); successive approximation; iterated maps and dynamical systems.
- Computer science
- Loops; iterative algorithms (gradient descent, EM, expectation propagation); iterative deepening search; iterative refinement in numerical linear algebra.
- Engineering and product design
- Prototype-test-refine cycles; agile development; lean startup build-measure-learn loops; design sprints.
- Science
- Experimental cycles (hypothesize-test-revise); model refinement; iterative instrument calibration.
- Education and skill acquisition
- Practice loops; deliberate practice with feedback; formative assessment cycles; spaced repetition.
- Organizational change
- Continuous improvement (PDCA); retrospectives and adjustments; policy pilots with iteration.
Clarity¶
Iteration clarifies by making the use-of-prior-result explicit. Claims like "we improved the design" resolve into "we ran N iterations; the progress measure moved from X to Y; we stopped at this criterion." This forces three commitments often left implicit: what counts as progress, what is carried between iterations, and when to stop. The clarifying force is to convert "refine until good" into a disciplined loop whose design can be examined, optimized, and audited.
Manages Complexity¶
- Replaces solving a problem in one shot with a sequence of small improvements, each of which is analytically or practically easier than the whole.
- Enables convergence analysis: rate of progress, stability, and termination behavior can be reasoned about before execution in many mathematical settings.
- Supports anytime behavior: the current iterate is a usable (if imperfect) result, and the process can be stopped early with a known-quality output.
- Licenses incremental learning under budget: iterations allow matching effort to required quality, investing more iterations where the progress measure indicates continued return.
- Surfaces structure: how quickly iteration converges, and where it stalls, reveals the landscape of the problem (conditioning, local structure, dimensionality).
Abstract Reasoning¶
Iteration trains a reasoner to ask:
- What is one iteration, concretely — inputs, step, outputs, state update?
- What state persists between iterations, and how is it updated? Is any useful information being discarded that should be carried forward?
- What is the progress measure, and does the process actually move along it at every step (or on average)?
- What is the stopping condition, and is it tied to progress (convergence tolerance) or external (iteration count, time budget)?
- What happens when progress stalls — is there a detection mechanism, and an alternative strategy (restart, step-size adjustment, change of method)?
- Is convergence expected, and if so to what — a fixed point, a distribution, an equilibrium, something else?
Knowledge Transfer¶
Role mappings across domains:
- Iteration step ↔ loop body / update rule / prototype pass / experimental trial / learning episode
- Carried state ↔ current estimate / working prototype / current model / current best candidate / learning-to-date
- Progress measure ↔ residual / loss / fit metric / user-feedback score / KPI / skill level
- Stopping condition ↔ convergence tolerance / iteration count / quality threshold / budget exhausted / "ship it"
- Convergence ↔ stabilization / plateau / fixed-point reached / learning curve flattening
- Step size / learning rate ↔ aggressiveness of change / prototype fidelity / experimental increment
- Restart / perturbation ↔ fresh prototype / model reset / strategy change / mindset reset
- Anytime result ↔ current best version / ship-quality current artifact / preliminary answer
A numerical analyst running Newton's method, a product team running agile sprints, and a student practicing a musical passage are all doing the same structural work: apply a step that uses the current state, update the state, measure progress toward a stated goal, and stop when progress has met a criterion. The same diagnostic — "what is the state update, what is the progress measure, and what is the stopping rule?" — applies across all three, with the same failure modes (no measurable progress, bad step size, wrong stopping rule) in each.
Examples¶
Formal/abstract¶
Backus 1957 introduced FORTRAN with the DO loop as a canonical iteration construct. Newton's method for finding roots of f(x) = 0 exemplifies mathematical iteration: the step is x_{n+1} = x_n - f(x_n)/f'(x_n), the carried state is the current estimate x_n, the progress measure is |f(x_n)| or |x_{n+1} - x_n|, the stopping condition is when progress measure falls below tolerance, and under favorable conditions (near a simple root, well-behaved derivative) convergence is quadratic. Hoare 1969 developed axiomatic semantics to reason formally about loop correctness and termination using loop invariants and variant functions[2]. Every element of the structural signature is present in textbook form— bounded iterations with explicit stopping, carried state, and measurable progress[4].
Mapped back: Mathematical iteration codifies the structure: repeatable step, carried state, progress measure, stopping condition, and convergence behavior. Loop invariants and variant functions become the formal language for reasoning about correctness and termination.
Applied/industry¶
A startup iterating on product-market fit. Iteration step: build a version, release to a cohort, measure response, decide the next change. Carried state: the current product hypothesis, the team's learning, the customer cohort. Progress measure: activation rate, retention curve, or a composite PMF proxy. Stopping condition: metric exceeds threshold, runway exhausts, or strategic pivot. Convergence behavior: typically not quadratic; often sluggish, sometimes punctuated by step-change learnings. Dijkstra 1976 and Manna-Pnueli 1992 showed how the same formal machinery applies to iterative processes in diverse domains. The structural kinship with Newton's method is precise— same diagnostic questions (what is the state update, what is the progress measure, what is the stopping rule), same failure modes (no measurable progress, bad step size, wrong stopping rule)— even though the substrate is product development rather than function-zero finding[6].
Mapped back: Iteration as control structure abstracts away from computation into any domain where a state is improved across repeated applications, revealing the universal structure of refinement cycles.
Structural Tensions¶
-
T1: Progress vs Plateau. Iteration depends on a progress measure actually moving. Iterations that plateau (stuck at local optimum, product at local maximum, skill at plateau) continue expending effort without return. Detection of the plateau is itself a design problem. A common failure is continuing to iterate past the point of useful progress because the measure is miscalibrated or no stopping criterion was ever defined[7].
-
T2: Step Size and Stability. Small steps give stable, slow progress; large steps are fast but risk overshoot, oscillation, or divergence. The right step size depends on local curvature, problem scale, and noise tolerance. The trade-off appears as "aggressive vs conservative changes" in product and learning contexts. A common failure is taking steps too large (redesigning the whole product each sprint) and never stabilizing, or too small (micro-tweaks) and running out of budget[8].
-
T3: Iterating the Wrong Thing. Iteration improves the carried state along the progress measure. If the state does not capture relevant dimensions (missing variables, wrong representation) or the progress measure is a proxy for something else, successful iteration produces the wrong outcome efficiently. A common failure is polishing a feature while the underlying value proposition is wrong, or optimizing a method on a badly-posed problem formulation[7].
-
T4: Stopping Discipline. Iteration naturally runs as long as budget allows. Without a disciplined stopping rule tied to progress or external deadline, it consumes more than warranted. But stopping too early forfeits realized value another iteration would deliver. A common failure is perfectionist iteration beyond point where additional cycles are worth more than alternative uses of effort, or premature stopping driven by fatigue rather than calibrated criterion[6].
-
T5: State Representation and Observability. The carried state must capture all information relevant to progress toward the goal. If important state is discarded between iterations or never observed, progress becomes invisible and the stopping criterion becomes arbitrary. A common failure is designing iteration around a state variable that is convenient to compute but not the one that actually matters for success[9].
-
T6: Tail Recursion vs Explicit Loop. Any tail-recursive definition can be iteratively implemented with explicit state management. Conversely, most loops can be expressed as tail recursion. The choice between them affects readability, stack usage, and compiler optimization. A common failure is choosing the syntactically convenient form while ignoring the computational costs (unbounded call stacks, memory overhead)[10].
Structural–Framed Character¶
Iteration sits at the structural end of the structural–framed spectrum: it is a pure relational pattern, the same in any domain where it appears, and nothing about its meaning depends on a particular field's vocabulary or assumptions. It is the repeated application of a step in which each pass feeds on the last, so that the output of one round becomes input to the next and progress accumulates toward convergence or coverage.
Though it grew up in computing, its loops and termination conditions are not specific to software: the same feed-forward repetition describes a sculptor refining a form, a scientist tightening a model, or a numerical method homing in on a root, and the pattern applies unchanged across all of them. It carries no inherent value — an iterative process can be productive or futile. Its origin is a formal control structure, not an institution, and it can be defined purely in terms of a step, a state, and a notion of improvement, with no appeal to human norms. To see a process as iterative is to recognize repetition-with-accumulation already present in it. On every diagnostic, it reads structural.
Substrate Independence¶
Iteration is about as substrate-independent as a prime can be — composite 5 / 5 on the substrate-independence scale. Its signature — repeated application where the output of one step feeds the next, with progress measured along the way — is fully substrate-agnostic. It spans computational loops and recursion, fixed-point methods in mathematics, prototyping cycles in engineering design, feedback-driven organizational learning, and generational adaptation in biology, and the examples cross media cleanly from FORTRAN to Newton's method to product-market-fit iteration. The pattern is recognizably identical wherever a process feeds back into itself, making this one of the canonical 5s.
- Composite substrate independence — 5 / 5
- Domain breadth — 5 / 5
- Structural abstraction — 5 / 5
- Transfer evidence — 5 / 5
Relationships to Other Primes¶
Foundational — no parent edges in the catalog.
Children (13) — more specific cases that build on this
-
Exponentiation is a kind of Iteration
Exponentiation is a specialization of iteration. The general pattern is the repeated application of a step with state carried between rounds and progress measured across rounds. Exponentiation instantiates this with the per-iteration step being multiplication by a fixed factor, so the increment at each step is proportional to the current state rather than to a fixed quantity. This produces the constant-ratio successive values that distinguish exponential growth or decay from linear or polynomial accumulation. Compound interest, radioactive decay, and viral early-outbreak dynamics are the same iterative pattern under different per-step multipliers.
-
Idempotence is a kind of Iteration
Idempotence is a kind of iteration in which the iteration step f satisfies f(f(x)) = f(x), so the state carried between rounds stops changing after the first application and every stopping condition is trivially met. It inherits iteration's commitment to repeated application of a process, but specializes the notion of progress: there is no further convergence to chase once the operation has fired once. This is what makes idempotent operations safe to retry, replay, or duplicate under uncertain delivery — repetition adds nothing beyond round one.
-
Algorithm presupposes Iteration
An algorithm is a finite, definite, effective procedure that transforms inputs to outputs through an ordered sequence of mechanically-executable steps with a termination condition. This presupposes iteration: the repeated application of a step with state carried between rounds, a stopping condition, and a notion of progress. Each algorithmic step consumes the prior state and produces the next, exactly the use-of-prior-output structure iteration requires. The termination guarantee and the progress measure that distinguishes a halting algorithm from a non-halting loop are the same structural commitments iteration specifies.
- Delphi Method is part of Iteration
The Delphi Method's machinery is built as an explicit iteration: each round consists of an elicitation step whose output (statistical summaries and anonymized rationale) becomes the input to the next round, with progress measured by convergence of expert opinion. The method is a particular configuration of iteration in which the iteration step is structured elicitation, the state carried forward is the distribution of responses and reasoning, and the stopping condition is stability or sufficient convergence — Delphi is iteration specialized to expert-opinion aggregation.
- Design Prototyping presupposes, typical Iteration
Design prototyping creates partial, testable versions of a design to learn about feasibility, form, and function before full commitment. The prototype's value is realized through iteration: each round produces evidence that feeds the next design cycle, with state carried between rounds and progress measured across them. Iteration supplies the repeated-application-with-state-carryover structure that prototyping rides on. Some single-shot prototypes serve as one-time confidence checks without iterative cycles, so the dependence is typical, though the canonical use case is iterative refinement.
- Divergence-Convergence in the Design Process presupposes Iteration
Divergence-convergence is structured as a recurring cycle: a divergence phase generates breadth, a convergence phase narrows to a chosen candidate, and the process then re-opens to another divergence phase at finer grain. Without iteration's machinery — repeated application of a process with state carried between rounds and a notion of progress measured across them — there would be no way to organize the design process as cumulative cycles; the expand-and-narrow moves would collapse into a single non-recurring sequence rather than a productive macro-structure.
- Minimum Viable Product (MVP) presupposes Iteration
An MVP is the smallest version of a product that can be released to real users to gather feedback, and its defining commitment is that speed-to-feedback drives subsequent refinement. That stance collapses without Iteration as the surrounding structure: the MVP's output must become input to the next build, with state carried between rounds and progress measured across them. Stripped of the iterative loop it sits in, the MVP is just an underbuilt product rather than a learning instrument.
- Monte Carlo Simulation presupposes Iteration
Monte Carlo simulation presupposes iteration because the law-of-large-numbers convergence at rate 1/√N is achieved only through repeated sampling, with each draw updating the empirical distribution that approximates the target. It depends on iteration's structural commitments: a single step (draw and evaluate), state carried between rounds (the accumulating sample), a stopping condition (target variance reached), and a progress notion (variance shrinkage). Without the iterative apparatus, Monte Carlo collapses to a single sample with no statistical guarantee.
- Pipeline presupposes Iteration
A pipeline is a sequence of stages through which work items flow, with each stage accepting outputs from the prior stage and producing inputs for the next. This presupposes iteration: the repeated application of a step with state carried between rounds and progress measured across rounds. Each stage transition is an iteration step where the work item's state advances; the pipeline's throughput depends on the per-stage iteration consuming the previous stage's output. Without iteration's structure of repeated application with state passed forward, staging collapses into a single monolithic operation rather than an ordered flow.
- Progressive Refinement from Core Model presupposes Iteration
Progressive refinement from a core model writes the full phenomenon as baseline plus correction, with refinements added systematically in increasing orders of a small parameter until the required accuracy is reached. This presupposes iteration: the repeated application of a step with state carried between rounds, a progress measure, and a stopping condition. Each correction order is an iteration step that consumes the prior approximation and produces the next; the self-diagnostic check that higher-order terms remain small is the progress measure that licenses continued iteration or signals that the baseline must be reconsidered.
- Well-Foundedness (Well-Ordering) presupposes Iteration
Well-foundedness is the structural property that justifies induction, recursion, and termination by ruling out infinite descending chains. Its content — that any iterative descent through smaller elements must bottom out — is meaningful only against Iteration, the repeated application of a step where each round feeds the next. Well-foundedness presupposes iteration as the surrounding structure whose termination it certifies; without an iterative process to bound, the no-infinite-descent property has nothing to apply to.
- Hermeneutic Circle is a decomposition of Iteration
The hermeneutic circle is the interpretive particularization of iteration: each pass reads parts in light of a provisional whole and re-reads the whole in light of refined parts, with the fore-structure carried as state between passes and convergence measured by interpretive coherence. Where iteration names repeated application of a step with cumulative use of prior outputs generally, the hermeneutic circle fixes the step as interpretation, the state as the evolving fore-understanding, and the progress notion as tightening coherence between part-readings and whole-readings.
- Refinement is a decomposition of Iteration
Refinement is the convergence-toward-fitness particularization of iteration: each cycle takes a current candidate, evaluates it, and produces a sharpened successor that becomes the input to the next cycle. Where iteration names repeated application of a step with cumulative use of prior outputs generally, refinement fixes the progress notion as monotone improvement toward precision or fitness, the state carried as the current candidate, and the operation per cycle as evaluation-and-adjustment — a particular shape iteration takes when an initial approximation is being progressively sharpened.
Neighborhood in Abstraction Space¶
Iteration sits in a moderately populated region (54th percentile for distinctiveness): it has near-neighbors but no dense thicket of synonyms.
Family — Computational Process & Control (12 primes)
Nearest neighbors
- Algorithm — 0.82
- Recursion — 0.80
- Ultra-Stability (Ashby's Concept) — 0.79
- Mathematical Induction — 0.78
- Robustness — 0.78
Computed from structural-signature embeddings · 2026-05-29
Not to Be Confused With¶
Iteration must be distinguished from Recursion, its nearest neighbor (similarity 0.739). Both involve repeated application of a process, but they differ fundamentally in control structure and how state is managed. Recursion defines a solution in terms of itself applied to a smaller instance: a function calls itself, passing modified arguments, with termination occurring when a base case is reached. Iteration, by contrast, applies the same step repeatedly in a loop, carrying state forward between applications and halting when an explicit stopping condition is met or budget exhausted. Recursion is self-referential definition; iteration is cyclic reapplication. A tree traversal can be expressed recursively (visit left subtree, then right subtree, with base case at leaf) or iteratively (maintain a stack of unvisited nodes, pop one, process it, push its children). The recursive version reads as "solve by reducing to smaller self"; the iterative version reads as "process by cycling through a work queue." Recursion is naturally top-down (begin with whole, recurse to parts); iteration is naturally left-to-right or in-order (process sequentially with state accumulation). Computationally, recursion consumes call-stack depth proportional to recursion depth, while iteration with explicit state management consumes heap space. Understanding when a recursive definition is better implemented iteratively (or vice versa) is central to algorithm design. In domains beyond computing, recursion often appears as self-similarity or fractal structure (each part contains the whole), while iteration appears as repeated application of the same rule (successive approximation). A Mandelbrot set is generated recursively; Newton's method is iterative. The distinction matters because recursive thinking suits hierarchical or compositional problems; iterative thinking suits refinement or state-accumulation problems.
Iteration is also distinct from Convergence, though they are closely related. Convergence describes a mathematical property—that a sequence of values approaches a limit or fixed point as iterations proceed. Iteration, by contrast, is the process itself, the repeated application of a step, regardless of whether the process converges. An iterative algorithm may converge (Newton's method approaching a root), diverge (a poorly-designed step size causing values to oscillate wildly), or simply enumerate without convergence (a breadth-first search exploring all nodes of a graph). Convergence is the outcome or property; iteration is the mechanism. A system can be iterative without converging; indeed, divergent iteration is deliberately designed in some domains. A Monte Carlo simulation iterates without converging to a single value; instead, the iteration explores a space and produces a distribution. A product team iterating through design cycles may not converge to an optimal design; instead, they halt when runway exhausts or market conditions shift. Convergence language ("the iterations converge quadratically," "convergence is guaranteed under these conditions") describes properties of iterative processes, but convergence is neither required for something to be iterative nor sufficient to make something that converges into an iteration in the structural sense. Some non-iterative processes converge (a chemical reaction reaches equilibrium without explicit cycling); some iterative processes never converge (search algorithms designed to enumerate a space). The key is that iteration names the control structure and state management, while convergence names the asymptotic property of what happens across those iterations.
Nor is iteration the same as Refinement, though refinement often uses iteration. Refinement describes the process of improving or adjusting something toward a higher quality, tighter fit, or greater sophistication. Iteration is the structural mechanism—repeated application of a step with state carryover. A system can refine without iterating: a single design pass that dramatically improves a product is refinement without iteration. Conversely, a system can iterate without refining: a loop that repeats the same step identically without the step improving the state is iteration (if the output of step n feeds into step n+1) but not refinement (if no progress is measured). The distinction is subtle but important. In product design, refinement is the goal or aspiration; iteration is the method used to achieve refinement. A design team iterating through prototypes is using iteration as the mechanism; they hope each iteration refines the design, but refinement is not guaranteed by iteration alone. If each iteration involves thoughtful change based on feedback, refinement occurs; if each iteration repeats the same mistake, refinement fails despite iteration being structurally present. In mathematics, a fixed-point iterative method "refines" the estimate with each iteration, moving closer to the solution. In code review, a reviewer asking for a patch ("refine this") hopes the author will iterate on their work; the iteration (resubmit, receive feedback, resubmit) provides the mechanism, and refinement is the intended outcome. Iteration is structural and measurable (a loop counting iterations); refinement is purposive and directional (progress toward quality). Many iterative processes are refinement-oriented, but the terms are not synonymous.
Finally, iteration is distinct from Feedback, though feedback mechanisms often power iterative processes. Feedback routes a measured output or response back into a system, creating a continuous or cyclic dynamic. Iteration is a discrete sequence of applications with explicit state handoff between steps. In a feedback system, output influences future input in a continuous or tightly-coupled way; the system's behavior is shaped by its own outputs in real-time or near-real-time. In an iterative process, one step completes, its output is packaged as carried state, the next step begins, and the boundary between steps is explicit. A thermostat with feedback control reads current temperature continuously and adjusts heating in real-time, creating a continuous loop. A product team iterating through sprints completes a sprint, measures metrics, plans the next sprint based on those metrics, and then executes. The sprint boundary is explicit. Feedback can power iteration (the feedback loops inform which iteration comes next), and iterative processes often include feedback mechanisms (each iteration produces signals that guide the next). But they are structurally different: feedback is about continuous influence and responsiveness; iteration is about discrete cycles with explicit boundaries and state passing. In control theory, feedback control systems are analyzed using transfer functions and stability criteria; iterative algorithms are analyzed using convergence rates and stopping conditions. A biological system regulating blood pH through chemical feedback is fundamentally different from a scientist iterating hypotheses through experimental cycles, even though both involve cycles and responsiveness. Feedback is continuous or rapid-response coupling; iteration is step-wise, measured progression.
Solution Archetypes¶
Solution archetypes in the catalog that build on this prime — directly (this prime is a source ingredient) or as a related prime.
Built directly on this prime (7)
- Cadence Design
- Convergence Guidance
- Hermeneutic Iteration
- Iterative Refinement Loop
- Progressive Fidelity Increase
- Rapid Prototype Learning Loop
- Termination Condition Design
Also a related prime in 21 archetypes
- Adaptive Mutation Rate Management
- Approximation-Target Divergence Mapping
- Chaos Exposure Testing
- Contextual Selective Propagation
- Correspondence Violation Detection and Theory Refinement
- Cycle Breaking
- Equivalence-Relation Refinement and Coarsening
- Evaluation Criteria Suspension During Divergence
- Formative Feedback Loop
- Inductive Validity Extension
Notes¶
Iteration is the most concrete and widely-used control structure in programming and practical problem-solving. It bridges formal computation (loop invariants, variant functions) and everyday refinement (product cycles, learning spirals). The relationship between recursion and iteration is deep: every recursion can be implemented iteratively with explicit stacks, and most loops can be written as tail recursion. The interplay between the two defines much of algorithm design and programming language semantics.
References¶
[1] Backus, J. W., et al. (1957). "The FORTRAN automatic coding system." Proceedings of the Western Joint Computer Conference, 188–198. ↩
[2] Hoare, C. A. R. (1969). An axiomatic basis for computer programming. Communications of the ACM, 12(10), 576–580. Foundational paper introducing Hoare logic with pre/post-condition triples as the formal framework for proving partial correctness and termination invariants of algorithms. ↩
[3] Floyd, R. W. (1967). "Assigning meanings to programs." Proceedings of Symposia in Applied Mathematics, 19, 19–32. ↩
[4] Knuth, D. E. (1968). The Art of Computer Programming, Vol. 1: Fundamental Algorithms (1st ed.). Addison-Wesley. ↩
[5] Backus, J. W. (1978). "Can programming be liberated from the von Neumann style? A functional approach to programming languages." Communications of the ACM, 21(8), 613–641. ↩
[6] Dijkstra, E. W. (1976). A Discipline of Programming. Prentice Hall. ↩
[7] Liskov, B. H., & Guttag, J. V. (2000). Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Addison-Wesley. ↩
[8] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). MIT Press. ↩
[9] Wirth, N. (1976). Algorithms + Data Structures = Programs. Prentice Hall. ↩
[10] Aho, A. V., Hopcroft, J. E., & Ullman, J. D. (1974). The Design and Analysis of Computer Algorithms. Addison-Wesley. ↩
[11] Manna, Z., & Pnueli, A. (1992). The Temporal Logic of Reactive and Concurrent Systems: Specification. Springer-Verlag.