proposition: Lemma EnsembleIndexedListEquivalence_TupleToListW_UnIndexedEquiv_Characterisation: forall (n : nat) (lst : list (FiatWTuple n)) (x : list BedrockWElement), map TuplesF.indexedElement x = map TupleToListW lst -> map2 (fun (x0 : BedrockWElement) (y : FiatWTuple n) => TupleToListW_indexed {| IndexedEnsembles.elementIndex := TuplesF.elementIndex x0; IndexedEnsembles.indexedElement := y |}) x lst = x.
proof: Proof. unfold TupleToListW_indexed; cleanup; simpl; rewrite map2_two_maps, <- H, two_maps_map2; apply map_id'; destruct 0; reflexivity. Qed.
imports: Bedrock.Platform.Facade.examples.TuplesF CertifiedExtraction.Utils Bedrock.Memory CertifiedExtraction.Extraction.QueryStructures.Basics CertifiedExtraction.Extraction.QueryStructures.AllOfLength CertifiedExtraction.Extraction.QueryStructures.TupleToListW CertifiedExtraction.Extraction.QueryStructures.Zip2 Coq.Lists.List Coq.Program.Program