def test___or__(self):
     self.assertFalse((self.th1 | self.th1).equal(self.a0, self.b0))
     self.assertFalse((self.th1 | self.th2).equal(self.a0, self.c0))
     self.assertTrue((self.th2 | self.th2).equal(self.a0, self.b0))
     self.assertTrue(
         (self.th2 | (NamedOpetope.EquationalTheory() +
                      (self.b0, self.e0))).equal(self.e0, self.a0))
Example #2
0
def point(name: str) -> NamedOpetope.OCMT:
    """
    The :math:`\\textbf{OptSet${}^!_m$}` :math:`\\texttt{point}` rule.
    Introduces a :math:`0`-variable with name ``x``.
    """
    t = NamedOpetope.Typing(NamedOpetope.Term(NamedOpetope.Variable(name, 0)),
                            NamedOpetope.Type([NamedOpetope.Term()]))
    return NamedOpetope.OCMT(NamedOpetope.EquationalTheory(),
                             NamedOpetope.Context() + t)
 def setUp(self):
     self.a0 = NamedOpetope.Variable("a", 0)
     self.b0 = NamedOpetope.Variable("b", 0)
     self.c0 = NamedOpetope.Variable("c", 0)
     self.d0 = NamedOpetope.Variable("d", 0)
     self.e0 = NamedOpetope.Variable("e", 0)
     self.a1 = NamedOpetope.Variable("a", 1)
     self.th1 = NamedOpetope.EquationalTheory()
     self.th2 = self.th1 + (self.a0, self.b0)
     self.th3 = self.th2 + (self.c0, self.d0)
     self.th4 = self.th3 + (self.c0, self.e0)
     self.th5 = self.th4 + (self.b0, self.a0)
     self.th6 = self.th5 + (self.a0, self.e0)
 def setUp(self):
     self.a1 = NamedOpetope.Variable("a1", 0)
     self.b1 = NamedOpetope.Variable("b1", 0)
     self.c1 = NamedOpetope.Variable("c1", 0)
     self.a2 = NamedOpetope.Variable("a2", 0)
     self.b2 = NamedOpetope.Variable("b2", 0)
     self.c2 = NamedOpetope.Variable("c2", 0)
     self.f = NamedOpetope.Variable("f", 1)
     self.g = NamedOpetope.Variable("g", 1)
     self.h = NamedOpetope.Variable("h", 1)
     self.i = NamedOpetope.Variable("h", 1)
     ctx = NamedOpetope.Context() + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.a1),
             NamedOpetope.Type([NamedOpetope.Term()])) + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.b1),
             NamedOpetope.Type([NamedOpetope.Term()])) + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.c1),
             NamedOpetope.Type([NamedOpetope.Term()])) + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.f),
             NamedOpetope.Type(
                 [NamedOpetope.Term(self.a2),
                  NamedOpetope.Term()])) + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.g),
             NamedOpetope.Type(
                 [NamedOpetope.Term(self.b2), NamedOpetope.Term()])) + \
         NamedOpetope.Typing(
             NamedOpetope.Term(self.h),
             NamedOpetope.Type(
                 [NamedOpetope.Term(self.c2), NamedOpetope.Term()]))
     eqth = NamedOpetope.EquationalTheory() + \
         (self.b1, self.b2) + \
         (self.c1, self.c2) + \
         (self.h, self.i)
     self.sequent = NamedOpetope.Sequent(eqth, ctx, None)
     self.fg = self.sequent.graft(NamedOpetope.Term(self.g), self.b2,
                                  NamedOpetope.Term(self.f))
     self.gh = self.sequent.graft(NamedOpetope.Term(self.h), self.c2,
                                  NamedOpetope.Term(self.g))
     self.fgh1 = self.sequent.graft(self.gh, self.b2,
                                    NamedOpetope.Term(self.f))
     self.fgh2 = self.sequent.graft(NamedOpetope.Term(self.h), self.c2,
                                    self.fg)
 def test___add__(self):
     with self.assertRaises(DerivationError):
         NamedOpetope.EquationalTheory() + (self.a0, self.a1)
     self.assertEqual(len(self.th2.classes), 1)
     self.assertEqual(self.th2.classes[0], {self.a0, self.b0})
     self.assertEqual(len(self.th3.classes), 2)
     self.assertEqual(self.th3.classes[0], {self.a0, self.b0})
     self.assertEqual(self.th3.classes[1], {self.c0, self.d0})
     self.assertEqual(len(self.th4.classes), 2)
     self.assertEqual(self.th4.classes[0], {self.a0, self.b0})
     self.assertEqual(self.th4.classes[1], {self.c0, self.d0, self.e0})
     self.assertEqual(len(self.th5.classes), 2)
     self.assertEqual(self.th5.classes[0], {self.a0, self.b0})
     self.assertEqual(self.th5.classes[1], {self.c0, self.d0, self.e0})
     self.assertEqual(len(self.th6.classes), 1)
     self.assertEqual(self.th6.classes[0],
                      {self.a0, self.b0, self.c0, self.d0, self.e0})
Example #6
0
def zero() -> NamedOpetope.OCMT:
    """
    The :math:`\\textbf{OptSet${}^!$}` :math:`\\texttt{zero}` rule.
    """
    return NamedOpetope.OCMT(NamedOpetope.EquationalTheory(),
                             NamedOpetope.Context())