[isabelle-dev] Bug report: code generation for eq with indirect-recursive datatypes

Brian Huffman brianh at cs.pdx.edu
Mon Feb 23 22:13:11 CET 2009

Hi Florian,

One more thing: The indirect recursion causes SML/OCaml code  
generation to fail, but converting to the equivalent mutual-recursive  
definition makes it work again.

datatype 'a tree = Node 'a "'a tree list"
definition "test2 = (Node True [] = Node True [Node False []])"
export_code test2 in OCaml file -

*** Illegal mutual dependencies: "tree :: eq", "eq_class.eq [tree]"
*** At command "export_code".

datatype 'a tree = Node 'a "'a forest"
and 'a forest = Empty | Trees "'a tree" "'a forest"
definition "test2 = (Node True Empty = Node True (Trees (Node False  
Empty) Empty))"
export_code test2 in OCaml file -

The second version works just fine for OCaml or SML.

I would have expected both versions of the tree datatype to produce  
basically the same code for eq, since they both have essentially the  
same recursion combinator.

- Brian

More information about the isabelle-dev mailing list