Interm constraints ------------------ - Broadly cf. Berezin; I've already proven somewhere a similar procedure terminates, as it is similar to set inclusion constraints. - On unif of st with non-basic variable bt, add constraint (st,bt) to constraint list. Interpretation: st is always a non-tuple, because we don't seek variable goals, and so we have that st in unpair(bt) - Constraints must remain 'solvable'. Once bt becomes a non-tuple, we can unify. If bt becomes a tuple, we can split the constraint into two. - Problem: constraints destroy simple relations between realizable and traces, etc. Trace generation becomes more difficult, and maybe the whole 'classes' concept becomes a bit more vague, as the only clear way out is to - When testing for occurrence of say, terms in out(e) or in(e), we can take the constaints into account. That way we can ensure that the pattern is realizable in the end, if the constraints are met. Channels -------- - Define specific channel types; go in after (a,b,[ChType,] message) - Auth channels: incoming recv on auth channel must come from non-intruder and must match identically. Note: first-binding may be violated by this; and hence 'first occurrence on this type of channel' seems a better constraint. - Conf channels: outgoing send on conf channel may not be bound to incoming node of intruder, but also taking care of avoiding tupling. Hence, send(x,y) may not connect to recv(x), because that would imply the intruder did the projection. These side cases need thorough investigation and sane definitions in the semantics.