equal
deleted
inserted
replaced
350 let val pretties = map (pretty_maybe_quote o pretty_for_type ctxt) Ts in |
350 let val pretties = map (pretty_maybe_quote o pretty_for_type ctxt) Ts in |
351 Pretty.blk (0, |
351 Pretty.blk (0, |
352 pstrs ("The type" ^ plural_s_for_list pretties ^ " ") @ |
352 pstrs ("The type" ^ plural_s_for_list pretties ^ " ") @ |
353 pretty_serial_commas "and" pretties @ |
353 pretty_serial_commas "and" pretties @ |
354 pstrs (" " ^ |
354 pstrs (" " ^ |
355 (if none_true monos then |
355 (if none_true monos then |
356 "passed the monotonicity test" |
356 "passed the monotonicity test" |
357 else |
357 else |
358 (if length pretties = 1 then "is" else "are") ^ " considered monotonic") ^ |
358 (if length pretties = 1 then "is" else "are") ^ |
359 ". " ^ extra)) |
359 " considered monotonic") ^ |
|
360 ". " ^ extra)) |
360 end |
361 end |
361 fun is_type_fundamentally_monotonic T = |
362 fun is_type_fundamentally_monotonic T = |
362 (is_datatype ctxt stds T andalso not (is_quot_type ctxt T) andalso |
363 (is_datatype ctxt stds T andalso not (is_quot_type ctxt T) andalso |
363 (not (is_pure_typedef ctxt T) orelse is_univ_typedef ctxt T)) orelse |
364 (not (is_pure_typedef ctxt T) orelse is_univ_typedef ctxt T)) orelse |
364 is_number_type ctxt T orelse is_bit_type T |
365 is_number_type ctxt T orelse is_bit_type T |