def less_resources2(ua, ub): """ ua must be <= ub """ Pa = ua.P Pb = ub.P if not isinstance(Pa, PosetProduct) or not isinstance(Pb, PosetProduct): raise NotImplementedError((Pa, Pb)) tu = get_types_universe() matches = [] for i, P in enumerate(Pa.subs): for j, Q in enumerate(Pb.subs): if j in matches: continue if tu.leq(P, Q): matches.append(j) break else: # msg = 'Could not find match.' return False # now we have found an embedding # first we create a projection for Pb m1 = MuxMap(F=Pb, coords=matches) ub2 = upperset_project_map(ub, m1) Pb2 = ub2.P UPb2 = UpperSets(Pb2) # now we create the embedding A_to_B, _ = tu.get_embedding(Pa, Pb2) ua2 = upperset_project_map(ua, A_to_B) print('Pa: %s' % Pa) print('Pb2: %s' % Pb2) print('ua2: %s' % ua2) print('ub2: %s' % ub2) return UPb2.leq(ua2, ub2)