reintroduced check from bd36da55d825 after all, due to hard-to-solve issues outside the N2M code
authorblanchet
Mon, 11 Nov 2013 18:25:13 +0100
changeset 557554f55054d197c
parent 55754 880e5417b800
child 55758 27246f8b2dac
reintroduced check from bd36da55d825 after all, due to hard-to-solve issues outside the N2M code
src/HOL/BNF/Tools/bnf_fp_n2m_sugar.ML
     1.1 --- a/src/HOL/BNF/Tools/bnf_fp_n2m_sugar.ML	Mon Nov 11 18:13:17 2013 +0100
     1.2 +++ b/src/HOL/BNF/Tools/bnf_fp_n2m_sugar.ML	Mon Nov 11 18:25:13 2013 +0100
     1.3 @@ -283,6 +283,9 @@
     1.4          else
     1.5            not_co_datatype0 T
     1.6        | not_co_datatype T = not_co_datatype0 T;
     1.7 +    fun not_mutually_nested_rec Ts1 Ts2 =
     1.8 +      error (qsotys Ts1 ^ " is neither mutually recursive with " ^ qsotys Ts2 ^
     1.9 +        " nor nested recursive via " ^ qsotys Ts2);
    1.10  
    1.11      val _ = (case Library.duplicates (op =) actual_Ts of [] => () | T :: _ => duplicate_datatype T);
    1.12  
    1.13 @@ -315,6 +318,9 @@
    1.14            val {fp_res = {Ts = mutual_Ts0, ...}, ...} = the_fp_sugar_of T;
    1.15            val mutual_Ts = map (retypargs tyargs) mutual_Ts0;
    1.16  
    1.17 +          val _ = seen = [] orelse exists (exists_subtype_in seen) mutual_Ts orelse
    1.18 +            not_mutually_nested_rec mutual_Ts seen;
    1.19 +
    1.20            fun fresh_tyargs () =
    1.21              let
    1.22                (* The name "'z" is unlikely to clash with the context, yielding more cache hits. *)