src/ZF/ex/misc.ML
author lcp
Thu, 24 Nov 1994 00:33:13 +0100
changeset 736 a8d1758bb113
parent 695 a1586fa1b755
child 782 200a16083201
permissions -rw-r--r--
moved Cantors theorem to ZF/ZF.ML and ZF/Perm.ML hom_tac: removed to simplify the proof of comp_homs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	ZF/ex/misc
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Miscellaneous examples for Zermelo-Fraenkel Set Theory 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
Cantor's Theorem; Schroeder-Bernstein Theorem; Composition of homomorphisms...
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
writeln"ZF/ex/misc";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
(*Example 12 (credited to Peter Andrews) from
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
 W. Bledsoe.  A Maximal Method for Set Variables in Automatic Theorem-proving.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
 In: J. Hayes and D. Michie and L. Mikulich, eds.  Machine Intelligence 9.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
 Ellis Horwood, 53-100 (1979). *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
goal ZF.thy "(ALL F. {x}: F --> {y}:F) --> (ALL A. x:A --> y:A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
by (best_tac ZF_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
(*** Composition of homomorphisms is a homomorphism ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
(*Given as a challenge problem in
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
  R. Boyer et al.,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
  Set Theory in First-Order Logic: Clauses for G\"odel's Axioms,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
  JAR 2 (1986), 287-327 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    30
(*collecting the relevant lemmas*)
434
89d45187f04d Various updates and tidying
lcp
parents: 38
diff changeset
    31
val hom_ss = ZF_ss addsimps [comp_fun,comp_fun_apply,SigmaI,apply_funtype];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
736
a8d1758bb113 moved Cantors theorem to ZF/ZF.ML and ZF/Perm.ML
lcp
parents: 695
diff changeset
    33
(*This version uses a super application of simp_tac.  Needs setloop to help
a8d1758bb113 moved Cantors theorem to ZF/ZF.ML and ZF/Perm.ML
lcp
parents: 695
diff changeset
    34
  proving conditions of rewrites such as comp_fun_apply;
a8d1758bb113 moved Cantors theorem to ZF/ZF.ML and ZF/Perm.ML
lcp
parents: 695
diff changeset
    35
  rewriting does not instantiate Vars*)
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    36
goal Perm.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
    "(ALL A f B g. hom(A,f,B,g) = \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
\          {H: A->B. f:A*A->A & g:B*B->B & \
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    39
\                    (ALL x:A. ALL y:A. H`(f`<x,y>) = g`<H`x,H`y>)}) --> \
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
\    J : hom(A,f,B,g) & K : hom(B,g,C,h) -->  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
\    (K O J) : hom(A,f,C,h)";
736
a8d1758bb113 moved Cantors theorem to ZF/ZF.ML and ZF/Perm.ML
lcp
parents: 695
diff changeset
    42
by (asm_simp_tac (hom_ss setloop (K (safe_tac FOL_cs))) 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
val comp_homs = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    45
(*This version uses meta-level rewriting, safe_tac and asm_simp_tac*)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
val [hom_def] = goal Perm.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
    "(!! A f B g. hom(A,f,B,g) == \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
\          {H: A->B. f:A*A->A & g:B*B->B & \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
\                    (ALL x:A. ALL y:A. H`(f`<x,y>) = g`<H`x,H`y>)}) ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
\    J : hom(A,f,B,g) & K : hom(B,g,C,h) -->  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
\    (K O J) : hom(A,f,C,h)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
by (rewtac hom_def);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
by (safe_tac ZF_cs);
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    54
by (asm_simp_tac hom_ss 1);
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
    55
by (asm_simp_tac hom_ss 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
val comp_homs = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
(** A characterization of functions, suggested by Tobias Nipkow **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
695
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
    61
goalw ZF.thy [Pi_def, function_def]
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
    "r: domain(r)->B  <->  r <= domain(r)*B & (ALL X. r `` (r -`` X) <= X)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
by (safe_tac ZF_cs);
695
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
    64
by (fast_tac ZF_cs 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
by (eres_inst_tac [("x", "{y}")] allE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
by (fast_tac ZF_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
(**** From D Pastre.  Automatic theorem proving in set theory. 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
         Artificial Intelligence, 10:1--27, 1978.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
             These examples require forward reasoning! ****)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
(*reduce the clauses to units by type checking -- beware of nontermination*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
fun forw_typechk tyrls [] = []
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
  | forw_typechk tyrls clauses =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
    let val (units, others) = partition (has_fewer_prems 1) clauses
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
    in  gen_union eq_thm (units, forw_typechk tyrls (tyrls RL others))
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
    end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
(*A crude form of forward reasoning*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
fun forw_iterate tyrls rls facts 0 = facts
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
  | forw_iterate tyrls rls facts n =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
      let val facts' = 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
	  gen_union eq_thm (forw_typechk (tyrls@facts) (facts RL rls), facts);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
      in  forw_iterate tyrls rls facts' (n-1)  end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    87
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    88
val pastre_rls =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
    [comp_mem_injD1, comp_mem_surjD1, comp_mem_injD2, comp_mem_surjD2];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    90
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
fun pastre_facts (fact1::fact2::fact3::prems) = 
434
89d45187f04d Various updates and tidying
lcp
parents: 38
diff changeset
    92
    forw_iterate (prems @ [comp_surj, comp_inj, comp_fun])
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    93
               pastre_rls [fact1,fact2,fact3] 4;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    96
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    97
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   100
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   101
val pastre1 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   102
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   103
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   104
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   105
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   106
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   107
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   108
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   109
val pastre2 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   110
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   111
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   114
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   115
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   116
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   117
val pastre3 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   118
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   119
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   120
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   122
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   124
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   125
val pastre4 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   127
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   128
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   129
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   130
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   131
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   132
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
val pastre5 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   134
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   138
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   139
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   140
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
val pastre6 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   142
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   143
(** Yet another example... **)
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   144
695
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   145
goal (merge_theories(Sum.thy,Perm.thy))
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   146
    "(lam Z:Pow(A+B). <{x:A. Inl(x):Z}, {y:B. Inr(y):Z}>) \
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   147
\    : bij(Pow(A+B), Pow(A)*Pow(B))";
695
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   148
by (res_inst_tac [("d", "split(%X Y.{Inl(x).x:X} Un {Inr(y).y:Y})")] 
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   149
    lam_bijective 1);
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   150
by (TRYALL (etac SigmaE));
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   151
by (ALLGOALS (asm_simp_tac ZF_ss));
a1586fa1b755 ZF/ex/Ramsey,Rmap,misc.ML: modified for new definition of Pi(A,B)
lcp
parents: 434
diff changeset
   152
by (ALLGOALS (fast_tac (sum_cs addSIs [equalityI])));
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   153
val Pow_bij = result();
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   154
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
writeln"Reached end of file.";