Run one concrete input, inspect the collected path condition, then negate one branch and let a tiny bounded solver find the next witness.
A concrete run gives one real path. The branch cards then show how concolic search changes only one decision at a time, solves the new prefix, and replays to see what the program actually does next.
Start with the tutorial seed (0, 0). That run stays on the outer false branch. Then flip branch 1, replay (1, 0), and finally flip branch 2 to reach the witness (1, 2).
def f(x, y):
if x > 0:
if y == x + 1:
bug()
return 0
No run yet.