# HG changeset patch # User wenzelm # Date 1491763475 -7200 # Node ID c82e63b11b8b2f413ade6f2b6278f2db2e95d704 # Parent 9bc3b57c1fa7979a404139e8ea7006233a3ac6ca clarified main ZF.thy / ZFC.thy, and avoid name clash with global HOL/Main.thy; diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/Doc/Logics_ZF/ZF_Isar.thy --- a/src/Doc/Logics_ZF/ZF_Isar.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/Doc/Logics_ZF/ZF_Isar.thy Sun Apr 09 20:44:35 2017 +0200 @@ -1,5 +1,5 @@ theory ZF_Isar -imports Main +imports ZF begin (*<*) diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/Doc/Logics_ZF/ZF_examples.thy --- a/src/Doc/Logics_ZF/ZF_examples.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/Doc/Logics_ZF/ZF_examples.thy Sun Apr 09 20:44:35 2017 +0200 @@ -1,6 +1,6 @@ section{*Examples of Reasoning in ZF Set Theory*} -theory ZF_examples imports Main_ZFC begin +theory ZF_examples imports ZFC begin subsection {* Binary Trees *} diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/AC.thy --- a/src/ZF/AC.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/AC.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section\The Axiom of Choice\ -theory AC imports Main_ZF begin +theory AC imports ZF begin text\This definition comes from Halmos (1960), page 59.\ axiomatization where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/AC/AC_Equiv.thy --- a/src/ZF/AC/AC_Equiv.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/AC/AC_Equiv.thy Sun Apr 09 20:44:35 2017 +0200 @@ -12,8 +12,8 @@ *) theory AC_Equiv -imports Main -begin (*obviously not Main_ZFC*) +imports ZF +begin (*obviously not ZFC*) (* Well Ordering Theorems *) diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Coind/Language.thy --- a/src/ZF/Coind/Language.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Coind/Language.thy Sun Apr 09 20:44:35 2017 +0200 @@ -3,7 +3,7 @@ Copyright 1995 University of Cambridge *) -theory Language imports Main begin +theory Language imports ZF begin text\these really can't be definitions without losing the abstraction\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Coind/Map.thy --- a/src/ZF/Coind/Map.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Coind/Map.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ Some sample proofs of inclusions for the final coalgebra "U" (by lcp). *) -theory Map imports Main begin +theory Map imports ZF begin definition TMap :: "[i,i] => i" where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Constructible/Formula.thy --- a/src/ZF/Constructible/Formula.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Constructible/Formula.thy Sun Apr 09 20:44:35 2017 +0200 @@ -4,7 +4,7 @@ section \First-Order Formulas and the Definition of the Class L\ -theory Formula imports Main begin +theory Formula imports ZF begin subsection\Internalized formulas of FOL\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Constructible/MetaExists.thy --- a/src/ZF/Constructible/MetaExists.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Constructible/MetaExists.thy Sun Apr 09 20:44:35 2017 +0200 @@ -4,7 +4,7 @@ section\The meta-existential quantifier\ -theory MetaExists imports Main begin +theory MetaExists imports ZF begin text\Allows quantification over any term. Used to quantify over classes. Yields a proposition rather than a FOL formula.\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Constructible/Normal.thy --- a/src/ZF/Constructible/Normal.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Constructible/Normal.thy Sun Apr 09 20:44:35 2017 +0200 @@ -4,7 +4,7 @@ section \Closed Unbounded Classes and Normal Functions\ -theory Normal imports Main begin +theory Normal imports ZF begin text\ One source is the book diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Constructible/Relative.thy --- a/src/ZF/Constructible/Relative.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Constructible/Relative.thy Sun Apr 09 20:44:35 2017 +0200 @@ -4,7 +4,7 @@ section \Relativization and Absoluteness\ -theory Relative imports Main begin +theory Relative imports ZF begin subsection\Relativized versions of standard set-theoretic concepts\ @@ -593,13 +593,13 @@ lemma (in M_trivial) pair_abs [simp]: "M(z) ==> pair(M,a,b,z) \ z=" -apply (simp add: pair_def ZF.Pair_def) +apply (simp add: pair_def Pair_def) apply (blast intro: transM) done lemma (in M_trivial) pair_in_M_iff [iff]: "M() \ M(a) & M(b)" -by (simp add: ZF.Pair_def) +by (simp add: Pair_def) lemma (in M_trivial) pair_components_in_M: "[| \ A; M(A) |] ==> M(x) & M(y)" diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/IMP/Com.thy --- a/src/ZF/IMP/Com.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/IMP/Com.thy Sun Apr 09 20:44:35 2017 +0200 @@ -4,7 +4,7 @@ section \Arithmetic expressions, boolean expressions, commands\ -theory Com imports Main begin +theory Com imports ZF begin subsection \Arithmetic expressions\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Acc.thy --- a/src/ZF/Induct/Acc.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Acc.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \The accessible part of a relation\ -theory Acc imports Main begin +theory Acc imports ZF begin text \ Inductive definition of \acc(r)\; see @{cite "paulin-tlca"}. diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Binary_Trees.thy --- a/src/ZF/Induct/Binary_Trees.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Binary_Trees.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Binary trees\ -theory Binary_Trees imports Main begin +theory Binary_Trees imports ZF begin subsection \Datatype definition\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Brouwer.thy --- a/src/ZF/Induct/Brouwer.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Brouwer.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Infinite branching datatype definitions\ -theory Brouwer imports Main_ZFC begin +theory Brouwer imports ZFC begin subsection \The Brouwer ordinals\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Comb.thy --- a/src/ZF/Induct/Comb.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Comb.thy Sun Apr 09 20:44:35 2017 +0200 @@ -6,7 +6,7 @@ section \Combinatory Logic example: the Church-Rosser Theorem\ theory Comb -imports Main +imports ZF begin text \ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Datatypes.thy --- a/src/ZF/Induct/Datatypes.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Datatypes.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Sample datatype definitions\ -theory Datatypes imports Main begin +theory Datatypes imports ZF begin subsection \A type with four constructors\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/FoldSet.thy --- a/src/ZF/Induct/FoldSet.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/FoldSet.thy Sun Apr 09 20:44:35 2017 +0200 @@ -6,7 +6,7 @@ least left-commutative. *) -theory FoldSet imports Main begin +theory FoldSet imports ZF begin consts fold_set :: "[i, i, [i,i]=>i, i] => i" diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/ListN.thy --- a/src/ZF/Induct/ListN.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/ListN.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Lists of n elements\ -theory ListN imports Main begin +theory ListN imports ZF begin text \ Inductive definition of lists of \n\ elements; see diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Mutil.thy --- a/src/ZF/Induct/Mutil.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Mutil.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \The Mutilated Chess Board Problem, formalized inductively\ -theory Mutil imports Main begin +theory Mutil imports ZF begin text \ Originator is Max Black, according to J A Robinson. Popularized as diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Ntree.thy --- a/src/ZF/Induct/Ntree.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Ntree.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Datatype definition n-ary branching trees\ -theory Ntree imports Main begin +theory Ntree imports ZF begin text \ Demonstrates a simple use of function space in a datatype diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Primrec.thy --- a/src/ZF/Induct/Primrec.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Primrec.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Primitive Recursive Functions: the inductive definition\ -theory Primrec imports Main begin +theory Primrec imports ZF begin text \ Proof adopted from @{cite szasz93}. diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/PropLog.thy --- a/src/ZF/Induct/PropLog.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/PropLog.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Meta-theory of propositional logic\ -theory PropLog imports Main begin +theory PropLog imports ZF begin text \ Datatype definition of propositional logic formulae and inductive diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Rmap.thy --- a/src/ZF/Induct/Rmap.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Rmap.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \An operator to ``map'' a relation over a list\ -theory Rmap imports Main begin +theory Rmap imports ZF begin consts rmap :: "i=>i" diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Term.thy --- a/src/ZF/Induct/Term.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Term.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Terms over an alphabet\ -theory Term imports Main begin +theory Term imports ZF begin text \ Illustrates the list functor (essentially the same type as in \Trees_Forest\). diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Induct/Tree_Forest.thy --- a/src/ZF/Induct/Tree_Forest.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Induct/Tree_Forest.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Trees and forests, a mutually recursive type definition\ -theory Tree_Forest imports Main begin +theory Tree_Forest imports ZF begin subsection \Datatype definition\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Main.thy --- a/src/ZF/Main.thy Sun Apr 09 20:17:00 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -theory Main -imports Main_ZF -begin - -end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Main_ZF.thy --- a/src/ZF/Main_ZF.thy Sun Apr 09 20:17:00 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -section\Theory Main: Everything Except AC\ - -theory Main_ZF imports List_ZF IntDiv_ZF CardinalArith begin - -(*The theory of "iterates" logically belongs to Nat, but can't go there because - primrec isn't available into after Datatype.*) - -subsection\Iteration of the function @{term F}\ - -consts iterates :: "[i=>i,i,i] => i" ("(_^_ '(_'))" [60,1000,1000] 60) - -primrec - "F^0 (x) = x" - "F^(succ(n)) (x) = F(F^n (x))" - -definition - iterates_omega :: "[i=>i,i] => i" ("(_^\ '(_'))" [60,1000] 60) where - "F^\ (x) == \n\nat. F^n (x)" - -lemma iterates_triv: - "[| n\nat; F(x) = x |] ==> F^n (x) = x" -by (induct n rule: nat_induct, simp_all) - -lemma iterates_type [TC]: - "[| n \ nat; a \ A; !!x. x \ A ==> F(x) \ A |] - ==> F^n (a) \ A" -by (induct n rule: nat_induct, simp_all) - -lemma iterates_omega_triv: - "F(x) = x ==> F^\ (x) = x" -by (simp add: iterates_omega_def iterates_triv) - -lemma Ord_iterates [simp]: - "[| n\nat; !!i. Ord(i) ==> Ord(F(i)); Ord(x) |] - ==> Ord(F^n (x))" -by (induct n rule: nat_induct, simp_all) - -lemma iterates_commute: "n \ nat ==> F(F^n (x)) = F^n (F(x))" -by (induct_tac n, simp_all) - - -subsection\Transfinite Recursion\ - -text\Transfinite recursion for definitions based on the - three cases of ordinals\ - -definition - transrec3 :: "[i, i, [i,i]=>i, [i,i]=>i] =>i" where - "transrec3(k, a, b, c) == - transrec(k, \x r. - if x=0 then a - else if Limit(x) then c(x, \y\x. r`y) - else b(Arith.pred(x), r ` Arith.pred(x)))" - -lemma transrec3_0 [simp]: "transrec3(0,a,b,c) = a" -by (rule transrec3_def [THEN def_transrec, THEN trans], simp) - -lemma transrec3_succ [simp]: - "transrec3(succ(i),a,b,c) = b(i, transrec3(i,a,b,c))" -by (rule transrec3_def [THEN def_transrec, THEN trans], simp) - -lemma transrec3_Limit: - "Limit(i) ==> - transrec3(i,a,b,c) = c(i, \j\i. transrec3(j,a,b,c))" -by (rule transrec3_def [THEN def_transrec, THEN trans], force) - - -declaration \fn _ => - Simplifier.map_ss (Simplifier.set_mksimps (fn ctxt => - map mk_eq o Ord_atomize o Variable.gen_all ctxt)) -\ - -end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Main_ZFC.thy --- a/src/ZF/Main_ZFC.thy Sun Apr 09 20:17:00 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -theory Main_ZFC imports Main_ZF InfDatatype -begin - -end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ROOT --- a/src/ZF/ROOT Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ROOT Sun Apr 09 20:44:35 2017 +0200 @@ -43,8 +43,7 @@ (North-Holland, 1980) *} theories - Main - Main_ZFC + ZFC document_files "root.tex" session "ZF-AC" (ZF) in AC = ZF + diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/Resid/Redex.thy --- a/src/ZF/Resid/Redex.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/Resid/Redex.thy Sun Apr 09 20:44:35 2017 +0200 @@ -2,7 +2,7 @@ Author: Ole Rasmussen, University of Cambridge *) -theory Redex imports Main begin +theory Redex imports ZF begin consts redexes :: i diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/UNITY/GenPrefix.thy --- a/src/ZF/UNITY/GenPrefix.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/UNITY/GenPrefix.thy Sun Apr 09 20:44:35 2017 +0200 @@ -12,7 +12,7 @@ section\Charpentier's Generalized Prefix Relation\ theory GenPrefix -imports Main +imports ZF begin definition (*really belongs in ZF/Trancl*) diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/UNITY/State.thy --- a/src/ZF/UNITY/State.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/UNITY/State.thy Sun Apr 09 20:44:35 2017 +0200 @@ -10,7 +10,7 @@ section\UNITY Program States\ -theory State imports Main begin +theory State imports ZF begin consts var :: i datatype var = Var("i \ list(nat)") diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/UNITY/WFair.thy --- a/src/ZF/UNITY/WFair.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/UNITY/WFair.thy Sun Apr 09 20:44:35 2017 +0200 @@ -6,7 +6,7 @@ section\Progress under Weak Fairness\ theory WFair -imports UNITY Main_ZFC +imports UNITY ZFC begin text\This theory defines the operators transient, ensures and leadsTo, diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ZF.thy --- a/src/ZF/ZF.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ZF.thy Sun Apr 09 20:44:35 2017 +0200 @@ -1,650 +1,73 @@ -(* Title: ZF/ZF.thy - Author: Lawrence C Paulson and Martin D Coen, CU Computer Laboratory - Copyright 1993 University of Cambridge -*) - -section \Zermelo-Fraenkel Set Theory\ - -theory ZF -imports "~~/src/FOL/FOL" -begin - -subsection \Signature\ - -declare [[eta_contract = false]] +section\Theory Main: Everything Except AC\ -typedecl i -instance i :: "term" .. - -axiomatization mem :: "[i, i] \ o" (infixl "\" 50) \ \membership relation\ - and zero :: "i" ("0") \ \the empty set\ - and Pow :: "i \ i" \ \power sets\ - and Inf :: "i" \ \infinite set\ - and Union :: "i \ i" ("\_" [90] 90) - and PrimReplace :: "[i, [i, i] \ o] \ i" - -abbreviation not_mem :: "[i, i] \ o" (infixl "\" 50) \ \negated membership relation\ - where "x \ y \ \ (x \ y)" - - -subsection \Bounded Quantifiers\ - -definition Ball :: "[i, i \ o] \ o" - where "Ball(A, P) \ \x. x\A \ P(x)" +theory ZF imports List_ZF IntDiv_ZF CardinalArith begin -definition Bex :: "[i, i \ o] \ o" - where "Bex(A, P) \ \x. x\A \ P(x)" - -syntax - "_Ball" :: "[pttrn, i, o] \ o" ("(3\_\_./ _)" 10) - "_Bex" :: "[pttrn, i, o] \ o" ("(3\_\_./ _)" 10) -translations - "\x\A. P" \ "CONST Ball(A, \x. P)" - "\x\A. P" \ "CONST Bex(A, \x. P)" - - -subsection \Variations on Replacement\ +(*The theory of "iterates" logically belongs to Nat, but can't go there because + primrec isn't available into after Datatype.*) -(* Derived form of replacement, restricting P to its functional part. - The resulting set (for functional P) is the same as with - PrimReplace, but the rules are simpler. *) -definition Replace :: "[i, [i, i] \ o] \ i" - where "Replace(A,P) == PrimReplace(A, %x y. (\!z. P(x,z)) & P(x,y))" - -syntax - "_Replace" :: "[pttrn, pttrn, i, o] => i" ("(1{_ ./ _ \ _, _})") -translations - "{y. x\A, Q}" \ "CONST Replace(A, \x y. Q)" - - -(* Functional form of replacement -- analgous to ML's map functional *) - -definition RepFun :: "[i, i \ i] \ i" - where "RepFun(A,f) == {y . x\A, y=f(x)}" - -syntax - "_RepFun" :: "[i, pttrn, i] => i" ("(1{_ ./ _ \ _})" [51,0,51]) -translations - "{b. x\A}" \ "CONST RepFun(A, \x. b)" - +subsection\Iteration of the function @{term F}\ -(* Separation and Pairing can be derived from the Replacement - and Powerset Axioms using the following definitions. *) -definition Collect :: "[i, i \ o] \ i" - where "Collect(A,P) == {y . x\A, x=y & P(x)}" - -syntax - "_Collect" :: "[pttrn, i, o] \ i" ("(1{_ \ _ ./ _})") -translations - "{x\A. P}" \ "CONST Collect(A, \x. P)" - - -subsection \General union and intersection\ - -definition Inter :: "i => i" ("\_" [90] 90) - where "\(A) == { x\\(A) . \y\A. x\y}" - -syntax - "_UNION" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) - "_INTER" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) -translations - "\x\A. B" == "CONST Union({B. x\A})" - "\x\A. B" == "CONST Inter({B. x\A})" - - -subsection \Finite sets and binary operations\ - -(*Unordered pairs (Upair) express binary union/intersection and cons; - set enumerations translate as {a,...,z} = cons(a,...,cons(z,0)...)*) - -definition Upair :: "[i, i] => i" - where "Upair(a,b) == {y. x\Pow(Pow(0)), (x=0 & y=a) | (x=Pow(0) & y=b)}" - -definition Subset :: "[i, i] \ o" (infixl "\" 50) \ \subset relation\ - where subset_def: "A \ B \ \x\A. x\B" +consts iterates :: "[i=>i,i,i] => i" ("(_^_ '(_'))" [60,1000,1000] 60) -definition Diff :: "[i, i] \ i" (infixl "-" 65) \ \set difference\ - where "A - B == { x\A . ~(x\B) }" - -definition Un :: "[i, i] \ i" (infixl "\" 65) \ \binary union\ - where "A \ B == \(Upair(A,B))" - -definition Int :: "[i, i] \ i" (infixl "\" 70) \ \binary intersection\ - where "A \ B == \(Upair(A,B))" - -definition cons :: "[i, i] => i" - where "cons(a,A) == Upair(a,a) \ A" - -definition succ :: "i => i" - where "succ(i) == cons(i, i)" +primrec + "F^0 (x) = x" + "F^(succ(n)) (x) = F(F^n (x))" -nonterminal "is" -syntax - "" :: "i \ is" ("_") - "_Enum" :: "[i, is] \ is" ("_,/ _") - "_Finset" :: "is \ i" ("{(_)}") -translations - "{x, xs}" == "CONST cons(x, {xs})" - "{x}" == "CONST cons(x, 0)" - - -subsection \Axioms\ - -(* ZF axioms -- see Suppes p.238 - Axioms for Union, Pow and Replace state existence only, - uniqueness is derivable using extensionality. *) - -axiomatization -where - extension: "A = B \ A \ B \ B \ A" and - Union_iff: "A \ \(C) \ (\B\C. A\B)" and - Pow_iff: "A \ Pow(B) \ A \ B" and - - (*We may name this set, though it is not uniquely defined.*) - infinity: "0 \ Inf \ (\y\Inf. succ(y) \ Inf)" and +definition + iterates_omega :: "[i=>i,i] => i" ("(_^\ '(_'))" [60,1000] 60) where + "F^\ (x) == \n\nat. F^n (x)" - (*This formulation facilitates case analysis on A.*) - foundation: "A = 0 \ (\x\A. \y\x. y\A)" and - - (*Schema axiom since predicate P is a higher-order variable*) - replacement: "(\x\A. \y z. P(x,y) \ P(x,z) \ y = z) \ - b \ PrimReplace(A,P) \ (\x\A. P(x,b))" - - -subsection \Definite descriptions -- via Replace over the set "1"\ - -definition The :: "(i \ o) \ i" (binder "THE " 10) - where the_def: "The(P) == \({y . x \ {0}, P(y)})" - -definition If :: "[o, i, i] \ i" ("(if (_)/ then (_)/ else (_))" [10] 10) - where if_def: "if P then a else b == THE z. P & z=a | ~P & z=b" - -abbreviation (input) - old_if :: "[o, i, i] => i" ("if '(_,_,_')") - where "if(P,a,b) == If(P,a,b)" - - -subsection \Ordered Pairing\ - -(* this "symmetric" definition works better than {{a}, {a,b}} *) -definition Pair :: "[i, i] => i" - where "Pair(a,b) == {{a,a}, {a,b}}" - -definition fst :: "i \ i" - where "fst(p) == THE a. \b. p = Pair(a, b)" - -definition snd :: "i \ i" - where "snd(p) == THE b. \a. p = Pair(a, b)" +lemma iterates_triv: + "[| n\nat; F(x) = x |] ==> F^n (x) = x" +by (induct n rule: nat_induct, simp_all) -definition split :: "[[i, i] \ 'a, i] \ 'a::{}" \ \for pattern-matching\ - where "split(c) == \p. c(fst(p), snd(p))" - -(* Patterns -- extends pre-defined type "pttrn" used in abstractions *) -nonterminal patterns -syntax - "_pattern" :: "patterns => pttrn" ("\_\") - "" :: "pttrn => patterns" ("_") - "_patterns" :: "[pttrn, patterns] => patterns" ("_,/_") - "_Tuple" :: "[i, is] => i" ("\(_,/ _)\") -translations - "\x, y, z\" == "\x, \y, z\\" - "\x, y\" == "CONST Pair(x, y)" - "\\x,y,zs\.b" == "CONST split(\x \y,zs\.b)" - "\\x,y\.b" == "CONST split(\x y. b)" - -definition Sigma :: "[i, i \ i] \ i" - where "Sigma(A,B) == \x\A. \y\B(x). {\x,y\}" - -abbreviation cart_prod :: "[i, i] => i" (infixr "\" 80) \ \Cartesian product\ - where "A \ B \ Sigma(A, \_. B)" - - -subsection \Relations and Functions\ - -(*converse of relation r, inverse of function*) -definition converse :: "i \ i" - where "converse(r) == {z. w\r, \x y. w=\x,y\ \ z=\y,x\}" - -definition domain :: "i \ i" - where "domain(r) == {x. w\r, \y. w=\x,y\}" - -definition range :: "i \ i" - where "range(r) == domain(converse(r))" - -definition field :: "i \ i" - where "field(r) == domain(r) \ range(r)" +lemma iterates_type [TC]: + "[| n \ nat; a \ A; !!x. x \ A ==> F(x) \ A |] + ==> F^n (a) \ A" +by (induct n rule: nat_induct, simp_all) -definition relation :: "i \ o" \ \recognizes sets of pairs\ - where "relation(r) == \z\r. \x y. z = \x,y\" - -definition "function" :: "i \ o" \ \recognizes functions; can have non-pairs\ - where "function(r) == \x y. \x,y\ \ r \ (\y'. \x,y'\ \ r \ y = y')" - -definition Image :: "[i, i] \ i" (infixl "``" 90) \ \image\ - where image_def: "r `` A == {y \ range(r). \x\A. \x,y\ \ r}" - -definition vimage :: "[i, i] \ i" (infixl "-``" 90) \ \inverse image\ - where vimage_def: "r -`` A == converse(r)``A" - -(* Restrict the relation r to the domain A *) -definition restrict :: "[i, i] \ i" - where "restrict(r,A) == {z \ r. \x\A. \y. z = \x,y\}" - - -(* Abstraction, application and Cartesian product of a family of sets *) - -definition Lambda :: "[i, i \ i] \ i" - where lam_def: "Lambda(A,b) == {\x,b(x)\. x\A}" - -definition "apply" :: "[i, i] \ i" (infixl "`" 90) \ \function application\ - where "f`a == \(f``{a})" - -definition Pi :: "[i, i \ i] \ i" - where "Pi(A,B) == {f\Pow(Sigma(A,B)). A\domain(f) & function(f)}" - -abbreviation function_space :: "[i, i] \ i" (infixr "->" 60) \ \function space\ - where "A -> B \ Pi(A, \_. B)" - - -(* binder syntax *) +lemma iterates_omega_triv: + "F(x) = x ==> F^\ (x) = x" +by (simp add: iterates_omega_def iterates_triv) -syntax - "_PROD" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) - "_SUM" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) - "_lam" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) -translations - "\x\A. B" == "CONST Pi(A, \x. B)" - "\x\A. B" == "CONST Sigma(A, \x. B)" - "\x\A. f" == "CONST Lambda(A, \x. f)" - - -subsection \ASCII syntax\ - -notation (ASCII) - cart_prod (infixr "*" 80) and - Int (infixl "Int" 70) and - Un (infixl "Un" 65) and - function_space (infixr "\" 60) and - Subset (infixl "<=" 50) and - mem (infixl ":" 50) and - not_mem (infixl "~:" 50) +lemma Ord_iterates [simp]: + "[| n\nat; !!i. Ord(i) ==> Ord(F(i)); Ord(x) |] + ==> Ord(F^n (x))" +by (induct n rule: nat_induct, simp_all) -syntax (ASCII) - "_Ball" :: "[pttrn, i, o] => o" ("(3ALL _:_./ _)" 10) - "_Bex" :: "[pttrn, i, o] => o" ("(3EX _:_./ _)" 10) - "_Collect" :: "[pttrn, i, o] => i" ("(1{_: _ ./ _})") - "_Replace" :: "[pttrn, pttrn, i, o] => i" ("(1{_ ./ _: _, _})") - "_RepFun" :: "[i, pttrn, i] => i" ("(1{_ ./ _: _})" [51,0,51]) - "_UNION" :: "[pttrn, i, i] => i" ("(3UN _:_./ _)" 10) - "_INTER" :: "[pttrn, i, i] => i" ("(3INT _:_./ _)" 10) - "_PROD" :: "[pttrn, i, i] => i" ("(3PROD _:_./ _)" 10) - "_SUM" :: "[pttrn, i, i] => i" ("(3SUM _:_./ _)" 10) - "_lam" :: "[pttrn, i, i] => i" ("(3lam _:_./ _)" 10) - "_Tuple" :: "[i, is] => i" ("<(_,/ _)>") - "_pattern" :: "patterns => pttrn" ("<_>") - - -subsection \Substitution\ - -(*Useful examples: singletonI RS subst_elem, subst_elem RSN (2,IntI) *) -lemma subst_elem: "[| b\A; a=b |] ==> a\A" -by (erule ssubst, assumption) +lemma iterates_commute: "n \ nat ==> F(F^n (x)) = F^n (F(x))" +by (induct_tac n, simp_all) -subsection\Bounded universal quantifier\ - -lemma ballI [intro!]: "[| !!x. x\A ==> P(x) |] ==> \x\A. P(x)" -by (simp add: Ball_def) - -lemmas strip = impI allI ballI - -lemma bspec [dest?]: "[| \x\A. P(x); x: A |] ==> P(x)" -by (simp add: Ball_def) - -(*Instantiates x first: better for automatic theorem proving?*) -lemma rev_ballE [elim]: - "[| \x\A. P(x); x\A ==> Q; P(x) ==> Q |] ==> Q" -by (simp add: Ball_def, blast) - -lemma ballE: "[| \x\A. P(x); P(x) ==> Q; x\A ==> Q |] ==> Q" -by blast - -(*Used in the datatype package*) -lemma rev_bspec: "[| x: A; \x\A. P(x) |] ==> P(x)" -by (simp add: Ball_def) - -(*Trival rewrite rule; @{term"(\x\A.P)<->P"} holds only if A is nonempty!*) -lemma ball_triv [simp]: "(\x\A. P) <-> ((\x. x\A) \ P)" -by (simp add: Ball_def) - -(*Congruence rule for rewriting*) -lemma ball_cong [cong]: - "[| A=A'; !!x. x\A' ==> P(x) <-> P'(x) |] ==> (\x\A. P(x)) <-> (\x\A'. P'(x))" -by (simp add: Ball_def) - -lemma atomize_ball: - "(!!x. x \ A ==> P(x)) == Trueprop (\x\A. P(x))" - by (simp only: Ball_def atomize_all atomize_imp) - -lemmas [symmetric, rulify] = atomize_ball - and [symmetric, defn] = atomize_ball - - -subsection\Bounded existential quantifier\ +subsection\Transfinite Recursion\ -lemma bexI [intro]: "[| P(x); x: A |] ==> \x\A. P(x)" -by (simp add: Bex_def, blast) - -(*The best argument order when there is only one @{term"x\A"}*) -lemma rev_bexI: "[| x\A; P(x) |] ==> \x\A. P(x)" -by blast - -(*Not of the general form for such rules. The existential quanitifer becomes universal. *) -lemma bexCI: "[| \x\A. ~P(x) ==> P(a); a: A |] ==> \x\A. P(x)" -by blast - -lemma bexE [elim!]: "[| \x\A. P(x); !!x. [| x\A; P(x) |] ==> Q |] ==> Q" -by (simp add: Bex_def, blast) - -(*We do not even have @{term"(\x\A. True) <-> True"} unless @{term"A" is nonempty!!*) -lemma bex_triv [simp]: "(\x\A. P) <-> ((\x. x\A) & P)" -by (simp add: Bex_def) - -lemma bex_cong [cong]: - "[| A=A'; !!x. x\A' ==> P(x) <-> P'(x) |] - ==> (\x\A. P(x)) <-> (\x\A'. P'(x))" -by (simp add: Bex_def cong: conj_cong) - - - -subsection\Rules for subsets\ - -lemma subsetI [intro!]: - "(!!x. x\A ==> x\B) ==> A \ B" -by (simp add: subset_def) - -(*Rule in Modus Ponens style [was called subsetE] *) -lemma subsetD [elim]: "[| A \ B; c\A |] ==> c\B" -apply (unfold subset_def) -apply (erule bspec, assumption) -done - -(*Classical elimination rule*) -lemma subsetCE [elim]: - "[| A \ B; c\A ==> P; c\B ==> P |] ==> P" -by (simp add: subset_def, blast) +text\Transfinite recursion for definitions based on the + three cases of ordinals\ -(*Sometimes useful with premises in this order*) -lemma rev_subsetD: "[| c\A; A<=B |] ==> c\B" -by blast - -lemma contra_subsetD: "[| A \ B; c \ B |] ==> c \ A" -by blast - -lemma rev_contra_subsetD: "[| c \ B; A \ B |] ==> c \ A" -by blast - -lemma subset_refl [simp]: "A \ A" -by blast - -lemma subset_trans: "[| A<=B; B<=C |] ==> A<=C" -by blast - -(*Useful for proving A<=B by rewriting in some cases*) -lemma subset_iff: - "A<=B <-> (\x. x\A \ x\B)" -apply (unfold subset_def Ball_def) -apply (rule iff_refl) -done - -text\For calculations\ -declare subsetD [trans] rev_subsetD [trans] subset_trans [trans] - - -subsection\Rules for equality\ - -(*Anti-symmetry of the subset relation*) -lemma equalityI [intro]: "[| A \ B; B \ A |] ==> A = B" -by (rule extension [THEN iffD2], rule conjI) - - -lemma equality_iffI: "(!!x. x\A <-> x\B) ==> A = B" -by (rule equalityI, blast+) - -lemmas equalityD1 = extension [THEN iffD1, THEN conjunct1] -lemmas equalityD2 = extension [THEN iffD1, THEN conjunct2] - -lemma equalityE: "[| A = B; [| A<=B; B<=A |] ==> P |] ==> P" -by (blast dest: equalityD1 equalityD2) +definition + transrec3 :: "[i, i, [i,i]=>i, [i,i]=>i] =>i" where + "transrec3(k, a, b, c) == + transrec(k, \x r. + if x=0 then a + else if Limit(x) then c(x, \y\x. r`y) + else b(Arith.pred(x), r ` Arith.pred(x)))" -lemma equalityCE: - "[| A = B; [| c\A; c\B |] ==> P; [| c\A; c\B |] ==> P |] ==> P" -by (erule equalityE, blast) - -lemma equality_iffD: - "A = B ==> (!!x. x \ A <-> x \ B)" - by auto - - -subsection\Rules for Replace -- the derived form of replacement\ - -lemma Replace_iff: - "b \ {y. x\A, P(x,y)} <-> (\x\A. P(x,b) & (\y. P(x,y) \ y=b))" -apply (unfold Replace_def) -apply (rule replacement [THEN iff_trans], blast+) -done +lemma transrec3_0 [simp]: "transrec3(0,a,b,c) = a" +by (rule transrec3_def [THEN def_transrec, THEN trans], simp) -(*Introduction; there must be a unique y such that P(x,y), namely y=b. *) -lemma ReplaceI [intro]: - "[| P(x,b); x: A; !!y. P(x,y) ==> y=b |] ==> - b \ {y. x\A, P(x,y)}" -by (rule Replace_iff [THEN iffD2], blast) - -(*Elimination; may asssume there is a unique y such that P(x,y), namely y=b. *) -lemma ReplaceE: - "[| b \ {y. x\A, P(x,y)}; - !!x. [| x: A; P(x,b); \y. P(x,y)\y=b |] ==> R - |] ==> R" -by (rule Replace_iff [THEN iffD1, THEN bexE], simp+) +lemma transrec3_succ [simp]: + "transrec3(succ(i),a,b,c) = b(i, transrec3(i,a,b,c))" +by (rule transrec3_def [THEN def_transrec, THEN trans], simp) -(*As above but without the (generally useless) 3rd assumption*) -lemma ReplaceE2 [elim!]: - "[| b \ {y. x\A, P(x,y)}; - !!x. [| x: A; P(x,b) |] ==> R - |] ==> R" -by (erule ReplaceE, blast) - -lemma Replace_cong [cong]: - "[| A=B; !!x y. x\B ==> P(x,y) <-> Q(x,y) |] ==> - Replace(A,P) = Replace(B,Q)" -apply (rule equality_iffI) -apply (simp add: Replace_iff) -done +lemma transrec3_Limit: + "Limit(i) ==> + transrec3(i,a,b,c) = c(i, \j\i. transrec3(j,a,b,c))" +by (rule transrec3_def [THEN def_transrec, THEN trans], force) -subsection\Rules for RepFun\ - -lemma RepFunI: "a \ A ==> f(a) \ {f(x). x\A}" -by (simp add: RepFun_def Replace_iff, blast) - -(*Useful for coinduction proofs*) -lemma RepFun_eqI [intro]: "[| b=f(a); a \ A |] ==> b \ {f(x). x\A}" -apply (erule ssubst) -apply (erule RepFunI) -done - -lemma RepFunE [elim!]: - "[| b \ {f(x). x\A}; - !!x.[| x\A; b=f(x) |] ==> P |] ==> - P" -by (simp add: RepFun_def Replace_iff, blast) - -lemma RepFun_cong [cong]: - "[| A=B; !!x. x\B ==> f(x)=g(x) |] ==> RepFun(A,f) = RepFun(B,g)" -by (simp add: RepFun_def) - -lemma RepFun_iff [simp]: "b \ {f(x). x\A} <-> (\x\A. b=f(x))" -by (unfold Bex_def, blast) - -lemma triv_RepFun [simp]: "{x. x\A} = A" -by blast - - -subsection\Rules for Collect -- forming a subset by separation\ - -(*Separation is derivable from Replacement*) -lemma separation [simp]: "a \ {x\A. P(x)} <-> a\A & P(a)" -by (unfold Collect_def, blast) - -lemma CollectI [intro!]: "[| a\A; P(a) |] ==> a \ {x\A. P(x)}" -by simp - -lemma CollectE [elim!]: "[| a \ {x\A. P(x)}; [| a\A; P(a) |] ==> R |] ==> R" -by simp - -lemma CollectD1: "a \ {x\A. P(x)} ==> a\A" -by (erule CollectE, assumption) - -lemma CollectD2: "a \ {x\A. P(x)} ==> P(a)" -by (erule CollectE, assumption) - -lemma Collect_cong [cong]: - "[| A=B; !!x. x\B ==> P(x) <-> Q(x) |] - ==> Collect(A, %x. P(x)) = Collect(B, %x. Q(x))" -by (simp add: Collect_def) - - -subsection\Rules for Unions\ - -declare Union_iff [simp] - -(*The order of the premises presupposes that C is rigid; A may be flexible*) -lemma UnionI [intro]: "[| B: C; A: B |] ==> A: \(C)" -by (simp, blast) - -lemma UnionE [elim!]: "[| A \ \(C); !!B.[| A: B; B: C |] ==> R |] ==> R" -by (simp, blast) - - -subsection\Rules for Unions of families\ -(* @{term"\x\A. B(x)"} abbreviates @{term"\({B(x). x\A})"} *) - -lemma UN_iff [simp]: "b \ (\x\A. B(x)) <-> (\x\A. b \ B(x))" -by (simp add: Bex_def, blast) - -(*The order of the premises presupposes that A is rigid; b may be flexible*) -lemma UN_I: "[| a: A; b: B(a) |] ==> b: (\x\A. B(x))" -by (simp, blast) - - -lemma UN_E [elim!]: - "[| b \ (\x\A. B(x)); !!x.[| x: A; b: B(x) |] ==> R |] ==> R" -by blast - -lemma UN_cong: - "[| A=B; !!x. x\B ==> C(x)=D(x) |] ==> (\x\A. C(x)) = (\x\B. D(x))" -by simp - - -(*No "Addcongs [UN_cong]" because @{term\} is a combination of constants*) - -(* UN_E appears before UnionE so that it is tried first, to avoid expensive - calls to hyp_subst_tac. Cannot include UN_I as it is unsafe: would enlarge - the search space.*) - - -subsection\Rules for the empty set\ - -(*The set @{term"{x\0. False}"} is empty; by foundation it equals 0 - See Suppes, page 21.*) -lemma not_mem_empty [simp]: "a \ 0" -apply (cut_tac foundation) -apply (best dest: equalityD2) -done - -lemmas emptyE [elim!] = not_mem_empty [THEN notE] - - -lemma empty_subsetI [simp]: "0 \ A" -by blast - -lemma equals0I: "[| !!y. y\A ==> False |] ==> A=0" -by blast - -lemma equals0D [dest]: "A=0 ==> a \ A" -by blast - -declare sym [THEN equals0D, dest] - -lemma not_emptyI: "a\A ==> A \ 0" -by blast - -lemma not_emptyE: "[| A \ 0; !!x. x\A ==> R |] ==> R" -by blast - - -subsection\Rules for Inter\ - -(*Not obviously useful for proving InterI, InterD, InterE*) -lemma Inter_iff: "A \ \(C) <-> (\x\C. A: x) & C\0" -by (simp add: Inter_def Ball_def, blast) - -(* Intersection is well-behaved only if the family is non-empty! *) -lemma InterI [intro!]: - "[| !!x. x: C ==> A: x; C\0 |] ==> A \ \(C)" -by (simp add: Inter_iff) - -(*A "destruct" rule -- every B in C contains A as an element, but - A\B can hold when B\C does not! This rule is analogous to "spec". *) -lemma InterD [elim, Pure.elim]: "[| A \ \(C); B \ C |] ==> A \ B" -by (unfold Inter_def, blast) - -(*"Classical" elimination rule -- does not require exhibiting @{term"B\C"} *) -lemma InterE [elim]: - "[| A \ \(C); B\C ==> R; A\B ==> R |] ==> R" -by (simp add: Inter_def, blast) - - -subsection\Rules for Intersections of families\ - -(* @{term"\x\A. B(x)"} abbreviates @{term"\({B(x). x\A})"} *) - -lemma INT_iff: "b \ (\x\A. B(x)) <-> (\x\A. b \ B(x)) & A\0" -by (force simp add: Inter_def) - -lemma INT_I: "[| !!x. x: A ==> b: B(x); A\0 |] ==> b: (\x\A. B(x))" -by blast - -lemma INT_E: "[| b \ (\x\A. B(x)); a: A |] ==> b \ B(a)" -by blast - -lemma INT_cong: - "[| A=B; !!x. x\B ==> C(x)=D(x) |] ==> (\x\A. C(x)) = (\x\B. D(x))" -by simp - -(*No "Addcongs [INT_cong]" because @{term\} is a combination of constants*) - - -subsection\Rules for Powersets\ - -lemma PowI: "A \ B ==> A \ Pow(B)" -by (erule Pow_iff [THEN iffD2]) - -lemma PowD: "A \ Pow(B) ==> A<=B" -by (erule Pow_iff [THEN iffD1]) - -declare Pow_iff [iff] - -lemmas Pow_bottom = empty_subsetI [THEN PowI] \\@{term"0 \ Pow(B)"}\ -lemmas Pow_top = subset_refl [THEN PowI] \\@{term"A \ Pow(A)"}\ - - -subsection\Cantor's Theorem: There is no surjection from a set to its powerset.\ - -(*The search is undirected. Allowing redundant introduction rules may - make it diverge. Variable b represents ANY map, such as - (lam x\A.b(x)): A->Pow(A). *) -lemma cantor: "\S \ Pow(A). \x\A. b(x) \ S" -by (best elim!: equalityCE del: ReplaceI RepFun_eqI) +declaration \fn _ => + Simplifier.map_ss (Simplifier.set_mksimps (fn ctxt => + map mk_eq o Ord_atomize o Variable.gen_all ctxt)) +\ end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ZFC.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ZF/ZFC.thy Sun Apr 09 20:44:35 2017 +0200 @@ -0,0 +1,4 @@ +theory ZFC imports ZF InfDatatype +begin + +end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ZF_Base.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ZF/ZF_Base.thy Sun Apr 09 20:44:35 2017 +0200 @@ -0,0 +1,650 @@ +(* Title: ZF/ZF_Base.thy + Author: Lawrence C Paulson and Martin D Coen, CU Computer Laboratory + Copyright 1993 University of Cambridge +*) + +section \Base of Zermelo-Fraenkel Set Theory\ + +theory ZF_Base +imports "~~/src/FOL/FOL" +begin + +subsection \Signature\ + +declare [[eta_contract = false]] + +typedecl i +instance i :: "term" .. + +axiomatization mem :: "[i, i] \ o" (infixl "\" 50) \ \membership relation\ + and zero :: "i" ("0") \ \the empty set\ + and Pow :: "i \ i" \ \power sets\ + and Inf :: "i" \ \infinite set\ + and Union :: "i \ i" ("\_" [90] 90) + and PrimReplace :: "[i, [i, i] \ o] \ i" + +abbreviation not_mem :: "[i, i] \ o" (infixl "\" 50) \ \negated membership relation\ + where "x \ y \ \ (x \ y)" + + +subsection \Bounded Quantifiers\ + +definition Ball :: "[i, i \ o] \ o" + where "Ball(A, P) \ \x. x\A \ P(x)" + +definition Bex :: "[i, i \ o] \ o" + where "Bex(A, P) \ \x. x\A \ P(x)" + +syntax + "_Ball" :: "[pttrn, i, o] \ o" ("(3\_\_./ _)" 10) + "_Bex" :: "[pttrn, i, o] \ o" ("(3\_\_./ _)" 10) +translations + "\x\A. P" \ "CONST Ball(A, \x. P)" + "\x\A. P" \ "CONST Bex(A, \x. P)" + + +subsection \Variations on Replacement\ + +(* Derived form of replacement, restricting P to its functional part. + The resulting set (for functional P) is the same as with + PrimReplace, but the rules are simpler. *) +definition Replace :: "[i, [i, i] \ o] \ i" + where "Replace(A,P) == PrimReplace(A, %x y. (\!z. P(x,z)) & P(x,y))" + +syntax + "_Replace" :: "[pttrn, pttrn, i, o] => i" ("(1{_ ./ _ \ _, _})") +translations + "{y. x\A, Q}" \ "CONST Replace(A, \x y. Q)" + + +(* Functional form of replacement -- analgous to ML's map functional *) + +definition RepFun :: "[i, i \ i] \ i" + where "RepFun(A,f) == {y . x\A, y=f(x)}" + +syntax + "_RepFun" :: "[i, pttrn, i] => i" ("(1{_ ./ _ \ _})" [51,0,51]) +translations + "{b. x\A}" \ "CONST RepFun(A, \x. b)" + + +(* Separation and Pairing can be derived from the Replacement + and Powerset Axioms using the following definitions. *) +definition Collect :: "[i, i \ o] \ i" + where "Collect(A,P) == {y . x\A, x=y & P(x)}" + +syntax + "_Collect" :: "[pttrn, i, o] \ i" ("(1{_ \ _ ./ _})") +translations + "{x\A. P}" \ "CONST Collect(A, \x. P)" + + +subsection \General union and intersection\ + +definition Inter :: "i => i" ("\_" [90] 90) + where "\(A) == { x\\(A) . \y\A. x\y}" + +syntax + "_UNION" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) + "_INTER" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) +translations + "\x\A. B" == "CONST Union({B. x\A})" + "\x\A. B" == "CONST Inter({B. x\A})" + + +subsection \Finite sets and binary operations\ + +(*Unordered pairs (Upair) express binary union/intersection and cons; + set enumerations translate as {a,...,z} = cons(a,...,cons(z,0)...)*) + +definition Upair :: "[i, i] => i" + where "Upair(a,b) == {y. x\Pow(Pow(0)), (x=0 & y=a) | (x=Pow(0) & y=b)}" + +definition Subset :: "[i, i] \ o" (infixl "\" 50) \ \subset relation\ + where subset_def: "A \ B \ \x\A. x\B" + +definition Diff :: "[i, i] \ i" (infixl "-" 65) \ \set difference\ + where "A - B == { x\A . ~(x\B) }" + +definition Un :: "[i, i] \ i" (infixl "\" 65) \ \binary union\ + where "A \ B == \(Upair(A,B))" + +definition Int :: "[i, i] \ i" (infixl "\" 70) \ \binary intersection\ + where "A \ B == \(Upair(A,B))" + +definition cons :: "[i, i] => i" + where "cons(a,A) == Upair(a,a) \ A" + +definition succ :: "i => i" + where "succ(i) == cons(i, i)" + +nonterminal "is" +syntax + "" :: "i \ is" ("_") + "_Enum" :: "[i, is] \ is" ("_,/ _") + "_Finset" :: "is \ i" ("{(_)}") +translations + "{x, xs}" == "CONST cons(x, {xs})" + "{x}" == "CONST cons(x, 0)" + + +subsection \Axioms\ + +(* ZF axioms -- see Suppes p.238 + Axioms for Union, Pow and Replace state existence only, + uniqueness is derivable using extensionality. *) + +axiomatization +where + extension: "A = B \ A \ B \ B \ A" and + Union_iff: "A \ \(C) \ (\B\C. A\B)" and + Pow_iff: "A \ Pow(B) \ A \ B" and + + (*We may name this set, though it is not uniquely defined.*) + infinity: "0 \ Inf \ (\y\Inf. succ(y) \ Inf)" and + + (*This formulation facilitates case analysis on A.*) + foundation: "A = 0 \ (\x\A. \y\x. y\A)" and + + (*Schema axiom since predicate P is a higher-order variable*) + replacement: "(\x\A. \y z. P(x,y) \ P(x,z) \ y = z) \ + b \ PrimReplace(A,P) \ (\x\A. P(x,b))" + + +subsection \Definite descriptions -- via Replace over the set "1"\ + +definition The :: "(i \ o) \ i" (binder "THE " 10) + where the_def: "The(P) == \({y . x \ {0}, P(y)})" + +definition If :: "[o, i, i] \ i" ("(if (_)/ then (_)/ else (_))" [10] 10) + where if_def: "if P then a else b == THE z. P & z=a | ~P & z=b" + +abbreviation (input) + old_if :: "[o, i, i] => i" ("if '(_,_,_')") + where "if(P,a,b) == If(P,a,b)" + + +subsection \Ordered Pairing\ + +(* this "symmetric" definition works better than {{a}, {a,b}} *) +definition Pair :: "[i, i] => i" + where "Pair(a,b) == {{a,a}, {a,b}}" + +definition fst :: "i \ i" + where "fst(p) == THE a. \b. p = Pair(a, b)" + +definition snd :: "i \ i" + where "snd(p) == THE b. \a. p = Pair(a, b)" + +definition split :: "[[i, i] \ 'a, i] \ 'a::{}" \ \for pattern-matching\ + where "split(c) == \p. c(fst(p), snd(p))" + +(* Patterns -- extends pre-defined type "pttrn" used in abstractions *) +nonterminal patterns +syntax + "_pattern" :: "patterns => pttrn" ("\_\") + "" :: "pttrn => patterns" ("_") + "_patterns" :: "[pttrn, patterns] => patterns" ("_,/_") + "_Tuple" :: "[i, is] => i" ("\(_,/ _)\") +translations + "\x, y, z\" == "\x, \y, z\\" + "\x, y\" == "CONST Pair(x, y)" + "\\x,y,zs\.b" == "CONST split(\x \y,zs\.b)" + "\\x,y\.b" == "CONST split(\x y. b)" + +definition Sigma :: "[i, i \ i] \ i" + where "Sigma(A,B) == \x\A. \y\B(x). {\x,y\}" + +abbreviation cart_prod :: "[i, i] => i" (infixr "\" 80) \ \Cartesian product\ + where "A \ B \ Sigma(A, \_. B)" + + +subsection \Relations and Functions\ + +(*converse of relation r, inverse of function*) +definition converse :: "i \ i" + where "converse(r) == {z. w\r, \x y. w=\x,y\ \ z=\y,x\}" + +definition domain :: "i \ i" + where "domain(r) == {x. w\r, \y. w=\x,y\}" + +definition range :: "i \ i" + where "range(r) == domain(converse(r))" + +definition field :: "i \ i" + where "field(r) == domain(r) \ range(r)" + +definition relation :: "i \ o" \ \recognizes sets of pairs\ + where "relation(r) == \z\r. \x y. z = \x,y\" + +definition "function" :: "i \ o" \ \recognizes functions; can have non-pairs\ + where "function(r) == \x y. \x,y\ \ r \ (\y'. \x,y'\ \ r \ y = y')" + +definition Image :: "[i, i] \ i" (infixl "``" 90) \ \image\ + where image_def: "r `` A == {y \ range(r). \x\A. \x,y\ \ r}" + +definition vimage :: "[i, i] \ i" (infixl "-``" 90) \ \inverse image\ + where vimage_def: "r -`` A == converse(r)``A" + +(* Restrict the relation r to the domain A *) +definition restrict :: "[i, i] \ i" + where "restrict(r,A) == {z \ r. \x\A. \y. z = \x,y\}" + + +(* Abstraction, application and Cartesian product of a family of sets *) + +definition Lambda :: "[i, i \ i] \ i" + where lam_def: "Lambda(A,b) == {\x,b(x)\. x\A}" + +definition "apply" :: "[i, i] \ i" (infixl "`" 90) \ \function application\ + where "f`a == \(f``{a})" + +definition Pi :: "[i, i \ i] \ i" + where "Pi(A,B) == {f\Pow(Sigma(A,B)). A\domain(f) & function(f)}" + +abbreviation function_space :: "[i, i] \ i" (infixr "->" 60) \ \function space\ + where "A -> B \ Pi(A, \_. B)" + + +(* binder syntax *) + +syntax + "_PROD" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) + "_SUM" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) + "_lam" :: "[pttrn, i, i] => i" ("(3\_\_./ _)" 10) +translations + "\x\A. B" == "CONST Pi(A, \x. B)" + "\x\A. B" == "CONST Sigma(A, \x. B)" + "\x\A. f" == "CONST Lambda(A, \x. f)" + + +subsection \ASCII syntax\ + +notation (ASCII) + cart_prod (infixr "*" 80) and + Int (infixl "Int" 70) and + Un (infixl "Un" 65) and + function_space (infixr "\" 60) and + Subset (infixl "<=" 50) and + mem (infixl ":" 50) and + not_mem (infixl "~:" 50) + +syntax (ASCII) + "_Ball" :: "[pttrn, i, o] => o" ("(3ALL _:_./ _)" 10) + "_Bex" :: "[pttrn, i, o] => o" ("(3EX _:_./ _)" 10) + "_Collect" :: "[pttrn, i, o] => i" ("(1{_: _ ./ _})") + "_Replace" :: "[pttrn, pttrn, i, o] => i" ("(1{_ ./ _: _, _})") + "_RepFun" :: "[i, pttrn, i] => i" ("(1{_ ./ _: _})" [51,0,51]) + "_UNION" :: "[pttrn, i, i] => i" ("(3UN _:_./ _)" 10) + "_INTER" :: "[pttrn, i, i] => i" ("(3INT _:_./ _)" 10) + "_PROD" :: "[pttrn, i, i] => i" ("(3PROD _:_./ _)" 10) + "_SUM" :: "[pttrn, i, i] => i" ("(3SUM _:_./ _)" 10) + "_lam" :: "[pttrn, i, i] => i" ("(3lam _:_./ _)" 10) + "_Tuple" :: "[i, is] => i" ("<(_,/ _)>") + "_pattern" :: "patterns => pttrn" ("<_>") + + +subsection \Substitution\ + +(*Useful examples: singletonI RS subst_elem, subst_elem RSN (2,IntI) *) +lemma subst_elem: "[| b\A; a=b |] ==> a\A" +by (erule ssubst, assumption) + + +subsection\Bounded universal quantifier\ + +lemma ballI [intro!]: "[| !!x. x\A ==> P(x) |] ==> \x\A. P(x)" +by (simp add: Ball_def) + +lemmas strip = impI allI ballI + +lemma bspec [dest?]: "[| \x\A. P(x); x: A |] ==> P(x)" +by (simp add: Ball_def) + +(*Instantiates x first: better for automatic theorem proving?*) +lemma rev_ballE [elim]: + "[| \x\A. P(x); x\A ==> Q; P(x) ==> Q |] ==> Q" +by (simp add: Ball_def, blast) + +lemma ballE: "[| \x\A. P(x); P(x) ==> Q; x\A ==> Q |] ==> Q" +by blast + +(*Used in the datatype package*) +lemma rev_bspec: "[| x: A; \x\A. P(x) |] ==> P(x)" +by (simp add: Ball_def) + +(*Trival rewrite rule; @{term"(\x\A.P)<->P"} holds only if A is nonempty!*) +lemma ball_triv [simp]: "(\x\A. P) <-> ((\x. x\A) \ P)" +by (simp add: Ball_def) + +(*Congruence rule for rewriting*) +lemma ball_cong [cong]: + "[| A=A'; !!x. x\A' ==> P(x) <-> P'(x) |] ==> (\x\A. P(x)) <-> (\x\A'. P'(x))" +by (simp add: Ball_def) + +lemma atomize_ball: + "(!!x. x \ A ==> P(x)) == Trueprop (\x\A. P(x))" + by (simp only: Ball_def atomize_all atomize_imp) + +lemmas [symmetric, rulify] = atomize_ball + and [symmetric, defn] = atomize_ball + + +subsection\Bounded existential quantifier\ + +lemma bexI [intro]: "[| P(x); x: A |] ==> \x\A. P(x)" +by (simp add: Bex_def, blast) + +(*The best argument order when there is only one @{term"x\A"}*) +lemma rev_bexI: "[| x\A; P(x) |] ==> \x\A. P(x)" +by blast + +(*Not of the general form for such rules. The existential quanitifer becomes universal. *) +lemma bexCI: "[| \x\A. ~P(x) ==> P(a); a: A |] ==> \x\A. P(x)" +by blast + +lemma bexE [elim!]: "[| \x\A. P(x); !!x. [| x\A; P(x) |] ==> Q |] ==> Q" +by (simp add: Bex_def, blast) + +(*We do not even have @{term"(\x\A. True) <-> True"} unless @{term"A" is nonempty!!*) +lemma bex_triv [simp]: "(\x\A. P) <-> ((\x. x\A) & P)" +by (simp add: Bex_def) + +lemma bex_cong [cong]: + "[| A=A'; !!x. x\A' ==> P(x) <-> P'(x) |] + ==> (\x\A. P(x)) <-> (\x\A'. P'(x))" +by (simp add: Bex_def cong: conj_cong) + + + +subsection\Rules for subsets\ + +lemma subsetI [intro!]: + "(!!x. x\A ==> x\B) ==> A \ B" +by (simp add: subset_def) + +(*Rule in Modus Ponens style [was called subsetE] *) +lemma subsetD [elim]: "[| A \ B; c\A |] ==> c\B" +apply (unfold subset_def) +apply (erule bspec, assumption) +done + +(*Classical elimination rule*) +lemma subsetCE [elim]: + "[| A \ B; c\A ==> P; c\B ==> P |] ==> P" +by (simp add: subset_def, blast) + +(*Sometimes useful with premises in this order*) +lemma rev_subsetD: "[| c\A; A<=B |] ==> c\B" +by blast + +lemma contra_subsetD: "[| A \ B; c \ B |] ==> c \ A" +by blast + +lemma rev_contra_subsetD: "[| c \ B; A \ B |] ==> c \ A" +by blast + +lemma subset_refl [simp]: "A \ A" +by blast + +lemma subset_trans: "[| A<=B; B<=C |] ==> A<=C" +by blast + +(*Useful for proving A<=B by rewriting in some cases*) +lemma subset_iff: + "A<=B <-> (\x. x\A \ x\B)" +apply (unfold subset_def Ball_def) +apply (rule iff_refl) +done + +text\For calculations\ +declare subsetD [trans] rev_subsetD [trans] subset_trans [trans] + + +subsection\Rules for equality\ + +(*Anti-symmetry of the subset relation*) +lemma equalityI [intro]: "[| A \ B; B \ A |] ==> A = B" +by (rule extension [THEN iffD2], rule conjI) + + +lemma equality_iffI: "(!!x. x\A <-> x\B) ==> A = B" +by (rule equalityI, blast+) + +lemmas equalityD1 = extension [THEN iffD1, THEN conjunct1] +lemmas equalityD2 = extension [THEN iffD1, THEN conjunct2] + +lemma equalityE: "[| A = B; [| A<=B; B<=A |] ==> P |] ==> P" +by (blast dest: equalityD1 equalityD2) + +lemma equalityCE: + "[| A = B; [| c\A; c\B |] ==> P; [| c\A; c\B |] ==> P |] ==> P" +by (erule equalityE, blast) + +lemma equality_iffD: + "A = B ==> (!!x. x \ A <-> x \ B)" + by auto + + +subsection\Rules for Replace -- the derived form of replacement\ + +lemma Replace_iff: + "b \ {y. x\A, P(x,y)} <-> (\x\A. P(x,b) & (\y. P(x,y) \ y=b))" +apply (unfold Replace_def) +apply (rule replacement [THEN iff_trans], blast+) +done + +(*Introduction; there must be a unique y such that P(x,y), namely y=b. *) +lemma ReplaceI [intro]: + "[| P(x,b); x: A; !!y. P(x,y) ==> y=b |] ==> + b \ {y. x\A, P(x,y)}" +by (rule Replace_iff [THEN iffD2], blast) + +(*Elimination; may asssume there is a unique y such that P(x,y), namely y=b. *) +lemma ReplaceE: + "[| b \ {y. x\A, P(x,y)}; + !!x. [| x: A; P(x,b); \y. P(x,y)\y=b |] ==> R + |] ==> R" +by (rule Replace_iff [THEN iffD1, THEN bexE], simp+) + +(*As above but without the (generally useless) 3rd assumption*) +lemma ReplaceE2 [elim!]: + "[| b \ {y. x\A, P(x,y)}; + !!x. [| x: A; P(x,b) |] ==> R + |] ==> R" +by (erule ReplaceE, blast) + +lemma Replace_cong [cong]: + "[| A=B; !!x y. x\B ==> P(x,y) <-> Q(x,y) |] ==> + Replace(A,P) = Replace(B,Q)" +apply (rule equality_iffI) +apply (simp add: Replace_iff) +done + + +subsection\Rules for RepFun\ + +lemma RepFunI: "a \ A ==> f(a) \ {f(x). x\A}" +by (simp add: RepFun_def Replace_iff, blast) + +(*Useful for coinduction proofs*) +lemma RepFun_eqI [intro]: "[| b=f(a); a \ A |] ==> b \ {f(x). x\A}" +apply (erule ssubst) +apply (erule RepFunI) +done + +lemma RepFunE [elim!]: + "[| b \ {f(x). x\A}; + !!x.[| x\A; b=f(x) |] ==> P |] ==> + P" +by (simp add: RepFun_def Replace_iff, blast) + +lemma RepFun_cong [cong]: + "[| A=B; !!x. x\B ==> f(x)=g(x) |] ==> RepFun(A,f) = RepFun(B,g)" +by (simp add: RepFun_def) + +lemma RepFun_iff [simp]: "b \ {f(x). x\A} <-> (\x\A. b=f(x))" +by (unfold Bex_def, blast) + +lemma triv_RepFun [simp]: "{x. x\A} = A" +by blast + + +subsection\Rules for Collect -- forming a subset by separation\ + +(*Separation is derivable from Replacement*) +lemma separation [simp]: "a \ {x\A. P(x)} <-> a\A & P(a)" +by (unfold Collect_def, blast) + +lemma CollectI [intro!]: "[| a\A; P(a) |] ==> a \ {x\A. P(x)}" +by simp + +lemma CollectE [elim!]: "[| a \ {x\A. P(x)}; [| a\A; P(a) |] ==> R |] ==> R" +by simp + +lemma CollectD1: "a \ {x\A. P(x)} ==> a\A" +by (erule CollectE, assumption) + +lemma CollectD2: "a \ {x\A. P(x)} ==> P(a)" +by (erule CollectE, assumption) + +lemma Collect_cong [cong]: + "[| A=B; !!x. x\B ==> P(x) <-> Q(x) |] + ==> Collect(A, %x. P(x)) = Collect(B, %x. Q(x))" +by (simp add: Collect_def) + + +subsection\Rules for Unions\ + +declare Union_iff [simp] + +(*The order of the premises presupposes that C is rigid; A may be flexible*) +lemma UnionI [intro]: "[| B: C; A: B |] ==> A: \(C)" +by (simp, blast) + +lemma UnionE [elim!]: "[| A \ \(C); !!B.[| A: B; B: C |] ==> R |] ==> R" +by (simp, blast) + + +subsection\Rules for Unions of families\ +(* @{term"\x\A. B(x)"} abbreviates @{term"\({B(x). x\A})"} *) + +lemma UN_iff [simp]: "b \ (\x\A. B(x)) <-> (\x\A. b \ B(x))" +by (simp add: Bex_def, blast) + +(*The order of the premises presupposes that A is rigid; b may be flexible*) +lemma UN_I: "[| a: A; b: B(a) |] ==> b: (\x\A. B(x))" +by (simp, blast) + + +lemma UN_E [elim!]: + "[| b \ (\x\A. B(x)); !!x.[| x: A; b: B(x) |] ==> R |] ==> R" +by blast + +lemma UN_cong: + "[| A=B; !!x. x\B ==> C(x)=D(x) |] ==> (\x\A. C(x)) = (\x\B. D(x))" +by simp + + +(*No "Addcongs [UN_cong]" because @{term\} is a combination of constants*) + +(* UN_E appears before UnionE so that it is tried first, to avoid expensive + calls to hyp_subst_tac. Cannot include UN_I as it is unsafe: would enlarge + the search space.*) + + +subsection\Rules for the empty set\ + +(*The set @{term"{x\0. False}"} is empty; by foundation it equals 0 + See Suppes, page 21.*) +lemma not_mem_empty [simp]: "a \ 0" +apply (cut_tac foundation) +apply (best dest: equalityD2) +done + +lemmas emptyE [elim!] = not_mem_empty [THEN notE] + + +lemma empty_subsetI [simp]: "0 \ A" +by blast + +lemma equals0I: "[| !!y. y\A ==> False |] ==> A=0" +by blast + +lemma equals0D [dest]: "A=0 ==> a \ A" +by blast + +declare sym [THEN equals0D, dest] + +lemma not_emptyI: "a\A ==> A \ 0" +by blast + +lemma not_emptyE: "[| A \ 0; !!x. x\A ==> R |] ==> R" +by blast + + +subsection\Rules for Inter\ + +(*Not obviously useful for proving InterI, InterD, InterE*) +lemma Inter_iff: "A \ \(C) <-> (\x\C. A: x) & C\0" +by (simp add: Inter_def Ball_def, blast) + +(* Intersection is well-behaved only if the family is non-empty! *) +lemma InterI [intro!]: + "[| !!x. x: C ==> A: x; C\0 |] ==> A \ \(C)" +by (simp add: Inter_iff) + +(*A "destruct" rule -- every B in C contains A as an element, but + A\B can hold when B\C does not! This rule is analogous to "spec". *) +lemma InterD [elim, Pure.elim]: "[| A \ \(C); B \ C |] ==> A \ B" +by (unfold Inter_def, blast) + +(*"Classical" elimination rule -- does not require exhibiting @{term"B\C"} *) +lemma InterE [elim]: + "[| A \ \(C); B\C ==> R; A\B ==> R |] ==> R" +by (simp add: Inter_def, blast) + + +subsection\Rules for Intersections of families\ + +(* @{term"\x\A. B(x)"} abbreviates @{term"\({B(x). x\A})"} *) + +lemma INT_iff: "b \ (\x\A. B(x)) <-> (\x\A. b \ B(x)) & A\0" +by (force simp add: Inter_def) + +lemma INT_I: "[| !!x. x: A ==> b: B(x); A\0 |] ==> b: (\x\A. B(x))" +by blast + +lemma INT_E: "[| b \ (\x\A. B(x)); a: A |] ==> b \ B(a)" +by blast + +lemma INT_cong: + "[| A=B; !!x. x\B ==> C(x)=D(x) |] ==> (\x\A. C(x)) = (\x\B. D(x))" +by simp + +(*No "Addcongs [INT_cong]" because @{term\} is a combination of constants*) + + +subsection\Rules for Powersets\ + +lemma PowI: "A \ B ==> A \ Pow(B)" +by (erule Pow_iff [THEN iffD2]) + +lemma PowD: "A \ Pow(B) ==> A<=B" +by (erule Pow_iff [THEN iffD1]) + +declare Pow_iff [iff] + +lemmas Pow_bottom = empty_subsetI [THEN PowI] \\@{term"0 \ Pow(B)"}\ +lemmas Pow_top = subset_refl [THEN PowI] \\@{term"A \ Pow(A)"}\ + + +subsection\Cantor's Theorem: There is no surjection from a set to its powerset.\ + +(*The search is undirected. Allowing redundant introduction rules may + make it diverge. Variable b represents ANY map, such as + (lam x\A.b(x)): A->Pow(A). *) +lemma cantor: "\S \ Pow(A). \x\A. b(x) \ S" +by (best elim!: equalityCE del: ReplaceI RepFun_eqI) + +end diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/BinEx.thy --- a/src/ZF/ex/BinEx.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/BinEx.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ Examples of performing binary arithmetic by simplification. *) -theory BinEx imports Main begin +theory BinEx imports ZF begin (*All runtimes below are on a 300MHz Pentium*) lemma "#13 $+ #19 = #32" diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/CoUnit.thy --- a/src/ZF/ex/CoUnit.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/CoUnit.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section \Trivial codatatype definitions, one of which goes wrong!\ -theory CoUnit imports Main begin +theory CoUnit imports ZF begin text \ See discussion in: L C Paulson. A Concrete Final Coalgebra Theorem diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/Commutation.thy --- a/src/ZF/ex/Commutation.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/Commutation.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ Commutation theory for proving the Church Rosser theorem. *) -theory Commutation imports Main begin +theory Commutation imports ZF begin definition square :: "[i, i, i, i] => o" where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/Group.thy --- a/src/ZF/ex/Group.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/Group.thy Sun Apr 09 20:44:35 2017 +0200 @@ -2,7 +2,7 @@ section \Groups\ -theory Group imports Main begin +theory Group imports ZF begin text\Based on work by Clemens Ballarin, Florian Kammueller, L C Paulson and Markus Wenzel.\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/LList.thy --- a/src/ZF/ex/LList.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/LList.thy Sun Apr 09 20:44:35 2017 +0200 @@ -13,7 +13,7 @@ a typing rule for it, based on some notion of "productivity..." *) -theory LList imports Main begin +theory LList imports ZF begin consts llist :: "i=>i" diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/Limit.thy --- a/src/ZF/ex/Limit.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/Limit.thy Sun Apr 09 20:44:35 2017 +0200 @@ -17,7 +17,7 @@ Laboratory, 1995. *) -theory Limit imports Main begin +theory Limit imports ZF begin definition rel :: "[i,i,i]=>o" where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/NatSum.thy --- a/src/ZF/ex/NatSum.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/NatSum.thy Sun Apr 09 20:44:35 2017 +0200 @@ -16,7 +16,7 @@ *) -theory NatSum imports Main begin +theory NatSum imports ZF begin consts sum :: "[i=>i, i] => i" primrec diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/Primes.thy --- a/src/ZF/ex/Primes.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/Primes.thy Sun Apr 09 20:44:35 2017 +0200 @@ -5,7 +5,7 @@ section\The Divides Relation and Euclid's algorithm for the GCD\ -theory Primes imports Main begin +theory Primes imports ZF begin definition divides :: "[i,i]=>o" (infixl "dvd" 50) where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/Ramsey.thy --- a/src/ZF/ex/Ramsey.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/Ramsey.thy Sun Apr 09 20:44:35 2017 +0200 @@ -24,7 +24,7 @@ | ram i j = ram (i-1) j + ram i (j-1) *) -theory Ramsey imports Main begin +theory Ramsey imports ZF begin definition Symmetric :: "i=>o" where diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/ex/misc.thy --- a/src/ZF/ex/misc.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/ex/misc.thy Sun Apr 09 20:44:35 2017 +0200 @@ -7,7 +7,7 @@ section\Miscellaneous ZF Examples\ -theory misc imports Main begin +theory misc imports ZF begin subsection\Various Small Problems\ diff -r 9bc3b57c1fa7 -r c82e63b11b8b src/ZF/upair.thy --- a/src/ZF/upair.thy Sun Apr 09 20:17:00 2017 +0200 +++ b/src/ZF/upair.thy Sun Apr 09 20:44:35 2017 +0200 @@ -12,7 +12,7 @@ section\Unordered Pairs\ theory upair -imports ZF +imports ZF_Base keywords "print_tcset" :: diag begin