equal
deleted
inserted
replaced
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) = |