En informática teórica, un circuito es un modelo de computación en el que los valores de entrada pasan por una secuencia de puertas, cada una de las cuales calcula una función. Los circuitos de este tipo proporcionan una generalización de los circuitos booleanos y un modelo matemático para los circuitos lógicos digitales. Los circuitos se definen por las puertas que contienen y los valores que las puertas pueden producir. Por ejemplo, los valores de un circuito booleano son valores booleanos, y el circuito incluye puertas de conjunción, disyunción y negación. Los valores de un circuito entero son conjuntos de números enteros y las puertas calculan la unión de conjuntos, la intersección de conjuntos y el complemento de conjuntos, así como las operaciones aritméticas de suma y multiplicación.
Un circuito es un triplete , donde
Los vértices del gráfico se denominan puertas . Para cada puerta de grado de entrada , la puerta puede etiquetarse con un elemento de si y solo si está definido en
Las puertas de grado de entrada 0 se denominan entradas o salidas . Las puertas de grado de salida 0 se denominan salidas . Si hay una arista de puerta a puerta en el grafo , entonces se denomina hijo de . Suponemos que hay un orden en los vértices del grafo, por lo que podemos hablar del º hijo de una puerta cuando es menor que el grado de salida de la puerta.
El tamaño de un circuito es el número de nodos de un circuito. La profundidad de una compuerta es la longitud del camino más largo desde el inicio hasta una compuerta de salida. En particular, las compuertas de grado de salida 0 son las únicas compuertas de profundidad 1. La profundidad de un circuito es la profundidad máxima de cualquier compuerta.
El nivel es el conjunto de todas las puertas de profundidad . Un circuito nivelado es un circuito en el que las aristas de las puertas de profundidad provienen únicamente de las puertas de profundidad o de las entradas. En otras palabras, las aristas solo existen entre niveles adyacentes del circuito. El ancho de un circuito nivelado es el tamaño máximo de cualquier nivel.
El valor exacto de una puerta con grado de entrada y etiqueta se define de forma recursiva para todas las puertas .
donde cada uno es un padre de .
El valor del circuito es el valor de cada una de las puertas de salida.
Las etiquetas de las hojas también pueden ser variables que toman valores en . Si hay hojas, entonces el circuito puede verse como una función de a . Entonces es habitual considerar una familia de circuitos , una secuencia de circuitos indexados por los números enteros donde el circuito tiene variables. Las familias de circuitos pueden verse así como funciones de a .
Las nociones de tamaño, profundidad y anchura pueden extenderse naturalmente a familias de funciones, convirtiéndose en funciones de a ; por ejemplo, es el tamaño del circuito n de la familia.
Calcular la salida de un circuito booleano dado en una entrada específica es un problema P-completo . Sin embargo, si la entrada es un circuito entero , se desconoce si este problema es decidible .
La complejidad del circuito intenta clasificar las funciones booleanas con respecto al tamaño o la profundidad de los circuitos que pueden calcularlas.