On 07/18/2012 05:45 PM, Brian Huffman wrote:
Sorry for asking stupid questions (since I am to lazy to look it up myself):
what's the difference between "'a lift" and "'a u" exactly? Is either of
them preferable to model "Haskell-Integers"? I tried to instantiate "'a u"
for my eq-class, but failed due to sort problems, since I'm not that
familiar with the type class hierarchy of HOLCF, maybe you could save me
some time ;).

Type "'a u" or "'a\<^sub>\<bottom>" requires its argument to have
class "cpo". The ordering on "'a u" is the same as 'a, but with a new
bottom element.

Type 'a lift only requires its argument to have class "type"; the
ordering is always a flat pcpo. It is intended for use with HOL types
without cpo instances.

If 'a is a cpo with a discrete ordering, then 'a u and 'a lift are
isomorphic. However, I consider it a bad practice to use "lift" with
any type that actually has a cpo instance.

For modeling Haskell integers, I would suggest using "nat lift", "int
lift", etc. if you are not using the {Nat,Int}_Discrete libraries, but
if you are, I would prefer using "nat u" or "int u".
Thanks for the explanation. So "int u" it is.

Btw: any more thoughts on actually putting code into some publicly available
destination (bitbucket, sourceforge, ...)?

If you want to set up a bitbucket or sourceforge repo for this
purpose, that would be great. I'd be happy to contribute to something
like that.
I created a repository at

http://sourceforge.net/p/holcf-prelude/

I chose sourceforge since I could reuse my AFP related account (which should be true for many others). Please let me know when I should add you as Admin/Developer.

cheers

chris

PS: in the repo, "elem" is still based on the eq-class variant which I could not instantiate for "'a u"... It would be great if somebody could change "class eq" such that "'a u" becomes an instance.

PPS: As I mentioned in an earlier mail. I would like to add a constant "set :: 'a Data_List.list => 'a set" for specification purposes. I don't see how this is possible as inductive_set. Any hints?

The reason why I think I need this function is that I want to prove

  filter$P$(filter$Q$xs) = filter$Q$(filter$P$xs)

which is not true unconditionally due to strictness issues. I thought that using "set" I could formulate appropriate assumptions, such that the above equation holds, e.g., "ALL x : set xs. P x andalso Q x = Q x andalso P x".
_______________________________________________
isabelle-dev mailing list
[email protected]
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to