src/HOL/Tools/induct_method.ML
changeset 10008 61eb9f3aa92a
parent 9914 67e9b7239548
child 10013 be4824b7505d
equal deleted inserted replaced
10007:64bf7da1994a 10008:61eb9f3aa92a
    45 val type_rules = NetRules.init eq_rule (Thm.concl_of o #2);
    45 val type_rules = NetRules.init eq_rule (Thm.concl_of o #2);
    46 val set_rules = NetRules.init eq_rule (Thm.major_prem_of o #2);
    46 val set_rules = NetRules.init eq_rule (Thm.major_prem_of o #2);
    47 
    47 
    48 fun lookup_rule (rs:rules) name = Library.assoc (NetRules.rules rs, name);
    48 fun lookup_rule (rs:rules) name = Library.assoc (NetRules.rules rs, name);
    49 
    49 
    50 fun print_rules kind rs =
    50 fun print_rules kind sg rs =
    51   let val thms = map snd (NetRules.rules rs)
    51   let val thms = map snd (NetRules.rules rs)
    52   in Pretty.writeln (Pretty.big_list kind (map Display.pretty_thm thms)) end;
    52   in Pretty.writeln (Pretty.big_list kind (map (Display.pretty_thm_sg sg) thms)) end;
    53 
    53 
    54 
    54 
    55 (* theory data kind 'HOL/induct_method' *)
    55 (* theory data kind 'HOL/induct_method' *)
    56 
    56 
    57 structure GlobalInductArgs =
    57 structure GlobalInductArgs =
    65   fun merge (((casesT1, casesS1), (inductT1, inductS1)),
    65   fun merge (((casesT1, casesS1), (inductT1, inductS1)),
    66       ((casesT2, casesS2), (inductT2, inductS2))) =
    66       ((casesT2, casesS2), (inductT2, inductS2))) =
    67     ((NetRules.merge (casesT1, casesT2), NetRules.merge (casesS1, casesS2)),
    67     ((NetRules.merge (casesT1, casesT2), NetRules.merge (casesS1, casesS2)),
    68       (NetRules.merge (inductT1, inductT2), NetRules.merge (inductS1, inductS2)));
    68       (NetRules.merge (inductT1, inductT2), NetRules.merge (inductS1, inductS2)));
    69 
    69 
    70   fun print _ ((casesT, casesS), (inductT, inductS)) =
    70   fun print sg ((casesT, casesS), (inductT, inductS)) =
    71     (print_rules "type cases:" casesT;
    71     (print_rules "type cases:" sg casesT;
    72       print_rules "set cases:" casesS;
    72       print_rules "set cases:" sg casesS;
    73       print_rules "type induct:" inductT;
    73       print_rules "type induct:" sg inductT;
    74       print_rules "set induct:" inductS);
    74       print_rules "set induct:" sg inductS);
    75 
    75 
    76   fun dest ((casesT, casesS), (inductT, inductS)) =
    76   fun dest ((casesT, casesS), (inductT, inductS)) =
    77     {type_cases = NetRules.rules casesT,
    77     {type_cases = NetRules.rules casesT,
    78      set_cases = NetRules.rules casesS,
    78      set_cases = NetRules.rules casesS,
    79      type_induct = NetRules.rules inductT,
    79      type_induct = NetRules.rules inductT,
    91 struct
    91 struct
    92   val name = "HOL/induct_method";
    92   val name = "HOL/induct_method";
    93   type T = GlobalInductArgs.T;
    93   type T = GlobalInductArgs.T;
    94 
    94 
    95   fun init thy = GlobalInduct.get thy;
    95   fun init thy = GlobalInduct.get thy;
    96   fun print x = GlobalInductArgs.print x;
    96   val print = GlobalInductArgs.print o ProofContext.sign_of;
    97 end;
    97 end;
    98 
    98 
    99 structure LocalInduct = ProofDataFun(LocalInductArgs);
    99 structure LocalInduct = ProofDataFun(LocalInductArgs);
   100 val print_local_rules = LocalInduct.print;
   100 val print_local_rules = LocalInduct.print;
   101 val dest_local_rules = GlobalInductArgs.dest o LocalInduct.get;
   101 val dest_local_rules = GlobalInductArgs.dest o LocalInduct.get;