Example #1
0
def pd(ocmt: NamedOpetope.OCMT, name: str) -> NamedOpetope.Sequent:
    """
    The :math:`\\textbf{OptSet${}^!_m$}` :math:`\\texttt{pd}` rule.
    Introduces the trivial non degenerate pasting diagram on a given variable.
    """
    var = ocmt.context[name]
    t = NamedOpetope.Typing(NamedOpetope.Term(var), ocmt.context.typeOf(var))
    return NamedOpetope.Sequent(deepcopy(ocmt.theory), deepcopy(ocmt.context),
                                t)
Example #2
0
def degen(ocmt: NamedOpetope.OCMT, name: str) -> NamedOpetope.Sequent:
    """
    The :math:`\\textbf{OptSet${}^!_m$}` :math:`\\texttt{degen}` rule.
    Introduces the degenerate pasting diagram on a given variable.
    """
    var = ocmt.context[name]
    type = ocmt.context.typeOf(var)
    t = NamedOpetope.Typing(
        NamedOpetope.Term(var, True),
        NamedOpetope.Type([NamedOpetope.Term(var)] + type.terms))
    return NamedOpetope.Sequent(deepcopy(ocmt.theory), deepcopy(ocmt.context),
                                t)
 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)