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)
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)