 AlphaZ

Site Tools

tutorial_subsystem

Differences

This shows you the differences between two versions of the page.

 tutorial_subsystem [2014/07/12 07:00]guillaume Part 1 posted tutorial_subsystem [2017/04/19 13:31] (current) Both sides previous revision Previous revision 2014/07/14 11:59 guillaume [Transformations involving subsystems] Commands added2014/07/14 11:51 guillaume [Extension domain] 2014/07/14 11:33 guillaume [Syntax of Use Equation (without extension domain)] 2014/07/14 11:33 guillaume [Extension domain] 2014/07/14 11:29 guillaume [Syntax of Use Equation (without extension domain)] 2014/07/12 08:00 guillaume [Transformations involving subsystems] 2014/07/12 07:43 guillaume [Extension domain] 2014/07/12 07:33 guillaume [Extension domain] 2014/07/12 07:00 guillaume Part 1 posted2014/07/07 11:51 yun created Next revision Previous revision 2014/07/14 11:59 guillaume [Transformations involving subsystems] Commands added2014/07/14 11:51 guillaume [Extension domain] 2014/07/14 11:33 guillaume [Syntax of Use Equation (without extension domain)] 2014/07/14 11:33 guillaume [Extension domain] 2014/07/14 11:29 guillaume [Syntax of Use Equation (without extension domain)] 2014/07/12 08:00 guillaume [Transformations involving subsystems] 2014/07/12 07:43 guillaume [Extension domain] 2014/07/12 07:33 guillaume [Extension domain] 2014/07/12 07:00 guillaume Part 1 posted2014/07/07 11:51 yun created Line 7: Line 7: Let us assume that we want to compute the mean of the values of a vector. It is feasible through the following Alpha system: Let us assume that we want to compute the mean of the values of a vector. It is feasible through the following Alpha system: - + affine mean {N | N>0} affine mean {N | N>0} input input Line 21: Line 21: ​ - However, let us assume that you already have another Alpha system which computes the sum of the elements of a vector. It is possible to use this affine system (instead of rewriting its equation in the main system), by calling it through a "use equation": + However, let us assume that you already have another Alpha system which computes the sum of the elements of a vector. It is possible to use this affine system (instead of rewriting its equation in the main system), by calling it through a **use equation**: - + affine sum {P| P>0} // Computes the sum of the elements of a vector of size P affine sum {P| P>0} // Computes the sum of the elements of a vector of size P input input Line 49: Line 49: In general, the syntax of a use equation is the following: In general, the syntax of a use equation is the following: - + use subsystem_name[list of parameters] (list of input expressions) returns (list of output variables); use subsystem_name[list of parameters] (list of input expressions) returns (list of output variables); ​ - If your subsystem ​have several parameters/​inputs/​outputs,​ you have to provide them in the order in which they are declared. + If your subsystem ​has several parameters/​inputs/​outputs,​ you have to provide them in the order in which they are declared. Line 59: Line 59: ====Extension domain==== ====Extension domain==== - (incoming) + + Let us assume that you have a system which computes a dot product of two vectors: + ​ + affine dotProduct {N | N>0} + input + float v1 {k | 0<​=k<​N};​ + float v2 {k | 0<​=k<​N};​ + output + float Res {|}; + let + Res = reduce(+, [k], v1[k]*v2[k]); + . + ​ + + If you want to compute a matrix vector multiplication using this affine system, you will need to instanciate it once per rows of the matrix. Thus, you will need a parametrised number of call to the "​dotProduct"​ system. + + It is possible to do it by using an extension domain: + ​ + affine dotProduct {N | N>0} + input + float v1 {k | 0<​=k<​N};​ + float v2 {k | 0<​=k<​N};​ + output + float Res {|}; + let + Res = reduce(+, [k], v1[k]*v2[k]);​ + . + + affine matrixVectorProduct {R,S | (R,​S)>​0} + input + float mat {i,j | 0<​=i<​R && 0<​=j<​S }; + float vect {j | 0<​=j<​S};​ + output + float vectRes {i | 0<​=i<​R};​ + let + use {k | 0<​=k<​R} dotProduct[R] ( mat, (k,​j->​j)@vect) returns (vectRes);​ + . + ​ + + The set "{k | 0≤k<​R}"​ before the subsystem name is called the **extension domain**. We are calling the system "​dotProduct"​ once, for each instance of "​k"​ in the extension domain. We can use the indexes of the extension domain to parametrize the parameters, inputs given to the subsystem and the outputs computed by the subsystem:​ + - the indexes can be used to specify the parameters (ex: "​R+k"​) + - the first dimensions of the input expressions correspond to the dimensions of the extension domain. For example, each row of "​mat"​ will be sent to a different instance of the subsystem (ex: in the previous example, the third instance of "​dotProduct"​ will receive "​(j->​3,​j)@mat"​ and "​(j->​j)@vect"​ as inputs). + - the first dimensions of the output variables correspond to the dimensions of the extension domain. All the results from every subsystem call are gathered inside common variables (ex: "​vectRes"​ is the output of the third instance of "​dotProduct"​) + + + Apart from the compatibility of dimensions, the input expressions must be defined at least on the points asked by the subsystem, and the output variable must be defined on a subset of the domain of the subsystem output. ====Transformations involving subsystems==== ====Transformations involving subsystems==== - (incoming, after the previous incoming) + **InlineSubSystem:​** Inline the equations of a subsystem inside the affine system calling it. The use equation of the main system is replaced by the equations of the subsystem ​(which are adapted), and new local variables are added. + + The command is: ''​void InlineSubSystem(Program program, String systemName, String label)''​ where ''​label''​ is the label of the inlined use equation. + + + **OutlineSubSystem:​** Given a list of equations of an affine systemm, outline them inside a new system and replace these equation by a use equation. The current version (July 2014) do not allow to specify an extension domain, however this is a work in progress. + + The command is ''​void OutlineSubSystem(Program program, String system, String listEquations)''​ where ''​listEquations''​ is the list of label of the equations to be outlined. 