  We give communication-based semantics and reasoning techniques for Polarized
SILL, a rich session-typed programming language with general recursion. Its
features include channel and code transmission, synchronous and asynchronous
communication, and functional programming. Our contributions are distinguished
by their faithfulness to the process abstraction, i.e., to the premise that
communication is the only observable phenomenon of processes. We give the first
observed communication semantics that supports general recursion and code
transmission. Observed communication semantics define the meaning of processes
in terms of their observed communications. We use this observational semantics
to define experiments on processes, and we give a communication-based testing
equivalences framework for defining observational simulations and equivalences
on processes. This framework captures several natural equivalences, and we show
that one of these coincides with barbed congruence, the canonical notion of
process equivalence.
  Polarized SILL is defined using a substructural operational semantics based
on multiset rewriting. To ensure that our contributions are well-defined in the
presence of non-termination, we introduce fairness for multiset rewriting
systems. We construct a fair scheduler, we give sufficient conditions for
traces to be fair, and we study the effects of permutation on fair traces.
