src/HOLCF/domain/theorems.ML
changeset 21619 dea0914773f7
parent 20731 2ef8b7332b4f
child 22578 b0eb5652f210
equal deleted inserted replaced
21618:1cbb1134cb6c 21619:dea0914773f7
   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