| set_option trace.Elab.Deriving.hashable true | |
| inductive SimpleInd | |
| | A | |
| | B | |
| deriving Hashable | |
| theorem «inductive fields have different base hashes» : ∀ x, hash x = | |
| match x with | |
| | SimpleInd.A => 0 | |
| | SimpleInd.B => 1 := λ x => rfl | |
| mutual | |
| inductive Foo : Type → Type | |
| | A : Int → (3 = 3) → String → Foo Int | |
| | B : Bar → Foo String | |
| deriving Hashable | |
| inductive Bar | |
| | C | |
| | D : Foo String → Bar | |
| deriving Hashable | |
| end | |
| #eval hash (Foo.A 3 rfl "bla") | |
| #eval hash (Foo.B $ Bar.D $ Foo.B Bar.C) | |
| inductive ManyConstructors | A | B | C | D | E | F | G | H | I | J | K | L | |
| | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
| deriving Hashable | |
| theorem «Each constructor is hashed as a different number to make mixing better» : ∀ x, hash x = | |
| match x with | |
| | ManyConstructors.A => 0 | |
| | ManyConstructors.B => 1 | |
| | ManyConstructors.C => 2 | |
| | ManyConstructors.D => 3 | |
| | ManyConstructors.E => 4 | |
| | ManyConstructors.F => 5 | |
| | ManyConstructors.G => 6 | |
| | ManyConstructors.H => 7 | |
| | ManyConstructors.I => 8 | |
| | ManyConstructors.J => 9 | |
| | ManyConstructors.K => 10 | |
| | ManyConstructors.L => 11 | |
| | ManyConstructors.M => 12 | |
| | ManyConstructors.N => 13 | |
| | ManyConstructors.O => 14 | |
| | ManyConstructors.P => 15 | |
| | ManyConstructors.Q => 16 | |
| | ManyConstructors.R => 17 | |
| | ManyConstructors.S => 18 | |
| | ManyConstructors.T => 19 | |
| | ManyConstructors.U => 20 | |
| | ManyConstructors.V => 21 | |
| | ManyConstructors.W => 22 | |
| | ManyConstructors.X => 23 | |
| | ManyConstructors.Y => 24 | |
| | ManyConstructors.Z => 25 := λ x => rfl | |
| structure Person := | |
| FirstName : String | |
| LastName : String | |
| Age : Nat | |
| deriving Hashable | |
| structure Company := | |
| Name : String | |
| CEO : Person | |
| NumberOfEmployees : Nat | |
| deriving Hashable | |
| -- structures hash just fine | |
| #eval hash { | |
| Name := "Microsoft" | |
| CEO := { FirstName := "Satya", LastName := "Nadella", Age := 53 } | |
| NumberOfEmployees := 165000 : Company } | |
| -- 10875484723257753924 | |
| -- syntax(name := tst) "tst" : command | |
| -- @[command_elab «tst»] def elab_tst : CommandElab := fun stx => do | |
| -- let declNames := #[`Foo, `Bar] | |
| -- let declNames := #[`Foo] | |
| -- discard $ mkHashableHandler declNames | |
| -- pure () |