Вы можете сначала неформально убедить себя, что эта гипотеза у вас есть (по модулю записи)
H0 : Forall (fun y : Z => (a0 <= y)%Z) (L1 ++ a :: L2)
подразумевает цель
Forall (fun y : Z => (a0 <= y)%Z) (L1 ++ L2)
так что вы на правильном пути. Вышеуказанное следствие доказывается другой индукцией на L1
.
Этот подход оправдан, потому что StronglySorted
фактически определяется аналогично двойной индукции: каждый суффикс строго отсортирован (первая индукция), а заголовок меньше, чем другие элементы (вторая индукция для каждого шага первого).