An Adequate While-Language for Hybrid Computation
Sergey Goncharov, Renato Neves

TL;DR
This paper introduces a new language for hybrid computation that combines discrete and continuous dynamics, supported by a denotational semantics based on hybrid monads, enabling better analysis and description of complex natural and engineered systems.
Contribution
It presents a novel hybrid computation language inspired by call-by-value, with a denotational semantics using hybrid and duration monads, advancing formal modeling of hybrid systems.
Findings
Developed a hybrid monad supporting iteration for semantics.
Introduced a lightweight duration monad as a simpler alternative.
Provided a denotational semantics that is both adequate and computationally meaningful.
Abstract
Hybrid computation combines discrete and continuous dynamics in the form of an entangled mixture inherently present both in various natural phenomena, and in applications ranging from control theory to microbiology. The emergent behaviours bear signs of both computational and physical processes, and thus present difficulties not only for analysis, but also for describing them adequately in a structural, well-founded way. Here, we introduce a language for hybrid computation, inspired by the fine-grain call-by-value paradigm, and equip it with a denotational and computationally adequate denotational semantics. Our denotational semantics crucially relies on a hybrid monad supporting an (Elgot) iteration operator, we developed elsewhere. As an intermediate step we introduce a more lightweight duration semantics furnished with analogous results and drawing on a new duration monad that we…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
@draftfalse@option@draftfalse
arrows1”60
An Adequate While-Language for Hybrid Computation
Sergey Goncharov
Friedrich-Alexander Universität Erlangen-Nürnberg, Germany
and
Renato Neves
INESC TEC (HASLab) & University of Minho, Portugal
(2019)
Abstract.
Hybrid computation harbours discrete and continuous dynamics in the form of an entangled mixture, inherently present in various natural phenomena and in applications ranging from control theory to microbiology. The emergent behaviours bear signs of both computational and physical processes, and thus present difficulties not only in their analysis, but also in describing them adequately in a structural, well-founded way.
In order to tackle these issues and, more generally, to investigate hybridness as a dedicated computational phenomenon, we introduce a while-language for hybrid computation inspired by the fine-grain call-by-value paradigm. We equip it with operational and computationally adequate denotational semantics. The latter crucially relies on a hybrid monad supporting an (Elgot) iteration operator that we developed elsewhere. As an intermediate step, we introduce a more lightweight duration semantics furnished with analogous results and based on a new duration monad that we introduce as a lightweight counterpart to the hybrid monad.
Elgot iteration, guarded iteration, hybrid monad, Zeno behaviour, hybrid system, operational semantics.
††journalyear: 2019††copyright: acmlicensed††conference: PPDP’19: 21st International Symposium on Principles and Practice of Declarative Programming; October 07–09, 2019; Porto, Portugal††booktitle: PPDP’19: 21st International Symposium on Principles and Practice of Declarative Programming, October 07–09, 2019, Porto, Portugal††price: 15.00††doi: 10.1145/1122445.1122456††isbn: 978-1-4503-9999-9/18/06††ccs: Theory of computation Timed and hybrid models
1. Introduction
**Motivation and context. ** Hybrid systems are traditionally seen as computational devices that closely interact with physical processes, such as movement, temperature, energy, and time. Their wide range of applications, including e.g. the design of embedded systems (Platzer, 2008) and analysis of disease propagation (Liu and Stechlinski, 2017), led to an extensive research in the area, with a particular focus on languages and models that suitably accomodate classic computations and physical processes at the same time (Henzinger, 1996; Platzer, 2008; Broman et al., 2012). Most of this research revolved around the notion of hybrid automaton, widely adopted in control theory and in computer science (Henzinger, 1996; Alur et al., 1993), and around certain classes of (weak) Kleene algebra, specialised at verifying safety and liveness properties of hybrid systems (Platzer, 2008; Höfner and Möller, 2009).
A distinctive aspect of these models is the free use of non-determinism, which semantically amounts to non-deterministic hybrid systems rather than (purely) hybrid systems, the latter abundantly found in the wild. Furthermore, iterative computations in these models are captured by Kleene star (essentially the non-deterministic choice between all possible finite iterates of the system at hand), i.e. non-determinism is also intertwined with recursion. In this paper, we take a different view: we see non-determinism as an abstraction layer added on top of hybridness for handling uncertainty. This consideration can be made precise by drawing on Moggi’s seminal work (Moggi, 1991) associating computational effects with (strong) monads. Both non-determinism and hybridness are computational effects in Moggi’s sense: while the former effect is standard, the latter was identified recently (Neves et al., 2016) and elaborated in the second author’s PhD thesis (Neves, 2018).
Our view of (pure) hybridness as a computational effect connects the area of hybrid systems with a vast body of research on monad-based programming theory (e.g. (Moggi, 1991; Levy et al., 2002; Elgot, 1975)), which potentially eases the development of sophisticated hybrid programming languages – a task that arguably belongs to the core of the twenty-first century’s technology, due to the increasing presence of software products that interact with physical processes (Broman et al., 2012; Kim and Kumar, 2012). As a step in the direction of such languages, we introduce a deterministic while-language for hybrid computation HybCore. We do not intend to use it directly in the development of complex hybrid systems, but rather as a basic language on which to study the subject of (purely) hybrid computation, possible extensions of the latter, and as a theoretical basis for the development of more complex hybrid programming languages.
**Contributions and overview of HybCore. ** In the development of HybCore, we concentrate on the indispensable features of hybrid computation, namely classic program constructs and primitives for describing behaviours of physical processes. As we will see, the orchestration of these two aspects yields significant challenges, centring on the main construct of HybCore – the hybrid while-loop – which captures iterated hybrid behaviour, including both finite and infinite loop unfoldings, most notably Zeno behaviour.
Figure 1 shows a taxonomy of while-loops emerging from HybCore: besides the standard possibilities of convergence and divergence, we now distinguish between progressive, non-progressive, and Zeno behaviour, depending on the execution time of computations (in Figure 1 the {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{wait}}(s) command, triggers a delay of time units).
We emphasise the distinction between our semantics and the more widespread transition semantics for hybrid automata (Henzinger, 1996). Following Abramsky (Abramsky, 2014), the latter can be qualified as an intensional semantics, while we aim at an extensional semantics, meaning that e.g. we regard the two programs
[TABLE]
as equivalent, while they would be distinct under the transition semantics. In a nutshell, by committing to the extensional view, we abstract away from specific choices of control states – a decision that could also be interpreted in hybrid automata setting and thus potentially lead to coarser, more flexible notions of automata equivalence.
One principal design decision we adopt in HybCore is to base it on the fine-grain call-by-value paradigm (Levy et al., 2002) – a refinement of Moggi’s computational -calculus, suitable for both operational and denotational semantics. Denotationally, we associate a hybrid computation with a trajectory, i.e. a map from a downward closed set of non-negative real numbers (with for the empty trajectory representing non-progressive divergence). The supremum of is called the duration of the hybrid computation. As shown in previous work (Goncharov et al., 2018a, b), such trajectories constitute a hybrid monad .
We introduce an operational semantics for HybCore and show that it is sound and (computationally) adequate w.r.t. . This result relies on a more lightweight operational semantics that keeps track of durations (i.e. execution times) only. We complement this latter semantics with a duration monad and prove analogous soundness and adequacy results for it.
Our results do not fit standard semantic frameworks for the following reasons:
- •
It is not possible to introduce iteration for the duration monad (as well as for the hybrid monad (Goncharov et al., 2018a, b)) via the usual least fixpoint argument, essentially due to the lack of canonical choice of divergence; the strategy we employ here, is thus to introduce a certain coalgebraic version of this monad equipped with a partial (guarded) Elgot iteration and then to suitably quotient it.
- •
Progressive divergence and Zeno behaviour, are principally non-inductive kinds of behaviour, which we manage to capture by allowing for infinitely many premises in the operational semantics rules.
- •
Our semantics for HybCore is essentially two-stage, and contains the aforementioned duration semantics as an auxiliary ingredient. The operational semantics rules thus feature two separate evaluation judgements.
**Related work. ** In designing the different constructs of HybCore, we owe inspiration to Witsenhausen’s model of differential equations indexed by operations modes, a percursor of the concept of hybrid system (Witsenhausen, 1966), the relational Kleene algebra underlying differential dynamic logic (Platzer, 2008) and also hybrid automata (Henzinger, 1996). As already mentioned, we restrict ourselves to a purely hybrid setting, in particular we exclude non-determinism. This is not to say that we could not have considered non-determinism (in fact, there is also a non-deterministic hybrid monad (Dahlqvist and Neves, 2018)) but for the time being we focus on pure hybrid behaviour in isolation from other computational effects, such as non-determinism.
Suenaga and Hasuo (Suenaga and Hasuo, 2011) develop a somewhat similar while-language for hybrid systems but from a different semantic viewpoint: by unifying both continuous and discrete cyclic behaviour in a single while-construct that makes incrementations by infinitesimals. An interesting, principled approach to the semantics of timed systems, via an evolution comonad, is proposed by Kick, Power and Simpson (Kick et al., 2006). The underlying functor of the evolution comonad is striking close to the functor underlying our hybrid monad, except that the former does not include empty trajectories and hence does not support non-progressive divergence.
As indicated above, in order to interpret hybrid while-loops, we necessarily went beyond standard semantic frameworks (Winskel, 1993; Reynolds, 1998), in particular because of the indispensable presence of various notions of divergence. This relates our work to the recent work on modelling productively non-terminating programs using a coalgebraic delay monad (previously called the partiality monad) (Capretta, 2005; Danielsson, 2012). Indeed, our construction of the iteration operator on the duration monad in Section 5, is inspired by a technically similar procedure of quotienting the delay monad by weak bisimilarity (Chapman et al., 2015), albeit in a different (constructive) setting.
2. Preliminaries and Notation
We will generally work in the category of sets and functions, but also call on some standard idioms of category theory (Mac Lane, 1971; Awodey, 2010). By we refer to the objects of , and by (or , if no confusion arises) to the morphisms from to . We often omit indices at natural transformations. By , , + and we denote natural numbers (including [math]), real numbers, non-negative real numbers and extended non-negative real numbers respectively. By we denote a coproduct of and , the corresponding coproduct injections and , and dually for products: , . A category with finite products and coproducts is distributive (Cockett, 1993) if the natural transformation is an isomorphism, whose inverse we denote by . By we abbreviate the if-then-else operator expanding as follows: , . For time-dependent functions we use the superscript notation in parallel with to emphasize orthogonality of the temporal dimension to the spatial one.
Following Moggi (Moggi, 1991), we identify a monad on a category with the corresponding Kleisli triple consisting of an endomap on , a -indexed class of morphisms , called the unit of , and the Kleisli lifting maps such that Provided that has finite products, a monad on is strong if it is equipped with strength, i.e. a natural transformation satisfying a number of standard coherence conditions (see e.g. (Moggi, 1991)). Every monad on is strong (Kock, 1972) under . Morphisms of the form form the Kleisli category of , which has the same objects as , units as identities, and composition , also called Kleisli composition.
An (-)coalgebra on for a functor is a pair . Coalgebras form a category whose morphisms satisfy and . A final object of this category is called a final coalgebra (see (Uustalu and Vene, 1999) for more details on coalgebras in semantics of (co)iteration).
3. A While-Language for Hybrid Computation
We start off by defining our core language for hybrid computation HybCore, following the fine-grain call-by-value paradigm (Levy et al., 2002). First, we introduce types:
[TABLE]
and then postulate a signature of typed operation symbols of the form with for integer and real arithmetic, e.g. summation , and further primitives meant to capture time-dependent solutions of systems of ordinary differential equations: i.e. for every such system where is the vector and , the signature contains the symbol {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{int}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}f_{1},\ldots,f_{n}}}^{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}i}}\colon^{n}\times\to, representing the -th projection of the corresponding unique (global) solution (Perko, 2013).
Remark 1.
We do not study conditions ensuring existence of the solutions {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{int}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}f_{1},\ldots,f_{n}}}^{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}i}}, and instead work under the assumption that the functions come from a sufficiently well-behaved class for which these solutions exist. Clearly, we could instead introduce a specific grammar of differential equations and make them part of the language. For example, we could use the following grammar for the :
[TABLE]
where reads as with empty . This corresponds to systems of linear ordinary differential equations, which provide a sufficiently large stock of trajectories standardly used in hybrid system modelling (Alur, 2015). A concrete choice of such grammar however would have no bearing on our present results, but we expect to revisit this decision in future work devoted to reasoning and verification in HybCore.
Our language features two kinds of judgement,
[TABLE]
for values and computations, respectively. These involve variable contexts which are non-repetitive lists of typed variables . We indicate the empty context as (dash), e.g. . The term language over these data is given in Figure 2. Programs of HybCore figure as terms in computation judgements and are inductively built over value judgements. Intuitively, the latter capture functions from to in the standard mathematical sense, and computation judgements capture functions from to trajectories valued on ; i.e. instead of single values from , they return functions valued on with or , e.g. and . Most of the constructs in Figure 2 are standard. Sequential composition (seq) for example reads as “bind the output of to and then feed it to ”. The rule (now) converts a value into an instantaneous computation, , that returns . The rules (if) and (wh) provide basic control structures (cf. (Winskel, 1993)). Finally, (tr) converts a value into a computation by simultaneously abstracting over time and restricting the duration of the computation to the union of all those intervals on which holds throughout. Note that the resulting interval can thus be either open or closed on the right. Intuitively, one can see (tr) as a ‘continuous’ while-loop since the trajectory captured by runs as long as the condition is satisfied. For example, the computation judgement \Gamma\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,t\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}t\leq 7\colon models the passage of time and runs whilst the latter does not surpass seven time units. This behaviour captures the essence of hybrid behaviour (Witsenhausen, 1966), which is now accommodated by hybrid automata and Platzer’s differential dynamic logic; our notation ‘’ alludes precisely to this corresponding operator of the latter framework.
In contrast to fine-grain call-by-value (Levy et al., 2002), we have no conversions from computations to values, for we do not assume existence of higher order types, which potentially provide a possibility to suspend a program as a value and subsequently execute it, resulting in a computation. Adding these facilities to HybCore can be done standardly, but we refrain from it, as we intend our semantics to be eventually transferable from to more suitable universes, which need not be Cartesian closed, such as the category of topological spaces .
Next we introduce some syntactic conventions for HybCore programs:
- •
We write \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}r with for \operatorname{\mathsf{\!}}\langle y,t\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}(\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,\langle v,t\rangle\\ \,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}\operatorname{\mathsf{snd}}x\leq r);\operatorname{\mathsf{}}\lceil\kern-4.0pt\lceil y\rceil\kern-4.0pt\rceil (assuming that the projection and the predicate are in ). Intuitively, this restricts the trajectory encoded by to the interval .
- •
Sequential composition is right associative, that is, an iterated sequential composition in the form x_{1}\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p_{1};\ldots;x_{n}\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p_{n};q should be parsed as x_{1}\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p_{1};(\ldots;(x_{n}\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p_{n};q)\ldots).
- •
We allow for programs of the form x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p which abbreviate x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\lceil\kern-4.0pt\lceil x\rceil\kern-4.0pt\rceil.
- •
We omit the brackets if they can be easily reconstructed. E.g. x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}x+1 means and thus , by the previous clause (e.g. this is used in Figure 1).
Let us examine two examples of hybrid systems programmable in HybCore.
Example 3.1 (Bouncing ball).
Consider the system of differential equations describing continuous movement of a ball in terms of its height and velocity with being Earth’s gravity. We postulate the corresponding solutions {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}u}}\colon^{2}\times\to and {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}v}}\colon^{2}\times\to in so that {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}u}}(x,y,t) and {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}v}}(x,y,t) are the height and the velocity of the ball at time , assuming and as the corresponding initial values (at time [math]). Let {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}} be \langle{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}u}},{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}v}}\rangle, and then e.g. \operatorname{\mathsf{}}\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}(5,0,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}u\geq 0 encodes the behaviour of the ball starting from the moment when it is dropped from height until it hits the ground. The HybCore program describing the resulting bouncing behaviour with infinitely many iterations is as follows:
\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}\langle 5,0\rangle
\operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}}}\>{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}\>\{
\begin{array}[]{@{\quad}r@{\;}l}\operatorname{\mathsf{}}\langle u,v\rangle&\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{ball}}(u,v,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}u\geq 0;\\[3.44444pt] \langle u,v\rangle&\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}\langle u,-0.5v\rangle\end{array}
The movement thus programmed is depicted in Figure 3(a). Note that the height is decreasing, tending to zero in the limit. This requires infinitely many iterations, but the process is finite in terms of physical time, because each iteration gets progressively shorter. This yields an example of Zeno behaviour (Goncharov et al., 2018a; Höfner and Möller, 2011; Nakamura and Fusaoka, 2005), which is often dismissed in the hybrid systems literature, as justified by the fact that such behaviour is on the one hand not computationally realisable, and on the other hand notoriously difficult to analyse. Here, we commit ourselves to the task of faithful modelling Zeno behaviour as an inherent feature of physical, biological and other systems.
Example 3.2 (A simplistic cruise controller).
The following program implements a simplistic cruise controller programmed in HybCore:
\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}\langle 0,0\rangle
\operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}}}\>{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}\>\{
\begin{array}[]{@{\quad}r@{\;}l}\operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}if}}}\>v\leq 120~{}\operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}then}}}\>\operatorname{\mathsf{}}\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}&t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{accel}}(u,v,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}3\\[3.44444pt] \operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}else}}}\>\operatorname{\mathsf{}}\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}&t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{brake}}(u,v,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}3\end{array}
Here, {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{accel}}=\langle{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{accel}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}u}},{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{accel}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}v}}\rangle and {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{brake}}=\langle{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{brake}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}u}},{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{brake}}_{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}v}}\rangle refer to the solutions of the systems of differential equations , correspondingly. As the names suggest, {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{accel}} is responsible for the acceleration, while {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{brake}} is responsible for braking. Each iteration in the loop has the duration of three time units (due to the expression ‘{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\>3’); at the beginning of each iteration the controller checks the current velocity, leading the vehicle to the target velocity of km/h. This produces the oscillation pattern depicted in Figure 3(b).
Example 3.3 (Signal sampling).
The program below discretises a continuous-time signal \mathit{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}signal}}\colon\times\to. The variable , which is valued on natural numbers , represents the sampled signal, and the operation rounds the input up to the closest natural number.
\langle u,v\rangle\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}\langle 0,0\rangle
\operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}}}\>{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}\>\{
\begin{array}[]{@{\quad}r@{\;}l}\operatorname{\mathsf{}}\langle u,v\rangle&\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,\langle\mathsf{round}(v),\mathit{{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}signal}}(v,t)\rangle\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}1\end{array}
The resulting computation when projected to the second Cartesian factor yields the original signal, while the same computation projected to the first Cartesian factor yields the corresponding discretised, or sampled signal. Here, we used the unit as a sampling interval.
4. Operational Duration Semantics
We now introduce an operational duration semantics of HybCore, both in small-step and big-step styles. In order to help build intuitions, we begin with the former. Duration semantics abstract away from the run-time behaviour of the program (i.e. its trajectory), and only provide the execution time and possibly the final result (i.e. the endpoint of the trajectory). The small-step judgements are defined on closed computations terms and have the form,
[TABLE]
meaning that one-step reduces to in time , or one-step diverges in time respectively, where only in the latter case the relevant time interval may be infinite. The derivation rules for these judgements are shown in Figure 4. These rules are essentially obtained by extending the standard call-by-value small-step semantics (Winskel, 1993) by decorating the transitions with durations. The most distinctive rules are the ones addressing the abstraction construct (tr): intuitively, the resulting durations are computed as the lengths of the largest interval on which the trajectory produced by satisfies the predicate throughout. The terminal value is available precisely when the trajectory produced by satisfies the predicate at . For example, for {\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{line}}\colon\times\to the global solution of the differential equation , the program \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{line}}(0,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}x\leq 1 one-step reduces to in time , and on the other hand, \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,{\color[rgb]{1,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{1,0,1}\pgfsys@color@cmyk@stroke{0}{1}{0}{0}\pgfsys@color@cmyk@fill{0}{1}{0}{0}\mathit{line}}(0,t)\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}x<1 one-step diverges in time .
Note a certain arbitrariness in defining instantaneous transitions \mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.51pt{\vbox to9.89pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.69444pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.69444pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}. E.g. we could just as well use the following slightly more economical rule for reducing \operatorname{\mathsf{{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}if}\,}}{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}then}\,}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}else}\,}}q:
[TABLE]
This would however not change the principal fact of pervasiveness of intermediate instantaneous transitions, as they are also triggered by unfolding while-loops, and cannot be completely eliminated from the corresponding rules.
We proceed to introduce the aforementioned big-step duration semantics. It associates a closed computation term either with a pair , consisting of a duration and a (closed) terminal value , or with a (possibly infinite) duration . The latter case occurs e.g. if exhibits Zeno behaviour or more generally if is a while-loop that unfolds infinitely many times. The rules for big-step judgements are given in Figure 5.
Again, we focus only on the least standard rules. In both (tr) and (tr) the duration is identified with the length of the largest interval on which the condition holds throughout, and subsequently each rule verifies if is true at . The rules (seq), (seq) and (seq) capture the fact that durations of subsequent computations add up, unless the terminal value of the first computation is undefined, in which case the total duration of the program is the duration of the first subprogram. This behaviour is inherited inductively by while-loops via (wh)–(wh), and in addition we have a non-inductive case of infinitely many unfoldings of while-loops, as captured by the (infinitary) rule (wh). This allows for computing the duration of the program as the infinite sum .
Remark 2.
The rules (wh) and (wh) directly capture the inductive intuition in the semantics of while-loops, but notably these are the only rules which are not structural, in the sense that the programs in the premises are not structurally simpler than the corresponding programs in the conclusions. It is easy to see that (wh) and (wh) can be equivalently replaced by the families of structural rule schemes presented in Figure 6 in the style of (wh).
Proposition 4.1 (Determinacy).
The semantics in Figure 5 is deterministic, that is for every closed computation term , there is (exclusively!) at most one judgement of the form or derivable using the rules of Figure 5.
Proof.
The proof runs routinely by induction over the number of computation constructs (bottom part of Figure 2) in and by inspecting the rules in Figure 5, except for (wh) and (wh), which must be replaced by their structural analogues per Remark 2. ∎
In order to relate small-step with big-step semantics, we define p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to15.88pt{\vbox to11.32pt{\pgfpicture\makeatletter\hbox{\hskip 1.37997pt\lower-1.83997pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{{ {\pgfsys@beginscope{} {} {} {} \pgfsys@moveto{2.29996pt}{0.0pt}\pgfsys@lineto{-1.37997pt}{1.83997pt}\pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@lineto{-1.37997pt}{-1.83997pt}\pgfsys@fill\pgfsys@endscope}} }{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q and p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} inductively by the following small-step judgements and closure rules:
[TABLE]
[TABLE]
The binary relation \mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} is then essentially the standard transitive closure, modulo the fact that durations are added along the way. The unary relation \mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} is derivable both from finite and infinite numbers of premises, e.g. in the Zeno behaviour case, as in Example 3.1.
Theorem 4.2.
For every closed computation term , p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil iff and p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} iff .
The claimed equivalence is entailed by the following Lemmas 4.3-4.7.
Lemma 4.3.
For any two closed programs ,
- (1)
unless , the judgement p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q is derivable iff there exists a finite chain p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\dots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.29pt{\vbox to10.74pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.47752pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.47752pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q such that ; 2. (2)
the judgement p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} is derivable iff
- (a)
either p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}\ldots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.29pt{\vbox to10.74pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.47752pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.47752pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to16.87pt{\vbox to11.27pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{17.05531pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{17.05531pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.80745pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} (with meaning p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.52257pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.52257pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}), 2. (b)
or p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots,
with suitable and where .
Note that is not one-step reducible, and hence \lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.51pt{\vbox to9.89pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.39445pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.39445pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.39445pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil is the only provable judgement of the form \lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q.
Lemma 4.4.
For every closed program , implies {p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil}.
Proof.
We proceed by induction over the derivation of . Note that every rule in Figure 5, whose conclusion is of the form , has as premise big-step judgements only the judgements in the same form. In order to obtain a proof, we thus need to check the induction step for every rule. This is straightforward for all the rules, except for the ones for sequential composition and for while-loops. We consider the ones that apply, in detail.
(seq) The premises read as and , hence, by induction, p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil, q[v/x]\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil. If then and \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.51pt{\vbox to9.89pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.69444pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.69444pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}q[v/x]\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil, and hence \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to23.27pt{\vbox to10.55pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{22.15825pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{22.15825pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{22.15825pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{3.08856pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil, as desired. Otherwise, by Lemma 4.3,
[TABLE]
where p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.29pt{\vbox to10.74pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.47752pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.47752pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil, . Hence, again \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to19.94pt{\vbox to10.55pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{18.825pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{18.825pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{18.825pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{3.08856pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil. (wh) The premises imply by induction hypothesis p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil. The case is as in the previous clause. Otherwise, we have
[TABLE]
with p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.29pt{\vbox to10.74pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.47752pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.47752pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil, , which yields the derivation \operatorname{\mathsf{}}{x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p}\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil.
(wh) We obtain p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil and \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}q[w/x]\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.28912pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.28912pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.28912pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil u\rceil\kern-4.0pt\rceil from the rule premises. After disregarding the obvious case , we obtain similarly to the previous clause
[TABLE]
Hence \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to23.34pt{\vbox to10.55pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{22.2248pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{22.2248pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{22.2248pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{3.08856pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil u\rceil\kern-4.0pt\rceil, and we are done. ∎
Lemma 4.5.
For every closed program , p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil implies .
Proof.
It suffices to show that p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.79688pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.79688pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime} with imply , from which the claim follows by obvious induction. The latter statement in turn follows by induction over the derivation of p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.79688pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.79688pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime} using the rules in Figure 4. ∎
We consider the proofs of the analogous results in the non-terminating cases in more detail.
Lemma 4.6.
For every closed program , implies p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\,.
Proof.
The proof runs analogously to the proof of Lemma 4.4 and occasionally calls the latter. Again, we restrict ourselves to verifying the rules for sequential composition and while-loops and make free use of Lemma 4.3.
(seq) The premise of the rule implies p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} by induction hypothesis. We proceed by case distinction.
- •
p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime} and p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} where . Then \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p^{\prime};\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}, and hence \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}
- •
p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots, . Then
[TABLE]
and hence again \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}.
(seq) Using Lemma 4.4 and the induction hypothesis, the rule premises imply p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil and q[v/x]\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}. After disregarding the obvious case , the former implies \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}\lceil\kern-4.0pt\lceil v\rceil\kern-4.0pt\rceil;\operatorname{\mathsf{}}q, and therefore, the requisite reduction is constructed as follows:
[TABLE]
(wh) The induction hypothesis implies p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}. By case distinction:
- •
p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime} and p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} where ; then we obtain \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p^{\prime}\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}, and hence \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}
- •
p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots, ; then
[TABLE]
and hence again \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}.
(wh) By applying the induction hypothesis and Lemma 4.4 to the premises, we obtain the judgments p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil and \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}q[w/x]\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.28912pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.28912pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.28912pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}. After disregarding the obvious case , we obtain:
[TABLE]
(wh) Finally, let us consider the case of Zeno behaviour of the while-loop. By applying Lemma 4.3 to the rule premises, we obtain p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to14.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{12.89688pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{12.89688pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{12.89688pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w_{0}\rceil\kern-4.0pt\rceil, and q[w_{i}/x]\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to17.16pt{\vbox to11.29pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{16.0393pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{16.0393pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{16.0393pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{3.82857pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w_{i+1}\rceil\kern-4.0pt\rceil for all . Thus we obtain the following infinite chain
[TABLE]
as desired. ∎
Lemma 4.7.
For every closed program , p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.61pt{\vbox to10.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.49689pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.49689pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\, implies .
Proof.
By Lemma 4.3 (2), we must consider two cases.
(a) p\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.34pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.22258pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.22258pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\, with . It follows by induction over the derivation of p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to11.41pt{\vbox to8.82pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{11.58911pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{11.58911pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{2.6719pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} that . As in the proof of Lemma 4.5, by subsequent induction over the length of the chain p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to12.74pt{\vbox to9.72pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{12.92256pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{12.92256pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.02pt{\vbox to9.42pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.20322pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.20322pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p^{\prime}, we obtain .
(b) p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{2}\ldots, with . We proceed by induction over the number of computation constructs in . Unless, is a sequential composition or a while-loop, we can apply the induction hypothesis to p_{1}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{2}\ldots and thus obtain p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1} with from which the goal follows as in clause (a). Consider the two remaining cases.
Let be \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p^{\prime};\operatorname{\mathsf{}}q. Then, either p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1}^{\prime}\ldots\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.29pt{\vbox to10.74pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.47752pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.47752pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.27469pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w\rceil\kern-4.0pt\rceil, hence
[TABLE]
and we are done by applying the induction hypothesis to the derivation q[w/x]\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to16.87pt{\vbox to11.27pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{17.05531pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{17.05531pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.80745pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots, or there is an infinite chain p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1}^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots, from which we obtain by induction that and therefore , by (seq).
Finally, consider the case p=(\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p^{\prime}\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}b\operatorname{\mathsf{\,}}\{q\}). If there is an infinite chain p^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1}^{\prime}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\ldots the proof reduces to the induction hypothesis analogously to the case of sequential composition above, but now using the rule (wh). Otherwise, p^{\prime}\mathrel{\raisebox{-0.21529pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to24.48pt{\vbox to15.14pt{\pgfpicture\makeatletter\hbox{\hskip-1.88333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{1.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{23.36238pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }\pgfsys@beginscope\pgfsys@invoke{ }{\pgfsys@setlinewidth{0.6pt}\pgfsys@invoke{ }\definecolor[named]{pgfstrokecolor}{rgb}{1,1,1}\pgfsys@color@gray@stroke{1}\pgfsys@invoke{ }\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{23.36238pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{23.36238pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.88887pt}{7.67197pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}\lceil\kern-4.0pt\lceil w_{1}\rceil\kern-4.0pt\rceil for suitable and . We then iterate this case distinction, which results in a sequence of the form
[TABLE]
which either terminates if for some , produces an infinite chain, yielding a proof by reduction to the induction hypothesis, or does not terminate. In the latter case, by Lemma 4.5, , and for every . Therefore, by (wh). ∎
Since for every closed computation term we can build a possibly non-terminating reduction chain p\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}}p_{1}\mathrel{\raisebox{-0.43057pt}{\kern 3.0pt\mathrel{\leavevmode\hbox to13.01pt{\vbox to11.04pt{\pgfpicture\makeatletter\hbox{\hskip-2.38333pt\lower-0.6611pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{{{}}{{{}{}}}} {{}{}}{}{}{}{{{}{}}}{{}}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{2.58333pt}{0.43056pt}\pgfsys@lineto{13.19687pt}{0.43056pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{13.19687pt}{0.43056pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}}\hbox{\hbox{\tiny}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{6.02776pt}{3.57413pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{\tiny{\kern 2.0pt\rule{0.0pt}{0.0pt}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}\pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}\lxSVG@closescope\endpgfpicture}}}\kern 3.0pt}} (by applying the rules in Fig. 4), we immediately obtain
Corollary 4.8 (Totality).
For any closed computation term , precisely one of the judgements or is derivable with the rules in Figure 5.
5. Denotational Duration Semantics
Next we build a syntax-independent, denotational counterpart to the operational semantics previously introduced. In order to achieve this, we will take advantage of the general principles of fine-grain call-by-value (Levy et al., 2002; Geron and Levy, 2016; Goncharov et al., 2018c), and thus introduce a monad for the duration semantics. Recall that denotes the Kleisli lifting of a monad , the set + denotes the non-negative real numbers and the set denotes the non-negative real numbers with infinity.
Definition 5.1 (Duration monad).
The duration monad is defined by the following data: , , and
[TABLE]
It is straightforward to check that is a monad using the fact that + is a monoid and that is a monoid +-module.
Theorem 5.2.
* is a monad.*
Proof.
In every distributive category (Cockett, 1993), specifically , for every monoid and every monoid -module (i.e. an object with a monoid action satisfying obvious equations), canonically extends to a (strong) monad (Coumans and Jacobs, 2013). We regard this as folklore. With being the initial object, is known as the writer monad or as the (monoid) action monad. In that sense, the duration monad can be identified as a generalised writer monad with + viewed as a monoid under addition and (which is not initial) viewed as a monoid module under addition of possibly extended real numbers. ∎
Now, to be able to interpret while-loops over , we need to equip it with an iteration operator ,
[TABLE]
Moreover, we expect to satisfy the classical laws of iteration (Bloom and Ésik, 1993), i.e. to be (completely) Elgot.
Definition 5.3 (Elgot monads (Elgot, 1975; Adámek
et al., 2011)).
A strong monad on a distributive category is a (complete) Elgot monad if it is equipped with an iteration operator sending each to and satisfying the following principles:
- •
fixpoint law: ;
- •
naturality: for , ;
- •
codiagonal: for ;
- •
uniformity: implies for , and ;
- •
strength: for any .
A standard strategy to define an Elgot monad structure on would be to enrich (the Kleisli category of) over complete partial orders, and then compute as the least fixpoint of the continuous map . However, this would not compatible with our duration semantics, because the iteration operator of must capture non-inductive behaviours of while-loops postulated in (wh), the latter implying that even divergent computations produce meaningful durations. We thus proceed to make into an Elgot monad in a different way. To that end we will first introduce a fine-grained version of , roughly mimicking the small-step duration semantics.
Definition 5.4 (Layered duration monad, Guardedness).
Let , which extends to a monad by general results (Uustalu, 2003). On this monad takes a concrete particularly simple form: , , and
[TABLE]
A morphism is called guarded when for every if then the word is non-empty. Guardedness of intuitively means that the iteration operator applied to successively produces durations as the loop unfolds, in other words that the loop is progressive. This provides a fine-grained semantics of divergence, for every infinite stream of durations thus obtained contributes as a specific divergent behaviour.
Proposition 5.5.
For a guarded morphism , there is a unique , satisfying the fixpoint equation .
Proof.
In the coalgebraic form, this was shown in previous work for a large class of monads (Uustalu, 2002; Milius, 2005) including . ∎
We now render as a quotient of and derive a (total) Elgot iteration operator on from the partial one on , as follows. Note that every is a quotient of under the “weak bisimulation” relation generated by the clauses,
[TABLE]
Then let be the emerging quotienting map:
[TABLE]
and let be defined in the following way:
[TABLE]
Note that by definition, for any , is guarded.
Theorem 5.6.
The following is true for and :
- (1)
every is a left inverse of the corresponding ; 2. (2)
* is a monad morphism;* 3. (3)
for any guarded , .
Proof.
(1) is easy to see by definition, and (2) is essentially due to the fact that countable summation of non-negative real numbers is associative. Let us check (3). For every , there are three possibilities:
- (a)
there is a finite sequence of elements in such that for , and ; 2. (b)
there is a finite sequence of elements in such that for , and ; 3. (c)
there is an infinite sequence of elements in such that for and
These three cases fully describe how the iteration operator of works. In each case, it is easy to check the identity in question: e.g. in (a) \rho f^{\dagger}(x_{0})=\rho\langle w_{0}\ldots w_{n},\operatorname{}\linebreak[1]y\rangle=\bigl{\langle}\sum w_{0}+\ldots+\sum w_{n},\operatorname{}\linebreak[1]y\bigr{\rangle} and then \rho(\upsilon\rho f)^{\dagger}(x_{0})=\rho\bigl{\langle}\sum w_{0}\ldots\sum w_{n},\operatorname{}\linebreak[1]y\bigr{\rangle}=\bigl{\langle}\sum w_{0}+\ldots+\sum w_{n},\operatorname{}\linebreak[1]y\bigr{\rangle} where by we mean the sum of elements of the vector . The remaining cases (b) and (c) are handled analogously. ∎
We immediately obtain the following corollary of Theorem 5.6.
Corollary 5.7.
* is an Elgot monad with the Elgot iteration sending to .*
Proof.
In the terminology of (Goncharov et al., 2017), Theorem 5.6 implies that the pair is an iteration-congruent retraction. Thus, by (Goncharov et al., 2017, Theorem 21), is indeed an Elgot monad under the iteration operator described above. ∎
Note that the Elgot iteration of adds the durations produced by a map along the respective iteration process, the latter realised by feeding back to values of type it produces. For example, if then ; if and then .
Using Elgot iteration provided by Corollary 5.7, we can now define a denotational semantics of HybCore in the following way. We identify the types in (1) with what they denote in , i.e. natural numbers, real numbers, the one element set , the two-element set and Cartesian products respectively. For a variable context , let (specifically, if is empty). We will use to refer to the tuples where . The semantics and are respectively maps of type and , inductively defined in Figure 7.
Theorem 5.8 (Soundness and Adequacy).
Given a computation judgement ,
[TABLE]
Proof.
First we establish soundness, which means simultaneously that implies and implies . By induction over the derivation length in the proof system of Figure 5 this amounts to checking that every rule preserves these implications. This is done routinely for most of the rules. Consider some instances.
(tr) The assumption reads as \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}w\Downarrow d,v[d/t]. The premises of the rule imply
[TABLE]
hence d=\sup\{e\mid\forall s\in[0,e].\,w[v[s/t]/x]={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}\}. Assuming and , the latter can be rewritten as
[TABLE]
The left premise of (tr) also implies that b(h(d))={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}}, and hence the corresponding rule in Figure 7 produces \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}w\colon A\rrbracket=\langle d,h(d)\rangle as required.
(tr) The assumption reads as \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}w\Downarrow d. Assuming and , like in the previous clause, the premises of the rule imply , however, now b(h(d))={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{false}}}. By using the same rule from Figure 7, we obtain \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}w\colon A\rrbracket=d.
(wh) Suppose that \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\Downarrow d+r,u is obtained from the respective premises of (wh) and , , . We obtain that for some (by induction), b(w)={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}} and \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}q[w/x]\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\colon A\rrbracket=\langle r,\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}u\colon A\rrbracket\rangle (by induction). Let
[TABLE]
and note that , which means that , and for suitable , and . Therefore, using the fixpoint identity for , \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\colon A\rrbracket=(f^{\dagger})^{\star}(h)=(f^{\dagger})^{\star}(d,w)=[\eta,f^{\dagger}]^{\star}f^{\star}(d,w)=(f^{\dagger})^{\star}(d+e,\operatorname{}\linebreak[1]c)=\langle d+e+e^{\prime},\operatorname{}\linebreak[1]\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}u\colon A\rrbracket\rangle=\langle d+r,\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}u\colon A\rrbracket\rangle and we are done.
(wh) Suppose that \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{q\}\Downarrow\sum\nolimits_{i}d_{i} is obtained from the premises , , and v[w_{i}/x]={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}} by (wh). By induction, , and for every , where . Note also that b(\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}w_{i}\colon A\rrbracket)={\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}} for every with . Let again
[TABLE]
and observe that . Now, by definition of of , , and therefore in , . Therefore, \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\\ \operatorname{\mathsf{\,}}\{q\}\colon A\rrbracket=(f^{\dagger})^{\star}(d_{0},\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}w_{0}\colon A\rrbracket)=d_{0}+f^{\dagger}(\llbracket\operatorname{-\!-}\vdash_{\mathsf{v}}w_{0}\colon A\rrbracket)=\sum\nolimits_{i}d_{i}, as desired.
The remaining adequacy direction reads as follows: implies and implies . In order to obtain it by induction over derivations in Figure 7, we slightly strengthen the induction invariant as follows: for every substitution sending variables from to values of corresponding types, implies and implies . It is then verified routinely that every rule in Figure 7 preserves this invariant. ∎
6. Evolution Semantics
Building on the duration semantics of the previous section, we will now present a big-step evolution operational semantics for hybrid programs, which incorporates the former as a critical ingredient. In particular, both semantics will be needed for providing the aforementioned adequacy result. The new semantics relates a closed computation term with its trajectory, i.e. the range of time-indexed values produced by the execution of – recall for instance the bouncing ball and cruise controller described in Section 3. More specifically, the corresponding big-step relation \mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}} connects a closed computation term and a time instant with the value to which evaluates at , in symbols p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v. The corresponding derivation rules are presented in Figure 8. These rules recur to the duration semantic judgements governed by the rules in Figure 5. Unlike duration semantics, evolution semantics is not total: for example, for a given computation , p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v may not be derivable for any and , which yields an empty trajectory for , denotationally a totally undefined function .
Let us discuss the non-obvious rules of this semantics, starting with (seq) which takes infinite families of judgements as premises. This rule is similar to (seq), but in (seq) even if the first computation evaluates to at , we cannot disregard and use in the conclusion, because the return type of need not match the return type of . The evaluation q[v_{t}/x],0\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}w_{t} is required to perform the necessary type conversion. Moreover, the rule premise ensures that for every , also yields a value at [math]. To see why this is necessary, consider the following instance of \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q:
[TABLE]
First observe that for any given time instant the subprogram \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,t\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{true}}} evaluates to , intuitively modelling the passage of time ad infinitum and thus producing a trajectory of infinite duration. On the other hand, the subprogram \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}1\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}\operatorname{\mathsf{false}}} models non-progressive divergence and does not yield a value at any time instant, in particular q[0/x],0\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v for no . Hence the entire program \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q diverges already at [math], as we cannot apply any of the sequential composition rules relative to this time instant. However, q[1/x],0\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}1 and therefore if we did not check previous time instants for divergence (using q[v_{s}/x],0\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}w_{s} for ) we would obtain \operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p;\operatorname{\mathsf{}}q,1\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}1 by the sequential composition rules, meaning that we would not be able to detect divergence of the entire program.
Remark 3.
*The evolution semantics subtly differs from the duration semantics. Specifically, the above example indicates that does not necessarily imply that d=\sup\{t\mid\exists w.\,p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}w\}. *
The main subtlety behind our semantics of while-loops via (wh)–(wh) is that, contrary to standard program semantics, while-loops no longer behave as iterated sequential composition, which would be easily achievable via the rule
[TABLE]
instead of (wh) and similarly for (wh)–(wh). We argue, however, that our rules are more suitable for hybrid programming: the ones corresponding to iterated sequential composition produce undesirable artefacts, e.g. the program
[TABLE]
would not evaluate under these rules at any time instant (we would not be able to apply any of these rules since at every time instant we would be lacking a terminating condition) and the same would apply to the bouncing ball in Example 3.1 and other systems involving infinite while-loops or Zeno behaviour. Intuitively, the reader may see the adopted rules as the ones corresponding to testing the condition of the while-loop only at the end of the input trajectory whilst assuming that the other points evaluate to false; the rules corresponding to iterated sequential composition would, on the other hand, correspond to testing the condition of the while-loop at all points of the input trajectory.
The following lemma is obtained by induction over the derivation of the corresponding computation judgement by the rules in Figure 8.
Lemma 6.1.
For every closed computation term , the set
[TABLE]
is downward closed.
To relate the operational semantics with its denotational counterpart, recall the hybrid monad from our previous work (Goncharov et al., 2018b) (in a slightly reformulated equivalent form). Intuitively, for every set , the elements of are trajectories in the sense discussed above and Kleisli composition is essentially used for concatenating trajectories whilst simultaneously tracking divergence along the computation. In what follows we use the superscript notation explained in Section 2.
Definition 6.2 (Hybrid monad).
The hybrid monad is defined as follows. Let
[TABLE]
i.e. the set contains three types of trajectory: closed convergent , closed divergent and open divergent (notably, there are no “open convergent” ones), e.g., contains the empty trajectory , which we denote by . Given , let us write , , , if and otherwise. For a map we will abbreviate the notation to , and similarly for the other cases, namely , and . The monad structure of is then given in the following way: ; for , , let
[TABLE]
. Then is defined by the clauses:
[TABLE]
Intuitively, only the first clause for describes a successful ‘concatenation’ scenario, which assumes that the argument trajectory is closed and additionally ensures that does not yield divergence along the run of . The remaining clauses exhaustively cover divergence scenarios, caused either by or by the argument trajectory. As shown in (Goncharov et al., 2018b), is an Elgot monad. We thus reuse the rules from Figure 7 to define the semantics over by replacing with throughout, except for the rules for (tr) and (wh) which are overridden by those in Figure 9. To cope with the non-standard behaviour of while-loops discussed above, we call on an auxiliary natural transformation , appending to every point of the trajectory a Boolean flag signalling whether the current point is the endpoint, formally:
[TABLE]
Finally, we obtain our main result.
Theorem 6.3 (Soundness and Adequacy).
Given ,
- (1)
p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v* iff , and ;* 2. (2)
p,d\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v* and iff , and .*
The first clause ensures that the correspondence generated by the judgements p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v_{t} yields a trajectory that agrees with the denotational semantics previously presented. The second clause is needed to relate the duration and evolution semantics: both must agree in the evaluation of the last point of the trajectory produced by a program , and naturally both must agree with the corresponding denotational semantics.
The theorem follows from a sequence of lemmas, which we present next. In the rest of the section, we subscript the semantic brackets with and to refer to duration semantics and to evolution semantics correspondingly. The first lemma provides a technical characterization of iterations occurring as the semantics of while-loops.
Lemma 6.4.
Let have the property
[TABLE]
We define by induction as follows: , . Let , and suppose that .
- (1)
If then there exists such that and . 2. (2)
If then there exists such that and .
Proof.
We rely on the fact that is characterized as an iteration-congruent retract of a monad obtained by composing , an iteration-free version of , with the maybe-monad (with ) (Goncharov et al., 2018b). That is, there is a monad morphism , whose components come with right inverses and preserves iteration as follows: . Here, by we refer to the iteration of , which is suitably characterized as the least solution of the fixpoint law. For the sake of the present argument it suffices to know that is obtained from by allowing the trajectories to be partial functions and by imposing the the following constraints:
- •
implies that is defined;
- •
closed divergent trajectories are not in .
The natural transformation sends to and with to where is the extension of to with undefined elements. Conversely, is for total and for partial , in which case is a restriction of to the largest downward closed subset of the domain of definiteness of and and are selected accordingly.
Let . For every , let be defined as follows: (the empty trajectory) and . We use the following property of (Goncharov et al., 2018b, Lemma 25):
[TABLE]
for every for which is defined. Let us define , and note that, by induction, for every , . Therefore we can reformulate (4) as follows:
[TABLE]
In order to obtain the first clause of the lemma, suppose that and . Now and therefore with suitable , , and because is at least as defined as . By (5), for some , . Note that by definition satisfies (3) and for every the trajectory is total. It follows by induction that the same is true for , hence , in particular, and . The second clause is shown analogously. ∎
Next, we check that the duration semantics and the evolution semantics agree in the following sense (cf. Remark 3).
Lemma 6.5.
Given a computation judgement , let . Suppose that and . Then iff and in either case .
Proof Sketch.
The proof runs by induction over the structure of . We restrict to the following three representative cases.
- •
p=(\operatorname{\mathsf{\!}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}q;\operatorname{\mathsf{}}r). Let , , , . Suppose that . Then , which by definition means that
[TABLE]
By induction, and . Hence, again by induction, and . This implies and . By reversing this argument we also obtain the implication in the right-to-left direction.
- •
p=(\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}t.\,v\,\operatorname{\mathsf{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\&}\,}}w). By definition,
[TABLE]
where and , . The assumption implies , hence we reduce to
[TABLE]
and the claim of the lemma holds trivially.
- •
p=(\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}q\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}v\operatorname{\mathsf{\,}}\{r\}). By definition,
[TABLE]
where , and
[TABLE]
Suppose that . Then, by definition of , where
[TABLE]
Consider the sequence
[TABLE]
formed as follows: if . That is, every triple is obtained by applying the above expression under dagger to as long as is true. Note that this process cannot produce triples with the first element different than , because this would mean that the loop diverges after finitely many iterations, returning a triple different from . By Lemma 6.4 (2), the sequence (6) is necessarily finite. Hence, by induction hypothesis for every , from which we obtain , as desired.
For the converse, suppose that . By definition of iteration in , this means that the loop in is unfolded finitely many times, i.e. , and , , for suitable , and , . By induction hypothesis, , for and for every . Using the above expression for and the assumption that , we obtain that . ∎
The following lemma essentially captures the soundness direction of Theorem 6.3.
Lemma 6.6.
Given ,
- (1)
if p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v then , and ; 2. (2)
if p,d\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v and then , and .
Proof.
First, let us argue that for a fixed , (1) implies (2). Indeed, p,d\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v by the first clause implies that , and by Theorem 5.8, . By Lemma 6.5, and .
The proof of (1) is now obtained analogously to the proof of Theorem 5.8, by induction over the derivation p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v in the proof system of Figure 8. We occasionally need to call both (1) and (2) in the induction step, but, as we argued (1) implies (2) for every specific . Consider, e.g. the rule
[TABLE]
in detail. By induction hypothesis, , , , , . Now, by definition, and using Lemma 6.1,
[TABLE]
where , and therefore and
[TABLE]
as desired. ∎
The following lemma essentially captures the adequacy direction of Theorem 6.3.
Lemma 6.7.
If and then p,t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v for some .
Proof Sketch.
The proof is analogous to the corresponding fragment of the proof of Theorem 5.8. Let us consider the case of while-loops, which is the trickiest one. That is, we have to show that \llbracket\operatorname{-\!-}\vdash_{\mathsf{c}}\operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}b\operatorname{\mathsf{\,}}\{q\}\colon A\rrbracket_{\mathbb{H}}=\langle\alpha,d,e\rangle and imply that \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}b\operatorname{\mathsf{\,}}\{q\},t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v for some . By expanding the assumption we obtain
[TABLE]
where , and . If or , the above equation yields , and and we obtain the requisite judgement using the induction hypothesis either by (wh) or by (wh). The same considerations apply if . We proceed under the assumption that and . Consider the sequence
[TABLE]
iteratively constructed as follows: and are defined as long as and is true. If any of the latter conditions eventually fails, the sequence (7) terminates resulting in for some . We then construct the requisite derivation of \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}b\operatorname{\mathsf{\,}}\{q\},t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}v by calling the induction hypothesis. If the sequence (7) is infinite, still, by Lemma 6.4 (1), for some , and . Again, by induction, we can construct a derivation of the judgement \operatorname{\mathsf{}}x\mathrel{{\color[rgb]{0.10,0.5,0.36}\definecolor[named]{pgfstrokecolor}{rgb}{0.10,0.5,0.36}\coloneqq}}p\operatorname{\mathsf{\,{\color[rgb]{0.8,0.4,0.23}\definecolor[named]{pgfstrokecolor}{rgb}{0.8,0.4,0.23}while}\,}}b\operatorname{\mathsf{\,}}\{q\},t\mathrel{\scalebox{0.6}[1.05]{\Ddownarrow}}e_{n}^{t-d_{0}-\ldots-d_{n}}. ∎
Finally, we can prove the soundness and adequacy theorem that was previously mentioned.
Proof (Theorem 6.3).
The Lemmas 6.6, 6.7 and 6.5 jointly imply the theorem as follows. The left-to-right directions for both clauses are already in Lemma 6.6. For the right-to-left direction of the first clause, Lemma 6.7 produces some value , which, again by the soundness direction must be the one for which . For the right-to-left direction of the second clause we additionally use Lemma 6.5.
∎
7. Conclusions and Further Work
Our present work is a result of an ongoing effort to establish solid semantic foundations for hybrid computation. More specifically, here we complement our previous work on denotational models (Neves et al., 2016; Goncharov et al., 2018a, b) in terms of hybrid monads, with a corresponding operational semantics and connect both styles of semantics by a soundness and adequacy theorem. The central ingredient of our framework is a hybrid, call-by-value while-language HybCore, which we put forward as syntactic means for capturing the essence of hybrid computation, subsequently study it, and use as basis of future, more complex hybrid programming languages. The task of formulating an adequate operational semantics turned out to require a sophisticated route via an auxiliary lightweight duration semantics, and we regard the fact of success, i.e. the fact that the term “adequate operational semantics” can actually be sensibly interpreted in the hybrid setting, as a striking outcome of this work.
HybCore provides a minimal framework combining the basic and uncontroversial features of hybrid computation with clear and principled semantic foundations. We plan to use it both as a stepping stone and as a yardstick in further work. The fact that HybCore purposefully combines the classical view of (instantaneous) computations – which either succeed immediately or silently diverge (e.g. variable assignments in a loop) – and processes extended over real-time, makes the operational semantics of HybCore particularly distinct, specifically, the rules generally require continuum-size numbers of premises, which is needed to ensure the integrity of the resulting trajectories. This kind of complexity vanishes when restricting to progressive semantics, which is obtained by forbidding empty trajectories. The submonad of that arises from this restriction, was studied in (Goncharov et al., 2018a) and enjoys better properties than ; we expect our adequacy result to restrict accordingly. This task is however not entirely trivial, as it requires a considerable adaptation of the language to keep track of progressiveness of terms, yet a systematic approach to this issue was proposed recently (Goncharov et al., 2018c).
As indicated in the introduction, the use of monads gives access to various generic scenarios for combining hybridness with other effects, specifically via universal constructions and monad transformers. One generic construction that can be applied to is the generalized coalgebraic resumption monad transformer (Goncharov et al., 2018d) sending an endofunctor to the coalgebra for a given endofunctor , which can be chosen suitably for modelling interactive/concurrent features, e.g. corresponds to automata or process algebra-style actions ranging over . By the abstract results in (Goncharov et al., 2018d) for an Elgot monad , canonically extends to an Elgot monad , which is indeed the case for . A disciplined way of adding further effects to HybCore is by resorting to Plotkin and Power’s generic effects (Plotkin and Power, 2001). E.g. for binary non-determinism, we would need a coin-tossing primitive for choosing a control branch non-deterministically, yielding a non-deterministic choice operator in the following way (a similar approach applies e.g. to probabilistic choice):
[TABLE]
Denotationally, in order to interpret such extensions of HybCore we need to modify by applying suitable monad transformers, in particular, we plan to extend previous work on combining iteration-free versions of with other monads (Dahlqvist and Neves, 2018). Our commitment to the language of categorical constructions raises hopes that the presented developments can be carried over to categories other than and more suitable for analysing topological aspects of hybrid dynamics, such as stability of hybrid behaviour under input perturbations. E.g. the construction of the duration monad as a quotient of the corresponding layered duration monad can be instantly reproduced in the category of topological spaces, therefore inducing a necessary topologization in a canonical way. It remains an important goal of further work to provide an analogous treatment for the hybrid monad , possibly by introducing a layered hybrid monad whose quotient would be . Our long-term goal is to extend HybCore to a higher-order hybrid language with general recursion.
Acknowledgements.
The first author would like to acknowledge the support of German Research Foundation under grant GO 2161/1-2. The second author would like to acknowledge the support of ERDF – European Regional Development Fund through the Operational Programme for Competitiveness and Internationalisation - COMPETE 2020 Programme and by National Funds through the Portuguese funding agency, FCT - Fundação para a Ciência e a Tecnologia, within project POCI-01-0145-FEDER-030947.
The reference list from the paper itself. Each links out to its DOI / PubMed record.
- 1(1)
- 2Abramsky (2014) Samson Abramsky. 2014. Intensionality, Definability and Computation. In Johan van Benthem on Logic and Information Dynamics , Alexandru Baltag and Sonja Smets (Eds.). Springer, 121–142.
- 3Adámek et al . (2011) Jiří Adámek, Stefan Milius, and Jiří Velebil. 2011. Elgot theories: a new perspective of the equational properties of iteration. Math. Struct. Comput. Sci. 21, 2 (2011), 417–480.
- 4Alur (2015) Rajeev Alur. 2015. Principles of Cyber-Physical Systems . MIT Press.
- 5Alur et al . (1993) Rajeev Alur, Costas Courcoubetis, Thomas A. Henzinger, and Pei-Hsin Ho. 1993. Hybrid Automata: An Algorithmic Approach to the Specification and Verification of Hybrid Systems. In Workshop on the Theory of Hybrid Systems, Denmark. 1992 (Lecture Notes in Computer Science) , Robert L. Grossman, Anil Nerode, Anders P. Ravn, and Hans Rischel (Eds.), Vol. 736. Springer, 209–229.
- 6Awodey (2010) Steve Awodey. 2010. Category Theory . OUP Oxford.
- 7Bloom and Ésik (1993) Stephen Bloom and Zoltán Ésik. 1993. Iteration theories: the equational logic of iterative processes . Springer.
- 8Broman et al . (2012) David Broman, Edward A. Lee, Stavros Tripakis, and Martin Törngren. 2012. Viewpoints, formalisms, languages, and tools for cyber-physical systems. In MPM@Mo DELS’12: Multi-Paradigm Modeling, 6th International Workshop, Innsbruck, Austria, October 1-5, 2012 , Cécile Hardebolle, Eugene Syriani, Jonathan Sprinkle, and Tamás Mészáros (Eds.). ACM, 49–54.
