The Dynamic Geometry of Interaction Machine: A Call-by-need Graph Rewriter
Koko Muroya, Dan R. Ghica

TL;DR
This paper introduces the Dynamic GoI Machine (DGoIM), a graph rewriting abstract machine that efficiently implements call-by-need evaluation for the lambda calculus by balancing token passing and graph rewriting.
Contribution
It presents a novel token-passing abstract machine that rewrites graphs to implement call-by-need evaluation with certified time efficiency.
Findings
DGoIM can implement call-by-need evaluation.
The machine balances space and time costs effectively.
DGoIM is classified as efficient per Accattoli's taxonomy.
Abstract
Girard's Geometry of Interaction (GoI), a semantics designed for linear logic proofs, has been also successfully applied to programming language semantics. One way is to use abstract machines that pass a token on a fixed graph along a path indicated by the GoI. These token-passing abstract machines are space efficient, because they handle duplicated computation by repeating the same moves of a token on the fixed graph. Although they can be adapted to obtain sound models with regard to the equational theories of various evaluation strategies for the lambda calculus, it can be at the expense of significant time costs. In this paper we show a token-passing abstract machine that can implement evaluation strategies for the lambda calculus, with certified time efficiency. Our abstract machine, called the Dynamic GoI Machine (DGoIM), rewrites the graph to avoid replicating computation, using…
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.
The Dynamic Geometry of Interaction Machine:
A Call-by-need Graph Rewriter
Koko Muroya and Dan Ghica
University of Birmingham
UK
Abstract
Girard’s Geometry of Interaction (GoI), a semantics designed for linear logic proofs, has been also successfully applied to programming language semantics. One way is to use abstract machines that pass a token on a fixed graph along a path indicated by the GoI. These token-passing abstract machines are space efficient, because they handle duplicated computation by repeating the same moves of a token on the fixed graph. Although they can be adapted to obtain sound models with regard to the equational theories of various evaluation strategies for the lambda calculus, it can be at the expense of significant time costs. In this paper we show a token-passing abstract machine that can implement evaluation strategies for the lambda calculus, with certified time efficiency. Our abstract machine, called the Dynamic GoI Machine (DGoIM), rewrites the graph to avoid replicating computation, using the token to find the redexes. The flexibility of interleaving token transitions and graph rewriting allows the DGoIM to balance the trade-off of space and time costs. This paper shows that the DGoIM can implement call-by-need evaluation for the lambda calculus by using a strategy of interleaving token passing with as much graph rewriting as possible. Our quantitative analysis confirms that the DGoIM with this strategy of interleaving the two kinds of possible operations on graphs can be classified as “efficient” following Accattoli’s taxonomy of abstract machines.
1 Introduction
1.1 Token-passing Abstract Machines for -calculus
Girard’s Geometry of Interaction (GoI) [16] is a semantic framework for linear logic proofs [15]. One way of applying it to programming language semantics is via “token-passing” abstract machines. A term in the -calculus is evaluated by representing it as a graph, then passing a token along a path indicated by the GoI. Token-passing GoI decomposes higher-order computation into local token actions, or low-level interactions of simple components. It can give strikingly innovative implementation techniques for functional programs, such as Mackie’s Geometry of Implementation compiler [20], Ghica’s Geometry of Synthesis (GoS) high-level synthesis tool [12], and Schöpp’s resource-aware program transformation to a low-level language [25]. The interaction-based approach is also convenient for the complexity analysis of programs, e.g. Dal Lago and Schöpp’s IntML type system of logarithmic-space evaluation [7], and Dal Lago et al.’s linear dependent type system of polynomial-time evaluation [5, 6].
Fixed-space execution is essential for GoS, since in the case of digital circuits the memory footprint of the program must be known at compile-time, and fixed. Using a restricted version of the call-by-name language Idealised Algol [13] not only the graph, but also the token itself can be given a fixed size. Surprisingly, this technique also allows the compilation of recursive programs [14]. The GoS compiler shows both the usefulness of the GoI as a guideline for unconventional compilation and the natural affinity between its space-efficient abstract machine and call-by-name evaluation. The practical considerations match the prior theoretical understanding of this connection [9].
In contrast, re-evaluating a term by repeating its token actions poses a challenge for call-by-value evaluation (e.g. [11, 24, 18, 3]) because duplicated computation must not lead to repeated evaluation. Moreover, in call-by-value repeating token actions raises the additional technical challenge of avoiding repeating any associated computational effects (e.g. [23, 22, 4]). A partial solution to this conundrum is to focus on the soundness of the equational theory, while deliberately ignoring the time costs [22]. However, Fernández and Mackie suggest that in a call-by-value scenario, the time efficiency of a token-passing abstract machine could also be improved, by allowing a token to jump along a path, even though a time cost analysis is not given [11].
For us, solving the the problem of creating a GoI-style abstract machine which computes efficiently with evaluation strategies other than call-by-name is a first step in a longer-range research programme. The compilation techniques derived from the GoI can be extremely useful in the case of unconventional computational platforms. But if GoI-style techniques are to be used in a practical setting they need to extend beyond call-by-name, not just correctly but also efficiently.
1.2 Interleaving Token Passing with Graph Rewriting
A token jumping, rather than following a path, can be seen as a simple form of short-circuiting that path, which is a simple form of graph-rewriting. This idea first occurs in Mackie’s work as a compiler optimisation technique [20] and is analysed in more depth theoretically by Danos and Regnier in the so-called Interaction Abstract Machine [9]. More general graph-rewriting-based semantics have been used in a system called virtual reduction [8], where rewriting occurs along paths indicated by GoI, but without any token-actions. The most operational presentation of the combination of token-passing and jumping was given by Fernández and Mackie [11]. The interleaving of token actions and rewriting is also found in Sinot’s interaction nets [26, 27]. We can reasonably think of the DGoIM as their abstract-machine realisation.
We build on these prior insights by adding more general, yet still efficient, graph-rewriting facilities to the setting of a GoI token-passing abstract machine. We call an abstract machine that interleaves token passing with graph rewriting the Dynamic GoI Machine (DGoIM), and we define it as a state transition system with transitions for token passing as well as transitions for graph rewriting. What connects these two kinds of transitions is the token trajectory through the graph, its path. By examining it, the DGoIM can detect redexes and trigger rewriting actions.
Through graph rewriting, the DGoIM reduces sub-graphs visited by the token, avoiding repeated token actions and improving time efficiency. On the other hand, graph rewriting can expand a graph by e.g. copying sub-graphs, so space costs can grow. To control this trade-off of space and time cost, the DGoIM has the flexibility of interleaving token passing with graph rewriting. Once the DGoIM detects that it has traversed a redex, it may rewrite it, but it may also just propagate the token without rewriting the redex.
As a first step in our exploration of the flexibility of this machine, we consider the two extremal cases of interleaving. The first extremal case is “passes-only,” in which the DGoIM never triggers graph rewriting, yielding an ordinary token-passing abstract machine. As a typical example, the -term is evaluated like this:
\lambda{x}.t$$u
A token enters the graph on the left at the bottom open edge.
A token visits and goes through the left sub-graph .
Whenever a token detects an occurrence of the variable in , it traverses the right sub-graph , then returns carrying the resulting value.
A token finally exits the graph at the bottom open edge.
Step 3 is repeated whenever term needs to be re-evaluated. This strategy of interleaving corresponds to call-by-name reduction.
The other extreme is “rewrites-first,” in which the DGoIM interleaves token passing with as much, and as early, graph rewriting as possible, guided by the token. This corresponds to both call-by-value and call-by-need reductions, the difference between the two being the trajectory of the token. In the case of call-by-value, the token will enter the graph from the bottom, traverse the left-hand-side sub-graph, which happens to be already a value, then visit sub-graph even before is used in a call. While traversing , it will cause rewrites such that when the token exits, it leaves behind the graph of a machine corresponding to a value such that reduces to . The difference with call-by-need is that the token will visit only when is encountered in . In both cases, if repeated evaluation is required then the sub-graph corresponding now to is copied, so that one copy can be further rewritten, if needed, while the original is kept for later reference.
1.3 Contributions
This work presents a DGoIM model for call-by-need, which can be seen as a case study of the flexibility achieved through controlled interleaving of rewriting and token-passing. This is achieved through a rewriting strategy which turns out to be as natural as the passes-only strategy is for implementing call-by-name. The DGoIM avoids re-evaluation of a sub-term by rewriting any sub-graph visited by a token so that the updated sub-graph represents the evaluation result, but, unlike call-by-value, it starts by evaluating the sub-graph corresponding to the function first. We chose call-by-need mainly because of the technical challenges it poses. Adapting the technique to call-by-value is a straightforward exercise, and we discuss other alternative in the Conclusion.
We analyse the time cost of the DGoIM with the rewrites-first interleaving, using Accattoli et al.’s general methodology for quantitative analysis [2, 1]. Their method cannot be used “off the shelf,” because the DGoIM does not satisfy one of the assumptions used in [1, Sec. 3]. Our machine uses a more refined transition system, in which several steps correspond to a single one in loc. cit.. We overcome this technical difficulty by building a weak simulation of Danvy and Zerny’s storeless abstract machine [10] to which the recipe does apply. The result of the quantitative analysis confirms that the DGoIM with the rewrites-first interleaving can be classified as “efficient,” following Accattoli’s taxonomy of abstract machines introduced in [1].
As we intend to use the DGoIM as a starting point for semantics-directed compilation, this result is an important confirmation that no hidden inefficiencies lurk within the fabric of the rather complex machinery of the DGoIM.
2 The Dynamic GoI Machine
2.1 Well-boxed Graphs
The graphs used to construct the DGoIM are essentially MELL proof structures [15] of the multiplicative and exponential fragment of linear logic. They are directed, and built over the fixed set of nodes called “generators” shown in Fig. 2.
A -node is annotated by a natural number that indicates its in-degree, i.e. the number of incoming edges. It generalises a contraction node, whose in-degree is , and a weakening node, whose in-degree is [math], of MELL proof structures. In Fig. 2, a bunch of edges is depicted by a single arrow with a strike-out.
Graphs must satisfy the well-formedness condition below. Note that, unlike the usual approach [15], we need not assign MELL formulas to edges, nor require a graph to be a valid proof net.
Definition 2.1** (well-boxed).**
A directed graph built over the generators in Fig. 2 is well-boxed if:
- •
it has no incoming edges
- •
each -node in comes with a sub-graph of and an arbitrary number of -nodes such that:
- –
the sub-graph (called “-box”) is well-boxed inductively and has at least one outgoing edges
- –
the -node (called “principal door of ”) is the target of one outgoing edge of
- –
the -nodes (called “auxiliary doors of ”) are the targets of all the other outgoing edges of
- •
each -node is an auxiliary door of exactly one -box
- •
any two distinct -boxes with distinct principal doors are either disjoint or nested
Note that a -box might have no auxiliary doors. We use a dashed box to indicate a -box together with its principal door and its auxiliary doors, as in Fig. 2. The auxiliary doors are depicted by a single -node with a thick frame and with single incoming and outgoing arrows with strike-outs. Directions of edges are omitted in the rest of the paper, if not ambiguous, to reduce visual clutter.
2.2 Pass Transitions and Rewrite Transitions
The DGoIM is formalised as a labelled transition system with two kinds of transitions, namely pass transitions and rewrite transitions . Labels of transitions are that stand for “beta,” “substitution,” and “overheads” respectively.
Let be a fixed countable (infinite) set of names. The state of the transition system consists of the following elements:
- •
a named well-boxed graph , that is a well-boxed graph with a naming that assigns a unique name to each node of
- •
a pair called position, of an edge of and a direction
- •
a history stack defined by the grammar , where and is some positive natural number.
- •
a multiplicative stack defined by the BNF grammar .
We refer to a node by its name, i.e. we say “a node ” instead of “a node whose name is .”
A pass transition changes a position using a multiplicative stack, pushes to a history stack, and keeps a named graph unchanged. All pass transitions have the label .
Fig. 3 shows pass transitions graphically, omitting irrelevant parts of graphs. A position is represented by a bullet (called “token”) on the edge together with the direction . Recall that an edge with a strike-out represents a bunch of edges. The transition in the last line of Fig. 3 (where we assume ) moves a token from one of the incoming edges of a -node to the outgoing edge of the node. Node names are indicated wherever needed.
A rewrite transition consumes some elements of a history stack, rewrites a sub-graph of a named graph, and updates a position (or, more precisely, its edge). The label of a rewrite transition is either , or . Fig. 4 shows rewrite transition in the same manner as Fig. 3. Multiplicative stacks are not present in the figure since they are irrelevant. The -node represents some arbitrary node (incoming edges omitted). We can see that no rewrite transition breaks the well-boxed-ness of a graph.
The rewrite transitions (1),(2),(3), and (4) are exactly taken from MELL cut elimination [15]. The rewrite transition (5) is a variant of (1). It acts on a connected pair of a -node and an -node that arises as a result of the transition (6) or (7) but cannot be rewritten by the transition (1). These transitions (6) and (7) are inspired by the MELL cut elimination process for (binary) contraction nodes; note that we assume in Fig. 4.
The rewrite transition (6) in Fig. 4 deserves further explanation. The sub-graph is a copy of the -box where all the names are replaced with fresh ones. The thick -node and -node represent families of -nodes respectively. They are connected to -nodes and in such a way that:
- •
the natural numbers satisfy , and come with a surjection and a function to the set of natural numbers
- •
each -node and each -node are both connected to the -node
- •
each -node has incoming edges whose source is none of the -nodes .
Some rewrite transitions introduce new nodes to a graph. We require that the uniqueness of names throughout a whole graph is not violated by these transitions. Under this requirement, the introduced names and the renaming in Fig. 4 can be arbitrary.
Definition 2.2**.**
We call a state rooted at for an open (outgoing) edge of , if there exists a finite sequence of pass transitions such that the position appears only last in the sequence.
Lem. 2.3(1) below implies that, the DGoIM can determine whether a rewrite transition is possible at a rooted state by only examining a history stack. The rooted property is preserved by transitions.
Lemma 2.3** (rooted states).**
Let be a rooted state at with a (finite) sequence
[TABLE]
History stack represents an (undirected and possibly cyclic) path of the graph connecting edges and . 2. 2.
*If a transition is possible, the open edges of are bijective to those of , and the state is rooted at the open edge corresponding to . *
Proof.
(Sketch.) The proof of the first part is by induction on the length of the sequence of move transitions. For the second part, rewrite transitions modify open edges of a graph in a bijective way. The edge that a state is rooted at can be modified only by the rewrite transitions (1) and (5) involving -nodes. ∎
2.3 Cost Analysis of the DGoIM
The time cost of updating stacks is constant, as each transition changes only a fixed number of top elements of stacks. Updating a position is local and needs constant time, as it does not require searching beyond the next edge in the graph from the current edge. We can conclude all pass transitions take constant time.
We estimate the time cost of rewrite transitions by counting updated nodes. The rewrite transitions (1)–(3) involve a fixed number of nodes, and the transition (7) eliminates one -node. Only the transitions (4) and (6) have non-constant time cost. The number of doors deleted in the transition (4) can be arbitrary, and so is the number of nodes introduced in the transition (6).
Pass transitions and rewrite transitions are separately deterministic (up to the choice of new names). However, both a pass transition and a rewrite transition are possible at some states. We here opt for the following “rewrites-first” way to interleave pass transitions with as much rewrite transitions as possible:
[TABLE]
The DGoIM with this strategy yields a deterministic labelled transition system up to the choice of new names in rewrite transitions. We denote it by DGoIM⇾, making the strategy explicit. Note that there can be other strategies of interleaving although we do not explore them here.
Before we conclude, several considerations about space cost analysis. Space costs are generally bound by time costs, so from our analysis there is an implicit guarantees that space usage will not explode. But if a more refined space cost analysis is desired, the following might prove to be useful.
The space required in implementing a named well-boxed graph is bounded by the number of its nodes. The number of edges is linear in the number of nodes, because each generator has a fixed out-degree and every edge of a well-boxed graph has its source.
Additionally a -box can be represented by associating its auxiliary doors to its principal door. This adds connections between doors to a graph that are as many as -nodes. It enables the DGoIM to identify nodes of a -box by following edges from its principal and auxiliary doors. Nodes in a -box that are not connected to doors can be ignored, since these nodes are never visited by a token (i.e. pointed by a position) as long as the DGoIM acts on rooted states.
Only the rewrite transition (6) can increase the number of nodes of a graph by copying a -box with its doors. Rewrite transitions can copy -boxes and eliminate the -box structure, but they never create new -boxes or change existing ones. This means that, in a sequence of transitions that starts with a graph , any -boxes copied by the rewrite transition (6) are sub-graphs of the graph . Therefore the number of nodes of a graph increases linearly in the number of transitions.
Elements of history stacks and multiplicative stacks, as well as a position, are essentially pointers to nodes. Because each pass/rewrite transition adds at most one element to each stack, the lengths of stacks also grow linearly in the number of transitions.
3 Weak Simulation of the Call-by-Need SAM
3.1 Storeless Abstract Machine (SAM)
We show the DGoIM⇾ implements call-by-need evaluation by building a weak simulation of the call-by-need Storeless Abstract Machine (SAM) defined in Fig. 5. It simplifies Danvy and Zerny’s storeless machine [10, Fig. 8] and accommodates a partial mechanism of garbage collection (namely, transition (13)). We will return to a discussion of garbage collection at the end of this section.
The SAM is a labelled transition system between configurations . They are classified into two groups, namely term configurations and context configurations, that are indicated by annotations respectively. Pure terms (resp. pure values) are terms (resp. values) that contain no explicit substitutions ; we sometimes omit the word “pure” and the overline in denotation as long as that raises no confusion.
Each evaluation context contains exactly one open hole , and replacing it with a term (or an evaluation context ) yields a term (or an evaluation context ) called plugging. In particular an evaluation context replaces the open hole of with and keeps the open hole of .
Labels of transitions are the same as those used for the DGoIM (i.e. , and ). The transition (11), with the label , corresponds to the -reduction where evaluation and substitution of function arguments are delayed. Substitution happens in the transitions (12) and (13), with the label , that replaces exactly one occurrence of a variable. The other transitions with the label , namely , search a redex by rearranging a configuration. The two pluggings and indeed yield exactly the same term.
We characterise “free” variables using multisets of variables. Multisets make explicit how many times a variable is duplicated in a term (or an evaluation context). This information of duplication is later used in translating terms to graphs.
Notation** (multiset).**
A multiset consists of a finite number of . The multiplicity of in a multiset is denoted by . We write if , if and if . A multiset comes with its support set . For two multisets and , their sum and difference are denoted by and respectively. Removing all from a multiset yields the multiset , e.g. .
Each term and each evaluation context are respectively assigned multisets of variables , with a multiset of variables. The multisets are defined inductively as follows.
[TABLE]
The following equations can be proved by a straightforward induction on .
Lemma 3.1** (decomposition).**
[TABLE]
A variable is bound in a term if it appears in the form of or . A variable is captured in an evaluation context if it appears in the form of (but not in the form of ). The transitions (12) and (13) depend on whether or not the bound variable appears in the evaluation context . If the variable appears, the value is kept for later use and its copy is substituted for . If not, the value itself is substituted for .
The SAM does not assume the -equivalence, but explicitly deals with it in copying a value. The copy in has all its bound variables replaced by distinct fresh variables (i.e. distinct variables that do not appear in a whole configuration). This implies that the SAM is deterministic up to the choice of new variables introduced in copying.
A term is closed if ; and is well-named if each variable gets bound at most once in , and each bound variable in satisfies . An initial configuration is a term configuration where is closed and well-named. A finite sequence of transitions from an initial configuration is called an execution. A reachable configuration , that is a configuration coming with an execution from some initial configuration to itself, satisfies the following invariant properties.
Lemma 3.2** (reachable configurations).**
Let be a reachable configuration from an initial configuration . The term is a sub-term of the initial term up to -equivalence, and the plugging is closed and well-named.
Proof.
(Sketch.) The proof is by induction on the length of the execution . Not only the term but also the term in any sub-term or of the plugging is a sub-term of the initial term . The transition (12) renames a value in the way that preserves closedness and the well-named-ness of pluggings. In the transition (13) where an explicit substitution for a bound variable is eliminated, the induction hypothesis ensures that the variable does not occur in the plugging . ∎
We now conclude with a brief consideration on garbage collection. Transition (13) eliminates an explicit substitution and therefore implements a partial mechanism of garbage collection. The mechanism is partial because only an explicit substitution that is looked up in an execution can be eliminated, as illustrated below. The explicit substitution is eliminated in the first example, but not in the second example because the bound variable does not occur.
[TABLE]
We incorporate this partial garbage collection to make clear the behaviour of the DGoIM⇾, in particular the use of the rewrite transitions (6) and (7).
3.2 Translation and Weak Simulation
A weak simulation is built on top of translations of terms and evaluation contexts. The translations are inductively defined in Fig. 6 and Fig. 7. What underlies them is the so-called “call-by-value” translation of intuitionistic logic to linear logic. This translates all and only values to -boxes that can be copied by rewrite transitions.
The translation t^{\dagger}$$\mid$$\mathrm{FV}(t) of a term is a well-boxed graph, where some edges are annotated with variables to help understanding. We continue representing a bunch of edges by a single edge and a strike-out, with annotations denoted by a multiset, and a bunch of nodes by a single thick node. The translation E_{M}^{\dagger}$$\mid$$M$$\mid$$\mathrm{FV}_{M}(E) of an evaluation context , given a multiset of variables, is not a well-boxed graph because it has incoming edges. Lem. 3.3 is analogous to Lem. 3.1; their proof is by straightforward induction on .
Lemma 3.3** (decomposition).**
[TABLE]
The translations are lifted to a binary relation between reachable configurations of the SAM and rooted states of the DGoIM⇾.
Definition 3.4** (binary relation ).**
A reachable configuration and a state satisfies if and only if:
- •
(G,p)=\begin{cases}\leavevmode\hbox to63.08pt{\vbox to43.62pt{\pgfpicture\makeatletter\hbox{\hskip 45.8078pt\lower-8.73547pt\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@moveto{-17.07095pt}{21.3387pt}\pgfsys@moveto{-17.07095pt}{21.3387pt}\pgfsys@lineto{-17.07095pt}{34.1419pt}\pgfsys@lineto{17.07095pt}{34.1419pt}\pgfsys@lineto{17.07095pt}{21.3387pt}\pgfsys@closepath\pgfsys@moveto{17.07095pt}{34.1419pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-3.74445pt}{23.92921pt}\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{{\overline{t}^{\dagger}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{{}}{}{}{}{}{{}}{}{}{}{{{}{}}}{}\pgfsys@moveto{-17.07095pt}{0.0pt}\pgfsys@moveto{-17.07095pt}{0.0pt}\pgfsys@lineto{-17.07095pt}{12.8032pt}\pgfsys@lineto{17.07095pt}{12.8032pt}\pgfsys@lineto{17.07095pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{17.07095pt}{12.8032pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-12.08473pt}{3.84828pt}\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{{E_{\mathrm{FV}(\overline{t})}^{\dagger}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{-12.80269pt}{21.33784pt}\pgfsys@lineto{-12.80269pt}{12.80269pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}}{}{}{}{}{} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.5}{-0.86603}{0.86603}{0.5}{-14.16248pt}{16.9257pt}\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}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-42.8078pt}{14.56958pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{12.80269pt}{21.33784pt}\pgfsys@lineto{12.80269pt}{12.80269pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{{}} {}{}{}{}{}{}{}{} }{{}}\pgfsys@moveto{12.80217pt}{17.06958pt}\pgfsys@moveto{14.93604pt}{17.06958pt}\pgfsys@curveto{14.93604pt}{18.2481pt}{13.98068pt}{19.20345pt}{12.80217pt}{19.20345pt}\pgfsys@curveto{11.62366pt}{19.20345pt}{10.6683pt}{18.2481pt}{10.6683pt}{17.06958pt}\pgfsys@curveto{10.6683pt}{15.89107pt}{11.62366pt}{14.93571pt}{12.80217pt}{14.93571pt}\pgfsys@curveto{13.98068pt}{14.93571pt}{14.93604pt}{15.89107pt}{14.93604pt}{17.06958pt}\pgfsys@closepath\pgfsys@moveto{12.80217pt}{17.06958pt}\pgfsys@fill\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{4.26917pt}{14.56958pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}}{}{} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{12.80269pt}{0.0pt}\pgfsys@lineto{12.80269pt}{-8.53548pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \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}}&\text{(if )}\ \leavevmode\hbox to67.35pt{\vbox to64.42pt{\pgfpicture\makeatletter\hbox{\hskip 45.8078pt\lower-8.73547pt\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@moveto{-17.07095pt}{38.40965pt}\pgfsys@moveto{-17.07095pt}{38.40965pt}\pgfsys@lineto{-17.07095pt}{51.21288pt}\pgfsys@lineto{17.07095pt}{51.21288pt}\pgfsys@lineto{17.07095pt}{38.40965pt}\pgfsys@closepath\pgfsys@moveto{17.07095pt}{51.21288pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-3.90001pt}{41.35016pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{{}}{}{}{}{}{{}}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setdash{3.0pt,3.0pt}{0.0pt}\pgfsys@invoke{ }{}\pgfsys@moveto{-42.6774pt}{25.60643pt}\pgfsys@moveto{-42.6774pt}{25.60643pt}\pgfsys@lineto{-42.6774pt}{55.48062pt}\pgfsys@lineto{21.3387pt}{55.48062pt}\pgfsys@lineto{21.3387pt}{25.60643pt}\pgfsys@closepath\pgfsys@moveto{21.3387pt}{55.48062pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{{}}{}{}{}{}{{}}{}{}{}{{{}{}}}{}\pgfsys@moveto{-17.07095pt}{0.0pt}\pgfsys@moveto{-17.07095pt}{0.0pt}\pgfsys@lineto{-17.07095pt}{12.8032pt}\pgfsys@lineto{17.07095pt}{12.8032pt}\pgfsys@lineto{17.07095pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{17.07095pt}{12.8032pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-12.08473pt}{3.84828pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}{}{{{}}
{}{}{}{}{}{}{}{}
}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,1,1}\pgfsys@color@gray@fill{1}\pgfsys@invoke{ }{}\pgfsys@moveto{-12.8032pt}{25.60643pt}\pgfsys@moveto{-8.53548pt}{25.60643pt}\pgfsys@curveto{-8.53548pt}{27.96346pt}{-10.44618pt}{29.87416pt}{-12.8032pt}{29.87416pt}\pgfsys@curveto{-15.16023pt}{29.87416pt}{-17.07094pt}{27.96346pt}{-17.07094pt}{25.60643pt}\pgfsys@curveto{-17.07094pt}{23.2494pt}{-15.16023pt}{21.3387pt}{-12.8032pt}{21.3387pt}\pgfsys@curveto{-10.44618pt}{21.3387pt}{-8.53548pt}{23.2494pt}{-8.53548pt}{25.60643pt}\pgfsys@closepath\pgfsys@moveto{-12.8032pt}{25.60643pt}\pgfsys@fillstroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{
{}{}}}{
{}{}}
{{}{{}}}{{}{}}{}{{}{}}
{
}{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-17.33792pt}{22.18977pt}\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{{}}
}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}}{{}}{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{
}}{
}
{{}{{}}}{{}{}}{}{{}{}}
{
}{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-8.4074pt}{22.77266pt}\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{}
}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}{}{{{}}
{}{}{}{}{}{}{}{}
}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}\pgfsys@moveto{-12.8032pt}{25.60643pt}\pgfsys@moveto{-8.53548pt}{25.60643pt}\pgfsys@curveto{-8.53548pt}{27.96346pt}{-10.44618pt}{29.87416pt}{-12.8032pt}{29.87416pt}\pgfsys@curveto{-15.16023pt}{29.87416pt}{-17.07094pt}{27.96346pt}{-17.07094pt}{25.60643pt}\pgfsys@curveto{-17.07094pt}{23.2494pt}{-15.16023pt}{21.3387pt}{-12.8032pt}{21.3387pt}\pgfsys@curveto{-10.44618pt}{21.3387pt}{-8.53548pt}{23.2494pt}{-8.53548pt}{25.60643pt}\pgfsys@closepath\pgfsys@moveto{-12.8032pt}{25.60643pt}\pgfsys@stroke\pgfsys@invoke{ }
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope
{}{{}}{}{{{}}
{}{}{}{}{}{}{}{}
}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,1,1}\pgfsys@color@gray@fill{1}\pgfsys@invoke{ }{}\pgfsys@moveto{12.8032pt}{25.60643pt}\pgfsys@moveto{17.07094pt}{25.60643pt}\pgfsys@curveto{17.07094pt}{27.96346pt}{15.16023pt}{29.87416pt}{12.8032pt}{29.87416pt}\pgfsys@curveto{10.44618pt}{29.87416pt}{8.53548pt}{27.96346pt}{8.53548pt}{25.60643pt}\pgfsys@curveto{8.53548pt}{23.2494pt}{10.44618pt}{21.3387pt}{12.8032pt}{21.3387pt}\pgfsys@curveto{15.16023pt}{21.3387pt}{17.07094pt}{23.2494pt}{17.07094pt}{25.60643pt}\pgfsys@closepath\pgfsys@moveto{12.8032pt}{25.60643pt}\pgfsys@fillstroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{
{}{}}}{
{}{}}
{{}{{}}}{{}{}}{}{{}{}}
{
}{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{8.2685pt}{22.18977pt}\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{{}}
}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}}{{}}{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{
}}{
}
{{}{{}}}{{}{}}{}{{}{}}
{
}{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{17.19904pt}{22.77266pt}\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{}
}}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{}{{}}{}{{}}
{}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{-12.80269pt}{38.40811pt}\pgfsys@lineto{-12.80269pt}{29.87297pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}}
\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}}{}{}{}{}{} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.5}{-0.86603}{0.86603}{0.5}{-14.16248pt}{33.9953pt}\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}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-42.8078pt}{31.63918pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{12.80269pt}{38.40811pt}\pgfsys@lineto{12.80269pt}{29.87297pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{{}} {}{}{}{}{}{}{}{} }{{}}\pgfsys@moveto{12.80217pt}{34.13918pt}\pgfsys@moveto{14.93604pt}{34.13918pt}\pgfsys@curveto{14.93604pt}{35.31769pt}{13.98068pt}{36.27304pt}{12.80217pt}{36.27304pt}\pgfsys@curveto{11.62366pt}{36.27304pt}{10.6683pt}{35.31769pt}{10.6683pt}{34.13918pt}\pgfsys@curveto{10.6683pt}{32.96066pt}{11.62366pt}{32.00531pt}{12.80217pt}{32.00531pt}\pgfsys@curveto{13.98068pt}{32.00531pt}{14.93604pt}{32.96066pt}{14.93604pt}{34.13918pt}\pgfsys@closepath\pgfsys@moveto{12.80217pt}{34.13918pt}\pgfsys@fill\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{4.26917pt}{31.63918pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{-12.80269pt}{21.33784pt}\pgfsys@lineto{-12.80269pt}{12.80269pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}}{}{}{}{}{} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.5}{-0.86603}{0.86603}{0.5}{-14.16248pt}{16.9257pt}\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}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-42.8078pt}{14.56958pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{12.80269pt}{21.33784pt}\pgfsys@lineto{12.80269pt}{12.80269pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}}{}{} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{12.80269pt}{0.0pt}\pgfsys@lineto{12.80269pt}{-8.53548pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \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}}&\parbox[c]{113.81102pt}{ (if \overline{v}^{\dagger}=\leavevmode\hbox to54.54pt{\vbox to53.55pt{\pgfpicture\makeatletter\hbox{\hskip 39.40671pt\lower-2.13387pt\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@moveto{-10.66934pt}{34.1419pt}\pgfsys@moveto{-10.66934pt}{34.1419pt}\pgfsys@lineto{-10.66934pt}{46.94513pt}\pgfsys@lineto{10.66934pt}{46.94513pt}\pgfsys@lineto{10.66934pt}{34.1419pt}\pgfsys@closepath\pgfsys@moveto{10.66934pt}{46.94513pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-3.90001pt}{37.08241pt}\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{{\overline{v}^{\diamond}}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{{}}{}{}{}{}{{}}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setdash{3.0pt,3.0pt}{0.0pt}\pgfsys@invoke{ }{}\pgfsys@moveto{-36.27579pt}{21.3387pt}\pgfsys@moveto{-36.27579pt}{21.3387pt}\pgfsys@lineto{-36.27579pt}{51.21288pt}\pgfsys@lineto{14.93709pt}{51.21288pt}\pgfsys@lineto{14.93709pt}{21.3387pt}\pgfsys@closepath\pgfsys@moveto{14.93709pt}{51.21288pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope {}{{}}{}{{{}} {}{}{}{}{}{}{}{} }{{}}\pgfsys@beginscope\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,1,1}\pgfsys@color@gray@fill{1}\pgfsys@invoke{ }{}\pgfsys@moveto{-6.4016pt}{21.3387pt}\pgfsys@moveto{-2.13387pt}{21.3387pt}\pgfsys@curveto{-2.13387pt}{23.69572pt}{-4.04457pt}{25.60643pt}{-6.4016pt}{25.60643pt}\pgfsys@curveto{-8.75862pt}{25.60643pt}{-10.66933pt}{23.69572pt}{-10.66933pt}{21.3387pt}\pgfsys@curveto{-10.66933pt}{18.98167pt}{-8.75862pt}{17.07097pt}{-6.4016pt}{17.07097pt}\pgfsys@curveto{-4.04457pt}{17.07097pt}{-2.13387pt}{18.98167pt}{-2.13387pt}{21.3387pt}\pgfsys@closepath\pgfsys@moveto{-6.4016pt}{21.3387pt}\pgfsys@fillstroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-10.93631pt}{17.92204pt}\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{{\wn}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}}{{}}{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ }}{ } {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-2.00578pt}{18.50491pt}\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{} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{{}} {}{}{}{}{}{}{}{} }\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}\pgfsys@moveto{-6.4016pt}{21.3387pt}\pgfsys@moveto{-2.13387pt}{21.3387pt}\pgfsys@curveto{-2.13387pt}{23.69572pt}{-4.04457pt}{25.60643pt}{-6.4016pt}{25.60643pt}\pgfsys@curveto{-8.75862pt}{25.60643pt}{-10.66933pt}{23.69572pt}{-10.66933pt}{21.3387pt}\pgfsys@curveto{-10.66933pt}{18.98167pt}{-8.75862pt}{17.07097pt}{-6.4016pt}{17.07097pt}\pgfsys@curveto{-4.04457pt}{17.07097pt}{-2.13387pt}{18.98167pt}{-2.13387pt}{21.3387pt}\pgfsys@closepath\pgfsys@moveto{-6.4016pt}{21.3387pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope {}{{}}{}{{{}} {}{}{}{}{}{}{}{} }{{}}\pgfsys@beginscope\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,1,1}\pgfsys@color@gray@fill{1}\pgfsys@invoke{ }{}\pgfsys@moveto{6.4016pt}{21.3387pt}\pgfsys@moveto{10.66933pt}{21.3387pt}\pgfsys@curveto{10.66933pt}{23.69572pt}{8.75862pt}{25.60643pt}{6.4016pt}{25.60643pt}\pgfsys@curveto{4.04457pt}{25.60643pt}{2.13387pt}{23.69572pt}{2.13387pt}{21.3387pt}\pgfsys@curveto{2.13387pt}{18.98167pt}{4.04457pt}{17.07097pt}{6.4016pt}{17.07097pt}\pgfsys@curveto{8.75862pt}{17.07097pt}{10.66933pt}{18.98167pt}{10.66933pt}{21.3387pt}\pgfsys@closepath\pgfsys@moveto{6.4016pt}{21.3387pt}\pgfsys@fillstroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{1.86688pt}{17.92204pt}\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{{\oc$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{{}}{{}}{}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ }}{ } {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{10.79742pt}{18.50491pt}\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{} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{}{}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{-6.40134pt}{34.14053pt}\pgfsys@lineto{-6.40134pt}{25.6054pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}}{}{}{}{}{} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.5}{-0.86603}{0.86603}{0.5}{-7.76138pt}{29.72789pt}\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}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-36.40671pt}{27.37177pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{6.40134pt}{34.14053pt}\pgfsys@lineto{6.40134pt}{25.6054pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}}{}{} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{-6.40134pt}{17.07027pt}\pgfsys@lineto{-6.40134pt}{8.53479pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}
{{}}{{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}}{}{}{}{}{} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.5}{-0.86603}{0.86603}{0.5}{-7.76138pt}{12.65813pt}\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}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{{}}\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{{}{}}}{{}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-36.40671pt}{10.302pt}\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{{}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {{}}{}{{}}{}{{}}{}{} {}{}{}{}{{{}{}}}{}{}{{{}{}}}{}\pgfsys@moveto{6.40134pt}{17.07027pt}\pgfsys@lineto{6.40134pt}{8.53479pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}}\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{{}}{}{}} \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}}c=(\overline{v},E)_{\mathit{ctxt}})}\end{cases}
- •
is an arbitrary naming
- •
is rooted at the unique open edge of .
Note that the graph in the above definition has exactly one open edge, because it is equal to the translation (Lem. 3.3) and the plugging is closed (Lem. 3.2).
The binary relation gives a weak simulation, as stated below. It is weak in Milner’s sense [21], where transitions with the label are regarded as internal. We can conclude from Thm. 3.5 below that the DGoIM⇾ soundly implements the call-by-need evaluation.
Theorem 3.5** (weak simulation).**
Let a configuration and a state satisfy .
If a transition of the SAM is possible, there exists a sequence such that . 2. 2.
If a transition of the SAM is possible, there exists a sequence such that . 3. 3.
If a transition of the SAM is possible, there exists a sequence such that and . 4. 4.
No transition is possible at the state if .
Proof.
We start with two basic observations. First, only a pass transition is possible at a state that satisfies , and second, no transition is possible at a state that satisfies .
Fig. 8 shows how the DGoIM⇾ simulates each transition of the SAM. Stacks, annotations of edges, and some annotations of -nodes are omitted. The equations in Fig. 8 apply the decomposition properties in Lem. 3.3 as well as the other decomposition properties in the following Lem. 3.6. In the application, we exploit the closedness and well-named-ness of reachable configurations (in the sense of Lem. 3.2).
∎
Lemma 3.6** (decomposition).**
Let be multisets of variables.
*The translation of a substitution context has a unique decomposition * A_{M}^{\ddagger}$$\mid$$M$$\mid$$\mathrm{FV}_{M}(A) . 2. 2.
*If no variables in are captured in an evaluation context , the translation is equal to the graph * E_{M}^{\dagger}$$\mid$$M_{0}$$\mid$$M$$\mid$$\mathrm{FV}_{M}(E) . 3. 3.
*If each variable in is captured in an evaluation context exactly once, the translation has a unique decomposition * E_{M}^{{\dagger}{\dagger}}$$\mathsf{C}_{M_{0}+M_{1}}$$\mathsf{Cut}$$\mid$$M$$\mid$$\mathrm{FV}_{M_{0}+M}(E)$$\mid$$M_{0}$$\mid$$M_{1}$$\mid$$\mathrm{supp}(M_{0})$$\mid . The multiset satisfies , and the thick -node represents a family of -nodes.
Proof.
The proofs for 1. and 2. are by straightforward inductions on and respectively. The proof for 3. is by induction on the dimension of , i.e. the size of the support set . The base case where is obvious. In the inductive case, let satisfy . Since is captured exactly once in by assumption, the evaluation context can be decomposed as such that is not captured in or . The evaluation context satisfies for some positive multiplicity . Moreover the multiset can be decomposed as such that all the variables in (resp. ) are only captured in (resp. ). The translation can be decomposed as in Fig. 9.
Finally, we let consist of . ∎
4 Time Cost Analysis of Rewrites-First Interleaving
4.1 Recipe for Time Cost Analysis
Our time cost analysis of the DGoIM⇾ follows Accattoli’s recipe, described in [2, 1], of analysing complexity of abstract machines. This section recalls the recipe and explains how it applies to the DGoIM⇾.
The time cost analysis focuses on how efficiently an abstract machine implements an evaluation strategy. In other words, we are not interested in minimising the number of -reduction steps simulated by an abstract machine. Our interest is in making the number of transitions of an abstract machine “reasonable,” compared to the number of necessary -reduction steps determined by a given evaluation strategy.
Accattoli’s recipe assumes that an abstract machine has three groups of transitions: 1) “-transitions” that correspond to -reduction in which substitution is delayed, 2) transitions perform substitution, and 3) other “overhead” transitions. We incorporate this classification using the labels of transitions.
Another assumption of the recipe is that, each step of -reduction is simulated by a single transition of an abstract machine, and so is substitution of each occurrence of a variable. This is satisfied by many known abstract machines including the SAM, however not by the DGoIM⇾. The DGoIM⇾ has “finer” transitions and can take several transitions to simulate a single step of reduction (hence a single transition of the SAM, as we can observe in Thm. 3.5). In spite of this mismatch we can still follow the recipe, thanks to the weak simulation . It discloses what transitions of the DGoIM exactly correspond to -reduction and substitution, and gives a concrete number of overhead transitions that the DGoIM⇾ needs to simulate -reduction and substitution. The recipe for the time cost analysis is:
Examine the number of transitions, by means of the size of input and the number of -transitions. 2. 2.
Estimate time cost of single transitions. 3. 3.
Derive a bound of the overall execution time cost. 4. 4.
Classify an abstract machine according to its execution time cost.
The last step is accompanied by the following taxonomy of abstract machines introduced in [1].
Definition 4.1** (classes of abstract machines [1, Def. 7.1]).**
An abstract machine is efficient if its execution time cost is linear in both the input size and the number of -transitions. 2. 2.
An abstract machine is reasonable if its execution time cost is polynomial in the input size and the number of -transitions. 3. 3.
An abstract machine is unreasonable if it is not reasonable.
The input size in our case is given by the size of a term , inductively defined by:
[TABLE]
Given a sequence of transitions (of either the SAM or the DGoIM⇾), we denote the number of transitions with a label in by . Since we use the fixed set of labels, the length of the sequence is equal to the sum .
4.2 Number of Transitions
We first estimate the number of transitions of the SAM, and then derive estimation for the DGoIM⇾.
Lemma 4.2** (quantitative bounds for SAM).**
Each execution from an initial configuration , comes with the following inequalities:
[TABLE]
Proof.
The proof is analogous to the discussion in [2, Sec. 11]. Let , and be the numbers of transitions (8), (9) and (10) in , respectively. The number is equal to the sum of these three numbers.
The transition (11) introduces one explicit substitution, and the other transitions never increase the number of explicit substitution. In particular the transition (12) copies a pure value, that means no explicit substitutions are copied. Therefore we can bound the number of transitions that concern explicit substitutions, and obtain and .
Each occurrence of the transition (10) in an execution is either the last transition of the execution or followed by the transitions (11), (12) and (13). This yields the inequality and hence .
The transition (8) reduces the size of a pure term that is the first component of a configuration. The pure term is always a sub-term of the initial term (Lem. 3.2). This means each maximal subsequence of an execution that solely consists of the transition (8) has at most the length . Such a maximal subsequence either occurs at the end of an execution or is followed by transitions other than the transition (8). Therefore the number of these maximal sub-sequences is no more than that can be bounded by . A bound of the number can be given by multiplying these two bounds, namely we obtain . ∎
Combining these bounds for the SAM with the weak simulation , we can estimate the number of transitions of the DGoIM⇾ as below.
Proposition 4.3** (quantitative bounds for DGoIM⇾).**
Let be a sequence of transitions of the DGoIM⇾. If there exists an execution of the SAM such that and , the sequence comes with the following inequalities:
[TABLE]
Proof.
This is a direct consequence of Lem. 4.2 and Thm. 3.5. ∎
4.3 Execution Time Cost
We already discussed time cost of single transitions of the DGoIM in Sec. 2.3. It is worth noting that the discussion in Sec. 2.3 is independent of any particular choice of a rewriting and token-passing interleaving strategy.
Thm. 4.4 below gives a bound of execution time cost of the DGoIM⇾. We can conclude that, according to Accattoli’s taxonomy (see Def. 4.1), the DGoIM⇾ is “efficient” as an abstract machine for the call-by-need evaluation.
Theorem 4.4** (time cost).**
Let be fixed natural numbers, and be a sequence of transitions of the DGoIM⇾. If there exists an execution of the SAM such that and , the total time cost of the sequence satisfies:
[TABLE]
Proof.
We estimated in Sec. 2.3 that time cost of single transitions, except for the rewrite transitions (4) and (6), is constant. Time cost of these rewrite transitions (4) and (6) depends on the number of doors and/or nodes of a -box.
Since the sequence of transitions simulates an execution of the SAM, every -box concerned in arises as the translation of a value . By definition of the translation (Fig. 6), the graph is a -box, with as many auxiliary doors as occurrences of free variables in . The number of auxiliary doors is no more than the number of nodes in the -box, due to the well-boxed-ness condition, that is linear in the size of the value.
Moreover the value appears as the first component of a context configuration, and therefore it is a sub-term of the initial term (Lem. 3.2). As a result, time cost of each occurrence of the rewrite transitions (4) and (6) in the sequence is linear in the size .
The bound of the total time cost of the sequence is given by combining these estimations for single transitions with the results of Prop. 4.3. ∎
Corollary 4.5**.**
The DGoIM⇾ is an efficient abstract machine, in the sense of Def. 4.1.
5 Conclusions
We introduced the DGoIM, which can interleave token passing with graph rewriting informed by the trajectory of the token. We focused on the rewrites-first interleaving and proved that it enables the DGoIM to implement the call-by-need evaluation strategy. The quantitative analysis of time cost certified that the DGoIM⇾ gives an “efficient” implementation in the sense of Accattoli’s classification. The proof of Thm. 4.4 pointed out that eliminating and copying -boxes are two main sources of time cost. Our results are built on top of a weak simulation of the SAM, that relates several transitions of the DGoIM to each computational task such as -reduction and substitution.
The main feature of the DGoIM is the flexible combination of interaction and rewriting. We here briefly discuss how the flexibility can enable the DGoIM to implement evaluation strategies other than the call-by-need.
As mentioned in Sec. 1.2, the passes-only interleaving yields an ordinary token-passing abstract machine that is known to implement the call-by-name evaluation. Because no rewrites are triggered, as oppose to the rewrites-first interleaving, a token not only can pass a principal door but also can go inside a -box and pass an auxiliary door. These behaviours are in fact not possible with the DGoIM presented in this paper; the transitions and data carried by a token are tailored to the rewrites-first interleaving. To recover an ordinary token-passing machine, we therefore need to add pass transitions that involve auxiliary doors and data structures (so-called “exponential signatures”) that deal with -boxes, for example.
The only difference between the call-by-need and the call-by-value evaluations lies in when function arguments are evaluated. In the DGoIM, this corresponds to changing a trajectory of a token so that it visits function arguments immediately after it detects function application. Therefore, to implement the call-by-value evaluation, the DGoIM can still use the rewrites-first interleaving, but it should use a modified set of pass transitions. Further refinements, not only of the evaluation strategies but also of the graph representation could yield even more efficient implementation, such as full lazy evaluation, as hinted in [26].
Our final remarks concern programming features that have been modelled using token-passing abstract machines. Ground-type constants are handled by attaching memories to either nodes of a graph or a token, in e.g. [20, 18, 3] — this can be seen as a simple form of graph rewriting. Algebraic effects are also accommodated using memories attached to nodes of a graph in token machines [18], but their treatment would be much simplified in the DGoIM as effects are evaluated out of the term via rewriting.
Acknowledgements.
We are grateful to Ugo Dal Lago and anonymous reviewers for encouraging and insightful comments on earlier versions of this work.
The reference list from the paper itself. Each links out to its DOI / PubMed record.
- 1[1] Beniamino Accattoli. The complexity of abstract machines. In WPTE 2016 , volume 235 of EPTCS , pages 1–15, 2017.
- 2[2] Beniamino Accattoli, Pablo Barenbaum, and Damiano Mazza. Distilling abstract machines. In ICFP 2014 , pages 363–376. ACM, 2014.
- 3[3] Ugo Dal Lago, Claudia Faggian, Benoît Valiron, and Akira Yoshimizu. Parallelism and synchronization in an infinitary context. In LICS 2015 , pages 559–572. IEEE, 2015.
- 4[4] Ugo Dal Lago, Claudia Faggian, Benoît Valiron, and Akira Yoshimizu. The Geometry of Parallelism: classical, probabilistic, and quantum effects. In POPL 2017 , pages 833–845. ACM, 2017.
- 5[5] Ugo Dal Lago and Marco Gaboardi. Linear dependent types and relative completeness. In LICS 2011 , pages 133–142. IEEE Computer Society, 2011.
- 6[6] Ugo Dal Lago and Barbara Petit. Linear dependent types in a call-by-value scenario. In PPDP 2012 , pages 115–126. ACM, 2012.
- 7[7] Ugo Dal Lago and Ulrich Schöpp. Computation by interaction for space-bounded functional programming. Inf. Comput. , 248:150–194, 2016.
- 8[8] Vincent Danos and Laurent Regnier. Local and asynchronous beta-reduction (an analysis of Girard’s execution formula). In LICS 1993 , pages 296–306. IEEE Computer Society, 1993.
