Theory Examples

theory Examples
imports Complex_Main
theory Examples imports Complex_Main begin

declare [[eta_contract = false]]

text{*membership, intersection *}
text{*difference and empty set*}
text{*complement, union and universal set*}

lemma "(x ∈ A ∩ B) = (x ∈ A ∧ x ∈ B)"
by blast

text{*
@{thm[display] IntI[no_vars]}
\rulename{IntI}

@{thm[display] IntD1[no_vars]}
\rulename{IntD1}

@{thm[display] IntD2[no_vars]}
\rulename{IntD2}
*}

lemma "(x ∈ -A) = (x ∉ A)"
by blast

text{*
@{thm[display] Compl_iff[no_vars]}
\rulename{Compl_iff}
*}

lemma "- (A ∪ B) = -A ∩ -B"
by blast

text{*
@{thm[display] Compl_Un[no_vars]}
\rulename{Compl_Un}
*}

lemma "A-A = {}"
by blast

text{*
@{thm[display] Diff_disjoint[no_vars]}
\rulename{Diff_disjoint}
*}



lemma "A ∪ -A = UNIV"
by blast

text{*
@{thm[display] Compl_partition[no_vars]}
\rulename{Compl_partition}
*}

text{*subset relation*}


text{*
@{thm[display] subsetI[no_vars]}
\rulename{subsetI}

@{thm[display] subsetD[no_vars]}
\rulename{subsetD}
*}

lemma "((A ∪ B) ⊆ C) = (A ⊆ C ∧ B ⊆ C)"
by blast

text{*
@{thm[display] Un_subset_iff[no_vars]}
\rulename{Un_subset_iff}
*}

lemma "(A ⊆ -B) = (B ⊆ -A)"
by blast

lemma "(A <= -B) = (B <= -A)"
  oops

text{*ASCII version: blast fails because of overloading because
 it doesn't have to be sets*}

lemma "((A:: 'a set) <= -B) = (B <= -A)"
by blast

text{*A type constraint lets it work*}

text{*An issue here: how do we discuss the distinction between ASCII and
symbol notation?  Here the latter disambiguates.*}


text{*
set extensionality

@{thm[display] set_eqI[no_vars]}
\rulename{set_eqI}

@{thm[display] equalityI[no_vars]}
\rulename{equalityI}

@{thm[display] equalityE[no_vars]}
\rulename{equalityE}
*}


text{*finite sets: insertion and membership relation*}
text{*finite set notation*}

lemma "insert x A = {x} ∪ A"
by blast

text{*
@{thm[display] insert_is_Un[no_vars]}
\rulename{insert_is_Un}
*}

lemma "{a,b} ∪ {c,d} = {a,b,c,d}"
by blast

lemma "{a,b} ∩ {b,c} = {b}"
apply auto
oops
text{*fails because it isn't valid*}

lemma "{a,b} ∩ {b,c} = (if a=c then {a,b} else {b})"
apply simp
by blast

text{*or just force or auto.  blast alone can't handle the if-then-else*}

text{*next: some comprehension examples*}

lemma "(a ∈ {z. P z}) = P a"
by blast

text{*
@{thm[display] mem_Collect_eq[no_vars]}
\rulename{mem_Collect_eq}
*}

lemma "{x. x ∈ A} = A"
by blast

text{*
@{thm[display] Collect_mem_eq[no_vars]}
\rulename{Collect_mem_eq}
*}

lemma "{x. P x ∨ x ∈ A} = {x. P x} ∪ A"
by blast

lemma "{x. P x ⟶ Q x} = -{x. P x} ∪ {x. Q x}"
by blast

definition prime :: "nat set" where
    "prime == {p. 1<p & (ALL m. m dvd p --> m=1 | m=p)}"

lemma "{p*q | p q. p∈prime ∧ q∈prime} =
       {z. ∃p q. z = p*q ∧ p∈prime ∧ q∈prime}"
by (rule refl)

text{*binders*}

text{*bounded quantifiers*}

lemma "(∃x∈A. P x) = (∃x. x∈A ∧ P x)"
by blast

text{*
@{thm[display] bexI[no_vars]}
\rulename{bexI}
*}

text{*
@{thm[display] bexE[no_vars]}
\rulename{bexE}
*}

lemma "(∀x∈A. P x) = (∀x. x∈A ⟶ P x)"
by blast

text{*
@{thm[display] ballI[no_vars]}
\rulename{ballI}
*}

text{*
@{thm[display] bspec[no_vars]}
\rulename{bspec}
*}

text{*indexed unions and variations*}

lemma "(⋃x. B x) = (⋃x∈UNIV. B x)"
by blast

text{*
@{thm[display] UN_iff[no_vars]}
\rulename{UN_iff}
*}

text{*
@{thm[display] Union_iff[no_vars]}
\rulename{Union_iff}
*}

lemma "(⋃x∈A. B x) = {y. ∃x∈A. y ∈ B x}"
by blast

lemma "⋃S = (⋃x∈S. x)"
by blast

text{*
@{thm[display] UN_I[no_vars]}
\rulename{UN_I}
*}

text{*
@{thm[display] UN_E[no_vars]}
\rulename{UN_E}
*}

text{*indexed intersections*}

lemma "(⋂x. B x) = {y. ∀x. y ∈ B x}"
by blast

text{*
@{thm[display] INT_iff[no_vars]}
\rulename{INT_iff}
*}

text{*
@{thm[display] Inter_iff[no_vars]}
\rulename{Inter_iff}
*}

text{*mention also card, Pow, etc.*}


text{*
@{thm[display] card_Un_Int[no_vars]}
\rulename{card_Un_Int}

@{thm[display] card_Pow[no_vars]}
\rulename{card_Pow}

@{thm[display] n_subsets[no_vars]}
\rulename{n_subsets}
*}

end