lean4-htt/tests/lean/run/4230.lean
2025-05-13 11:11:22 +00:00

22 lines
634 B
Text

def copy (curr : Nat) (input : Array Nat) (output : Array Nat) : Array Nat :=
if hcurr:curr < input.size then
copy (curr + 1) input (output.push (input[curr]'hcurr))
else
output
termination_by input.size - curr
/-- info: Try this: termination_by input.size - curr -/
#guard_msgs(drop warning, info) in
theorem foo (curr : Nat) (input : Array Nat) (output : Array Nat)
: ∀ (idx : Nat) (hidx1 : idx < curr),
(copy curr input output)[idx]'sorry
=
output[idx]'sorry := by
intro idx hidx
unfold copy
split
. rw [foo]
. rw [Array.getElem_push_lt]
. omega
. rfl
termination_by?