src/ZF/ex/misc.ML
author lcp
Thu, 07 Oct 1993 11:47:50 +0100
changeset 38 4433428596f9
parent 16 0b033d50ca1c
child 434 89d45187f04d
permissions -rw-r--r--
used ~: for "not in"
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
(*** Cantor's Theorem: There is no surjection from a set to its powerset. ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
val cantor_cs = FOL_cs   (*precisely the rules needed for the proof*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
  addSIs [ballI, CollectI, PowI, subsetI] addIs [bexI]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
  addSEs [CollectE, equalityCE];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
(*The search is undirected and similar proof attempts fail*)
38
4433428596f9 used ~: for "not in"
lcp
parents: 16
diff changeset
    29
goal ZF.thy "ALL f: A->Pow(A). EX S: Pow(A). ALL x:A. f`x ~= S";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
by (best_tac cantor_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
38
4433428596f9 used ~: for "not in"
lcp
parents: 16
diff changeset
    33
(*This form displays the diagonal term, {x: A . x ~: f`x} *)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
val [prem] = goal ZF.thy
38
4433428596f9 used ~: for "not in"
lcp
parents: 16
diff changeset
    35
    "f: A->Pow(A) ==> (ALL x:A. f`x ~= ?S) & ?S: Pow(A)";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
by (best_tac cantor_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
(*yet another version...*)
38
4433428596f9 used ~: for "not in"
lcp
parents: 16
diff changeset
    40
goalw Perm.thy [surj_def] "f ~: surj(A,Pow(A))";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
by (safe_tac ZF_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
by (etac ballE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
by (best_tac (cantor_cs addSEs [bexE]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
by (fast_tac ZF_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
(**** The Schroeder-Bernstein Theorem -- see Davey & Priestly, page 106 ****)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
val SB_thy = merge_theories (Fixedpt.thy, Perm.thy);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
(** Lemma: Banach's Decomposition Theorem **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    54
goal SB_thy "bnd_mono(X, %W. X - g``(Y - f``W))";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    55
by (rtac bnd_monoI 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    56
by (REPEAT (ares_tac [Diff_subset, subset_refl, Diff_mono, image_mono] 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    57
val decomp_bnd_mono = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    58
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    59
val [gfun] = goal SB_thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    60
    "g: Y->X ==>   					\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    61
\    g``(Y - f`` lfp(X, %W. X - g``(Y - f``W))) = 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
\    X - lfp(X, %W. X - g``(Y - f``W)) ";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    63
by (res_inst_tac [("P", "%u. ?v = X-u")] 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    64
     (decomp_bnd_mono RS lfp_Tarski RS ssubst) 1);
16
0b033d50ca1c ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 7
diff changeset
    65
by (simp_tac (ZF_ss addsimps [subset_refl, double_complement,
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    66
			     gfun RS fun_is_rel RS image_subset]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    67
val Banach_last_equation = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    68
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
val prems = goal SB_thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    70
    "[| f: X->Y;  g: Y->X |] ==>   \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    71
\    EX XA XB YA YB. (XA Int XB = 0) & (XA Un XB = X) &    \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    72
\                    (YA Int YB = 0) & (YA Un YB = Y) &    \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
\                    f``XA=YA & g``YB=XB";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
by (REPEAT 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    75
    (FIRSTGOAL
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    76
     (resolve_tac [refl, exI, conjI, Diff_disjoint, Diff_partition])));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    77
by (rtac Banach_last_equation 3);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    78
by (REPEAT (resolve_tac (prems@[fun_is_rel, image_subset, lfp_subset]) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    79
val decomposition = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    80
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    81
val prems = goal SB_thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    82
    "[| f: inj(X,Y);  g: inj(Y,X) |] ==> EX h. h: bij(X,Y)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    83
by (cut_facts_tac prems 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    84
by (cut_facts_tac [(prems RL [inj_is_fun]) MRS decomposition] 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    85
by (fast_tac (ZF_cs addSIs [restrict_bij,bij_disjoint_Un]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    86
                    addIs [bij_converse_bij]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    87
(* The instantiation of exI to "restrict(f,XA) Un converse(restrict(g,YB))"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    88
   is forced by the context!! *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    89
val schroeder_bernstein = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    90
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    91
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    92
(*** Composition of homomorphisms is a homomorphism ***)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    93
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    94
(*Given as a challenge problem in
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    95
  R. Boyer et al.,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    96
  Set Theory in First-Order Logic: Clauses for G\"odel's Axioms,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    97
  JAR 2 (1986), 287-327 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    98
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    99
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   100
(*collecting the relevant lemmas*)
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   101
val hom_ss = ZF_ss addsimps [comp_func,comp_func_apply,SigmaI,apply_funtype];
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   102
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   103
(*The problem below is proving conditions of rewrites such as comp_func_apply;
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   104
  rewriting does not instantiate Vars; we must prove the conditions
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   105
  explicitly.*)
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   106
fun hom_tac hyps =
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   107
    resolve_tac (TrueI::refl::iff_refl::hyps) ORELSE' 
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   108
    (cut_facts_tac hyps THEN' fast_tac prop_cs);
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   109
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   110
(*This version uses a super application of simp_tac*)
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   111
goal Perm.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   112
    "(ALL A f B g. hom(A,f,B,g) = \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   113
\          {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
   114
\                    (ALL x:A. ALL y:A. H`(f`<x,y>) = g`<H`x,H`y>)}) --> \
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   115
\    J : hom(A,f,B,g) & K : hom(B,g,C,h) -->  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   116
\    (K O J) : hom(A,f,C,h)";
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   117
by (simp_tac (hom_ss setsolver hom_tac) 1);
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   118
(*Also works but slower:
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   119
    by (asm_simp_tac (hom_ss setloop (K (safe_tac FOL_cs))) 1); *)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   120
val comp_homs = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   121
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   122
(*This version uses meta-level rewriting, safe_tac and asm_simp_tac*)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   123
val [hom_def] = goal Perm.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   124
    "(!! A f B g. hom(A,f,B,g) == \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   125
\          {H: A->B. f:A*A->A & g:B*B->B & \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   126
\                    (ALL x:A. ALL y:A. H`(f`<x,y>) = g`<H`x,H`y>)}) ==> \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   127
\    J : hom(A,f,B,g) & K : hom(B,g,C,h) -->  \
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   128
\    (K O J) : hom(A,f,C,h)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   129
by (rewtac hom_def);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   130
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
   131
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
   132
by (asm_simp_tac hom_ss 1);
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   133
val comp_homs = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   134
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   135
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   136
(** A characterization of functions, suggested by Tobias Nipkow **)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   137
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   138
goalw ZF.thy [Pi_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   139
    "r: domain(r)->B  <->  r <= domain(r)*B & (ALL X. r `` (r -`` X) <= X)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   140
by (safe_tac ZF_cs);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   141
by (fast_tac (ZF_cs addSDs [bspec RS ex1_equalsE]) 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   142
by (eres_inst_tac [("x", "{y}")] allE 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   143
by (fast_tac ZF_cs 1);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   144
result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   145
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   146
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   147
(**** From D Pastre.  Automatic theorem proving in set theory. 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   148
         Artificial Intelligence, 10:1--27, 1978.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   149
             These examples require forward reasoning! ****)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   150
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   151
(*reduce the clauses to units by type checking -- beware of nontermination*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   152
fun forw_typechk tyrls [] = []
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   153
  | forw_typechk tyrls clauses =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   154
    let val (units, others) = partition (has_fewer_prems 1) clauses
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   155
    in  gen_union eq_thm (units, forw_typechk tyrls (tyrls RL others))
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   156
    end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   157
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   158
(*A crude form of forward reasoning*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   159
fun forw_iterate tyrls rls facts 0 = facts
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   160
  | forw_iterate tyrls rls facts n =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   161
      let val facts' = 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   162
	  gen_union eq_thm (forw_typechk (tyrls@facts) (facts RL rls), facts);
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   163
      in  forw_iterate tyrls rls facts' (n-1)  end;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   164
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   165
val pastre_rls =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   166
    [comp_mem_injD1, comp_mem_surjD1, comp_mem_injD2, comp_mem_surjD2];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   167
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   168
fun pastre_facts (fact1::fact2::fact3::prems) = 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   169
    forw_iterate (prems @ [comp_surj, comp_inj, comp_func])
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   170
               pastre_rls [fact1,fact2,fact3] 4;
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   171
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   172
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   173
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   174
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   175
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   176
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   177
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   178
val pastre1 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   179
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   180
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   181
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   182
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   183
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   184
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   185
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   186
val pastre2 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   187
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   188
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   189
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   190
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   191
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   192
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   193
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   194
val pastre3 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   195
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   196
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   197
    "[| (h O g O f): surj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   198
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   199
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   200
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   201
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   202
val pastre4 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   203
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   204
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   205
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   206
\       (f O h O g): surj(B,B); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   207
\       (g O f O h): inj(C,C); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   208
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   209
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   210
val pastre5 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   211
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   212
val prems = goalw Perm.thy [bij_def]
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   213
    "[| (h O g O f): inj(A,A);		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   214
\       (f O h O g): inj(B,B); 		\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   215
\       (g O f O h): surj(C,C); 	\
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   216
\       f: A->B;  g: B->C;  h: C->A |] ==> h: bij(C,A)";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   217
by (REPEAT (resolve_tac (IntI :: pastre_facts prems) 1));
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   218
val pastre6 = result();
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   219
7
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   220
(** Yet another example... **)
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   221
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   222
goalw (merge_theories(Sum.thy,Perm.thy)) [bij_def,inj_def,surj_def]
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   223
    "(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
   224
\    : bij(Pow(A+B), Pow(A)*Pow(B))";
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   225
by (DO_GOAL
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   226
      [rtac IntI,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   227
       DO_GOAL
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   228
	 [rtac CollectI,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   229
	  fast_tac (ZF_cs addSIs [lam_type]),
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   230
	  simp_tac ZF_ss,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   231
	  fast_tac (eq_cs addSEs [sumE]
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   232
			  addEs  [equalityD1 RS subsetD RS CollectD2,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   233
				  equalityD2 RS subsetD RS CollectD2])],
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   234
       DO_GOAL
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   235
	 [rtac CollectI,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   236
	  fast_tac (ZF_cs addSIs [lam_type]),
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   237
	  simp_tac ZF_ss,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   238
	  K(safe_tac ZF_cs),
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   239
	  res_inst_tac [("x", "{Inl(u). u: ?U} Un {Inr(v). v: ?V}")] bexI,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   240
	  DO_GOAL
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   241
	    [res_inst_tac [("t", "Pair")] subst_context2,
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   242
	    fast_tac (sum_cs addSIs [equalityI]),
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   243
	    fast_tac (sum_cs addSIs [equalityI])],
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   244
	  DO_GOAL [fast_tac sum_cs]]] 1);
268f93ab3bc4 Installation of new simplifier for ZF/ex. The hom_ss example in misc.ML is
lcp
parents: 0
diff changeset
   245
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
   246
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
   247
writeln"Reached end of file.";