src/HOL/RelPow.ML
changeset 8709 483a3eb96c7e
parent 8442 96023903c2df
equal deleted inserted replaced
8708:2f2d2b4215d6 8709:483a3eb96c7e
    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