src/HOL/BNF/Tools/bnf_util.ML
changeset 51758 55963309557b
parent 51757 7babcb61aa5c
child 51760 e5ce85418346
equal deleted inserted replaced
51757:7babcb61aa5c 51758:55963309557b
    38     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f -> 'g list * 'f
    38     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f -> 'g list * 'f
    39   val fold_map6: ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h * 'g) ->
    39   val fold_map6: ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h * 'g) ->
    40     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f list -> 'g -> 'h list * 'g
    40     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f list -> 'g -> 'h list * 'g
    41   val fold_map7: ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i * 'h) ->
    41   val fold_map7: ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i * 'h) ->
    42     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f list -> 'g list -> 'h -> 'i list * 'h
    42     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f list -> 'g list -> 'h -> 'i list * 'h
       
    43   val fold_map8: ('a -> 'b -> 'c -> 'd -> 'e -> 'f -> 'g -> 'h -> 'i -> 'j * 'i) ->
       
    44     'a list -> 'b list -> 'c list -> 'd list -> 'e list -> 'f list -> 'g list -> 'h list -> 'i ->
       
    45     'j list * 'i
    43   val splice: 'a list -> 'a list -> 'a list
    46   val splice: 'a list -> 'a list -> 'a list
    44   val transpose: 'a list list -> 'a list list
    47   val transpose: 'a list list -> 'a list list
    45   val seq_conds: (bool -> 'a -> 'b) -> int -> int -> 'a list -> 'b list
    48   val seq_conds: (bool -> 'a -> 'b) -> int -> int -> 'a list -> 'b list
    46   val pad_list: 'a -> int -> 'a list -> 'a list
    49   val pad_list: 'a -> int -> 'a list -> 'a list
    47 
    50 
   271       val (x, acc') = f x1 x2 x3 x4 x5 x6 x7 acc;
   274       val (x, acc') = f x1 x2 x3 x4 x5 x6 x7 acc;
   272       val (xs, acc'') = fold_map7 f x1s x2s x3s x4s x5s x6s x7s acc';
   275       val (xs, acc'') = fold_map7 f x1s x2s x3s x4s x5s x6s x7s acc';
   273     in (x :: xs, acc'') end
   276     in (x :: xs, acc'') end
   274   | fold_map7 _ _ _ _ _ _ _ _ _ = raise ListPair.UnequalLengths;
   277   | fold_map7 _ _ _ _ _ _ _ _ _ = raise ListPair.UnequalLengths;
   275 
   278 
       
   279 fun fold_map7 _ [] [] [] [] [] [] [] acc = ([], acc)
       
   280   | fold_map7 f (x1::x1s) (x2::x2s) (x3::x3s) (x4::x4s) (x5::x5s) (x6::x6s) (x7::x7s) acc =
       
   281     let
       
   282       val (x, acc') = f x1 x2 x3 x4 x5 x6 x7 acc;
       
   283       val (xs, acc'') = fold_map7 f x1s x2s x3s x4s x5s x6s x7s acc';
       
   284     in (x :: xs, acc'') end
       
   285   | fold_map7 _ _ _ _ _ _ _ _ _ = raise ListPair.UnequalLengths;
       
   286 
       
   287 fun fold_map8 _ [] [] [] [] [] [] [] [] acc = ([], acc)
       
   288   | fold_map8 f (x1::x1s) (x2::x2s) (x3::x3s) (x4::x4s) (x5::x5s) (x6::x6s) (x7::x7s) (x8::x8s)
       
   289       acc =
       
   290     let
       
   291       val (x, acc') = f x1 x2 x3 x4 x5 x6 x7 x8 acc;
       
   292       val (xs, acc'') = fold_map8 f x1s x2s x3s x4s x5s x6s x7s x8s acc';
       
   293     in (x :: xs, acc'') end
       
   294   | fold_map8 _ _ _ _ _ _ _ _ _ _ = raise ListPair.UnequalLengths;
       
   295 
   276 (*stolen from ~~/src/HOL/Tools/SMT/smt_utils.ML*)
   296 (*stolen from ~~/src/HOL/Tools/SMT/smt_utils.ML*)
   277 fun certify ctxt = Thm.cterm_of (Proof_Context.theory_of ctxt);
   297 fun certify ctxt = Thm.cterm_of (Proof_Context.theory_of ctxt);
   278 fun certifyT ctxt = Thm.ctyp_of (Proof_Context.theory_of ctxt);
   298 fun certifyT ctxt = Thm.ctyp_of (Proof_Context.theory_of ctxt);
   279 
   299 
   280 val parse_binding_colon = Parse.binding --| @{keyword ":"};
   300 val parse_binding_colon = Parse.binding --| @{keyword ":"};