[isabelle-dev] Global constant names in inductive

Lars Hupel hupel at in.tum.de
Thu Apr 6 13:08:06 CEST 2017


> Did you encounter an actual problem from that situation?
> 
> Formally, a comment is not a problem. "Fixing" such things prematurely
> is likely to break it.

Yes, there is an actual problem. I define a function via
"Function.add_function" and inspect the resulting info. As per usual
discipline this looks as follows:

val (info, (lthy', lthy)) = lthy'
  |> tap print_info
  |> Local_Theory.open_target |> snd
  |> Function.add_function bindings specs fun_config
       pat_completeness_auto
  |> (fn (info, lthy) => prove_termination lthy (#R info))
  ||> `Local_Theory.close_target

That is, I inspect the relation as generated by the function package.
The termination proof needs to get some information about that relation
from the inductive package. However, "#R" is a term, not a const name
string. Before I close the target, it will be a free variable.

With my change, I can lookup the inductive based on the term. Otherwise,
I'd need to construct the constant name and look it up using that.

Cheers
Lars



More information about the isabelle-dev mailing list