# Expression evaluation model

Last modified 12 Mar 2021 10:22 +01:00

Let us define the expression evaluation more formally.

## Sources

1. Let we have n sources numbered 1, 2, …​, n.

2. Each source can provide values of a given type. Let D1, D2, …​, Dn be domains for individual values for sources 1, 2, …​, n, respectively.

3. Because each source can have multiple values of given type, the domains for sources 1, 2, …​, n are power sets (sets of sets) of D1, D2, …​, Dn, respectively, denoted as P(D1), P(D2), …​, P(Dn).

4. And because each source has two states: old and new, the complete specification of input states can be denoted as P(D1) x P(D1), P(D2) x P(D2), …​, P(Dn) x P(Dn).

## Output

1. Let R be the domain for individual values of the target (output) item, i.e. evaluator range.

2. P(R) is the power set of the evaluator range: all sets of individual values of the target item.

3. P(R) x P(R) x P(R) is the set of all possible delta set triples (plus, minus, zero sets of values).

## Transformation function (no deltas)

 T: P(D1) x P(D2) x …​ x P(Dn) → P(R)

is the transformation function that maps sets of source values to a set of output values (no deltas yet).

## Transformation function (with deltas)

Then the "delta-aware" transformation Trel i.e.:

 Trel : P(D1) x P(D1) x P(D2) x P(D2) x …​ x P(Dn) x P(Dn) → P(R) x P(R) x P(R)

(in human words, a transformation function that maps couples (old, new) of sets of source values to the output delta set triple)

can be defined in this way:

• let S1 ⊆ D1, S2 ⊆ D2, …​, Sn ⊆ Dn be sets of old values of sources 1, 2, …​, n, respectively;

• let S1' ⊆ D1, S2' ⊆ D2, …​, Sn' ⊆ Dn be sets of new values of sources 1, 2, …​, n, respectively;

• let O ⊆ R is the set of output values for the "old" state, i.e. O = T(S1, S2, …​, Sn);

• let O' ⊆ R is the set of output values for the "new" state, i.e. O' = T(S1', S2', …​, Sn');

• let (Oplus ⊆ R, Ominus ⊆ R, Ozero ⊆ R) be resulting delta set triple.

Then

 Trel (S1, S1', S2, S2', …​, Sn, Sn') = (Oplus, Ominus, Ozero)

if and only if:

• Oplus = O' - O

• Ominus = O - O'

• Ozero = O ∩ O'

Note that this description ignores the existence of variables. It is rather complicated even without them. If you’re interested how variables are treated, please see the description of the implementation.