proposition: Lemma refine_List_Query_In_Return {QueryT ResultT : Type} (l : list QueryT) (proj : QueryT -> ResultT) : refine (List_Query_In l (fun tup => Query_Return (proj tup))) (ret (map proj l)) .
proof: Proof. induction l; unfold Query_For, List_Query_In, Query_Return in *; simpl; intros. - reflexivity. - simplify with monad laws. rewrite IHl; simplify with monad laws. reflexivity. Qed.
imports: Coq.Strings.String Coq.ZArith.ZArith Coq.Lists.List Coq.Logic.FunctionalExtensionality Coq.Sets.Ensembles Coq.Sorting.Permutation Fiat.Computation Fiat.ADT Fiat.ADTRefinement Fiat.ADTNotation Fiat.ADTRefinement.GeneralBuildADTRefinements Fiat.QueryStructure.Specification.Representation.QueryStructureSchema Fiat.QueryStructure.Specification.Operations.Query Fiat.QueryStructure.Specification.Representation.QueryStructure Fiat.QueryStructure.Implementation.Operations.General.QueryRefinements Fiat.Common.SetEq Fiat.Common.Ensembles.IndexedEnsembles Fiat.Common.DecideableEnsembles Fiat.Common.List.ListMorphisms Fiat.Common.List.FlattenList Fiat.QueryStructure.Specification.Operations.FlattenCompList Fiat.Common.List.ListFacts