Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Set_Thms.thy

  Sprache: Isabelle
 

(*
  File: Set_Thms.thy
  Author: Bohua Zhan

  Setup of proof steps related to sets.
*)


section Setup for sets and multisets

theory Set_Thms
imports Logic_Thms "HOL-Library.Multiset"
begin

subsection Set

subsubsection Injective functions

setup add_backward_prfstep @{thm injI}

subsubsection AC property of intersection and union

setup fold Auto2_HOL_Extra_Setup.ACUtil.add_ac_data [
 {cfhead = @{cterm inf}, unit = SOME @{cterm inf},
 assoc_th = @{thm inf_assoc}, comm_th = @{thm inf_commute},
 unitl_th = @{thm inf_top_left}, unitr_th = @{thm inf_top_right}},

 {cfhead = @{cterm sup}, unit = SOME @{cterm bot},
 assoc_th = @{thm sup_assoc}, comm_th = @{thm sup_commute},
 unitl_th = @{thm sup_bot_left}, unitr_th = @{thm sup_bot_right}}]
 


subsubsection Collection and bounded quantification

setup add_rewrite_rule @{thm Set.mem_Collect_eq}
lemma ball_single [rewrite]: "(x{x}. P x) = P x" by auto

subsubsection Membership

setup add_rewrite_rule @{thm Set.singleton_iff}
setup add_forward_prfstep (equiv_forward_th @{thm Set.empty_iff})
lemma set_membership_distinct [forward]: "x s ==> y s ==> x y" by auto
lemma non_empty_exist_elt [backward]: "U {} ==> x. x U" by blast
lemma non_univ_exist_compl [backward]: "U UNIV ==> x. x U" by blast
setup add_resolve_prfstep @{thm Set.UNIV_I}

subsubsection Insert

setup add_backward_prfstep_cond (equiv_backward_th @{thm Set.insert_iff}) [with_cond "?A {}"]
setup add_forward_prfstep_cond (equiv_forward_th @{thm Set.insert_iff})
 [with_score 500, with_cond "?A {}"]

setup add_forward_prfstep_cond (equiv_forward_th @{thm Set.insert_subset}) [with_cond "?A {}"]
setup add_backward_prfstep_cond (equiv_backward_th @{thm Set.insert_subset})
 [with_score 500, with_cond "?A {}"]


subsubsection Extensionality

lemma set_ext [forward]: "a. a S a T ==> S = T" by auto
setup add_backward_prfstep_cond @{thm set_ext} [with_score 500, with_filt (order_filter "S" "T")]

lemma set_pair_ext [forward]: "a b. (a, b) S (a, b) T ==> S = T" by auto

subsubsection Union

setup add_forward_prfstep_cond (equiv_forward_th @{thm Set.Un_iff}) [with_score 500]
setup add_backward_prfstep (equiv_backward_th @{thm Set.Un_iff})

lemma UnD1 [forward]: "c A B ==> c A ==> c B" by auto
lemma UnD2 [forward]: "c A B ==> c B ==> c A" by auto
lemma UnD1_single [forward]: "c {a} B ==> c a ==> c B" by auto
lemma UnD2_single [forward]: "c A {b} ==> c b ==> c A" by auto
setup add_forward_prfstep_cond @{thm Set.UnI1} [with_term "?A ?B"]
setup add_forward_prfstep_cond @{thm Set.UnI2} [with_term "?A ?B"]
lemma UnI1_single: "a {a} B" by auto
lemma UnI2_single: "b A {b}" by auto
setup add_forward_prfstep_cond @{thm UnI1_single} [with_term "{?a} ?B"]
setup add_forward_prfstep_cond @{thm UnI2_single} [with_term "?A {?b}"]

lemma union_single_eq [rewrite, backward]: "x p ==> {x} p = p" by auto

subsubsection Intersection

setup add_forward_prfstep (equiv_forward_th @{thm Set.Int_iff})
setup add_backward_prfstep_cond (equiv_backward_th @{thm Set.Int_iff}) [with_score 500]

setup add_rewrite_rule @{thm Set.Int_empty_left}
setup add_rewrite_rule @{thm Set.Int_empty_right}
setup add_rewrite_rule @{thm Set.Int_absorb}
lemma set_disjoint_mp [forward, backward2]: "A B = {} ==> p A ==> p B" by auto
lemma set_disjoint_single [rewrite]: "{x} B = {} x B" by simp

subsubsection subset

setup add_forward_prfstep @{thm subsetI}
setup add_backward_prfstep_cond @{thm subsetI} [with_score 500]

setup add_resolve_prfstep @{thm empty_subsetI}
setup add_forward_prfstep @{thm subsetD}
lemma subset_single [rewrite]: "{a} B a B" by simp
setup add_resolve_prfstep @{thm Set.basic_monos(1)}
setup add_resolve_prfstep @{thm Set.Un_upper1}
setup add_resolve_prfstep @{thm Set.Un_upper2}
lemma union_is_subset [forward]: "A B C ==> A C B C" by simp
setup add_backward1_prfstep @{thm Set.Un_least}
setup add_backward2_prfstep @{thm Set.Un_least}
lemma subset_union_same1 [backward]: "B C ==> A B A C" by auto
lemma subset_union_same2 [backward]: "A B ==> A C B C" by auto

subsubsection Diff

setup add_forward_prfstep (equiv_forward_th @{thm Set.Diff_iff})
setup add_backward_prfstep_cond (equiv_backward_th @{thm Set.Diff_iff}) [with_score 500]

setup add_rewrite_rule @{thm Set.empty_Diff}
lemma mem_diff [rewrite]: "x A - B x A x B" by simp
lemma set_union_minus_same1 [rewrite]: "(A B) - B = A - B" by auto
lemma set_union_minus_same2 [rewrite]: "(B A) - B = A - B" by auto
lemma set_union_minus_distinct [rewrite]: "a c ==> {a} (B - {c}) = {a} B - {c}" by auto
setup add_forward_prfstep_cond @{thm Set.Diff_subset} [with_term "?A - ?B"]
lemma union_subtract_elt1 [rewrite]: "x B ==> ({x} B) - {x} = B" by simp
lemma union_subtract_elt2 [rewrite]: "x B ==> (B {x}) - {x} = B" by simp
lemma subset_sub1 [backward]: "x A ==> A - {x} A" by auto
lemma member_notin [forward]: "x S - {y} ==> x y" by simp
lemma member_notin_contra: "x S ==> x y ==> x S - {y}" by simp
setup add_forward_prfstep_cond @{thm member_notin_contra} [with_term "?S - {?y}"]

subsubsection Results on finite sets

setup add_resolve_prfstep @{thm Finite_Set.finite.emptyI}
lemma set_finite_single [resolve]: "finite {x}" by simp
setup add_rewrite_rule @{thm Finite_Set.finite_Un}
lemma Max_ge' [forward]: "finite A ==> x > Max A ==> ¬(x A)" using Max_ge leD by auto
setup add_backward_prfstep @{thm finite_image_set}
setup add_forward_prfstep @{thm finite_atLeastAtMost}
setup add_forward_prfstep @{thm rev_finite_subset}
setup add_backward1_prfstep @{thm rev_finite_subset}

subsubsection Cardinality

setup add_rewrite_rule @{thm card.empty}
lemma card_emptyD [rewrite]: "finite S ==> card S = 0 ==> S = {}" by simp
lemma card_minus1 [rewrite]: "x S ==> card (S - {x}) = card S - 1" by (simp add: card_Diff_subset)
setup add_forward_prfstep @{thm finite_Diff}
setup add_resolve_prfstep @{thm card_mono}

subsubsection Image set

setup add_rewrite_rule @{thm Set.image_Un}
setup add_rewrite_rule @{thm image_set_diff}

subsection Multiset

subsubsection Basic properties

lemma mset_member_empty [resolve]: "¬p # {#}" by simp
lemma mem_multiset_single [rewrite]: "x # {#y#} x = y" by simp
setup add_backward2_prfstep @{thm subset_mset.antisym}
setup add_resolve_prfstep @{thm Multiset.empty_le}
setup add_forward_prfstep @{thm mset_subsetD}

lemma multi_contain_add_self1 [resolve]: "A # {#x#} + A" by simp
lemma multi_contain_add_self2 [resolve]: "A # A + {#x#}" by simp
setup add_forward_prfstep_cond @{thm Multiset.multi_member_this} [with_term "{#?x#} + ?XS"]
lemma multi_member_this2: "x # XS + {#x#}" by simp
setup add_forward_prfstep_cond @{thm multi_member_this2} [with_term "?XS + {#?x#}"]
setup add_backward_prfstep @{thm Multiset.subset_mset.add_left_mono}
setup add_backward_prfstep @{thm Multiset.subset_mset.add_right_mono}

subsubsection Case checking and induction

lemma multi_nonempty_split' [resolve]: "M {#} ==> M' m. M = M' + {#m#}"
  using multi_nonempty_split by auto

lemma multi_member_split' [backward]: "x # M ==> M'. M = M' + {#x#}"
  by (metis insert_DiffM2)

setup add_strong_induct_rule @{thm full_multiset_induct}

subsubsection Results on mset

setup add_rewrite_rule @{thm set_mset_empty}
setup add_rewrite_rule @{thm set_mset_single}
setup add_rewrite_rule @{thm set_mset_union}

setup add_rewrite_rule @{thm image_mset_empty}
setup add_rewrite_rule @{thm image_mset_single}
setup add_rewrite_rule @{thm image_mset_union}

setup add_rewrite_rule @{thm prod_mset_empty}
setup add_rewrite_rule @{thm prod_mset_singleton}
setup add_rewrite_rule @{thm prod_mset_Un}

subsubsection Set interval

setup add_rewrite_rule @{thm Set_Interval.ord_class.lessThan_iff}
setup add_rewrite_rule @{thm Set_Interval.ord_class.atLeastAtMost_iff}

end

Messung V0.5 in Prozent
C=60 H=100 G=82

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge