src/ZF/AC.thy
author mengj
Fri, 28 Oct 2005 02:28:20 +0200
changeset 18002 35ec4681d38f
parent 16417 9bc16273c2d4
child 24893 b8ef7afe3a6b
permissions -rw-r--r--
Added several new functions that are used to prove HOL goals. Added new methods "vampireH" and "eproverH" that can prove both FOL and HOL goals. The old "vampire" and "eprover" methods are renamed to "vampireF" and "eproverF"; they can only prove FOL goals.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 484
diff changeset
     1
(*  Title:      ZF/AC.thy
484
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
     2
    ID:         $Id$
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 484
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
484
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
     4
    Copyright   1994  University of Cambridge
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
     5
13328
703de709a64b better document preparation
paulson
parents: 13269
diff changeset
     6
*)
484
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
     7
13328
703de709a64b better document preparation
paulson
parents: 13269
diff changeset
     8
header{*The Axiom of Choice*}
484
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
     9
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 14171
diff changeset
    10
theory AC imports Main begin
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    11
13328
703de709a64b better document preparation
paulson
parents: 13269
diff changeset
    12
text{*This definition comes from Halmos (1960), page 59.*}
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    13
axioms AC: "[| a: A;  !!x. x:A ==> (EX y. y:B(x)) |] ==> EX z. z : Pi(A,B)"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    14
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    15
(*The same as AC, but no premise a \<in> A*)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    16
lemma AC_Pi: "[| !!x. x \<in> A ==> (\<exists>y. y \<in> B(x)) |] ==> \<exists>z. z \<in> Pi(A,B)"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    17
apply (case_tac "A=0")
13149
773657d466cb better simplification of trivial existential equalities
paulson
parents: 13134
diff changeset
    18
apply (simp add: Pi_empty1)
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    19
(*The non-trivial case*)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    20
apply (blast intro: AC)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    21
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    22
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    23
(*Using dtac, this has the advantage of DELETING the universal quantifier*)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    24
lemma AC_ball_Pi: "\<forall>x \<in> A. \<exists>y. y \<in> B(x) ==> \<exists>y. y \<in> Pi(A,B)"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    25
apply (rule AC_Pi)
13269
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    26
apply (erule bspec, assumption)
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    27
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    28
14171
0cab06e3bbd0 Extended the notion of letter and digit, such that now one may use greek,
skalberg
parents: 13328
diff changeset
    29
lemma AC_Pi_Pow: "\<exists>f. f \<in> (\<Pi> X \<in> Pow(C)-{0}. X)"
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    30
apply (rule_tac B1 = "%x. x" in AC_Pi [THEN exE])
13269
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    31
apply (erule_tac [2] exI, blast)
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    32
done
6053
8a1059aa01f0 new inductive, datatype and primrec packages, etc.
paulson
parents: 2469
diff changeset
    33
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    34
lemma AC_func:
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    35
     "[| !!x. x \<in> A ==> (\<exists>y. y \<in> x) |] ==> \<exists>f \<in> A->Union(A). \<forall>x \<in> A. f`x \<in> x"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    36
apply (rule_tac B1 = "%x. x" in AC_Pi [THEN exE])
13269
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    37
prefer 2 apply (blast dest: apply_type intro: Pi_type, blast) 
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    38
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    39
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    40
lemma non_empty_family: "[| 0 \<notin> A;  x \<in> A |] ==> \<exists>y. y \<in> x"
13269
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    41
by (subgoal_tac "x \<noteq> 0", blast+)
6053
8a1059aa01f0 new inductive, datatype and primrec packages, etc.
paulson
parents: 2469
diff changeset
    42
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    43
lemma AC_func0: "0 \<notin> A ==> \<exists>f \<in> A->Union(A). \<forall>x \<in> A. f`x \<in> x"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    44
apply (rule AC_func)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    45
apply (simp_all add: non_empty_family) 
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    46
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    47
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    48
lemma AC_func_Pow: "\<exists>f \<in> (Pow(C)-{0}) -> C. \<forall>x \<in> Pow(C)-{0}. f`x \<in> x"
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    49
apply (rule AC_func0 [THEN bexE])
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    50
apply (rule_tac [2] bexI)
13269
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    51
prefer 2 apply assumption
3ba9be497c33 Tidying and introduction of various new theorems
paulson
parents: 13149
diff changeset
    52
apply (erule_tac [2] fun_weaken_type, blast+)
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    53
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    54
14171
0cab06e3bbd0 Extended the notion of letter and digit, such that now one may use greek,
skalberg
parents: 13328
diff changeset
    55
lemma AC_Pi0: "0 \<notin> A ==> \<exists>f. f \<in> (\<Pi> x \<in> A. x)"
13134
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    56
apply (rule AC_Pi)
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    57
apply (simp_all add: non_empty_family) 
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    58
done
bf37a3049251 converted the AC branch to Isar
paulson
parents: 6053
diff changeset
    59
484
70b789956bd3 Axiom of choice, cardinality results, etc.
lcp
parents:
diff changeset
    60
end