∀ {α : Type u} {β : Type v} (as : Array α) (stop : ℕ) (motive : (i : ℕ) → i ≤ as.size → β → Prop),
  (∀ (t : ℕ) (h : t ≤ as.size) (b : β), (t == stop) = true → motive t h b) →
    (∀ (b : β) (x : 0 ≤ as.size), ¬(0 == stop) = true → motive 0 x b) →
      (∀ (b : β) (i : ℕ) (h : i + 1 ≤ as.size) (this : i < as.size),
          ¬(i.succ == stop) = true → (∀ (__do_lift : β), motive i ⋯ __do_lift) → motive i.succ h b) →
        ∀ (i : ℕ) (h : i ≤ as.size) (b : β), motive i h b