  Observed communication semantics provide an intuitive notion of equivalence
for communicating programs. We give the first observed communication semantics
for a session-typed programming language with general recursion. This language,
Polarized SILL, also supports channel and code transmission, synchronous and
asynchronous communication, and functional programming. We present a framework
inspired by testing preorders for defining simulations based on observed
communications. We show that the "external" simulations coincide with barbed
precongruence.
  Polarized SILL is defined using a multiset-rewriting-style substructural
operational semantics. To ensure that our observed communication semantics is
well-defined, we introduce fairness for multiset rewriting systems. We
construct a fair scheduler and we give sufficient conditions for traces to be
fair.
