## Convert `switch` expressions to `if` expressions

This CIF to CIF transformation converts `switch` expressions to `if` expressions.

### Supported specifications

This transformation supports all CIF specifications.

n/a

### Implementation details

All `switch` expressions are replaced by `if` expressions. For instance, consider the following CIF specification:

``````alg int y = ...
alg real x = switch y:
case 1: 1.0
case 2: 4.0
case 3: 9.0
else    0.0
end;
alg real z = switch y:
else 1.0
end;

automaton a:
alg string v = switch self:
case l1: "first"
case l2: "second"
end;

location l1:
initial;
edge tau goto l2;

location l2;
end``````

This is transformed to the following CIF specification:

``````alg int y = ...
alg real x = if   y = 1: 1.0
elif y = 2: 4.0
elif y = 3: 9.0
else        0.0
end;
alg real z = 1.0;

automaton a:
alg string v = if l1: "first"
else   "second"
end;

location l1:
initial;
edge tau goto l2;

location l2;
end``````

For algebraic variable `z`, there is only one case (the `else`), so no `if` expression is generated. This optimization means that the control value (`y` in this case) is lost.

For algebraic variable `v` in automaton `a`, the `switch` expression uses an automaton self reference. The cases list the possible locations of the automaton, and the `switch` expression maps them to string values. Since for `if` expressions the `else` part is mandatory, the last `case` of the `switch` is converted to the `else` of the `if` expression.

n/a

### Size considerations

The created `if` expression is usually larger than the original `switch` expression, as the control value is duplicated for each `if` and `elif` part, where it is compared to the `case` values. For `switch` expressions with only one `case` or `else`, no `if` expression is generated, and the expression becomes smaller.

### Optimality

This transformation transforms `switch` expressions to `if` expressions, leading to `if` expressions with `if` and `elif` guards that may not be optimal. To simplify the result, apply additional CIF to CIF transformations, such as Simplify values.

### Annotations

This transformation does not process, add, or remove any annotations.