12 votos

Teóricos de categorías: ¿usarías una herramienta de software para diagramar / perseguir?

Aquí está un video de la demo de mi trabajo hasta ahora.

Está escrito en PyQt5 y consta de 30 archivos hasta ahora. He de Látex de apoyo escrito ya, pero no ven que en esta demo.

Se estaba preguntando si te parece interesante, tiene alguna idea de las características, o incluso considerar su uso.


He aquí un segundo video en el que muestra la componen flechas característica.


He aquí una pregunta. Si yo apoyo flechas entre los functors y rellenar automáticamente de la codominio con connaturalidad diagramas, entonces debo admitir esta función de forma recursiva? Las flechas entre los mapas y todo eso...?


Un tercer video que muestra la nueva función de deshacer / rehacer característica implementada por petición popular.


Un cuarto de vídeo demostrando mágico reflejo de las posiciones de los objetos / flechas a través de un functor. Este proyecto se está comenzando a tomar un nuevo y muy interesante se vuelve.


Un quinto video Ahora lo que puede cambiar es de color amarillo y de lo que no es de color magenta oscuro.


Un sexto video que muestra cómo puedo hacer que ciertos conceptos como los de op integrados y cómodo de usar.

Después de haber codificado todo el código base. Esta compacta es la OpFunctor aplicación se pone!:

from functor import Functor
from category_diagram import CategoryDiagram
from category_arrow import CategoryArrow

class OpFunctor(Functor):
    def __init__(self, new=True):
        super().__init__(new)
        self.setLabelText(0, "op")
        self.label(0).setEditable(False)
        self.setContravariant(True)

    def setDomain(self, dom, undoable=False):
        if dom is not self.domain():
            super().setDomain(dom, undoable)
            cod = self.codomain()
            if cod and dom:
                cod.setSymbol(self.imageString(dom))
                cod.categoryLabel().addConstraint(lambda: cod.category() == self.imageString(dom))

    def setCodomain(self, cod, undoable=False):
        prev_cod = self.codomain()
        if cod is not prev_cod:
            if prev_cod:  prev_cod.symbolLabel().setEditable(True)
            super().setCodomain(cod, undoable)
            dom = self.domain()
            if dom and cod:                
                cod.categoryLabel().setEditable(False)
                cod.setCategory(self.imageString(dom))
                cod.symbolLabel().addConstraint(lambda: cod.category() == self.imageString(dom))

    def canConnectTo(self, item, at_tail):
        if super().canConnectTo(item, at_tail) == False:
            return False
        if at_tail == False:
            if isinstance(item, CategoryDiagram) and not item.categoryLabel().isConstrained():
                return True
        return True

    def takeImage(self, dom=None, cod=None, contra=False):
        super().takeImage(dom, cod, not contra)    # This is flag to invert the arrows in the image

    def imageString(self, x):
        if isinstance(x, (CategoryDiagram, CategoryArrow)):
            return str(x) + "^op"
        return str(x)

5voto

Larry B. Puntos 188

Voy a hacer dos comentarios, uno desde el punto de vista de un usuario, y uno desde el punto de vista de un desarrollador.

En el desarrollo de software, el de Moscú método se utiliza para definir prioridades de proyecto. Se puede utilizar para definir qué características de su software Debe tener, lo que Debería haber, lo que Podría tener, y lo que no tienes. Si tuviera que definir las prioridades de este proyecto, yo lo definiría así:

Debe Tener:

  • Un Botón De Deshacer. Si voy a perder toneladas de minuciosa progreso por error, la aplicación de un functor y desplazamientos-otras flechas/objetos en mi categoría, probablemente me salga el uso de este software hasta que tenía esta característica.
  • En una vena similar, no debería ser un guardar característica que me permite leer/escribir desde un archivo y obtener el estado exacto de los diagramas (x/y posiciones incluidas) o compartirlo con otros.

Por cierto, esos son run-of-the-mill características, que no son específicos a la Categoría de Teoría. Quiero decir, esto es realmente sólida, si eso es todo lo que necesita para tener! Algunos polaco es necesario, pero es una pieza de software con un bien-definir el propósito y la base de usuarios. El resto podría ser bajo el "querer", pero no son esenciales.

Debe Tener:

  • Extensible desplazamientos, en flecha/functor natural/mapa/más allá del nivel. Esto es extremadamente difícil, pero la alternativa es la creación personalizada de los conos, de los límites, exponente mapas, subobjeto de los clasificadores, etc. Tal vez usted podría manejar esto mediante programación a través de tipos específicos de Kan Extensiones.
  • Métodos abreviados de teclado. Considere la posibilidad de que el usuario con el motor de deterioro de la función, que podría no ser capaz de mover el ratón muy fácilmente. La accesibilidad también ayuda a los usuarios de energía, que puede que desee sus manos para que permanezcan en el teclado para obtener más entradas por segundo.

Podría Tener:

  • Diagrama de la conmutatividad de la designación. Uno de los problemas que tengo a la hora de estudiar la categoría de la teoría en general es de lo difícil que es para averiguar si un diagrama de desplazamientos o no. Que el diagrama tiene conmutatividad? Deben todos los desplazamientos flechas explícita de la muestra? Dónde trazar la línea demasiado "tinta"?
  • Biblioteca de Kan Extensiones.
  • Etiqueta de dibujo. Este es un sorprendentemente difícil problema.

No Tiene:

  • Una de sus preguntas fue: "debo tener functors llenar en forma recursiva?" Algunas personas podrían así, algunas personas podrían pensar que el software se está apoderando de ellos (no he leído todo el artículo, pero creo que está relacionado con: la experiencia de la agencia en la HCI). Además de ser prepotente, podría ser imposible; imaginar un functor de bucle, y tener las categorías de spam de los objetos y de las flechas, hasta que el software se bloquea.

Como desarrollador, tengo un par de consejos para el proceso de desarrollo.

  • Python es un gran lenguaje de creación de prototipos. Como usted se mueve hacia adelante, usted debe considerar el uso de un lenguaje de tipo estático. Conozco gente que trabaja en grandes proyectos en Python, y que siempre se quejan de no saber a qué tipo de que van a obtener a partir de la cual las funciones, y los errores de tiempo de ejecución cuando se trata de las clases que no están seguros acerca, y la constante referencia de los atributos y métodos que no pueden ser automáticamente tirado por el IDE. Ahórrese el dolor.
  • De código abierto del proyecto. Nada es más triste cuando un proyecto muy prometedor como es abandonado sin detalles sobre cómo ejecutarlo, se configura el entorno, y así sucesivamente. La construcción de la comunidad es difícil. Pero el interés está ahí.

Espero que el progreso de este software.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X