proposition: Lemma fold_isolate : forall A (E:set A) x, finite E -> x \in E -> forall B (m : monoid_op B), Comm_monoid m -> forall (f : A -> B), fold m f E = monoid_oper m (f x) (fold m f (E \- \{x})).
proof: Proof. Proof using. intros. rewrite (eq_union_single_remove_one E x) at 1 by eauto. erewrite <- (fold_single f x) by typeclass. eapply fold_union; eauto using remove_disjoint with finite. Qed.
imports: Coq.Classes.Morphisms TLC(LibTactics LibLogic LibReflect LibList LibOperation LibMonoid LibInt LibNat LibEpsilon LibRelation LibMin)