#1: removed unnecessary clone operations to save memory and computation time
#2: cleaned up the code
#1: now only tracking a single abstraction per array and source since we don't distinguish array indices anyway
#2: added a new test case for array aliasing