Hi Ramana,

It's rather a similar situation to what I wrote about in

http://users.cecs.anu.edu.au/~jeremy/pubs/fgc/fgs/fgs.pdf

and also

http://users.cecs.anu.edu.au/~jeremy/pubs/fgc/cats/fgc.ps

except that I seem to have used sets instead of lists (which I don't 
think should make a difference), and I seem to not have noticed that I 
was reinventing the standard option type.

I used these types to represent a non-deterministic computation with the 
possibility of non-termination.

For the 'a set option result type, a computation is regarded as (let's 
say) "unreliable" and so non-terminating, when there is only the 
possibility of non-termination.
For the 'a option set result type, you are interested in the possible 
(terminating) results even when non-termination is also possible.

Both types, ie, 'a option set, and 'a set option, are compound monads, 
and your function is a monad morphism, which is also used in a certain 
construction which can be used to prove that the latter is indeed a 
compound monad.

Cheers,

Jeremy

On 20/09/15 18:08, Ramana Kumar wrote:
> Hi all,
>
> I think this must be some neat combination of category theory things.
> Does anyone know which? Or if it's already defined somewhere?
>
> val map_option_def = Define`
>    (map_option [] = SOME []) ∧
>    (map_option (NONE::_) = NONE) ∧
>    (map_option (SOME x::ls) =
>     case map_option ls of
>     | SOME ls => SOME(x::ls)
>     | NONE => NONE)`;
>
> Cheers,
> Ramana
>
> ------------------------------------------------------------------------------
> _______________________________________________
> hol-info mailing list
> hol-info@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/hol-info
>

------------------------------------------------------------------------------
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to