src/Provers/induct_method.ML
changeset 18287 28efcdae34dc
parent 18259 7b14579c58f2
child 18330 444f16d232a2
equal deleted inserted replaced
18286:7273cf5085ed 18287:28efcdae34dc
    18 end;
    18 end;
    19 
    19 
    20 signature INDUCT_METHOD =
    20 signature INDUCT_METHOD =
    21 sig
    21 sig
    22   val fix_tac: Proof.context -> int -> (string * typ) list -> int -> tactic
    22   val fix_tac: Proof.context -> int -> (string * typ) list -> int -> tactic
       
    23   val add_defs: (string option * term) option list -> Proof.context ->
       
    24     (term option list * thm list) * Proof.context
    23   val atomize_term: theory -> term -> term
    25   val atomize_term: theory -> term -> term
    24   val atomize_tac: int -> tactic
    26   val atomize_tac: int -> tactic
    25   val rulified_term: thm -> theory * term
    27   val rulified_term: thm -> theory * term
    26   val rulify_tac: int -> tactic
    28   val rulify_tac: int -> tactic
    27   val guess_instance: thm -> int -> thm -> thm Seq.seq
    29   val guess_instance: thm -> int -> thm -> thm Seq.seq
    38 struct
    40 struct
    39 
    41 
    40 
    42 
    41 (** misc utils **)
    43 (** misc utils **)
    42 
    44 
    43 (* lists *)
    45 (* alignment *)
    44 
       
    45 fun nth_list xss i = nth xss i handle Subscript => [];
       
    46 
    46 
    47 fun align_left msg xs ys =
    47 fun align_left msg xs ys =
    48   let val m = length xs and n = length ys
    48   let val m = length xs and n = length ys
    49   in if m < n then raise ERROR_MESSAGE msg else (Library.take (n, xs) ~~ ys) end;
    49   in if m < n then raise ERROR_MESSAGE msg else (Library.take (n, xs) ~~ ys) end;
    50 
    50