  This paper introduces techniques for specifying behavior, architecture, and
abstract properties of large scale computer software and hardware purely in
terms of ordinary deterministic state machines. The goal is to be able to work
with specifications ranging from operating systems to databases and real-time
control. State machines with output are represented as maps from finite
sequences of events to outputs so that f(s) is the output in the state reached
by following s from a initial state. Composite sequence maps correspond to
state machine products. The methods used here can specify or constrain both
system behavior and system design. Motivating examples presented range from
simple counters to distributed consensus algorithms and real-time circuits. The
approach is intended to facilitate "back of the envelope" descriptions of
devices and software and also to allow for detailed hierarchical specifications
of behavior and architecture.
  The mathematical approach is based on both primitive recursion on sequences
\cite{PeterComputer} and automata products with feedback \cite{Gecseg}, adapted
to Moore type state machines. No formal methods or other metamathematical
techniques are employed and although parallel and concurrent composite systems
are easy to specify, it is not necessary to make any particular communication
scheme primitive. State machines are not augmented or extended - even the most
complex composite systems are modeled by ordinary deterministic state machines
which have a rich mathematical theory related to semigroups.
