Tính đúng đắn & Loop Invariant

Ba module tương tác: xem invariant được duy trì từng bước trong insertion sort & binary search, và theo dõi variant giảm dần chứng minh thuật toán dừng.

1 · Insertion sort — invariant "a[0..i−1] đã sắp xếp"

Vùng xanh luôn thỏa invariant: đã sắp xếp tăng dần. Bấm "Bước" để xem nó lớn dần tới khi phủ cả mảng.

a[0..i−1] đã sắp (invariant) key đang chèn đang dời/so sánh

2 · Binary search — invariant "target ∈ [lo, hi]"

Mảng đã sắp xếp. Vùng tím = đoạn [lo,hi] còn phải xét. Mỗi bước đoạn co lại (variant giảm) nhưng invariant "nếu target có thì nó nằm trong đoạn tím" luôn đúng.

target:
[lo,hi] còn xét mid đã loại tìm thấy

3 · Termination tracker — variant giảm dần tới chặn dưới

Chứng minh thuật toán dừng = tìm đại lượng số nguyên giảm chặt mỗi vòng & có chặn dưới. Vạch xanh là chặn dưới (0). Thanh rút ngắn dần → loop hữu hạn.

Loop: