src/Pure/net.ML
changeset 2792 6c17c5ec3d8b
parent 2672 85d7e800d754
child 2836 148829646a51
equal deleted inserted replaced
2791:b65da0c53d94 2792:6c17c5ec3d8b
   196 	   case (head_of t) of
   196 	   case (head_of t) of
   197 	       Var _ => if unif then net_skip (net,nets)
   197 	       Var _ => if unif then net_skip (net,nets)
   198 			else var::nets	   	(*only matches Var in net*)
   198 			else var::nets	   	(*only matches Var in net*)
   199 (*If "unif" then a var instantiation in the abstraction could allow
   199 (*If "unif" then a var instantiation in the abstraction could allow
   200   an eta-reduction, so regard the abstraction as a wildcard.*)
   200   an eta-reduction, so regard the abstraction as a wildcard.*)
   201 	     | Abs _ => if unif then net_skip (net,nets)
   201 	     | Abs(_,_,u) => (case u of
   202 			else var::nets		(*only a Var can match*)
   202                    f $ Bound 0 => if loose_bvar1(f,0) then var::nets
       
   203                                   else matching unif f (net,nets)
       
   204                  | _ => if unif then net_skip (net,nets)
       
   205 			else var::nets)		(*only a Var can match*)
   203 	     | _ => rands t (net, var::nets)	(*var could match also*)
   206 	     | _ => rands t (net, var::nets)	(*var could match also*)
   204   end;
   207   end;
   205 
   208 
   206 fun extract_leaves l = List.concat (map (fn Leaf(xs) => xs) l);
   209 fun extract_leaves l = List.concat (map (fn Leaf(xs) => xs) l);
   207 
   210