def normalize(self: Z) -> Z: if (self == Z.cons(pos=var.x, neg=var.y)): # if self.x == 0 or self.y == 0 if var.x == Nat.zero() or var.y == Nat.zero(): return self # else we reduce elif var.x == Nat.suc(var.xx) and var.y == Nat.suc(var.yy): return Z.cons(pos=var.xx, neg=var.yy).normalize()
def __init__(self, *args, **kwargs): if (len(args) == 1) and isinstance(args[0], str): letter = args[0] Sort.__init__(self) self._generator = Char.char self._generator_args = {'value': Nat(ord(letter))} else: Sort.__init__(self, **kwargs)
def test_remove(): context1 = Context.cons(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context2 = Context.add(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context3 = Context.add(c=context2, k=String('b'), v=Literal.lit_nat(Nat(4))) context4 = Context.add(c=context2, k=String('c'), v=Literal.lit_nat(Nat(4))) context5 = Context.cons(c=Context.empty(), k=String('c'), v=Literal.lit_nat(Nat(4))) assert Context.remove(c=context1, k=String('b')) == Context.empty() assert Context.remove(c=context2, k=String('b')) == Context.empty() assert Context.remove(c=context4, k=String('b')) == context5 assert Context.remove(c=context4, k=String('c')) == context2
def test_add(): context1 = Context.cons(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context12 = Context.cons(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(4))) context2 = Context.add(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context3 = Context.add(c=context2, k=String('b'), v=Literal.lit_nat(Nat(4))) context4 = Context.add(c=context2, k=String('c'), v=Literal.lit_nat(Nat(4))) assert context2 == context1 assert context3 == context12 assert context3 != context1 assert context4 != context1 assert context4 != context3
def test_normalize(): # this should be 0 z = Z.cons(pos=Nat(1), neg=Nat(1)) # we normalize it assert z.normalize() == Z(0) z = Z.cons(pos=Nat(1), neg=Nat(0)) assert z.normalize() == Z(1) z = Z.cons(pos=Nat(0), neg=Nat(1)) assert z.normalize() == Z(-1)
def __init__(self, *args, **kwargs): if (len(args) == 1) and isinstance(args[0], Sequence): list_args = args[0] Sort.__init__(self) if len(list_args) == 0: self._generator = State.cons self._generator_args = { "program": Expr_list.empty(), "choice": Nat.zero(), "stack": Expr_list.empty() } else: self._generator = State.cons self._generator_args = { "program": list_args[0], "choice": list_args[1], "stack": list_args[2] } else: Sort.__init__(self, **kwargs)
def test_get_value(): context1 = Context.cons(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context2 = Context.add(c=Context.empty(), k=String('b'), v=Literal.lit_nat(Nat(0))) context3 = Context.add(c=context2, k=String('b'), v=Literal.lit_nat(Nat(4))) context4 = Context.add(c=context2, k=String('c'), v=Literal.lit_nat(Nat(4))) assert Context.get_value(c=context1, k=String('b')) == Literal.lit_nat(Nat(0)) assert Context.get_value(c=context1, k=String('b')) != Literal.lit_nat( Nat(1)) assert Context.get_value(c=context3, k=String('b')) == Literal.lit_nat(Nat(4))
def __init__(self, *args, **kwargs): if (len(args) == 1) and isinstance(args[0], int): number = args[0] Sort.__init__(self) if number == 0: self._generator = Z.cons self._generator_args = {'pos': Nat.zero(), 'neg': Nat.zero()} elif number > 0: self._generator = Z.cons self._generator_args = {'pos': Nat(number), 'neg': Nat.zero()} else: self._generator = Z.cons self._generator_args = {'pos': Nat.zero(), 'neg': Nat(-number)} else: Sort.__init__(self, **kwargs)
def zero() -> Z: return Z.cons(pos=Nat(0), neg=Nat(0))
def test_generator(): # because the Z.zero == Z.cons(pos=Nat(0), neg=Nat(0)) assert Z.zero()._generator == Z.cons assert Z.cons(pos=Nat(0), neg=Nat(0))._generator == Z.cons
def test_constructor(): assert Z(0) == Z.cons(pos=Nat(0), neg=Nat(0)) assert Z(1) == Z.cons(pos=Nat(1), neg=Nat(0)) assert Z(-1) == Z.cons(pos=Nat(0), neg=Nat(1))
def empty() -> State: return State.cons(program=Expr_list.empty(), choice=Nat.zero(), stack=Expr_list.empty())
from adt.util.expr_list import Expr_list from adt.util.expr import Expr from adt.util.literal import Literal from adt.types.nat import Nat from adt.types.string import String expr1 = Expr.expr_lit(Literal.lit_nat(Nat(2))) expr2 = Expr.expr_variable(String("test")) u_expr_list = Expr_list.cons(tail=Expr_list.empty(), head=expr2) expr_list = Expr_list.cons(tail=u_expr_list, head=expr1) def test_car(): assert Expr_list.car(expr_list) == expr1 def test_cdr(): assert Expr_list.cdr(expr_list) == u_expr_list assert Expr_list.car(Expr_list.cdr(expr_list)) == expr2
def test_constructor(): assert Char('a') == Char.char(Nat(97))
def test_generator(): assert Char.char(Nat(10))._generator == Char.char