Definition create_token (n:nat) (fac:t) : t*t :=
      match n with
      | O => (fac,bot)
      | S n' =>
         (exist (fun x => canonicalTree x) (mkCanon (create_tok1 n' (proj1_sig fac))) (mkCanon_correct _),
          exist (fun x => canonicalTree x) (mkCanon (create_tok2 n' (proj1_sig fac))) (mkCanon_correct _))
      end.

Lemma fac_tok_classification : forall fac n, isTokenFactory' fac n -> forall tok m, isToken' tok m -> shareTreeOrd (intersect_tree fac tok) (Leaf false) -> ( n = m -> shareTreeEq (union_tree tok fac) (Leaf true)) /\ ( n < m -> False ) /\ ( n > m -> shareTreeEq (union_tree tok fac) (Leaf true) -> False).