lemmas QPair_inject = QPair_iff [THEN iffD1, THEN conjE, elim!]
lemma QPair_inject1: "<a;b> = <c;d> ==> a=c" by blast
lemma QPair_inject2: "<a;b> = <c;d> ==> b=d" by blast
subsubsection‹QSigma: Disjoint union of a family of sets
Generalizes Cartesian product›
lemma QSigmaI [intro!]: "[a ∈ A; b ∈ B(a)]==> <a;b> ∈ QSigma(A,B)" by (simp add: QSigma_def)
(** Elimination rules for <a;b>:A*B -- introducing no eigenvariables **)
lemma QSigmaE [elim!]: "[c ∈ QSigma(A,B); ∧x y.[x ∈ A; y ∈ B(x); c=<x;y>]==> P \<rbrakk> ==> P" by (simp add: QSigma_def, blast)
lemma QSigmaE2 [elim!]: "[<a;b>: QSigma(A,B); [a ∈ A; b ∈ B(a)]==> P]==> P" by (simp add: QSigma_def)
lemma QSigmaD1: "<a;b> ∈ QSigma(A,B) ==> a ∈ A" by blast
lemma QSigmaD2: "<a;b> ∈ QSigma(A,B) ==> b ∈ B(a)" by blast
lemma QSigma_cong: "[A=A'; ∧x. x ∈ A' ==> B(x)=B'(x)]==> QSigma(A,B) = QSigma(A',B')" by (simp add: QSigma_def)
lemma QSigma_empty1 [simp]: "QSigma(0,B) = 0" by blast
lemma QSigma_empty2 [simp]: "A <*> 0 = 0" by blast
subsubsection‹Projections: qfst, qsnd›
lemma qfst_conv [simp]: "qfst(<a;b>) = a" by (simp add: qfst_def)
lemma qsnd_conv [simp]: "qsnd(<a;b>) = b" by (simp add: qsnd_def)
lemma qfst_type [TC]: "p ∈ QSigma(A,B) ==> qfst(p) ∈ A" by auto
lemma qsnd_type [TC]: "p ∈ QSigma(A,B) ==> qsnd(p) ∈ B(qfst(p))" by auto
lemma QPair_qfst_qsnd_eq: "a ∈ QSigma(A,B) ==> <qfst(a); qsnd(a)> = a" by auto
subsubsection‹Eliminator: qsplit›
(*A META-equality, so that it applies to higher types as well...*) lemma qsplit [simp]: "qsplit(λx y. c(x,y), <a;b>) ≡ c(a,b)" by (simp add: qsplit_def)
lemma qsplit_type [elim!]: "[p ∈ QSigma(A,B); ∧x y.[x ∈ A; y ∈ B(x)]==> c(x,y):C(<x;y>) \<rbrakk> ==> qsplit(λx y. c(x,y), p) ∈ C(p)" 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 und die Messung sind noch experimentell.