<div dir="ltr"><div><div>Hi Gleb,<br><br></div>I think join/meet-semilattices captures idempotence (in a sense, convexity and monotonicity) pretty well, but they may require a slightly different/stronger structure than what you may need.  Depending on the properties you really need, maybe a Poset is enough.<br><br>For example, the "meet" function maps pairs of elements of "S" to elements of "S". Whereas your "update" takes an "S" and an arbitrary "a", which is slightly different. However, if you have an existing "update" function for some given a, one possibility is to project any "a" to an "S" with "update empty :: a -> S". Then you can work using the semilattice.<br></div><div><br></div><div>Cheers,<br></div>--Lucas<br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-20 22:12 GMT+01:00 Gleb Peregud <span dir="ltr"><<a href="mailto:gleber.p@gmail.com" target="_blank">gleber.p@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello<div><br></div><div>I am wondering if there's a well known algebraic structure which follows the following patterns. Let's call it S:</div><div><br></div><div>It's update-able with some opaque "a" (which can be an element or an operation with an element):</div><div><br></div><div>    update :: S -> a -> S<br></div><div><br></div><div>There's a well defined zero for it:</div><div><br></div><div>    empty :: S</div><div><br></div><div>Operations on it are idempotent:</div><div><br></div><div>    update s a == update (update s a) a</div><div><br></div><div>Every S can be reconstructed from a sequence of updates:</div><div><br></div><div>    forall s. exists [a]. s == foldl update empty [a]</div><div><br></div><div><br></div><div>An example of this would be Data.Set:</div><div><br></div><div>    empty = Set.empty</div><div>    update = flip Set.insert</div><div><br></div><div>Is there something like this in algebra?</div><div><br></div><div>Cheers,</div><div>Gleb</div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>