######## Top Level Search: Enter Search ######## Top Level Search: Root Node Propagation ######## Top Level Search: Starting Tree Search ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(0..3), x1(0..3), x2(0..3), x3(0..3))) ######## Top Level Search: ApplyDecision([x0(0..3) == 0]) SetValue(x0(0..3), 0) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), (x1(0..3) + -1), (x2(0..3) + -2), (x3(0..3) + -3)), 0)) { RemoveValue((x1(0..3) + -1), 0) RemoveValue(x1(0..3), 1) RemoveValue((x2(0..3) + -2), 0) RemoveValue(x2(0..3), 2) RemoveValue((x3(0..3) + -3), 0) RemoveValue(x3(0..3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), x1(0 2 3), x2(0 1 3), x3(0..2)), 0)) { RemoveValue(x1(0 2 3), 0) RemoveValue(x2(0 1 3), 0) RemoveValue(x3(0..2), 0) } ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(0), x1(2 3), x2(1 3), x3(1..2))) ######## Top Level Search: ApplyDecision([x1(2 3) == 2]) SetValue(x1(2 3), 2) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), (x1(2) + -1), (x2(1 3) + -2), (x3(1..2) + -3)), 1)) { RemoveValue((x2(1 3) + -2), 1) RemoveValue(x2(1 3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), (x1(2) + 1), (x2(1) + 2), (x3(1..2) + 3)), 1)) { RemoveValue((x2(1) + 2), 3) RemoveValue(x2(1), 1) ######## Top Level Search: Failure at depth 1 ######## Top Level Search: RefuteDecision([x1(2 3) == 2]) RemoveValue(x1(2 3), 2) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), (x1(3) + 1), (x2(1 3) + 2), (x3(1..2) + 3)), 1)) { RemoveValue((x3(1..2) + 3), 4) RemoveValue(x3(1..2), 1) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), x1(3), x2(1 3), x3(2)), 1)) { RemoveValue(x2(1 3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(0), (x1(3) + -1), (x2(1) + -2), (x3(2) + -3)), 3)) { RemoveValue((x2(1) + -2), -1) RemoveValue(x2(1), 1) ######## Top Level Search: Failure at depth 1 ######## Top Level Search: RefuteDecision([x0(0..3) == 0]) RemoveValue(x0(0..3), 0) ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(1..3), x1(0..3), x2(0..3), x3(0..3))) ######## Top Level Search: ApplyDecision([x0(1..3) == 1]) SetValue(x0(1..3), 1) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), (x1(0..3) + -1), (x2(0..3) + -2), (x3(0..3) + -3)), 0)) { RemoveValue((x1(0..3) + -1), 1) RemoveValue(x1(0..3), 2) RemoveValue((x2(0..3) + -2), 1) RemoveValue(x2(0..3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), (x1(0 1 3) + 1), (x2(0..2) + 2), (x3(0..3) + 3)), 0)) { RemoveValue((x1(0 1 3) + 1), 1) RemoveValue(x1(0 1 3), 0) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), x1(1 3), x2(0..2), x3(0..3)), 0)) { RemoveValue(x1(1 3), 1) RemoveValue(x2(0..2), 1) RemoveValue(x3(0..3), 1) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), (x1(3) + 1), (x2(0 2) + 2), (x3(0 2 3) + 3)), 1)) { RemoveValue((x2(0 2) + 2), 4) RemoveValue(x2(0 2), 2) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), x1(3), x2(0), x3(0 2 3)), 1)) { RemoveValue(x3(0 2 3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(1), x1(3), x2(0), x3(0 2)), 2)) { RemoveValue(x3(0 2), 0) } ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(1), x1(3), x2(0), x3(2))) ######## Top Level Search: Solution found at depth 2 ######## Top Level Search: Failure at depth 2 ######## Top Level Search: RefuteDecision([x0(1..3) == 1]) RemoveValue(x0(1..3), 1) ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(2..3), x1(0..3), x2(0..3), x3(0..3))) ######## Top Level Search: ApplyDecision([x0(2..3) == 2]) SetValue(x0(2..3), 2) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), (x1(0..3) + -1), (x2(0..3) + -2), (x3(0..3) + -3)), 0)) { RemoveValue((x1(0..3) + -1), 2) RemoveValue(x1(0..3), 3) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), (x1(0..2) + 1), (x2(0..3) + 2), (x3(0..3) + 3)), 0)) { RemoveValue((x1(0..2) + 1), 2) RemoveValue(x1(0..2), 1) RemoveValue((x2(0..3) + 2), 2) RemoveValue(x2(0..3), 0) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), x1(0 2), x2(1..3), x3(0..3)), 0)) { RemoveValue(x1(0 2), 2) RemoveValue(x2(1..3), 2) RemoveValue(x3(0..3), 2) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), (x1(0) + -1), (x2(1 3) + -2), (x3(0 1 3) + -3)), 1)) { RemoveValue((x2(1 3) + -2), -1) RemoveValue(x2(1 3), 1) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), x1(0), x2(3), x3(0 1 3)), 1)) { RemoveValue(x3(0 1 3), 0) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(2), x1(0), x2(3), x3(1 3)), 2)) { RemoveValue(x3(1 3), 3) } ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(2), x1(0), x2(3), x3(1))) ######## Top Level Search: Solution found at depth 3 ######## Top Level Search: Failure at depth 3 ######## Top Level Search: RefuteDecision([x0(2..3) == 2]) RemoveValue(x0(2..3), 2) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), (x1(0..3) + 1), (x2(0..3) + 2), (x3(0..3) + 3)), 0)) { RemoveValue((x1(0..3) + 1), 3) RemoveValue(x1(0..3), 2) RemoveValue((x2(0..3) + 2), 3) RemoveValue(x2(0..3), 1) RemoveValue((x3(0..3) + 3), 3) RemoveValue(x3(0..3), 0) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), x1(0 1 3), x2(0 2 3), x3(1..3)), 0)) { RemoveValue(x1(0 1 3), 3) RemoveValue(x2(0 2 3), 3) RemoveValue(x3(1..3), 3) } ######## Top Level Search: DecisionBuilder(ChooseFirstUnbound_AssignMin(x0(3), x1(0 1), x2(0 2), x3(1..2))) ######## Top Level Search: ApplyDecision([x1(0 1) == 0]) SetValue(x1(0 1), 0) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), (x1(0) + -1), (x2(0 2) + -2), (x3(1..2) + -3)), 1)) { RemoveValue((x3(1..2) + -3), -1) RemoveValue(x3(1..2), 2) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), x1(0), x2(0 2), x3(1)), 1)) { RemoveValue(x2(0 2), 0) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), (x1(0) + 1), (x2(2) + 2), (x3(1) + 3)), 3)) { RemoveValue((x2(2) + 2), 4) RemoveValue(x2(2), 2) ######## Top Level Search: Failure at depth 3 ######## Top Level Search: RefuteDecision([x1(0 1) == 0]) RemoveValue(x1(0 1), 0) Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), (x1(1) + -1), (x2(0 2) + -2), (x3(1..2) + -3)), 1)) { RemoveValue((x2(0 2) + -2), 0) RemoveValue(x2(0 2), 2) } Demon(CallMethod_PropagateValue(BoundsAllDifferent(x0(3), (x1(1) + 1), (x2(0) + 2), (x3(1..2) + 3)), 1)) { RemoveValue((x2(0) + 2), 2) RemoveValue(x2(0), 0) ######## Top Level Search: Failure at depth 3 ######## Top Level Search: Exit Search