src/HOL/Tools/BNF/bnf_fp_def_sugar.ML
changeset 57562 c1238062184b
parent 57558 6bb3dd7f8097
child 57563 e3e7c86168b4
equal deleted inserted replaced
57561:8200e1eb367f 57562:c1238062184b
  1388               val rel_eq_thms =
  1388               val rel_eq_thms =
  1389                 map (fn th => th RS @{thm eq_False[THEN iffD2]}) rel_distinct_thms @
  1389                 map (fn th => th RS @{thm eq_False[THEN iffD2]}) rel_distinct_thms @
  1390                 map2 (fn th => fn 0 => th RS @{thm eq_True[THEN iffD2]} | _ => th)
  1390                 map2 (fn th => fn 0 => th RS @{thm eq_True[THEN iffD2]} | _ => th)
  1391                   rel_inject_thms ms;
  1391                   rel_inject_thms ms;
  1392 
  1392 
  1393               val (disc_map_iff_thms, sel_map_thms, sel_set_thms (* FIXME: , (rel_cases_thm, rel_cases_attrs) *)) =
  1393               val (disc_map_iff_thms, sel_map_thms, sel_set_thms, (rel_cases_thm, rel_cases_attrs)) =
  1394                 let
  1394                 let
  1395                   val (((Ds, As), Bs), names_lthy) = lthy
  1395                   val (((Ds, As), Bs), names_lthy) = lthy
  1396                     |> mk_TFrees (dead_of_bnf fp_bnf)
  1396                     |> mk_TFrees (dead_of_bnf fp_bnf)
  1397                     ||>> mk_TFrees (live_of_bnf fp_bnf)
  1397                     ||>> mk_TFrees (live_of_bnf fp_bnf)
  1398                     ||>> mk_TFrees (live_of_bnf fp_bnf);
  1398                     ||>> mk_TFrees (live_of_bnf fp_bnf);
  1405                   val map_term = mk_map_of_bnf Ds As Bs fp_bnf;
  1405                   val map_term = mk_map_of_bnf Ds As Bs fp_bnf;
  1406                   val discsA = map (mk_disc_or_sel ADs) discs;
  1406                   val discsA = map (mk_disc_or_sel ADs) discs;
  1407                   val selssA = map (map (mk_disc_or_sel ADs)) selss;
  1407                   val selssA = map (map (mk_disc_or_sel ADs)) selss;
  1408                   val disc_sel_pairs = flat (map2 (map o pair) discsA selssA);
  1408                   val disc_sel_pairs = flat (map2 (map o pair) discsA selssA);
  1409 
  1409 
  1410 (* FIXME:
       
  1411                   val (rel_cases_thm, rel_cases_attrs) =
  1410                   val (rel_cases_thm, rel_cases_attrs) =
  1412                     let
  1411                     let
  1413                       val rel = mk_rel_of_bnf Ds As Bs fp_bnf;
  1412                       val rel = mk_rel_of_bnf Ds As Bs fp_bnf;
  1414                       val (((thesis, Rs), tb), names_lthy) =  names_lthy
  1413                       val (((thesis, Rs), tb), names_lthy) =  names_lthy
  1415                         |> yield_singleton (mk_Frees "thesis") HOLogic.boolT
  1414                         |> yield_singleton (mk_Frees "thesis") HOLogic.boolT
  1459                       val consumes_attr = Attrib.internal (K (Rule_Cases.consumes 1));
  1458                       val consumes_attr = Attrib.internal (K (Rule_Cases.consumes 1));
  1460                       val cases_pred_attr = Attrib.internal o K o Induct.cases_pred;
  1459                       val cases_pred_attr = Attrib.internal o K o Induct.cases_pred;
  1461                     in
  1460                     in
  1462                       (thm, [consumes_attr, case_names_attr, cases_pred_attr ""])
  1461                       (thm, [consumes_attr, case_names_attr, cases_pred_attr ""])
  1463                     end;
  1462                     end;
  1464 *)
       
  1465 
  1463 
  1466                   val disc_map_iff_thms =
  1464                   val disc_map_iff_thms =
  1467                     let
  1465                     let
  1468                       val discsB = map (mk_disc_or_sel BDs) discs;
  1466                       val discsB = map (mk_disc_or_sel BDs) discs;
  1469                       val discsA_t = map (fn disc1 => Term.betapply (disc1, ta)) discsA;
  1467                       val discsA_t = map (fn disc1 => Term.betapply (disc1, ta)) discsA;
  1583                               (flat sel_thmss) set_thms)
  1581                               (flat sel_thmss) set_thms)
  1584                           |> Conjunction.elim_balanced (length goals)
  1582                           |> Conjunction.elim_balanced (length goals)
  1585                           |> Proof_Context.export names_lthy lthy
  1583                           |> Proof_Context.export names_lthy lthy
  1586                     end;
  1584                     end;
  1587                 in
  1585                 in
  1588                   (disc_map_iff_thms, sel_map_thms, sel_set_thms (* FIXME: , (rel_cases_thm, rel_cases_attrs) *))
  1586                   (disc_map_iff_thms, sel_map_thms, sel_set_thms, (rel_cases_thm, rel_cases_attrs))
  1589                 end;
  1587                 end;
  1590 
  1588 
  1591               val anonymous_notes =
  1589               val anonymous_notes =
  1592                 [([case_cong], fundefcong_attrs),
  1590                 [([case_cong], fundefcong_attrs),
  1593                  (rel_eq_thms, code_nitpicksimp_attrs)]
  1591                  (rel_eq_thms, code_nitpicksimp_attrs)]
  1594                 |> map (fn (thms, attrs) => ((Binding.empty, attrs), [(thms, [])]));
  1592                 |> map (fn (thms, attrs) => ((Binding.empty, attrs), [(thms, [])]));
  1595 
  1593 
  1596               val notes =
  1594               val notes =
  1597                 [(disc_map_iffN, disc_map_iff_thms, simp_attrs),
  1595                 [(disc_map_iffN, disc_map_iff_thms, simp_attrs),
  1598                  (mapN, map_thms, code_nitpicksimp_attrs @ simp_attrs),
  1596                  (mapN, map_thms, code_nitpicksimp_attrs @ simp_attrs),
  1599 (* FIXME:                 (rel_casesN, [rel_cases_thm], rel_cases_attrs), *)
  1597                  (rel_casesN, [rel_cases_thm], rel_cases_attrs),
  1600                  (rel_distinctN, rel_distinct_thms, simp_attrs),
  1598                  (rel_distinctN, rel_distinct_thms, simp_attrs),
  1601                  (rel_injectN, rel_inject_thms, simp_attrs),
  1599                  (rel_injectN, rel_inject_thms, simp_attrs),
  1602                  (rel_introsN, rel_intro_thms, []),
  1600                  (rel_introsN, rel_intro_thms, []),
  1603                  (setN, set_thms, code_nitpicksimp_attrs @ simp_attrs),
  1601                  (setN, set_thms, code_nitpicksimp_attrs @ simp_attrs),
  1604                  (sel_mapN, sel_map_thms, []),
  1602                  (sel_mapN, sel_map_thms, []),