miscelleaneous

Random Lean experiments

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
-- https://lean-lang.org/doc/api/Lake/Util/Family.html

import Lean
import Lake
open Lean
open Lake

opaque FooFam (idx : Name) : Type

abbrev FooMap := Std.DTreeMap Name FooFam Name.quickCmp
def FooMap.insert (self : FooMap) (idx : Name) [FamilyOut FooFam idx α] (a : α) : FooMap :=
  Std.DTreeMap.insert self idx (toFamily a)
def FooMap.get? (self : FooMap) (idx : Name) [FamilyOut FooFam idx α] : Option α :=
  ofFamily <$> Std.DTreeMap.get? self idx

family_def bar : FooFam `bar := Nat
family_def baz : FooFam `baz := String
def foo := Id.run do
  let mut map : FooMap := {}
  map := map.insert `bar 5
  map := map.insert `baz "str"
  return map.get? `bar

def f (idx : Name) [FamilyOut FooFam idx α] :=
  match

#eval foo -- 5