Indeed I find the code peculiar, in that it delivers the higher-order matchers followed by the first-order ones. But these are different things. And I imagine there is often redundancy. Larry
On 19 Nov 2010, at 15:50, Michael Chan wrote: > On 19/11/10 14:10, Lawrence Paulson wrote: >> If you look at the file Pure/envir.ML, you will find the definition of >> environments (which has separate components for the two assignments) as well >> as primitives that you should use to apply an environment to a term. If you >> only look at assignments to variables (as opposed to type variables), you >> won't see the effect of the type variable assignments. > > Thanks. The variable and type variables assignments for matcher 4. (from the > FO matcher) are > > [?f::?'b1 => ?'a1 := g, ?v::?'a1 := 0::nat, ?stuff::?'b1 := a] > [?'a1 := nat, ?'b1 := nat] > > so that's what is expected and it's equivalent to matcher 2. (from the HO > matcher): > > [?f::nat => nat := g, ?v::nat := 0::nat, ?stuff::nat := a] > [?'a1 := nat, ?'b1 := nat] > > Would you regard the FO matcher to be a redundant duplicate? If so, should it > be dropped? > > Michael > >> Larry >> >> On 19 Nov 2010, at 13:02, Michael Chan wrote: >> >>> On 19/11/10 12:28, Lawrence Paulson wrote: >>>> Looking at this again, I'm not certain there is a bug. You are displaying >>>> the variable assignments, but are you first applying the type variable >>>> assignments? Both must be used in order to instantiate the object term. >>> >>> Please bear with me -- I'm not sure about the type variable assignments >>> part of your response. Doesn't the unifier unify both types and terms? If >>> so, why are type variable assignments needed in order to instantiate the >>> object term? >>> >>> I'm calling Unify.matchers on the pattern and the lemma, so I suspect I >>> might not be applying the type variable assignments. How can they be >>> obtained? And when you said applying the assignments, did you mean giving >>> the unifier the assignments? >>> >>> Here's a snippet of my code: >>> >>> ML {* >>> >>> val trm1 = term_of @{cpat "(?f::?'a=>?'b) ?stuff = ?v"}; >>> val trm2 = Thm.prop_of @{thm lem}; >>> >>> val mtch_seq = let >>> val init = Envir.empty 0 >>> val ctxt = @{context} >>> val (Const ("Trueprop",_) $ trm2) = Thm.prop_of (ProofContext.get_thm ctxt >>> "lem") >>> in >>> Unify.matchers @{theory} [(trm1,trm2)] >>> end; >>> >>> *} >>> >>> Thanks again >>> >>> Michael >>> >>>> Larry >>>> >>>> On 19 Nov 2010, at 11:11, Michael Chan wrote: >>>> >>>>> I can confirm that the first lemma's matcher 4. and the second lemma's >>>>> only matcher are results of the FO matcher. So, I guess the above >>>>> question becomes: how come the FO matcher doesn't instantiate the type >>>>> variables? Of course, this is a different question to why the HO matcher >>>>> doesn't return matchers to the second lemma. >>>> >>>> >>> >>> >>> -- >>> Postal Address: School of Informatics, University of Edinburgh, >>> Room 2.05, Informatics Forum, 10 Crichton Street, >>> Edinburgh EH8 9AB, UK. >>> Telephone Number: +44-131-651-3077, >>> Fax Number: +44-131-650-6899, >>> Email: m.c...@ed.ac.uk >>> Web Page: http://homepages.inf.ed.ac.uk/mchan/ >>> >>> The University of Edinburgh is a charitable body, registered in >>> Scotland, with registration number SC005336. >>> >> >> > > > -- > Postal Address: School of Informatics, University of Edinburgh, > Room 2.05, Informatics Forum, 10 Crichton Street, > Edinburgh EH8 9AB, UK. > Telephone Number: +44-131-651-3077, > Fax Number: +44-131-650-6899, > Email: m.c...@ed.ac.uk > Web Page: http://homepages.inf.ed.ac.uk/mchan/ > > The University of Edinburgh is a charitable body, registered in > Scotland, with registration number SC005336. > _______________________________________________ Isabelle-dev mailing list Isabelle-dev@mailbroy.informatik.tu-muenchen.de https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev