src/HOL/Tools/inductive_codegen.ML
changeset 33317 b4534348b8fd
parent 33244 db230399f890
child 33338 de76079f973a
equal deleted inserted replaced
33316:6a72af4e84b8 33317:b4534348b8fd
   172         in
   172         in
   173           if not (is_prefix op = prfx is) then [] else
   173           if not (is_prefix op = prfx is) then [] else
   174           let val is' = map (fn i => i - k) (List.drop (is, k))
   174           let val is' = map (fn i => i - k) (List.drop (is, k))
   175           in map (fn x => Mode (m, is', x)) (cprods (map
   175           in map (fn x => Mode (m, is', x)) (cprods (map
   176             (fn (NONE, _) => [NONE]
   176             (fn (NONE, _) => [NONE]
   177               | (SOME js, arg) => map SOME (List.filter
   177               | (SOME js, arg) => map SOME (filter
   178                   (fn Mode (_, js', _) => js=js') (modes_of modes arg)))
   178                   (fn Mode (_, js', _) => js=js') (modes_of modes arg)))
   179                     (iss ~~ args1)))
   179                     (iss ~~ args1)))
   180           end
   180           end
   181         end)) (AList.lookup op = modes name)
   181         end)) (AList.lookup op = modes name)
   182 
   182 
   235      | SOME vs => subset (op =) (concl_vs, vs))
   235      | SOME vs => subset (op =) (concl_vs, vs))
   236   end;
   236   end;
   237 
   237 
   238 fun check_modes_pred thy arg_vs preds modes (p, ms) =
   238 fun check_modes_pred thy arg_vs preds modes (p, ms) =
   239   let val SOME rs = AList.lookup (op =) preds p
   239   let val SOME rs = AList.lookup (op =) preds p
   240   in (p, List.filter (fn m => case find_index
   240   in (p, filter (fn m => case find_index
   241     (not o check_mode_clause thy arg_vs modes m) rs of
   241     (not o check_mode_clause thy arg_vs modes m) rs of
   242       ~1 => true
   242       ~1 => true
   243     | i => (message ("Clause " ^ string_of_int (i+1) ^ " of " ^
   243     | i => (message ("Clause " ^ string_of_int (i+1) ^ " of " ^
   244       p ^ " violates mode " ^ string_of_mode m); false)) ms)
   244       p ^ " violates mode " ^ string_of_mode m); false)) ms)
   245   end;
   245   end;