This PR changes the signature of `Array.swap`, so it takes `Nat` arguments with tactic provided bounds checking. It also renames `Array.swap!` to `Array.swapIfInBounds`.
12 lines
370 B
Text
12 lines
370 B
Text
def myfunUnsafe (x : Array α) (i : Fin x.size) : Array α :=
|
||
sorry
|
||
|
||
@[implemented_by myfunUnsafe]
|
||
def myfun (x : Array α) (i : Fin x.size) : Array α :=
|
||
let next := 2*i.1 + 1
|
||
if h : next < x.size then
|
||
have : x.size - next < x.size - i.1 := sorry
|
||
myfun (x.swap i next) ⟨next, (x.size_swap _ _).symm ▸ h⟩
|
||
else
|
||
x
|
||
termination_by x.size - i.1
|