proposition: Lemma ret_fold_fold_ret : forall {TElem TAcc} (f: TAcc -> TElem -> TAcc) lst (init: TAcc), Monad.equiv (ret (fold_left f lst init)) (fold_left (fun (acc: Comp TAcc) x => (a <- acc; ret (f a x))%comp) lst (ret init)).
proof: Proof. intros; apply ret_fold_fold_ret_lemma; apply SetoidMorphisms.equiv_refl. Qed.
imports: CertifiedExtraction.Extraction.Internal CertifiedExtraction.Extraction.External.Core CertifiedExtraction.Extraction.External.Loops CertifiedExtraction.Extraction.External.GenericADTMethods CertifiedExtraction.Extraction.External.FacadeADTs