src/HOL/Tools/Nitpick/nitpick_scope.ML
changeset 41991 ea02b9ee3085
parent 41052 3db267a01c1d
child 45399 fdc73782278f
equal deleted inserted replaced
41990:7f2793d51efc 41991:ea02b9ee3085
   214 fun scope_less_eq (s1 : scope) (s2 : scope) =
   214 fun scope_less_eq (s1 : scope) (s2 : scope) =
   215   (s1, s2) |> pairself (map snd o #card_assigns) |> op ~~ |> forall (op <=)
   215   (s1, s2) |> pairself (map snd o #card_assigns) |> op ~~ |> forall (op <=)
   216 
   216 
   217 fun rank_of_row (_, ks) = length ks
   217 fun rank_of_row (_, ks) = length ks
   218 fun rank_of_block block = fold Integer.max (map rank_of_row block) 1
   218 fun rank_of_block block = fold Integer.max (map rank_of_row block) 1
   219 fun project_row column (y, ks) = (y, [nth ks (Int.min (column, length ks - 1))])
   219 fun project_row _ (y, []) = (y, [1]) (* desperate measure *)
       
   220   | project_row column (y, ks) = (y, [nth ks (Int.min (column, length ks - 1))])
   220 fun project_block (column, block) = map (project_row column) block
   221 fun project_block (column, block) = map (project_row column) block
   221 
   222 
   222 fun lookup_ints_assign eq assigns key =
   223 fun lookup_ints_assign eq assigns key =
   223   case triple_lookup eq assigns key of
   224   case triple_lookup eq assigns key of
   224     SOME ks => ks
   225     SOME ks => ks
   351 fun scope_descriptor_from_combination (hol_ctxt as {ctxt, ...}) binarize blocks
   352 fun scope_descriptor_from_combination (hol_ctxt as {ctxt, ...}) binarize blocks
   352                                       columns =
   353                                       columns =
   353   let
   354   let
   354     val (card_assigns, max_assigns) =
   355     val (card_assigns, max_assigns) =
   355       maps project_block (columns ~~ blocks) |> scope_descriptor_from_block
   356       maps project_block (columns ~~ blocks) |> scope_descriptor_from_block
   356     val card_assigns =
   357   in
   357       repair_card_assigns hol_ctxt binarize (card_assigns, max_assigns) |> the
   358     (card_assigns, max_assigns)
   358   in
   359     |> repair_card_assigns hol_ctxt binarize
   359     SOME (map (repair_iterator_assign ctxt card_assigns) card_assigns,
   360     |> Option.map
   360           max_assigns)
   361            (fn card_assigns =>
   361   end
   362                (map (repair_iterator_assign ctxt card_assigns) card_assigns,
   362   handle Option.Option => NONE
   363                 max_assigns))
       
   364   end
   363 
   365 
   364 fun offset_table_for_card_assigns dtypes assigns =
   366 fun offset_table_for_card_assigns dtypes assigns =
   365   let
   367   let
   366     fun aux next _ [] = Typtab.update_new (dummyT, next)
   368     fun aux next _ [] = Typtab.update_new (dummyT, next)
   367       | aux next reusable ((T, k) :: assigns) =
   369       | aux next reusable ((T, k) :: assigns) =