Definition split_token (n:nat) (tok:t) : t * t :=
match n with
| O => (bot,tok)
| S n' =>
(exist (fun x => canonicalTree x) (mkCanon (split_tok1 n' (proj1_sig tok))) (mkCanon_correct _)
,exist (fun x => canonicalTree x) (mkCanon (split_tok2 n' (proj1_sig tok))) (mkCanon_correct _)
)
end.

(* Specifications: *)
Lemma Eq_Ord : forall x y,
shareTreeEq x y -> shareTreeOrd x y.
Lemma split_token_correct : forall n1 n2 tok tok1 tok2,
isToken tok (n1+n2) ->
split_token n1 tok = (tok1,tok2) ->
isToken tok1 n1 /\
isToken tok2 n2 /\
join tok1 tok2 tok.