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.*) |