The enum1() function maps an object x1 to a physically similar object x2. The elim1() function eliminates all objects physically too different from a reference object x0 (which could be x1).
The enum2() function maps an object x11 to a conceptually similar object x12. The elim2() function eliminates all objects conceptually too different from a reference object x0.
Suppose P0={x1}. The machine M will first get into the (Physical Similarity Computation) Cycle1:[guard1,2] P0 -enum1< P1 >elim1- P2 to find objects physically similar to x1, and then eliminate those that are too physically dissimilar to reference object x0.
Suppose P2 is empty. Then the machine M will then enter (Conceptual Similarity Computation) Cycle2:[guard2,1] P3 -enum2< P4 >elim2- P5 to find objects conceptually similar to x11 in P1, and then eliminate those that are too conceptually dissimilar to reference object x0.
Suppose P5 is empty. Then M will enter Cycle1 again. In other words, M will alternate between Cycle1 and Cycle2 to find physically similar objects and then conceptually similar objects. If either P2 or P5 is non-empty, M stops (and the crime may be solved).