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))
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})
def zero() -> NamedOpetope.OCMT: """ The :math:`\\textbf{OptSet${}^!$}` :math:`\\texttt{zero}` rule. """ return NamedOpetope.OCMT(NamedOpetope.EquationalTheory(), NamedOpetope.Context())