[isabelle-dev] NEWS: ML antiquotations for type constructors and term constants

Makarius makarius at sketis.net
Wed Sep 29 12:19:55 CEST 2021

On 22/09/2021 17:50, Makarius wrote:
> On 22/09/2021 14:15, Peter Lammich wrote:
>> Btw, the upper end of complexity for term creation @{mk_term} is
>> something like:
>> @{mk_term "Refine_Basic.bind$(RETURN$(COPY$?p))$?t'"}
>> which looks like a lot of effort to write down in plain ML, or with
>> basic Const antiquotations. In particular, note that all types in the
>> term need to be inferred from the types of ?p and ?t'.
> Here is the direct correspondence to the new antiquotations:

Update for Isabelle/e585e5a906ba:

theory Scratch
  imports Refine_Imperative_HOL.Sepref_Rules Refine_Imperative_HOL.Sepref_Monadify

ML ‹
  fn p => fn t' =>
    @{mk_term "Refine_Basic.bind$(RETURN$(COPY$?p))$?t'"}›

ML ‹
  fn A => fn B => fn p => fn t' =>
    \<^Const>‹Refine_Basic.bind A B for
      \<^Const>‹RETURN A for \<^Const>‹COPY A for p›› t'›


Thus it is a bit more concise and to the point: no extra nesting of cartouches.

Are there any remaining uses of your alternative antiquotations that are not
covered properly by the new official scheme?


More information about the isabelle-dev mailing list