equal
deleted
inserted
replaced
215 fun lfp_sugar_of s = |
215 fun lfp_sugar_of s = |
216 (case fp_sugar_of lthy s of |
216 (case fp_sugar_of lthy s of |
217 SOME (fp_sugar as {fp = Least_FP, ...}) => fp_sugar |
217 SOME (fp_sugar as {fp = Least_FP, ...}) => fp_sugar |
218 | _ => not_datatype s); |
218 | _ => not_datatype s); |
219 |
219 |
220 val fpTs0 as Type (_, var_As) :: _ = #Ts (#fp_res (lfp_sugar_of (hd fpT_names0))); |
220 val fpTs0 as Type (_, var_As) :: _ = |
|
221 map (#T o lfp_sugar_of o fst o dest_Type) (#Ts (#fp_res (lfp_sugar_of (hd fpT_names0)))); |
221 val fpT_names = map (fst o dest_Type) fpTs0; |
222 val fpT_names = map (fst o dest_Type) fpTs0; |
222 |
223 |
223 val _ = check_names (op =) (fpT_names0, fpT_names) orelse not_mutually_recursive fpT_names0; |
224 val _ = check_names (op =) (fpT_names0, fpT_names) orelse not_mutually_recursive fpT_names0; |
224 |
225 |
225 val (As_names, _) = Variable.variant_fixes (map (fn TVar ((s, _), _) => s) var_As) lthy; |
226 val (As_names, _) = Variable.variant_fixes (map (fn TVar ((s, _), _) => s) var_As) lthy; |