On Wed, 14 Aug 2013, Ondřej Kunčar wrote:

On 08/13/2013 04:19 PM, Andreas Lochbihler wrote:
Dear all,

in Isabelle abd760a19e22, I get the error "Attempt to perform
non-trivial merge of theories" when I include a bundle from another
theory and there are at least two imports.
In the attachment, there's an example.

The problem happens in the function Transfer.abstract_equalities_transfer where the theorem that is supposed to be registered by the attribute [transfer_rule] is combined with other theorems (used for preprocessing) that are stored in the theory data of the Transfer package (they are retrieved through Transfer.get_relator_eq).

But apparently it is not true for bundles. It seems that theorems that are stored in a bundle still live in a theory where the bundle was defined, and not in the theory where the attributes are applied (i.e., where including is invoked). Shouldn't be the theorems that are stored in a bundle transferred to a theory where including is invoked before the attributes are applied to them?

The transfer business should indeed be done more deeply on the system side -- even bundles are just a client there. Now that the "staleness" problem has disappeared from all our worries, the same should hold for transfer.

After two rounds of looking through it, I've devised the included change. It seems to address the situation exposed by Andreas, but breaks HOL/Quotient_Examples.thy here:

lift_definition fmember :: "'a ⇒ 'a fset ⇒ bool" (infix "|∈|" 50) is "λx xs. x ∈ set xs"
   parametric member_transfer by simp

exception THM 0 raised (line 404 of "thm.ML"):
  transfer: not a super theory
  bi_unique A  [bi_unique A]


This might be either a problem with "the context" on your side, or something else wrong in the system infrastructure.

I will look again soon, but am presently busy elsewhere.


        Makarius
# HG changeset patch
# User wenzelm
# Date 1376944425 -7200
# Node ID d25b70614fe66f015dc0bede016d352484724a8f
# Parent  6cd0feb85e35d0133b7392969ba3851c7fe13682
always transfer thm where attributes are applied -- relevant for internal 
'notes' (e.g. via bundle 'includes') in contrast to external 'notes' (cf. 
Proof_Context.retrieve_thms);

diff -r 6cd0feb85e35 -r d25b70614fe6 src/Pure/more_thm.ML
--- a/src/Pure/more_thm.ML      Mon Aug 19 20:47:09 2013 +0200
+++ b/src/Pure/more_thm.ML      Mon Aug 19 22:33:45 2013 +0200
@@ -407,7 +407,7 @@
 fun mixed_attribute f (x, th) = let val (x', th') = f (x, th) in (SOME x', 
SOME th') end;
 
 fun apply_attribute (att: attribute) th x =
-  let val (x', th') = att (x, th)
+  let val (x', th') = att (x, Thm.transfer (Context.theory_of x) th)
   in (the_default th th', the_default x x') end;
 
 fun attribute_declaration att th x = #2 (apply_attribute att th x);
_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to