ALPHA


What is ALPHA?

The ALPHA language was developed by Mauras [1] at IRISA in Rennes, France. It was a product of research in regular parallel array processors and systolic arrays. The ALPHA language is able to formally represent algorithms which have a high degree of regularity and parallelism such as systolic algorithms. It is based on the formalism of recurrence equations which has been often used in various forms by several authors [2] all of which were based on the introduction of the notion of uniform recurrence equations by Karp, Miller and Winograd [3].

ALPHA : An applicative equational language

An equational language is a natural way to describe a system of recurrence equations. When thinking about algorithms such as those used in signal processing or numerical analysis applications, a person naturally thinks in terms of mathematical equations. Mathematical notation has evolved over the centuries and obeys certain basic rules.
  1. Given a function and an input, the same output must be produced each time the function is evaluated. If the function is time varying, then time must be a parameter to the function. Turner [4] uses the term static to describe this property.
  2. Consistency in the use of names: a variable stands for the same value throughout its scope. This is called referential transparency.
An immediate consequence of referential transparency is that equality is substitutive --- equal expressions are always and everywhere interchangeable. This property is what gives mathematical notation its deductive power [4]. ALPHA shares both of these properties with mathematical notation: it is static and it is referentially transparent.

Using a language that shares the properties of mathematical notation eases the task of representing a mathematical algorithm as a program. Furthermore, such a method of describing algorithms has some interesting properties, as has been discovered by users of ALPHA. An equation specifies an assertion on a variable which must always be true. Reasoning about programs can thus be done in the context of the program itself, and relies essentially on the fact that ALPHA programs respect the substitution principle. This principle states that an equation X = Expression specifies a total synonymy between the variable on the left hand side of the equation and the expression on the right hand side of the equation. Thus any instance of a variable on the left hand side of any equation may be replaced with the right hand side of its definition. Likewise, any sub-expression may be replaced with a variable identifier, provided that an equation exists, or one is introduced, in which that variable is defined to be equal to that sub-expression.

ALPHA has other properties which should be mentioned.

ALPHA adopts the classical principles of a functional language which is structured and strongly typed. An ALPHA program defines a function from its input variables to its output variables. This notion of a function is embedded in the definition of the ALPHA system construct.

system ForwardSubstitution : {N | N>0 }
                           (A : {i,j | 1<=i<=N; 1<=j<=i} of integer;
                            B : {i   | 1<=i<=N         } of integer)
                   returns (X : {i   | 1<=i<=N         } of integer);
var
  b : {i,j | 1<=i<=N; 0<=j<i } of integer;
let
  b[i,j] = case
             {| j=0 } : 0;
             {| j>0 } : A[i,j] * X[j] + b[i,j-1];
           esac;
  X[i]   = ( B[i] - b[i,i-1] )/A[i,i];
tel;
Sample ALPHA program

References

  1. Christophe Mauras, Alpha, un langage équationnel pour la conception et la programmation d'architectures parallèles synchrones. PhD thesis, Université de Rennes I, Rennes, France, Dec 1989.
  2. Christophe Mauras, Patrice Quinton, Sanjay Rajopadhye, and Yannick Saouter, Scheduling Affine Parameterized Recurrences by means of Variable Dependent Timing Functions, in Proceedings of Application Specific Array Processors, edited by S. Y. Kung, E. E. Swartzlander, Jr., J. A. B. Fortes, and K. W. Przytula, IEEE Computer Society Press, Los Alamitos, CA, Sept. 1990.
  3. R. M. Karp, R. E. Miller, and S. Winograd, The Organization of Computations for Uniform Recurrence Equations. JACM, 14(3):563-590, Jul 1967.
  4. D. A. Turner, Recursion Equations as a Programming Language. In Darlinton, Henderson, and Turner, editors, Functional Programming and its Applications: an Advanced Course, 1981, pages 1-28. Cambridge University Press, 1982.

Last updated on 19 Jan 1996
Doran Wilde wilde@ee.byu.edu