# AlphaZ

### Site Tools

tutorial_subsystem

# Differences

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

 tutorial_subsystem [2014/07/12 07:43]guillaume [Extension domain] 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 60: Line 60: - Let us assume that you have a system which computes a dot product ​between ​two vectors: + Let us assume that you have a system which computes a dot product ​of two vectors: - + affine dotProduct {N | N>0} affine dotProduct {N | N>0} input input Line 73: Line 73: ​ - If you want to compute a matrix vector multiplication using this affine system, you will need to call it once per rows of the matrix. Thus, you will need a parametrised number of call to the "​dotProduct"​ system. + 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: It is possible to do it by using an extension domain: - + affine dotProduct {N | N>0} affine dotProduct {N | N>0} input input Line 94: Line 94: float vectRes {i | 0<​=i<​R};​ float vectRes {i | 0<​=i<​R};​ let let - use {k | 0<​=k<​R} dotProduct[R] ( (k,​j->​k,​j)@mat, (k,​j->​j)@vect) returns (vectRes); + 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 ​an 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 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 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 a given subsystem call kInst, the corresponding input sent is the one where the first dimensions are set to "​kInst" ​(ex: in the previous example, the third call to "​dotProduct"​ will obtain ​"​(j->​3,​j)@mat"​ and "​(j->​j)@vect"​ as inputs). + - 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[3]"​ is the output of the third instance of "​dotProduct"​) - 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[3]"​ is the output of the third instance of "​dotProduct"​) Line 109: Line 109: ====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.
tutorial_subsystem.1405172604.txt.gz · Last modified: 2014/07/12 07:43 by guillaume