Re: [isabelle] Problems with multiple patterns in simproc_setup

Another common beginner's trap is the simultaneous type inference on lemmas. At some point, you write down a list of statements in a single lemma. This perfectly makes sense if the statements are related and are proved with the same by (auto...) method. However it is all too easy to have such lemmas a less general type than intended, due to all statements being typed simultaneously. I still run into this trap occasionally...


-------- Original Message --------
Subject: Re: [isabelle] Problems with multiple patterns in simproc_setup
From: Tobias Nipkow <nipkow at>
To: cl-isabelle-users at

This raises the question why type inference is applied to two alternative
patterns simultaneously. Function definitions (fun in Isabelle) don't do that
and it would be better if the simproc setup didn't do it either.


On 24/10/2019 09:44, Mathias Fleury wrote:
> Hi Christoph,
> The problem is type inference. With ("prod f A" | "sum f B"), f gets the
> type 'a::type ⇒ 'b::{comm_monoid_add,comm_monoid_mult}. However, in your
> lemmas, you get only either comm_monoid_add or comm_monoid_mult but not
> both. If you force the types to have both:
> lemma "(\i=1..3. i) = (\i=0..2. (i ::
> 'b::{zero,numeral,ord,comm_monoid_add,comm_monoid_mult}) + 1)"
> then the simproc triggers. The reason why [\<^term>\prod f A\,
> \<^term>\sum f A\] works is that the type inference is done
> separately in the two expressions instead of being done together.
> Best regards,
> Mathias
> Le jeu. 24 oct. 2019 à 09:30, Christoph Madlener a
> écrit :
>> Hello,
>> I am writing some simprocs and encountered a problem when using
>> simproc_setup to install them. As you can see in the attached example,
>> when multiple patterns for the simproc contain the same variable, the
>> simproc isn't triggered for any of the given patterns. (I also
>> encountered a case where the simproc was triggered for some, but not all
>> given patterns)
>> The problem can be avoided by either using unique identifiers, calling
>> simproc_setup multiple times or using Simplifier.make_simproc - note
>> that for the latter the patterns work as expected. I also attached an
>> example with working solutions.
>> Best regards,
>> Christoph

This archive was generated by a fusion of Pipermail (Mailman edition) and MHonArc.