diff -r d19cdbd8b559 -r c9cfe1638bf2 src/ZF/QPair.thy
--- a/src/ZF/QPair.thy Sun Jul 14 15:11:21 2002 +0200
+++ b/src/ZF/QPair.thy Sun Jul 14 15:14:43 2002 +0200
@@ -3,21 +3,24 @@
Author: Lawrence C Paulson, Cambridge University Computer Laboratory
Copyright 1993 University of Cambridge
-Quine-inspired ordered pairs and disjoint sums, for non-well-founded data
-structures in ZF. Does not precisely follow Quine's construction. Thanks
-to Thomas Forster for suggesting this approach!
-
-W. V. Quine, On Ordered Pairs and Relations, in Selected Logic Papers,
-1966.
-
Many proofs are borrowed from pair.thy and sum.thy
Do we EVER have rank(a) < rank() ? Perhaps if the latter rank
is not a limit ordinal?
*)
+header{*Quine-Inspired Ordered Pairs and Disjoint Sums*}
+
theory QPair = Sum + mono:
+text{*For non-well-founded data
+structures in ZF. Does not precisely follow Quine's construction. Thanks
+to Thomas Forster for suggesting this approach!
+
+W. V. Quine, On Ordered Pairs and Relations, in Selected Logic Papers,
+1966.
+*}
+
constdefs
QPair :: "[i, i] => i" ("<(_;/ _)>")
" == a+b"
@@ -62,7 +65,7 @@
print_translation {* [("QSigma", dependent_tr' ("@QSUM", "op <*>"))] *}
-(**** Quine ordered pairing ****)
+subsection{*Quine ordered pairing*}
(** Lemmas for showing that uniquely determines a and b **)
@@ -83,8 +86,8 @@
by blast
-(*** QSigma: Disjoint union of a family of sets
- Generalizes Cartesian product ***)
+subsubsection{*QSigma: Disjoint union of a family of sets
+ Generalizes Cartesian product*}
lemma QSigmaI [intro!]: "[| a:A; b:B(a) |] ==> : QSigma(A,B)"
by (simp add: QSigma_def)
@@ -95,8 +98,7 @@
"[| c: QSigma(A,B);
!!x y.[| x:A; y:B(x); c= |] ==> P
|] ==> P"
-apply (simp add: QSigma_def, blast)
-done
+by (simp add: QSigma_def, blast)
(** Elimination rules for :A*B -- introducing no eigenvariables **)
@@ -104,8 +106,7 @@
"[| c: QSigma(A,B);
!!x y.[| x:A; y:B(x); c= |] ==> P
|] ==> P"
-apply (simp add: QSigma_def, blast)
-done
+by (simp add: QSigma_def, blast)
lemma QSigmaE2 [elim!]:
"[| : QSigma(A,B); [| a:A; b:B(a) |] ==> P |] ==> P"
@@ -129,7 +130,7 @@
by blast
-(*** Projections: qfst, qsnd ***)
+subsubsection{*Projections: qfst, qsnd*}
lemma qfst_conv [simp]: "qfst() = a"
by (simp add: qfst_def, blast)
@@ -147,7 +148,7 @@
by auto
-(*** Eliminator - qsplit ***)
+subsubsection{*Eliminator: qsplit*}
(*A META-equality, so that it applies to higher types as well...*)
lemma qsplit [simp]: "qsplit(%x y. c(x,y), ) == c(a,b)"
@@ -166,7 +167,7 @@
done
-(*** qsplit for predicates: result type o ***)
+subsubsection{*qsplit for predicates: result type o*}
lemma qsplitI: "R(a,b) ==> qsplit(R, )"
by (simp add: qsplit_def)
@@ -176,14 +177,13 @@
"[| qsplit(R,z); z:QSigma(A,B);
!!x y. [| z = ; R(x,y) |] ==> P
|] ==> P"
-apply (simp add: qsplit_def, auto)
-done
+by (simp add: qsplit_def, auto)
lemma qsplitD: "qsplit(R,) ==> R(a,b)"
by (simp add: qsplit_def)
-(*** qconverse ***)
+subsubsection{*qconverse*}
lemma qconverseI [intro!]: ":r ==> :qconverse(r)"
by (simp add: qconverse_def, blast)
@@ -195,8 +195,7 @@
"[| yx : qconverse(r);
!!x y. [| yx=; :r |] ==> P
|] ==> P"
-apply (simp add: qconverse_def, blast)
-done
+by (simp add: qconverse_def, blast)
lemma qconverse_qconverse: "r<=QSigma(A,B) ==> qconverse(qconverse(r)) = r"
by blast
@@ -211,7 +210,7 @@
by blast
-(**** The Quine-inspired notion of disjoint sum ****)
+subsection{*The Quine-inspired notion of disjoint sum*}
lemmas qsum_defs = qsum_def QInl_def QInr_def qcase_def
@@ -230,8 +229,7 @@
!!x. [| x:A; u=QInl(x) |] ==> P;
!!y. [| y:B; u=QInr(y) |] ==> P
|] ==> P"
-apply (simp add: qsum_defs, blast)
-done
+by (simp add: qsum_defs, blast)
(** Injection and freeness equivalences, for rewriting **)
@@ -268,8 +266,7 @@
lemma qsum_iff:
"u: A <+> B <-> (EX x. x:A & u=QInl(x)) | (EX y. y:B & u=QInr(y))"
-apply blast
-done
+by blast
lemma qsum_subset_iff: "A <+> B <= C <+> D <-> A<=C & B<=D"
by blast
@@ -279,7 +276,7 @@
apply blast
done
-(*** Eliminator -- qcase ***)
+subsubsection{*Eliminator -- qcase*}
lemma qcase_QInl [simp]: "qcase(c, d, QInl(a)) = c(a)"
by (simp add: qsum_defs )
@@ -293,8 +290,7 @@
!!x. x: A ==> c(x): C(QInl(x));
!!y. y: B ==> d(y): C(QInr(y))
|] ==> qcase(c,d,u) : C(u)"
-apply (simp add: qsum_defs , auto)
-done
+by (simp add: qsum_defs , auto)
(** Rules for the Part primitive **)
@@ -311,7 +307,7 @@
by blast
-(*** Monotonicity ***)
+subsubsection{*Monotonicity*}
lemma QPair_mono: "[| a<=c; b<=d |] ==> <= "
by (simp add: QPair_def sum_mono)