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.

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.