Hi Brian,

first of all, your report has indeed exposed a flaw in the processing of
class declarations which has been corrected in
http://isabelle.in.tum.de/repos/isabelle/rev/eddda8e38360,

Unfortunately, the processing of class declarations is notoriously
difficult, especially if the infamous "base sort" is something else than
{type}.

> class foo = cpo +
>   fixes foo :: "'a → 'a"
> 
> class bar = foo + pcpo +
>   assumes "foo⋅⊥ = ⊥"

The main issue is that ⊥ is just "global" as ⊥::pcpo;  for be able to
cope with such class specification may feature a specific "base sort":

> class foo =
>   fixes foo :: "'a → 'a"
> 
> class bar =
>   assumes "foo⋅⊥ = (⊥::'a::{foo, pcpo})"

But is extremely difficult if not impossible to mix base-sort-based
inheritance with the regular class inheritance.  If ⊥ would exist in a
local variant in class pcpo, you would just write:

> class foo = cpo +
>   fixes foo :: "'a::type → 'a"
>
> class bar = foo + pcpo +
>   assumes "foo⋅(⊥'a::::type) = ⊥"

I admit that the class command comes with a strong assumption that users
develop their specifications locally if they want refer to them in class
specifications and if not the old-style axclass sometimes appeared more
leigthweight.  However additional options etc. emulating this old
behaviour complicate the whole matter notoriously.

        Florian

-- 

Home:
http://www.in.tum.de/~haftmann

PGP available:
http://home.informatik.tu-muenchen.de/haftmann/pgp/florian_haftmann_at_informatik_tu_muenchen_de

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Isabelle-dev mailing list
Isabelle-dev@mailbroy.informatik.tu-muenchen.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to