def __init__(self, c_value): """ Give a positive constant here """ N = Nat() N.belongs(c_value) amap = MinusValueNatMap(c_value) amap_dual = PlusValueNatMap(c_value) WrapAMap.__init__(self, amap, amap_dual)
def __init__(self, c_value): """ Give a positive constant here """ N = Nat() N.belongs(c_value) amap = MinusValueNatMap(c_value) amap_dual = PlusValueNatMap(c_value) WrapAMap.__init__(self, amap, amap_dual)
def Nat_mult_antichain_Min(m): """ Returns the Minimal set of elements of Nat so that their product is at least m: Min { (a, b) | a * b >= m } """ # (top, 1) or (1, top) P = Nat() P.belongs(m) top = P.get_top() if is_top(P, m): s = set([(top, 1), (1, top)]) # XXX: return s assert isinstance(m, int) if m == 0: # any (r1,r2) is such that r1*r2 >= 0 return set([(0, 0)]) s = set() for o1 in range(1, m + 1): assert o1 >= 1 # We want the minimum x such that o1 * x >= f # x >= f / o1 # x* = ceil(f / o1) x = int(np.ceil(m * 1.0 / o1)) assert x * o1 >= m assert (x - 1) * o1 < m assert x >= 1 s.add((o1, x)) return s
def Nat_mult_antichain_Max(m): """ Returns the set of elements of Nat so that their product is at most m: Max { (a, b) | a * b <= m } """ # top -> [(top, top)] P = Nat() P.belongs(m) top = P.get_top() if is_top(P, m): s = set([(top, top)]) return s assert isinstance(m, int) if m < 1: return set([(0, 0)]) s = set() for o1 in range(1, m + 1): assert o1 >= 1 # We want the minimum x such that o1 * x >= f # x >= f / o1 # x* = ceil(f / o1) x = int(np.floor(m * 1.0 / o1)) assert x * o1 <= m # feasible assert (x + 1) * o1 > m, (x + 1, o1, m) # and minimum s.add((o1, x)) return s
def __init__(self, value): N = Nat() N.belongs(value) amap = InvMultValueNatMap(value) amap_dual = InvMultDualValueNatMap(value) WrapAMap.__init__(self, amap, amap_dual)
def __init__(self, value): N = Nat() N.belongs(value) amap = InvMultValueNatMap(value) amap_dual = InvMultDualValueNatMap(value) WrapAMap.__init__(self, amap, amap_dual)
class PlusValueNatMap(Map): def __init__(self, value): self.value = value self.N = Nat() self.N.belongs(value) Map.__init__(self, dom=self.N, cod=self.N) def _call(self, x): return Nat_add(x, self.value) def diagram_label(self): return self.__str__() def repr_map(self, letter): return plusvaluemap_repr(letter, self.N, self.value) def __str__(self): return '+ %s' % self.N.format(self.value)
def __init__(self, value): N = Nat() N.belongs(value) amap = MultValueNatMap(value) # if value = Top: # f |-> f * Top # if is_top(N, value): amap_dual = MultValueNatDPHelper2Map() elif N.equal(0, value): # r |-> Top amap_dual = ConstantPosetMap(N, N, N.get_top()) else: # f * c <= r # f <= r / c # r |-> floor(r/c) amap_dual = MultValueNatDPhelper(value) WrapAMap.__init__(self, amap, amap_dual)
def __init__(self, value): N = Nat() N.belongs(value) amap = MultValueNatMap(value) # if value = Top: # f |-> f * Top # if is_top(N, value): amap_dual = MultValueNatDPHelper2Map() elif N.equal(0, value): # r |-> Top amap_dual = ConstantPosetMap(N, N, N.get_top()) else: # f * c <= r # f <= r / c # r |-> floor(r/c) amap_dual = MultValueNatDPhelper(value) WrapAMap.__init__(self, amap, amap_dual)