- get (ni, nj*, context*k) returns the set of labeled elemental constraints between ni and nj in the contextk (and in all its successor contexts). That is:
get (ni, nj, contextk)::= {(ecij.p{labelij.p})∈lcij / contextk∈{labelij.p}}.
Note that get(ni, nj, contextk) is a subset of lcij. Thus, (lcij - get (ni, nj, contextk)) means the setdifference between lcij and get (ni, nj, contextk). That is, the set of elemental constraints in the context-dependent constraint lcij, which are not in contextk, nor in any of its successor contexts.

 get-upward (ni, nj*, context*k), similarly to the previous get function, it returns the existing constraints between ni and nj in the contextk (and in all its successor contexts). However, if there is no constraint between ni and nj in the contextk, then the function returns the constraints between ni and nj that exist in the predecesor context of *context*k:
get-upward (ni, nj*, context*k) ::=
If get (ni, nj, contextk) ≠ ∅ Then return (get (ni, nj, contextk))
Else Contextk ← Parent-Context (Contextk) Until get (ni, nj, contextk) ≠ ∅ ∨ Contextk=W0 do If get (ni, nj, contextk) ≠ ∅ Then return (get (ni, nj, contextk))
Else return({(-∞ +∞)}{W0 R0}})

## End-Get-Upward

The context-dependent closure (Figure 15) process is similar to the closure process described in Section 4 and it is also performed at each updating process. The closure process of each updated constraint in contextk is downwards performed in contextk and in all its successor contexts.

![0_image_0.png](0_image_0.png)

