Original theory
Eilenberg's original X-machine was a completely general theoretical model of computation (subsuming theExample
A compiler with a peep-hole optimizer can be thought of as a machine for optimizing program structure. In this Optimizer-machine, the encoding function α takes source code from the input-type Y (the program source) and loads it into the memory-type X (a parse tree). Suppose that the machine has several states, called FindIncrements, FindSubExprs and Completed. The machine starts in the initial state FindIncrements, which is linked to other states via the transitions: FindIncrements →DoIncrement FindIncrements FindIncrements →SkipIncrement FindSubExprs FindSubExprs →DoSubExpr FindSubExprs FindSubExprs →SkipSubExpr Completed The relation DoIncrement maps a parsed subtree corresponding to "x := x + 1" into the optimized subtree "++x". The relation DoSubExpr maps a parse tree containing multiple occurrences of the same expression "x + y ... x + y" into an optimized version with a local variable to store the repeated computation "z := x + y; ... z ... z". These relations are only enabled if X contains the domain values (subtrees) on which they operate. The remaining relations SkipIncrement and SkipSubExpr are ''nullops'' (identity relations) enabled in the complementary cases. So, the Optimizer-machine will run to completion, first converting trivial additions into in-place increments (while in the FindIncrements state), then it will move on to the FindSubExprs state and perform a series of common sub-expression removals, after which it will move to the final state Completed. The decoding function β will then map from the memory-type X (the optimized parse-tree) into the output-type Z (optimized machine code).Convention
When referring to Eilenberg's original model, "X-machine" is typically written with a lower-case "m", because the sense is "any machine for processing X". When referring to later specific models, the convention is to use a capital "M" as part of the proper name of that variant.1980s
Interest in the X-machine was revived in the late 1980s by Mike Holcombe,M. Holcombe (1988) 'X-machines as a basis for dynamic system specification', ''Software Engineering Journal'' 3(2), pp. 69-76. who noticed that the model was ideal for software formal specification purposes, because it cleanly separates ''control flow'' from ''processing''. Provided one works at a sufficiently abstract level, the control flows in a computation can usually be represented as a finite-state machine, so to complete the X-machine specification all that remains is to specify the processing associated with each of the machine's transitions. The structural simplicity of the model makes it extremely flexible; other early illustrations of the idea included Holcombe's specification of human-computer interfaces,M. Holcombe (1988) 'Formal methods in the specification of the human-machine interface', ''International J. Command and Control, Communications and Info. Systems.'' 2, pp. 24-34. his modelling of processes in cell biochemistry,M. Holcombe (1986) 'Mathematical models of cell biochemistry'. Technical Report CS-86-4, Dept of Computer Science, Sheffield University. and Stannett's modelling of decision-making in military command systems.M. Stannett (1987) 'An organisational approach to decision-making in command systems.' ''International J. Command and Control, Communications and Info. Systems.'' 1, pp. 23-34.1990s
X-machines have received renewed attention since the mid-1990s, when Gilbert Laycock's deterministic Stream X-MachineGilbert Laycock (1993) ''The Theory and Practice of Specification Based Software Testing''. PhD Thesis, University of Sheffield.2000s
X-machines have been applied to lexical semantics by Andras Kornai, who models word meaning by `pointed' machines that have one member of the base set X distinguished.A. Kornai (2009) ''The Algebra of Lexical Semantics''. Paper presented at the 2009 Meeting of thMajor variants
The X-machine is rarely encountered in its original form, but underpins several subsequent models of computation. The most influential model on theories of software testing has been the Stream X-Machine.Analog X Machine (AXM)
The earliest variant, the continuous-time ''Analog X-Machine'' (''AXM''), was introduced by Mike Stannett in 1990 as a potentially "super-Turing" model of computation;M. Stannett (1990) 'X-machines and the Halting Problem: Building a super-Turing machine'. ''Formal Aspects of Computing'' 2, pp. 331-41. it is consequently related to work in hypercomputation theory.B. J. Copeland (2002) 'Hypercomputation'. ''Minds and Machines'' 12, pp. 461-502.Stream X-Machine (SXM)
The most commonly encountered X-machine variant is Gilbert Laycock's 1993 '' Stream X-Machine'' ('' SXM'') model, which forms the basis for Mike Holcombe and Florentin Ipate's theory of ''complete'' software testing, which guarantees known correctness properties, once testing is over.F. Ipate and M. Holcombe (1998) 'A method for refining and testing generalised machine specifications'. ''Int. J. Comp. Math.'' 68, pp. 197-219. The Stream X-Machine differs from Eilenberg's original model, in that the fundamental data type X is of the form ''Out''* × ''Mem'' × ''In''*, where ''In''* is an input sequence, ''Out''* is an output sequence, and ''Mem'' is the (rest of the) memory. The advantage of this model is that it allows a system to be driven, one step at a time, through its states and transitions, while observing the outputs at each step. These are witness values, that guarantee that particular functions were executed on each step. As a result, complex software systems may be decomposed into a hierarchy of Stream X-Machines, designed in a top-down way and tested in a bottom-up way. This divide-and-conquer approach to design and testing is backed by Florentin Ipate's proof of correct integration,F. Ipate and M. Holcombe (1997) 'An integration testing method that is proved to find all faults', ''International Journal of Computer Mathematics'' 63, pp. 159-178. which proves how testing the layered machines independently is equivalent to testing the composed system.Communicating X-Machine (CXM)
The earliest proposal for connecting several X-machines in parallel is Judith Barnard's 1995 ''Communicating X-machine'' (''CXM'' or ''COMX'') model,J. Barnard, C. Theaker, J. Whitworth and M. Woodward (1995) 'Real-time communicating X-machines for the formal design of real-time systems', in ''Proceedings of DARTS '95, Universite Libre, Brussels, Belgium, 9–11 November 2005''J. Barnard (1996) ''COMX: A methodology for the formal design of computer systems using Communicating X-machines''. PhD Thesis, Staffordshire University. in which machines are connected via named communication channels (known as ''ports''); this model exists in both discrete- and real-timed variants.A. Alderson and J. Barnard (1997) 'On Making a Crossing Safe', ''Technical Report SOCTR/97/01'', School of Computing, Staffordshire University.Communicating Stream X-Machine (CSXM)
The first fully formal model of concurrent X-machine composition was proposed in 1999 by Cristina Vertan and Horia Georgescu,H. Georgescu and C. Vertan (2000) 'A new approach to communicating stream X-machines', ''Journal of Universal Computer Science'' 6 ''(5)'', pp. 490-502. based on earlier work on communicating automatata by Philip Bird and Anthony Cowling.P. R. Bird and A. J. Cowling (1994) 'Modelling logic programming using a network of communicating machines', in ''Proc. 2nd Euromicro Workshop on Parallel and Distributed Processing, Malaga, 26–28 January 1994'', pp. 156-161.Object X-Machine (OXM)
Kirill Bogdanov and Anthony Simons developed several variants of the X-machine to model the behaviour of objects in object-oriented systems.A. J. H. Simons, K. E. Bogdanov and W. M. L. Holcombe (2001) 'Complete functional testing using object machines', ''Technical Report CS-01-18, Department of Computer Science'', University of Sheffield This model differs from the Stream X-Machine approach, in that the monolithic data type X is distributed over, and encapsulated by, several objects, which are serially composed; and systems are driven by method invocations and returns, rather than by inputs and outputs. Further work in this area concerned adapting the formal testing theory in the context of inheritance, which partitions the state-space of the superclass in extended subclass objects.A. J. H. Simons (2006) 'A theory of regression testing for behaviourally compatible object types', ''Software Testing, Verification and Reliability'', 16 ''(3)'', John Wiley, pp. 133-156. A "CCS-augmented X-machine" (CCSXM) model was later developed by Simons and Stannett in 2002 to support complete behavioural testing of object-oriented systems, in the presence of asynchronous communicationM. Stannett and A. J. H. Simons (2002) 'CCS-Augmented X-Machines', ''Technical Report CS-2002-04, Department of Computer Science'', Sheffield University, UK. This is expected to bear some similarity withSee also
* Stream X-Machine * X-Machine Testing * Communicating X-MachineDownloadable technical reports
* M. Stannett and A. J. H. Simons (2002) ''Complete Behavioural Testing of Object-Oriented Systems using CCS-Augmented X-Machines. Tech Report CS-02-06, Dept of Computer Science, University of SheffieldExternal links
* http://www.dcs.shef.ac.uk/~ajc/csxms/index.html - Tony Cowling's ''Communicating SXM Systems'' pages * http://x-machines.com - Mike Stannett's ''Theory of X-Machines'' siteReferences