This assignment is to implement 2-3 Trees in Omega using Omega';s type system to enforce the invariants of 2-3 trees.

See the following set of slides about 2-3 Trees I found on the web as an introduction.

2-3 Trees have the follwoing invariants (taken from wikipedia with some of my own improvements).

- Every non-leaf is a 2-node or a 3-node. A 2-node contains one data item and has two children. A 3-node contains two data items and has 3 children.
- All leaves are at the same level (the bottom level). This means the distance from a leaf to the root is the same for all leaf nodes.
- All data is kept in sorted order.
- Leaf node will contain 1 or 2 data fields.

Here is a picture of a 2-3 tree.

As homework do the following

- Define an Omega generalized algebraic datatype to encode 2-3-Trees.
- Use type indexes to encode as many of the invariants as you can. (You may leave out the sorted order invariant if you desire, but even this one is possible).
- Write an insert function that inserts an element and maintains the index invaraints, thus maintaining the balance invariant of the tree.