19 by (Simp_tac 1); |
19 by (Simp_tac 1); |
20 by (Blast_tac 1); |
20 by (Blast_tac 1); |
21 qed "rel_pow_Suc_I"; |
21 qed "rel_pow_Suc_I"; |
22 |
22 |
23 Goal "!z. (x,y) : R --> (y,z):R^n --> (x,z):R^(Suc n)"; |
23 Goal "!z. (x,y) : R --> (y,z):R^n --> (x,z):R^(Suc n)"; |
24 by (nat_ind_tac "n" 1); |
24 by (induct_tac "n" 1); |
25 by (Simp_tac 1); |
25 by (Simp_tac 1); |
26 by (Asm_full_simp_tac 1); |
26 by (Asm_full_simp_tac 1); |
27 by (Blast_tac 1); |
27 by (Blast_tac 1); |
28 qed_spec_mp "rel_pow_Suc_I2"; |
28 qed_spec_mp "rel_pow_Suc_I2"; |
29 |
29 |
49 by (etac compEpair 1); |
49 by (etac compEpair 1); |
50 by (REPEAT(ares_tac [p3] 1)); |
50 by (REPEAT(ares_tac [p3] 1)); |
51 qed "rel_pow_E"; |
51 qed "rel_pow_E"; |
52 |
52 |
53 Goal "!x z. (x,z):R^(Suc n) --> (? y. (x,y):R & (y,z):R^n)"; |
53 Goal "!x z. (x,z):R^(Suc n) --> (? y. (x,y):R & (y,z):R^n)"; |
54 by (nat_ind_tac "n" 1); |
54 by (induct_tac "n" 1); |
55 by (blast_tac (claset() addIs [rel_pow_0_I] |
55 by (blast_tac (claset() addIs [rel_pow_0_I] |
56 addEs [rel_pow_0_E,rel_pow_Suc_E]) 1); |
56 addEs [rel_pow_0_E,rel_pow_Suc_E]) 1); |
57 by (blast_tac (claset() addIs [rel_pow_Suc_I] |
57 by (blast_tac (claset() addIs [rel_pow_Suc_I] |
58 addEs [rel_pow_0_E,rel_pow_Suc_E]) 1); |
58 addEs [rel_pow_0_E,rel_pow_Suc_E]) 1); |
59 qed_spec_mp "rel_pow_Suc_D2"; |
59 qed_spec_mp "rel_pow_Suc_D2"; |
60 |
60 |
61 |
61 |
62 Goal "!x y z. (x,y) : R^n & (y,z) : R --> (? w. (x,w) : R & (w,z) : R^n)"; |
62 Goal "!x y z. (x,y) : R^n & (y,z) : R --> (? w. (x,w) : R & (w,z) : R^n)"; |
63 by (nat_ind_tac "n" 1); |
63 by (induct_tac "n" 1); |
64 by (ALLGOALS Asm_simp_tac); |
64 by (ALLGOALS Asm_simp_tac); |
65 by (Blast_tac 1); |
65 by (Blast_tac 1); |
66 qed_spec_mp "rel_pow_Suc_D2'"; |
66 qed_spec_mp "rel_pow_Suc_D2'"; |
67 |
67 |
68 val [p1,p2,p3] = Goal |
68 val [p1,p2,p3] = Goal |
87 by (etac rtrancl_induct 1); |
87 by (etac rtrancl_induct 1); |
88 by (ALLGOALS (blast_tac (claset() addIs [rel_pow_0_I,rel_pow_Suc_I]))); |
88 by (ALLGOALS (blast_tac (claset() addIs [rel_pow_0_I,rel_pow_Suc_I]))); |
89 qed "rtrancl_imp_UN_rel_pow"; |
89 qed "rtrancl_imp_UN_rel_pow"; |
90 |
90 |
91 Goal "!y. (x,y):R^n --> (x,y):R^*"; |
91 Goal "!y. (x,y):R^n --> (x,y):R^*"; |
92 by (nat_ind_tac "n" 1); |
92 by (induct_tac "n" 1); |
93 by (blast_tac (claset() addIs [rtrancl_refl] addEs [rel_pow_0_E]) 1); |
93 by (blast_tac (claset() addIs [rtrancl_refl] addEs [rel_pow_0_E]) 1); |
94 by (blast_tac (claset() addEs [rel_pow_Suc_E] |
94 by (blast_tac (claset() addEs [rel_pow_Suc_E] |
95 addIs [rtrancl_into_rtrancl]) 1); |
95 addIs [rtrancl_into_rtrancl]) 1); |
96 val lemma = result() RS spec RS mp; |
96 val lemma = result() RS spec RS mp; |
97 |
97 |