proposition: Lemma TrieOK_distinct_subtries : forall b m key' l k subtrie bst_m (OK : TrieOK (Node b m) l), InA (PX.eqke (elt:=Trie)) (k, subtrie) (elements (XMap.this (XMap.remove (elt:=Trie) key' {| XMap.this := m; XMap.is_bst := bst_m |}))) -> ~ X.eq k key'.
proof: Proof. simpl; intros. assert (bst (remove key' m)) by eauto using remove_bst. rewrite <- (@elements_mapsto_iff _ (XMap.Bst (H0))) in H; simpl in H0. unfold not; intros. symmetry in H1; revert H1. pose proof (@remove_mapsto_iff _ (XMap.Bst (bst_m))). eapply H1; simpl; eauto. Qed.
imports: Fiat.Common.Coq__8_4__8_5__Compat Fiat.QueryStructure.Implementation.DataStructures.Bags.BagsInterface Fiat.QueryStructure.Implementation.DataStructures.Bags.BagsProperties Coq.FSets.FMapInterface Coq.FSets.FMapFacts Coq.FSets.FMapAVL Coq.ZArith.ZArith Fiat.Common Fiat.Common.List.ListFacts Fiat.Common.List.FlattenList Fiat.Common.SetEqProperties Fiat.Common.FMapExtensions Fiat.Common.List.PermutationFacts Fiat.QueryStructure.Specification.SearchTerms.ListPrefix