subsection\<open>Sigma: Disjoint Union of a Family of Sets\<close>
text\<open>Generalizes Cartesian product\<close>
lemma Sigma_iff [simp]: "\a,b\: Sigma(A,B) \ a \ A \ b \ B(a)" by (simp add: Sigma_def)
lemma SigmaI [TC,intro!]: "\a \ A; b \ B(a)\ \ \a,b\ \ Sigma(A,B)" by simp
lemmas SigmaD1 = Sigma_iff [THEN iffD1, THEN conjunct1] lemmas SigmaD2 = Sigma_iff [THEN iffD1, THEN conjunct2]
(*The general elimination rule*) lemma SigmaE [elim!]: "\c \ Sigma(A,B); \<And>x y.\<lbrakk>x \<in> A; y \<in> B(x); c=\<langle>x,y\<rangle>\<rbrakk> \<Longrightarrow> P \<rbrakk> \<Longrightarrow> P" by (unfold Sigma_def, blast)
lemma SigmaE2 [elim!]: "\\a,b\ \ Sigma(A,B); \<lbrakk>a \<in> A; b \<in> B(a)\<rbrakk> \<Longrightarrow> P \<rbrakk> \<Longrightarrow> P" by (unfold Sigma_def, blast)
lemma Sigma_cong: "\A=A'; \x. x \ A' \ B(x)=B'(x)\ \
Sigma(A,B) = Sigma(A',B')" by (simp add: Sigma_def)
(*Sigma_cong, Pi_cong NOT given to Addcongs: they cause flex-flex pairs and the "Check your prover" error. Most
Sigmas and Pis are abbreviated as * or -> *)
lemma Sigma_empty1 [simp]: "Sigma(0,B) = 0" by blast
lemma Sigma_empty2 [simp]: "A*0 = 0" by blast
lemma Sigma_empty_iff: "A*B=0 \ A=0 | B=0" by blast
subsection\<open>Projections \<^term>\<open>fst\<close> and \<^term>\<open>snd\<close>\<close>
lemma fst_conv [simp]: "fst(\a,b\) = a" by (simp add: fst_def)
lemma snd_conv [simp]: "snd(\a,b\) = b" by (simp add: snd_def)
lemma fst_type [TC]: "p \ Sigma(A,B) \ fst(p) \ A" by auto
lemma snd_type [TC]: "p \ Sigma(A,B) \ snd(p) \ B(fst(p))" by auto
lemma Pair_fst_snd_eq: "a \ Sigma(A,B) \ = a" by auto
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 ist noch experimentell.