Proving the algorithm that orders an array according to the specified positions
You can't prove a false statement to be true :P

Consider this example:

a = [1, 2, 0]
b = ['a', 'b', 'c']


Output should be:

b = ['c', 'a', 'b' ]


But your algorithm will output:

b = ['c', 'b', 'a']


This because when you swap an element in its "final" position a[i] it's possibile that in one of the next loops that element will be swapped again.

To solve this problem think about swapping a[ ] elements too. :)