proposition: Lemma Permute_XMapfold_cons : forall m l, XMapfold (fun (_ : X.t) (tries : Trie) (bags : list BagType) => Trie_enumerate tries ++ bags) m l = (XMapfold (fun (_ : X.t) (tries : Trie) (bags : list BagType) => Trie_enumerate tries ++ bags) m []) ++ l.
proof: Proof. induction m; simpl; eauto. intros. rewrite IHm2; symmetry; rewrite IHm2. rewrite <- !app_assoc; f_equiv; f_equiv. symmetry; 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