src/HOL/Codatatype/Tools/bnf_gfp_util.ML
changeset 49125 5fc5211cf104
parent 49121 9e0acaa470ab
child 49129 b5413cb7d860
equal deleted inserted replaced
49124:968e1b7de057 49125:5fc5211cf104
    38   val mk_sum_case: term -> term -> term
    38   val mk_sum_case: term -> term -> term
    39   val mk_sum_caseN: term list -> term
    39   val mk_sum_caseN: term list -> term
    40 
    40 
    41   val mk_specN: int -> thm -> thm
    41   val mk_specN: int -> thm -> thm
    42   val mk_sum_casesN: int -> int -> thm
    42   val mk_sum_casesN: int -> int -> thm
    43   val mk_sumEN: int -> thm
       
    44 
    43 
    45   val mk_InN_Field: int -> int -> thm
    44   val mk_InN_Field: int -> int -> thm
    46   val mk_InN_inject: int -> int -> thm
    45   val mk_InN_inject: int -> int -> thm
    47   val mk_InN_not_InM: int -> int -> thm
    46   val mk_InN_not_InM: int -> int -> thm
    48 end;
    47 end;
   216 fun mk_sum_casesN 1 1 = @{thm refl}
   215 fun mk_sum_casesN 1 1 = @{thm refl}
   217   | mk_sum_casesN _ 1 = @{thm sum.cases(1)}
   216   | mk_sum_casesN _ 1 = @{thm sum.cases(1)}
   218   | mk_sum_casesN 2 2 = @{thm sum.cases(2)}
   217   | mk_sum_casesN 2 2 = @{thm sum.cases(2)}
   219   | mk_sum_casesN n m = trans OF [@{thm sum_case_step(2)}, mk_sum_casesN (n - 1) (m - 1)];
   218   | mk_sum_casesN n m = trans OF [@{thm sum_case_step(2)}, mk_sum_casesN (n - 1) (m - 1)];
   220 
   219 
   221 local
       
   222   fun mk_sumEN' 1 = @{thm obj_sum_step}
       
   223     | mk_sumEN' n = mk_sumEN' (n - 1) RSN (2, @{thm obj_sum_step});
       
   224 in
       
   225   fun mk_sumEN 1 = @{thm obj_sum_base}
       
   226     | mk_sumEN 2 = @{thm sumE}
       
   227     | mk_sumEN n = (mk_sumEN' (n - 2) RSN (2, @{thm obj_sumE})) OF replicate n (impI RS allI);
       
   228 end;
       
   229 
       
   230 fun mk_rec_simps n rec_thm defs = map (fn i =>
   220 fun mk_rec_simps n rec_thm defs = map (fn i =>
   231   map (fn def => def RS rec_thm RS mk_nthI n i RS fun_cong) defs) (1 upto n);
   221   map (fn def => def RS rec_thm RS mk_nthI n i RS fun_cong) defs) (1 upto n);
   232 
   222 
   233 end;
   223 end;