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, []), |