# 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} #