src/ZF/Finite.ML
changeset 8201 a81d18b0a9b1
parent 8183 344888de76c4
child 9173 422968aeed49
equal deleted inserted replaced
8200:700067a98634 8201:a81d18b0a9b1
   101 qed "Fin_0_induct";
   101 qed "Fin_0_induct";
   102 
   102 
   103 (*Functions from a finite ordinal*)
   103 (*Functions from a finite ordinal*)
   104 Goal "n: nat ==> n->A <= Fin(nat*A)";
   104 Goal "n: nat ==> n->A <= Fin(nat*A)";
   105 by (induct_tac "n" 1);
   105 by (induct_tac "n" 1);
   106 by (simp_tac (simpset() addsimps [Pi_empty1, subset_iff, cons_iff]) 1);
   106 by (simp_tac (simpset() addsimps [subset_iff]) 1);
   107 by (asm_simp_tac 
   107 by (asm_simp_tac 
   108     (simpset() addsimps [succ_def, mem_not_refl RS cons_fun_eq]) 1);
   108     (simpset() addsimps [succ_def, mem_not_refl RS cons_fun_eq]) 1);
   109 by (fast_tac (claset() addSIs [Fin.consI]) 1);
   109 by (fast_tac (claset() addSIs [Fin.consI]) 1);
   110 qed "nat_fun_subset_Fin";
   110 qed "nat_fun_subset_Fin";
   111 
   111 
   123 by (REPEAT (ares_tac [FiniteFun_mono] 1));
   123 by (REPEAT (ares_tac [FiniteFun_mono] 1));
   124 qed "FiniteFun_mono1";
   124 qed "FiniteFun_mono1";
   125 
   125 
   126 Goal "h: A -||>B ==> h: domain(h) -> B";
   126 Goal "h: A -||>B ==> h: domain(h) -> B";
   127 by (etac FiniteFun.induct 1);
   127 by (etac FiniteFun.induct 1);
   128 by (simp_tac (simpset() addsimps [empty_fun, domain_0]) 1);
   128 by (Simp_tac 1);
   129 by (asm_simp_tac (simpset() addsimps [fun_extend3, domain_cons]) 1);
   129 by (asm_simp_tac (simpset() addsimps [fun_extend3]) 1);
   130 qed "FiniteFun_is_fun";
   130 qed "FiniteFun_is_fun";
   131 
   131 
   132 Goal "h: A -||>B ==> domain(h) : Fin(A)";
   132 Goal "h: A -||>B ==> domain(h) : Fin(A)";
   133 by (etac FiniteFun.induct 1);
   133 by (etac FiniteFun.induct 1);
   134 by (simp_tac (simpset() addsimps [domain_0]) 1);
   134 by (Simp_tac 1);
   135 by (asm_simp_tac (simpset() addsimps [domain_cons]) 1);
   135 by (Asm_simp_tac 1);
   136 qed "FiniteFun_domain_Fin";
   136 qed "FiniteFun_domain_Fin";
   137 
   137 
   138 bind_thm ("FiniteFun_apply_type", FiniteFun_is_fun RS apply_type);
   138 bind_thm ("FiniteFun_apply_type", FiniteFun_is_fun RS apply_type);
   139 
   139 
   140 (*Every subset of a finite function is a finite function.*)
   140 (*Every subset of a finite function is a finite function.*)