{d:nat} ?record binheap(d) { degree: int(d); key: int; parent: [pd: int | pd > d] binheap(pd); child: [cd: int] | cd < d] binheap(cd); sibling: binheap(d-1); } with null: {d:int} binhead(d) ?record <'a> list with nat { head: 'a; tail: 'a * <'a> list(n) } with null: list(0)