Saltar al contenido

Lección 13: Categorías, escalas y conteo

Las reglas dicen «el plan es uno de estos», «calificado BBB- o mejor» y «al menos dos de tres criterios». Esta lección modela cada una con una entrada de categoría, una escala ordenada y una restricción de conteo, y muestra cómo el motor deduce los hechos que relacionan las pruebas. Cuatro pasos, nivel intermedio, unos veinte minutos.

Nivel: intermedio20 min10 afirmaciones de esta lección fueron confirmadas por el comprobador exacto al compilar

Modela «el plan es uno de estos», «calificado BBB- o mejor» y «al menos dos de tres» con entradas de categoría, escalas ordenadas y restricciones de conteo, y observa cómo el motor deduce los hechos que las relacionan.

El primer paso da al plan un solo valor, Free, Basic, Pro o Team, en lugar de cuatro entradas VERDADERO/FALSO independientes. Las fórmulas lo comprueban con listas, plan IN Paid y plan IN Collaborative, y cada prueba es una entrada VERDADERO/FALSO que el motor deduce del valor, así que un escenario puede dar el plan en sí. El segundo paso muestra lo que implican las listas: todo plan colaborativo es de pago, así que el motor deduce el supuesto plan IN Collaborative -> plan IN Paid y lo aplica en cada comprobación y cada tabla. Los cuatro planes forman tres clases que toda prueba trata igual, y la tabla de verdad sobre las dos pruebas e invited_by_team tiene seis filas admisibles, no ocho.

El tercer paso ordena los niveles de una escala de calificación crediticia y define rating_at_least_BBB_minus como «BBB- o mejor», que rating ≥ A implica. No calificado es un valor fuera de escala, que no está en ningún nivel y no satisface ninguna comparación; por eso NOT rating_at_least_BBB_minus y rating_below_BBB_minus difieren: la afirmación de la lección de que las dos salidas no son equivalentes se verifica en cada construcción, y el testigo es el bono sin calificar. El cuarto paso escribe «al menos dos de tres criterios» como AT_LEAST(2; …), una sola compuerta que cuenta, y comprueba que es equivalente a la fórmula de mayoría y no equivalente a la cadena de XOR, que es paridad.

Los ejercicios preguntan qué puede hacer un cliente Pro sin invitación, cuál es la situación de calificación en la que las dos salidas negativas difieren, y cómo escribir la mayoría solo con AND y OR. Los ejemplos resueltos de mayoría, quórum y «exactamente uno» muestran las formas desarrolladas que produce la ley de desarrollo de una restricción de recuento, y la página de errores sobre las cadenas de XOR muestra la fila en la que la paridad y «exactamente uno» se separan.

Haz esta lección de forma interactiva en la app

Pasos

1. Una entrada de categoría toma un valor

El plan es Free, Basic, Pro o Team: un solo valor, no cuatro entradas VERDADERO/FALSO independientes. Las fórmulas comprueban el valor con listas: plan IN Paid vale TRUE para Basic, Pro y Team; plan IN Collaborative para Pro y Team.

Cada prueba es una entrada VERDADERO/FALSO que el motor deduce del valor, así que un escenario puede dar el plan en sí y todas las pruebas se deducen.

can_share := plan IN Collaborative OR (plan IN Paid AND invited_by_team) · salida

plan: el plan del cliente; invited_by_team: un miembro del equipo invitó al cliente; can_share: el cliente puede compartir el documento;

Una entrada de categoría toma un valor
#plan_in_Collaborativeplan_in_Paidinvited_by_teamcan_shareplan_values_1Ámbito
0FALSOFALSOFALSOFALSOVERDADEROen ámbito
1FALSOFALSOVERDADEROFALSOVERDADEROen ámbito
2FALSOVERDADEROFALSOFALSOVERDADEROen ámbito
3FALSOVERDADEROVERDADEROVERDADEROVERDADEROen ámbito
4VERDADEROFALSOFALSOVERDADEROFALSOexcluida
5VERDADEROFALSOVERDADEROVERDADEROFALSOexcluida
6VERDADEROVERDADEROFALSOVERDADEROVERDADEROen ámbito
7VERDADEROVERDADEROVERDADEROVERDADEROVERDADEROen ámbito

Pon el plan en Basic con invited_by_team en FALSE y observa las dos pruebas y la salida.

2. Hechos deducidos: un plan colaborativo es de pago

Todo valor de Collaborative está también en Paid, así que ningún plan hace plan IN Collaborative TRUE y plan IN Paid FALSE. El motor deduce el supuesto plan IN Collaborative -> plan IN Paid de las listas y lo aplica en todas partes: las comprobaciones, las tablas de verdad y las pruebas nunca consideran esa combinación imposible.

Los cuatro planes forman tres clases que toda prueba trata igual: Free; Basic; Pro y Team. Una tabla de verdad sobre las dos pruebas e invited_by_team tiene seis filas admisibles, no ocho.

can_share := plan IN Collaborative OR (plan IN Paid AND invited_by_team) · salida

plan: el plan del cliente; invited_by_team: un miembro del equipo invitó al cliente; can_share: el cliente puede compartir el documento;

Hechos deducidos: un plan colaborativo es de pago
#plan_in_Collaborativeplan_in_Paidinvited_by_teamcan_shareplan_values_1Ámbito
0FALSOFALSOFALSOFALSOVERDADEROen ámbito
1FALSOFALSOVERDADEROFALSOVERDADEROen ámbito
2FALSOVERDADEROFALSOFALSOVERDADEROen ámbito
3FALSOVERDADEROVERDADEROVERDADEROVERDADEROen ámbito
4VERDADEROFALSOFALSOVERDADEROFALSOexcluida
5VERDADEROFALSOVERDADEROVERDADEROFALSOexcluida
6VERDADEROVERDADEROFALSOVERDADEROVERDADEROen ámbito
7VERDADEROVERDADEROVERDADEROVERDADEROVERDADEROen ámbito

Abre la tabla de verdad y cuenta las filas; luego abre los supuestos y encuentra el deducido.

contingent can_share · se cumple

3. Escalas: «BBB- o mejor» y el valor fuera de escala

Una escala ordena sus niveles de menor a mayor: rating_at_least_BBB_minus significa «BBB- o mejor», y el motor sabe que rating ≥ A lo implica. No calificado es un valor fuera de escala: no está en ningún nivel y no satisface ninguna comparación.

Por eso NOT rating_at_least_BBB_minus y rating_below_BBB_minus difieren: un bono no calificado hace que el primero valga TRUE y el segundo FALSE. El editor avisa cuando NOT se aplica a un umbral así; di lo que quieres decir con la prueba explícita.

investment_grade := rating_at_least_BBB_minus · salidanot_investment_grade := NOT rating_at_least_BBB_minus · salidaspeculative := rating_below_BBB_minus · salida

rating: la calificación del bono por la agencia; investment_grade: el bono es grado de inversión; not_investment_grade: el bono no es grado de inversión (también cuando no está calificado); speculative: el bono está calificado por debajo de BBB-;

Escalas: «BBB- o mejor» y el valor fuera de escala
#rating_at_least_BBB_minusrating_below_BBB_minusinvestment_gradenot_investment_gradespeculativerating_order_1Ámbito
0FALSOFALSOFALSOVERDADEROFALSOVERDADEROen ámbito
1FALSOVERDADEROFALSOVERDADEROVERDADEROVERDADEROen ámbito
2VERDADEROFALSOVERDADEROFALSOFALSOVERDADEROen ámbito
3VERDADEROVERDADEROVERDADEROFALSOVERDADEROFALSOexcluida

Pon la calificación en Not_rated y compara not_investment_grade con speculative.

not-equivalent not_investment_grade / speculative · se cumple

4. «Al menos dos de tres» es un conteo, no una cadena de XOR

AT_LEAST(2; a, b, c) cuenta cuántos operandos son verdaderos y compara el total con 2. EXACTLY(2; …) y AT_MOST(2; …) funcionan igual. Una cadena a XOR b XOR c es paridad: TRUE cuando uno o los tres son verdaderos, que raramente es lo que una regla quiere decir.

EXACTLY(1; a, b, c) es la forma de escribir «exactamente uno». Difiere de la cadena XOR exactamente cuando los tres son verdaderos.

meets_test := AT_LEAST(2; trades_at_least_10, portfolio_over_500000, finance_role_at_least_1_year) · salidaexactly_two := EXACTLY(2; trades_at_least_10, portfolio_over_500000, finance_role_at_least_1_year) · salidaparity := trades_at_least_10 XOR portfolio_over_500000 XOR finance_role_at_least_1_year · salidamajority := (trades_at_least_10 AND portfolio_over_500000) OR (trades_at_least_10 AND finance_role_at_least_1_year) OR (portfolio_over_500000 AND finance_role_at_least_1_year) · salida

trades_at_least_10: al menos 10 operaciones significativas por trimestre; portfolio_over_500000: una cartera de más de 500 000 euros; finance_role_at_least_1_year: al menos un año en un puesto financiero pertinente; meets_test: el cliente cumple la prueba cuantitativa (dos de tres); exactly_two: se cumplen exactamente dos criterios; parity: se cumple un número impar de criterios (una cadena de XOR); majority: la misma prueba escrita solo con AND y OR;

«Al menos dos de tres» es un conteo, no una cadena de XOR
#trades_at_least_10portfolio_over_500000finance_role_at_least_1_yearmeets_testexactly_twoparitymajority
0FALSOFALSOFALSOFALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOFALSOFALSOVERDADEROFALSO
3FALSOVERDADEROVERDADEROVERDADEROVERDADEROFALSOVERDADERO
4VERDADEROFALSOFALSOFALSOFALSOVERDADEROFALSO
5VERDADEROFALSOVERDADEROVERDADEROVERDADEROFALSOVERDADERO
6VERDADEROVERDADEROFALSOVERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROVERDADEROFALSOVERDADEROVERDADERO

Pon los tres criterios en TRUE y compara meets_test, exactly_two y parity.

not-equivalent meets_test / parity · se cumpleequivalent meets_test / majority · se cumple

Ejercicios

  1. El plan es Pro (así que plan IN Paid y plan IN Collaborative valen TRUE) y nadie invitó al cliente. ¿Puede compartir? (predict-output)
  2. Encuentra la situación de calificación en la que not_investment_grade y speculative difieren (pista: no está en ningún nivel). (find-assignment)
  3. Escribe meets_test («al menos dos de los tres criterios») solo con AND y OR, sin restricción de conteo. (write-equivalent)

Haz esta lección de forma interactiva en la app

Preguntas

¿Qué es una clase de valores?

Un conjunto de valores que todas las pruebas que usa la lógica tratan igual. Con las listas Paid y Collaborative, Free es una clase, Basic otra, y Pro y Team una tercera, porque ninguna prueba las distingue. Las comprobaciones, las tablas de verdad y la cobertura trabajan sobre clases, así que una categoría con cientos de valores sigue siendo pequeña.

¿Por qué NOT rating_at_least_BBB_minus no es lo mismo que rating_below_BBB_minus?

Porque un valor fuera de escala como No calificado falla en toda comparación de la escala. Un bono sin calificar hace que la primera valga VERDADERO y la segunda FALSO, y el editor avisa cuando NOT se aplica a un umbral de escala para que digas cuál de las dos quieres decir.

Relacionado

Herramientas

Véase también

Lecciones

Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.