Alternative = "\{" PathList "}" | "{" PathList "}". PathList = { Path ";" }.
The evaluation of a source \{Q1; Q2; ... Qn;} proceeds as follows. The paths Q1, Q2, ..., Qn are evaluated from left to right until the evaluation of a path succeeds.
More specifically, consider the result of evaluating the path Qj.
If the result is a ground expression Ge, then Ge is taken to be the result of the whole construct. If the result is $error(Ge), then $error(Ge) is the result of the whole construct. If the result is $fail(k+1), then $fail(k+1) is the result of the whole construct. And, finally, if the result is $fail(0), this failure is "caught", i.e. an attempt is made to evaluate the next path. If there exists no next path (i.e. j=n), the failure $fail(0) is the result of the whole construct.
An alternative {Q1; Q2; ... Qn;} is equivalent to the alternative \{Q1; Q2; ... Qn; $error(Fname "Unexpected fail");}, where Fname is the name of the function in which the construct appears.
{Q1; Q2; ... Qn;} =>=> \{Q1; Q2; ... Qn; $error(Fname "Unexpected fail");} Fname is the name of the function in which the construct appears. Env,m,St |- \{} => $fail(0),St Env,m,St |- Q1 => Ge,St' ---------------------------------------- Env,m,St |- \{Q1; Q2; ... Qn;} => Ge,St' Env,m,St |- Q1 => $fail(0),St' Env,m,St'|- \{Q2; ... Qn;} => X,St'' ---------------------------------------- Env,m,St |- \{Q1; Q2; ... Qn;} => X,St'' Env,m,St |- Q1 => $fail(k+1),St' ------------------------------------------------ Env,m,St |- \{Q1; Q2; ... Qn;} => $fail(k+1),St' Env,m,St |- Q1 => $error(Ge),St' ------------------------------------------------ Env,m,St |- \{Q1; Q2; ... Qn;} => $error(Ge),St'