pub fn propagate_arithmetic(
op: &Operator,
parent: &Interval,
left_child: &Interval,
right_child: &Interval,
) -> Result<Option<(Interval, Interval)>>
Expand description
This function refines intervals left_child
and right_child
by applying
constraint propagation through parent
via operation. The main idea is
that we can shrink ranges of variables x and y using parent interval p.
Assuming that x,y and p has ranges [xL, xU], [yL, yU], and [pL, pU], we apply the following operations:
- For plus operation, specifically, we would first do
- [xL, xU] <- ([pL, pU] - [yL, yU]) ∩ [xL, xU], and then
- [yL, yU] <- ([pL, pU] - [xL, xU]) ∩ [yL, yU].
- For minus operation, specifically, we would first do
- [xL, xU] <- ([yL, yU] + [pL, pU]) ∩ [xL, xU], and then
- [yL, yU] <- ([xL, xU] - [pL, pU]) ∩ [yL, yU].
- For multiplication operation, specifically, we would first do
- [xL, xU] <- ([pL, pU] / [yL, yU]) ∩ [xL, xU], and then
- [yL, yU] <- ([pL, pU] / [xL, xU]) ∩ [yL, yU].
- For division operation, specifically, we would first do
- [xL, xU] <- ([yL, yU] * [pL, pU]) ∩ [xL, xU], and then
- [yL, yU] <- ([xL, xU] / [pL, pU]) ∩ [yL, yU].