Hi Gerwin,

> The rule set I’d need is “typ_desc_typ_struct.inducts”, which datatype_compat 
> doesn’t generate. It does generate the four constituent rules that I can put 
> in a set myself, but the order of premises in these rules is different to the 
> old datatype package, which means my goal order will still be different.

Are you sure? I didn’t try to run your big theory yet, but on this example we 
see that it generates what you need:

    datatype a = A "b list" and b = B "a list"

    datatype_compat a b
    print_theorems

The rule you’re looking for is called “compat_a_b_a_list_b_list.induct” (no s).

> (Independent of all this, it would be nice if the primrec package did that 
> declaration now automatically in any case)

Again, I believe it does:

    primrec (nonexhaustive) f and fs and g and gs where
      "f (A bs) = A (gs bs)"
    | "fs Nil = Nil"
    | "g (B as) = B (fs as)"
    | "gs Nil = Nil"
    print_theorems

Look for “f_fs_g_gs.induct” (no s).

> Taking ?fa = ?fb = %_. 0 seems to be what throws off the proof. I think I’ll 
> just define size as in the old one to get the proofs working and then there 
> should be a separate cleanup pass to refactor them into something nicer.

Sounds reasonable.

>> Sorry about the trouble.

> The trouble is probably more in the current proof scripts than in the 
> datatype package update.

Yes and no. The new package’s modular approach has many advantages, including 
performance, and I think it stands on its own feet. We’ve had quite some 
positive feedback about it yet, both about the flexibility it gives (e.g. 
recursion through non-datatypes), the nice induction rules, and the performance.

But when it comes to “size”, I’m sorry I didn’t make it more compatible with 
the old one. Thankfully, there’s an easy (if tedious) workaround.

Jasmin

_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to