This PR deprecates `List.iota`, which we make no essential use of. `iota n` can be replaced with `(range' 1 n).reverse`. The verification lemmas for `range'` already have better coverage than those for `iota`. Any downstream projects using it (I am not aware of any) are encouraged to adopt it.
39 lines
1 KiB
Text
39 lines
1 KiB
Text
structure Foo where
|
||
name : String
|
||
val : List Nat
|
||
lower : Nat := List.length val
|
||
inv : val.length >= lower
|
||
flag : Bool
|
||
deriving Hashable
|
||
|
||
#eval hash <| { name := "Joe", val := (List.range' 1 40).reverse, flag := true, inv := by decide : Foo }
|
||
|
||
inductive Tree (α : Type) where
|
||
| node : List (Tree α) → Bool → Tree α
|
||
| leaf : α → Tree α
|
||
deriving Hashable
|
||
|
||
#eval hash <| Tree.node ((List.range' 1 10).reverse |>.map fun i => Tree.node [Tree.leaf i] (i%2==0)) true
|
||
|
||
inductive StructureLikeInductive where
|
||
| field : Nat -> StructureLikeInductive
|
||
deriving Hashable
|
||
|
||
#eval StructureLikeInductive.field 5 |> hash
|
||
|
||
namespace Foo
|
||
mutual
|
||
inductive Tree (α : Type u) where
|
||
| node : TreeList α → Tree α
|
||
| leaf : α → Tree α
|
||
deriving Hashable
|
||
|
||
inductive TreeList (α : Type u) where
|
||
| nil : TreeList α
|
||
| cons : Tree α → TreeList α → TreeList α
|
||
deriving Hashable
|
||
end
|
||
|
||
#eval hash <| Tree.node (TreeList.cons (Tree.leaf 30) (TreeList.cons (Tree.leaf 20) (TreeList.cons (Tree.leaf 10) TreeList.nil)))
|
||
|
||
end Foo
|