38 lines
1.1 KiB
Text
38 lines
1.1 KiB
Text
module
|
|
|
|
import Std
|
|
open Std Std.Do
|
|
|
|
set_option mvcgen.warning false
|
|
|
|
def isSorted (xs : Array Nat) : Bool := Id.run do
|
|
if h : xs.size > 0 then
|
|
let mut last := xs[0]
|
|
let mut repeated := false
|
|
for x in xs[1...*] do
|
|
match compare last x with
|
|
| .lt =>
|
|
last := x
|
|
repeated := false
|
|
| .eq =>
|
|
if repeated then
|
|
return false
|
|
else
|
|
repeated := true
|
|
| .gt =>
|
|
return false
|
|
return true
|
|
|
|
example : isSorted #[5] = true := by cbv
|
|
example : isSorted #[1, 2, 3, 4, 5] = true := by cbv
|
|
example : isSorted #[1, 3, 2, 4, 5] = false := by cbv
|
|
example : isSorted #[1, 2, 3, 4, 5, 6] = true := by cbv
|
|
example : isSorted #[1, 2, 3, 4, 5, 6, 7] = true := by cbv
|
|
example : isSorted #[1, 3, 2, 4, 5, 6, 7] = false := by cbv
|
|
example : isSorted #[] = true := by cbv
|
|
example : isSorted #[1] = true := by cbv
|
|
example : isSorted #[3, 2, 1] = false := by cbv
|
|
example : isSorted #[1, 2, 2, 2, 3, 4] = false := by cbv
|
|
example : isSorted #[1, 2, 3, 3, 3, 4] = false := by cbv
|
|
example : isSorted #[1, 2, 2, 3, 3, 4] = true := by cbv
|
|
example : isSorted #[1, 2, 3, 4] = true := by cbv
|