643 |
643 |
644 |
644 |
645 (*** Set reasoning tools ***) |
645 (*** Set reasoning tools ***) |
646 |
646 |
647 |
647 |
|
648 (** Rewrite rules for boolean case-splitting: faster than |
|
649 setloop split_tac[expand_if] |
|
650 **) |
|
651 |
|
652 bind_thm ("expand_if_eq1", read_instantiate [("P", "%x. x = ?b")] expand_if); |
|
653 bind_thm ("expand_if_eq2", read_instantiate [("P", "%x. ?a = x")] expand_if); |
|
654 |
|
655 bind_thm ("expand_if_mem1", |
|
656 read_instantiate_sg (sign_of Set.thy) [("P", "%x. x : ?b")] expand_if); |
|
657 bind_thm ("expand_if_mem2", |
|
658 read_instantiate_sg (sign_of Set.thy) [("P", "%x. ?a : x")] expand_if); |
|
659 |
|
660 val expand_ifs = [if_bool_eq, expand_if_eq1, expand_if_eq2, |
|
661 expand_if_mem1, expand_if_mem2]; |
|
662 |
|
663 |
648 (*Each of these has ALREADY been added to !simpset above.*) |
664 (*Each of these has ALREADY been added to !simpset above.*) |
649 val mem_simps = [insert_iff, empty_iff, Un_iff, Int_iff, Compl_iff, Diff_iff, |
665 val mem_simps = [insert_iff, empty_iff, Un_iff, Int_iff, Compl_iff, Diff_iff, |
650 mem_Collect_eq, |
666 mem_Collect_eq, |
651 UN_iff, UN1_iff, Union_iff, |
667 UN_iff, UN1_iff, Union_iff, |
652 INT_iff, INT1_iff, Inter_iff]; |
668 INT_iff, INT1_iff, Inter_iff]; |