[isabelle-dev] Minor issue in HOL-Types_To_Sets/unoverload_type.ML
Fabian Immler
immler at in.tum.de
Mon May 13 15:16:42 CEST 2019
Thank you for reporting this.
You are right with your understanding of the (intended) behavior of
unoverload_type.
I guess all of my test cases involved type classes depending on
"syntactic" type classes, that is why I did not notice this omission.
@Makarius: Could you please add the attached exported changeset to
isabelle-release?
Otherwise I'll push the change to isabelle-dev.
Best regards,
Fabian
On 5/13/2019 2:18 AM, mailing-list anonymous wrote:
> Dear Fabian Immler/All,
>
> I hope it is appropriate to post this issue on isabelle-dev: I do not
> want to flood the main discussion with obscure issues in auxiliary packages.
>
> I cannot seem to understand why the function params_of_super_classes in
> HOL-Types_To_Sets/unoverload_type.ML does not include the class for
> which the parameters need to be obtained. This causes an issue whenever
> I try to unoverload a type, whose sort contains a parameter that belongs
> to it. This issue can be resolved with the following amendment (I cannot
> be certain if this amendment could cause other issues somewhere, but it
> seems unlikely):
>
> fun params_of_super_classes thy class =
> Sorts.super_classes (Sign.classes_of thy) class |> maps
> (params_of_class thy)
> |
> fun params_of_super_classes thy class =
> class :: Sorts.super_classes (Sign.classes_of thy) class |> maps
> (params_of_class thy)
>
> It is my understanding that the attribute unoverload_type was defined as
> a substitute for the combination of attributes internalize_sort +
> unoverload. However, unlike unoverload_type, internalize_sort +
> unoverload can be used for classes with parameters that are defined
> within the class (see the example after my signature).
>
> If the behaviour of unoverload_type is intended, I would like to
> understand why it is different from internalize_sort + unoverload.
> Otherwise, I would appreciate if this issue could be resolved before the
> next release of Isabelle.
>
> Thank you
>
> theory unoverload_type_test
> imports
> "HOL-Types_To_Sets.Prerequisites"
> "HOL-Types_To_Sets.Types_To_Sets"
> begin
>
> class ss_ord =
> fixes F :: "'a ⇒ nat"
> assumes Fx: "F x = 1"
>
> locale ss_ord_ow =
> fixes U and F' :: "'aq ⇒ nat"
> assumes Fx: "x ∈ U ⟹ F' x = 1"
>
> lemma ss_ord_transfer[transfer_rule]:
> includes lifting_syntax
> assumes[transfer_rule]: "right_total A" "bi_unique A"
> shows
> "((A ===> (=)) ===> (=))
> (ss_ord_ow (Collect (Domainp A))) class.ss_ord"
> unfolding ss_ord_ow_def class.ss_ord_def
> apply transfer_prover_start
> apply transfer_step+
> by simp
>
> lemma ss_ord: "class.ss_ord = ss_ord_ow UNIV"
> unfolding class.ss_ord_def ss_ord_ow_def by simp
>
> locale local_typedef_ss_ord_ow =
> local_typedef 𝔘 s + ss_ord_ow 𝔘 F
> for 𝔘 :: "'aq set" and F and s :: "'s itself"
> begin
>
> context
> includes lifting_syntax
> begin
>
> definition F_S :: "'s ⇒ nat" where "F_S = (rep ---> id) F"
>
> lemma F_S_transfer[transfer_rule]:
> "(cr_S ===> (=)) F F_S"
> apply(intro rel_funI) unfolding F_S_def cr_S_def by simp
> end
>
> sublocale type: ss_ord F_S
> by transfer (unfold Collect_mem_eq, rule ss_ord_ow_axioms)
>
> lemma type_ss_ord_ow: "ss_ord_ow UNIV F_S"
> proof -
> have "class.ss_ord F_S" by (rule type.ss_ord_axioms)
> thus ?thesis unfolding ss_ord by assumption
> qed
>
> end
>
> setup ‹Sign.add_const_constraint
> (\<^const_name>‹F›, SOME \<^typ>‹'a ⇒ nat›)›
>
> context ss_ord_ow
> begin
>
> context
> includes lifting_syntax
> assumes ltd: "∃(Rep::'s ⇒ 'aq) (Abs::'aq ⇒ 's). type_definition Rep
> Abs U"
> begin
>
> interpretation lt: local_typedef_ss_ord_ow U F' "TYPE('s)"
> by unfold_locales fact
>
> (*works as expected*)
> lemmas_with[
> unfolded ss_ord,
> internalize_sort "'a::ss_ord",
> unoverload "F :: 'a ⇒ nat",
> unfolded ss_ord,
> rule_format,
> OF lt.type_ss_ord_ow,
> untransferred
> ]:
> ut_error = ss_ord_class.Fx
>
> (*does not seem to work without the amendment to params_of_super_classes*)
> lemmas_with[
> unfolded ss_ord,
> unoverload_type 'a,
> where 'a = 's,
> unfolded ss_ord,
> OF lt.type_ss_ord_ow,
> untransferred
> ]:
> ut_error = ss_ord_class.Fx
>
> end
>
> end
>
> end
>
>
> --
> Please accept my apologies for posting anonymously. This is done to
> protect my privacy. I can make my identity and my real contact details
> available upon request in private communication under the condition that
> they are not to be mentioned on the mailing list.
-------------- next part --------------
# HG changeset patch
# User immler
# Date 1557747599 -7200
# Mon May 13 13:39:59 2019 +0200
# Node ID e20071180875d1789d55226e967d660fa589d1ef
# Parent ad0306b89cfb39e9f7790e8157a1931c0d732b31
amended to unoverload actually all parameters of a type variable
diff -r ad0306b89cfb -r e20071180875 src/HOL/Types_To_Sets/unoverload_type.ML
--- a/src/HOL/Types_To_Sets/unoverload_type.ML Sat May 11 15:53:11 2019 +0200
+++ b/src/HOL/Types_To_Sets/unoverload_type.ML Mon May 13 13:39:59 2019 +0200
@@ -16,7 +16,7 @@
fun params_of_class thy class = try (Axclass.get_info thy #> #params) class |> these
fun params_of_super_classes thy class =
- Sorts.super_classes (Sign.classes_of thy) class |> maps (params_of_class thy)
+ class::Sorts.super_classes (Sign.classes_of thy) class |> maps (params_of_class thy)
fun params_of_sort thy sort = maps (params_of_super_classes thy) sort
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5581 bytes
Desc: S/MIME Cryptographic Signature
URL: <https://mailman46.in.tum.de/pipermail/isabelle-dev/attachments/20190513/fffbf86a/attachment.bin>
More information about the isabelle-dev
mailing list