Hasta el momento, hemos discutido acerca de la igualdad de conjuntos y, hasta cierto punto, acerca de como crear nuevos conjuntos a partir de uno preexistente. Sin embargo, dado lo que sabemos, hemos estado trabajando en nada. El siguiente axioma garantizará que hay al menos un conjunto; a saber, un conjunto que no posee ningún elemento, el conjunto vacío. Luego veremos que este axioma con algunos otros son suficientes para construir las matemáticas.

Axioma 1 (Axioma del conjunto vacío). Hay un conjunto {\emptyset = \{\}} que no contiene elementos.

Como siempre, la unicidad está garantizada por el axioma de extensión.

Para construir el conjunto vacío, podríamos asumir la existencia de otro conjunto. Luego, por el axioma de especificación, podríamos usar la sentencia {S(a) = a \in S \land a \ne a} que resulta ser un conjunto que no contiene elementos. La preferencia por uno u otro enfoque es una cuestión estética.

El conjunto vacío se adapta bastante bien con la lógica. Esta es la noción de verdad vacua. Informalmente, esto quiere decir que cualquier implicación cuantificada universalmente sobre el conjunto vacío es siempre verdadera. Sin demostración, usaremos la identidad {p \implies q \equiv \neg p \lor q}.

Proposición 2. Sea {P(x)} una sentencia. Entonces {\forall x [ x \in \emptyset \implies P(x) ]} siempre es verdadera.

Demostración. Usando la identidad del párrafo anterior, notemos que

\displaystyle  \forall x [ x \in \emptyset \implies P(x) ] \equiv \forall x [ \neg(x \in \emptyset) \lor P(x) ] \equiv \forall [ x \notin \emptyset \lor P(x) ]

y siempre es cierto que {x \notin \emptyset} por el axioma del conjunto vacío.\Box

De esta proposición, tenemos el siguiente corolario:

Corolario 3. Sea {A} un conjunto. Entonces {\emptyset \subseteq A}.

Demostración. Consideremos la sentencia {S(a) = a \in A}. Así se cumple {\forall x \in \emptyset \implies S(x)} que es vacuamente cierta por el teorema anterior. El resultado sigue de la definición de subconjunto.\Box

Antes veíamos una manera de comunicar dos componentes. Ahora presentaremos una forma de validar los campos de un formulario.

Añadimos la directiva de validación al módulo de EvaluationComponentsModule:

const AmountValidatorDirective: ng.IDirective = () => ({
  require: 'ngModel',
  link(scope, elm, attrs, ctrl) {
    ctrl.$validators['amount'] = (modelValue, viewValue) => {
      if (ctrl.$isEmpty(modelValue)) return true;
      return modelValue < 5;
    };
  },
});

Sólo queda usarla en el template de SurveyComponent para empezar a validar que solamente se ingresen números menores que cinco. El ejemplo completo se muestra aquí. 🙂

😎

Continuemos con nuestro recorrido por los axiomas ZF de la teoría de conjuntos.

1.   Axioma de reemplazo

Ahora consideraremos el esquema para el reemplazo. El alcance de este axioma será apreciado cuando profundicemos en la teoría de conjuntos, especialmente cuando extendamos el conteo de conjuntos infinitos. La razón de este axioma radica en la necesidad construir un conjunto sustituyendo los elementos de otro.

Axioma 1 (Axioma de reemplazo). Sea {S(a, b)} una sentencia y sea {A} un conjunto. Si, para todo {a \in A}, hay un único {b} tal que {S(a, b)} es verdadero, entonces hay un conjunto {B} que cumple {b \in B \iff S(a, b)} para algún {a\in A}.

Puede paracer un tanto complicado. De hecho, nos dice que la colección {X = \{ b : S(a, b) \}} es un conjunto donde hay un solo {b} por cada {a \in A}.

Con esto podemos probar la siguiente afirmación de uso frecuente:

Teorema 2 (Teorema de especificación). Sea {S(a)} un setencia en {a} y sea {A} un conjunto. Entonces {B = \{ a \in A : S(a) \}} es un conjunto.

Demostración. Consideremos la afirmación {S(a, b) = a \in A \land S(a) \land a = b}. Por el Axioma 1, hay un conjunto {B} tal que {b \in B \iff S(a, b)}. Como {a = b}, tenemos que {a \in B \iff a \in A \land S(a)}. Por el Axioma 1, este es el conjunto {B}.\Box

En los inicios de la teoría de conjunto, este teorema era un axioma (el axioma de esecificación). Cuando el axioma del reemplazo fue necesario para obtener resultados más profundos, la especificación resultó redundante.

Este axioma sirvió permitió resolver aquello que motivó (esencialemente) la axiomatización de la teoría de conjuntos: la paradoja de Russell.

Proposición 3. No hay un conjunto universal.

Demostración. Supongamos que hay un conjunto universal {\mho}. Sea la setencia {S(a) = a \notin a}. Por el Teorema 2, {A = \{ a \in \mho : a \notin a \}} es un conjunto. Notemos que {x \in A \iff x \in \mho \land x \notin x}.
Ahora, si {A \in A}, entoncs {A \in \mho}. Como {A \notin A}, tenemos que {A \in \mho} por hipótesis y que {A \in A} por la construcción de {A}. De cualquier manera, si asumimos {A \in \mho} obtenemos una contradicción. Así {A \notin \mho} para evitar la contradicción, pero así {\mho} no contiene todos los conjuntos.\Box

La prueba muestra que {\mho} no es un conjunto y, consecuentemente, no hay garantía de que {A} sea un conjunto. Esto podría ser considerado una clase, pero esa discusión queda fuera del alcance de esta publicación.

Nuestra prueba puede parecer contradictoria, pero no lo es. Hemos asumido que la colección que llamamos conjunto universal es de hecho un conjunto y, de esto, aplicamos legítimamente el Teorema 2 para obtener el objeto en cuestión como un conjunto. El hecho que no es un conjunto es la validación final de la prueba. (Si investigamos la teoría de clases, podríámos usar este hecho como la contradicción de nuestra prueba.)

Otro punto importante a notar es que, en general, no podemos construir conjuntos a partir de una propiedad.

Finalmente, cuando usamos la especificación, dada una propiedad {P(x)}, escribiremos {\{ x \in A : P(x) \}} o {\{ x : P(x) \}} asumiendo que {x} pertenece a algún conjunto. Notemos que esto no contradice nuestra formulación del axioma del reemplazo pues necesitamos todavía necesario un conjunto inicial a reemplazar.

Como comentaba en una publicación anterior, ahora veremos una forma de comunicación entre dos componentes de AngularJS que forman parte de otro componente intermediario.

Tenemos un componente de evaluación

const EvaluationComponent: ng.IComponentOptions = {
  controller: EvaluationController,
  template: `
  <survey data="$ctrl.data"></survey>
  <chart data="$ctrl.data"></chart>
  `,
}

y su controlador

class EvaluationController implements ng.IController {
  data: EvaluationData;

  constructor() {
    this.data = {
      amount: 0,
    };
  }
}

Notemos que este componente se sirve de otros dos para poder ingresar datos y luego mostrarlos respectivamente. Así pues, la manera más sencilla de pasar información entre componentes es tener un padre común, EvaluationComponent, que inicie este contenedor de datos y lo comparta a su jerarquía de subcomponentes, como es el caso de ChartComponent y SurveyComponent.

const ChartComponent: ng.IComponentOptions = {
  bindings: {
    data: '=',
  },
  controller: ChartController,
  template: `
  <label>chart: {{ $ctrl.data.amount }}</label>
  <button ng-click="$ctrl.next()">Next</button>
  `,
};
const SurveyComponent: ng.IComponentOptions = {
  bindings: {
    data: '=',
  },
  template: `
  survey:
  <input
    ng-model="$ctrl.data.amount"
    value="$ctrl.data.amount"
  >
  `,
};

En el caso de SurveyComponent, el monto se actualiza desde el formulario, mientras que ChartComponent lanza un evento clic

class ChartController {
  data: EvaluationData;

  next() {
    this.data.amount++;
  }
}

El ejemplo completo puede verse aquí.

Antes de los axiomas de Zermelo-Frankel, Russel y Whitehead intentaron axiomatizar la Teoría de Conjuntos y resolver sus paradojas introduciendo los postulados de tipos, pero distaba de ser axiomas sencillos. El sistema de Zermelo-Frankel proporcionó unos axiomas más evidentes.

Ahora introduciremos los axiomas de Zermelo-Frankel de la teoría de conjuntos. A la vez, construiremos parte de la maquinaria matemática necesaria para cuestionar estos axiomas en un sentido matemático más que en un contexto puramente lógico. Esto nos permitirá ver cómo parte de las matemáticas pueden ser construidas desde la teoría de conjuntos. Haremos esto mediante la discusión acerca de la maquinaria que desarrollemos cuidándonos de cualquier argumento circular.

1.   Axioma de Extensión

Iniciaremos nuestra discusión acerca de la Teoría de Conjuntos haciéndonos una pregunta un tanto filosófica: ¿qué significa que dos conjuntos sean iguales? Ahora bien, esto parece trivial y seguro tenemos una respuesta intuitiva. Sin embargo, necesitamos hacer explícita esta percepción mediante un argumento riguroso.

Axioma 1 (El Axioma de Extensión). Sean {A, B} conjuntos. Entonces {A = B} si, y sólo si, contienen los mismos elementos.

Una consecuencia inmediata de esta definición es la proposición

Proposición 2. Se cumple que {\{ a, a \} = \{ a \}} y {\{ a, b \} = \{ b, a \}}.

Demostración. Notar que {x \in \{ a, a \} \iff x \in \{ a \}} para la primera afirmación. La segunda se cumple por el mismo argumento.\Box

Esto quiere decir que los elementos repetidos son ignorados en los conjuntos, y así los conjuntos son colecciones no ordenadas. El Axioma 1 también nos permite garantizar la unicidad de conjuntos.

Ahora veamos la noción de subconjunto:

Definición 3 (Subconjuntos y subconjuntos propios). Sean {A, B} conjuntos. Si {x \in A \implies x \in B}, diremos que {A} es un subconjunto de {B} escribiendo {A \subseteq B} o {B \supseteq A}. Si {A \subseteq B} pero {A \ne B}, escribimos {A \subsetneq B} o {B \supsetneq A} y diremos que {A} es un subconjunto propio de {B}.

Con esta definición, se puede formular el axioma de extensión de la siguiente manera: {A = B \iff A \subseteq B \text{ y } B \subseteq A}.

Proposición 4 (Transitividad). Si {A \subseteq B} y {B \subseteq C}, entonces {A \subseteq C}.

Demostración. Ya que {A \subseteq B}, sabemos que {x \in A \implies x \in B}. Y ya que {B \subseteq C}, {x \in B \implies x \in C}. Así, trivialmente, {x \in A \implies x \in C}.\Box