blob: 6543247bbf429b06a288f1521e581c0b5e14851a [file] [edit]
module
/-!
`Array.back`, `Array.back!`, and `Array.back?` are `@[expose]`, so a
downstream `module` can reduce them under `decide` (and the kernel), exactly
like the `getElem?`/`size` accessors they are defined in terms of. Without
the attribute their bodies do not cross the module boundary and the `decide`
calls below get stuck on the unreduced application.
-/
-- Baseline: the accessors `back?` is built from already reduce.
example : (#[1, 2, 3] : Array Nat)[2]? = some 3 := by decide
example : (#[1, 2, 3] : Array Nat).size = 3 := by decide
-- The `back` family must reduce too.
example : (#[1, 2, 3] : Array Nat).back? = some 3 := by decide
example : (#[1, 2, 3] : Array Nat).back? = some 3 := by decide +kernel
example : (#[1, 2, 3] : Array Nat).back! = 3 := by decide
example : (#[1, 2, 3] : Array Nat).back = 3 := by decide