Mergesort and validation I have written an implementation of a Mergesort in Python3. An Ideone with the implementation is available. Any suggestions for improvement or any criticisms?

def merge(a, aux, lo, mid, hi):
    assert isSorted(a, lo, mid)
    assert isSorted(a, mid+1, hi)

    for k in range(lo, hi+1):
        aux[k] = a[k]

    i, j = lo, mid + 1
    for k in range(lo, hi+1):
        print("i = ",i, ", j = ",j)
        if i &gt; mid:
            a[k] = aux[j]
            j += 1
        elif j &gt; hi:
            a[k] = aux[i]
            i += 1
        elif aux[i] &lt; aux[j]:
            a[k] = aux[i]
            i += 1
        else:
            a[k] = aux[j]
            j += 1
    assert isSorted(a, lo, hi)    

def sort(a, aux, lo, hi):
    if (lo &gt;= hi): return a
    mid = math.floor(lo + (hi-lo) / 2)

    sort(a, aux, lo, mid)
    sort(a, aux, mid+1, hi)
    merge(a, aux, lo, mid, hi)

def merge_sort(a):
    aux = [0] * len(a)
    sort(a, aux, 0, len(a)-1)
    assert isSortedArray(a)

def isSorted(a, lo, hi):
    for i in range(lo, hi):
        if a[i+1] &lt; a[i]:
            return False
    return True

def isSortedArray(a):
    for i in range(0, len(a)-1):
        if a[i+1] &lt; a[i]:
            return False
    return True
You could avoid typing +1 and -1 in a few places by using inclusive-exclusive ranges, like 200_success nicely explained answering to your other question.
isSortedArray should call isSorted instead of repeating the same code.
Instead of math.floor(lo + (hi-lo) / 2) you could use integer division (lo + hi) // 2 so you don't need to import math.
Passing around aux just to have a place for temporary data in merge seems like an unnecessary complication. Instead you could just take two slices from a and merge them back into a.