Lately, I have been looking and experimenting with very many different aspects of the Theory of Computing like Formal Methods, Graph Theoretical models for software-- specially those related to Flow Theory, Software Visualization techniques, Group theoretical arguments for software, Lambda Calculus, Object Calculus, Lie Groups and Algebras applied to software, and of course an ample dose of Alexandrian theory. My position, so far, is that: 1) Software patterns are groups of dynamical graphical arrangements in n+t-dimensional spaces that define symmetries among collections of software elements. 2) Variations on these arrangements would be considered sub-groups, and hence it is possible to categorize patterns according to their symmetries. 3) The concept of pattern language can be formally stated as an algebra of patterns, that defines the composability of patterns in a pattern language. 4) Refactoring techniques for a certain programming paradigm would be considered a "Symmetry Group". 5) Redesign and transformation of programs would be seen as a rearrangement of symmetries ala Structured Preserving Transformations in the Nature of Order by Alexander. As an aside, I think it is possible to do all of the above while still complying with the earlier postulates of Alexanderian theory -- that by now span a dozen books and several hundred articles written by Alexander! The group theoretical approach above is similar to the approach taken by Ulf Grenander in his book "Elements of Pattern Theory": Elements of Pattern Theory John Hopkins University Press Baltimore, MA, 1996 Check out also: http://www.dam.brown.edu/pattern/ Btw, Jim Coplien has written an interesting paper recently that basically argues the opposite -- patterns as symmetry breaking entities...