Definition no_nil (t : Tree) : Prop := forall vs l ts, t = node (vs,l) ts -> l <> nil.Fact in_is_forest_no_nil : forall f ws, is_forest ws f -> 
 forall t, tree_in_forest t f -> no_nil t.Fact is_insert_tree_same_root : forall t t' w a, 
is_insert_tree t w a t' -> root_label t = root_label t'.Fact is_insert_forest_same_roots : forall f f' w a, 
is_insert_forest f w a f' -> roots_labels f = roots_labels f'.Fact roots_labels_exist : forall ts, (forall t, In t ts ->  no_nil t) -> 
  exists rrts, roots_labels ts = Some rrts.Fact insert_forest_aux_get : forall f a w, 
  (forall t, In t f -> no_nil t /\ exists t', is_insert_tree t w a t') ->
  exists f', is_insert_forest f w a f'.Fact insert_tree_get : forall t w a, 
  (forall t', subtree t' t -> no_nil t') ->
  exists t', is_insert_tree t w a t'.Fact insert_forest_get : forall f a w ws, is_forest ws f -> exists f', is_insert_forest f w a f'.Fact nil_forest : forall ws, is_forest ws nil -> ws = nil.Fact roots_labels_greater_get_tree : 
forall ts rrts, roots_labels ts = Some rrts ->
forall a, greater leA a rrts -> exists vs, exists b, exists bs, exists ts', 
leA b a /\ In (node (vs, b::bs) ts') ts.Fact is_insert_tree_neq : forall t, 
forall w a t', is_insert_tree t w a t' -> t <> t'.

Lemma is_insert_forest_neq_aux : forall f a w f', (exists vs, exists a', exists l, exists ts, In (node (vs,a'::l) ts) f /\ leA a' a) -> is_insert_forest f w a f' -> f <> f'.