1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# Omega Calculator v1.2 (based on Omega Library 1.2, August, 2000):
# # Passing array sections through array reshaping
# # procedure foo()
# # real a(1:5,1:64,1:64,1:5)
# # for i = 1 to 64 do
# # for j = 1 to 64 do
# # bar(a(1,i,j,1))
# # ...
# # procedure bar(x(*))
# # x(1:5) = ...
# #
# # Question which element of a are effected by the call to bar?
# #
# symbolic i,j;
#
# R := {[i1,i2,i3,i4] -> [o1] :
# (i1-1) + (i2-i)*5 + (i3-j)*5*64 + (i4-1)*5*64*64
# = o1-1
# && 1 <= i1,i4 <= 5
# && 1 <= i,j,i2,i3 <= 64};
#
# R;
{[i1,i2,i3,i4] -> [i1-320j-5i+5i2+320i3+20480i4-20480] : 1 <= j <= 64 && 1 <= i <= 64 && 1 <= i1 <= 5 && 1 <= i2 <= 64 && 1 <= i3 <= 64 && 1 <= i4 <= 5}
#
# (inverse R)({[1:5]});
{[i1,i,j,1]: 1 <= i <= 64 && 1 <= j <= 64 && 1 <= i1 <= 5}
#
|