equal
deleted
inserted
replaced
211 val vns = map vname args; |
211 val vns = map vname args; |
212 val eqn = %:x_name === con_app2 con %: vns; |
212 val eqn = %:x_name === con_app2 con %: vns; |
213 val conj = foldr1 mk_conj (eqn :: map (defined o %:) (nonlazy args)); |
213 val conj = foldr1 mk_conj (eqn :: map (defined o %:) (nonlazy args)); |
214 in Library.foldr mk_ex (vns, conj) end; |
214 in Library.foldr mk_ex (vns, conj) end; |
215 |
215 |
|
216 val conj_assoc = thm "conj_assoc"; |
216 val exh = foldr1 mk_disj ((%:x_name === UU) :: map one_con cons); |
217 val exh = foldr1 mk_disj ((%:x_name === UU) :: map one_con cons); |
217 val thm1 = instantiate' [SOME (cons2ctyp cons)] [] exh_start; |
218 val thm1 = instantiate' [SOME (cons2ctyp cons)] [] exh_start; |
218 val thm2 = rewrite_rule (map mk_meta_eq ex_defined_iffs) thm1; |
219 val thm2 = rewrite_rule (map mk_meta_eq ex_defined_iffs) thm1; |
219 val thm3 = rewrite_rule [mk_meta_eq conj_assoc] thm2; |
220 val thm3 = rewrite_rule [mk_meta_eq conj_assoc] thm2; |
220 |
221 |
348 in |
349 in |
349 val pat_rews = pat_stricts @ pat_apps; |
350 val pat_rews = pat_stricts @ pat_apps; |
350 end; |
351 end; |
351 |
352 |
352 local |
353 local |
|
354 val rev_contrapos = thm "rev_contrapos"; |
353 fun con_strict (con, args) = |
355 fun con_strict (con, args) = |
354 let |
356 let |
355 fun one_strict vn = |
357 fun one_strict vn = |
356 let |
358 let |
357 fun f arg = if vname arg = vn then UU else %# arg; |
359 fun f arg = if vname arg = vn then UU else %# arg; |
455 (filter_out is_lazy (snd (hd cons))) |
457 (filter_out is_lazy (snd (hd cons))) |
456 else []; |
458 else []; |
457 end; |
459 end; |
458 |
460 |
459 val sel_rews = sel_stricts @ sel_defins @ sel_apps; |
461 val sel_rews = sel_stricts @ sel_defins @ sel_apps; |
|
462 val rev_contrapos = thm "rev_contrapos"; |
460 |
463 |
461 val distincts_le = |
464 val distincts_le = |
462 let |
465 let |
463 fun dist (con1, args1) (con2, args2) = |
466 fun dist (con1, args1) (con2, args2) = |
464 let |
467 let |