¿Evitar condiciones absurdas (matemáticas y programación)?

Responder
Avatar de Usuario
Tachikomaia
Mensajes: 15819
Registrado: 10 Ago 2011, 20:39
Rango personalizado: 1st Year Class D

¿Evitar condiciones absurdas (matemáticas y programación)?

Mensaje por Tachikomaia »

Por ejemplo
X > 1 y X > 2
es absurda porque alcanza con decir X > 2

En este otro caso
X == 3 y X == 4
es absurda porque es imposible que se cumpla, ergo ya se sabe que la respuesta será no, falsa, ergo no debería plantearse.

¿Cómo puedo hacer más o menos rápido una lista de las condiciones posibles, excluyendo las absurdas?

Téngase en cuenta que la lista ha de tener ciertas condiciones también, que explicaré.

Lista de las condiciones que implican 1 Candidato y 1 Fijo:
F < C
F <= C
F == C
F != C
C < F
C <= F
Candidato es un número que irá variando hasta que cumpla las condiciones.
Fijo es un número que se establece al diseñar el programa, y que no varía.

Nota: Como norma para que me resulte más simple, en general al valor menor lo pondré del lado izquierdo.
Nota2: F > C y otros no los mencioné porque los considero igual que otros, en este caso C < F.

Lista de las condiciones que implican 2 Candidatos:
C < C2
C <= C2
C == C2
C != C2
He quitado lo que sería C2 < C y C2 <= C, por motivos que no tiene mucho sentido que explique, no importa aquí.

Lista de las 2 condiciones AND que implican 1C y 1F:
F < C y F <= C: Absurda por redundante (alcanza con decir F < C).
F < C y F == C: Absurda por imposible.
F < C y F != C: Redundante (F < C).
F < C y C < F: Imposible.
F < C y C <= F: I.
F <= C y F == C: R (F == C).
F <= C y F != C: R, al menos en cierto modo (F<C).
F <= C y C < F: I.
F <= C y C <= F: R (F==C).
F == C y F != C: I.
F == C y C < F: I.
F == C y C <= F: R (F == C).
F != C y C < F: I. R (C < F).
F != C y C <= F: R (C < F).
C < F y C <=F: R (C < F).
Puede que me haya equivocado, pero ninguna parece servir. Podríamos concluir que para que haya 2 condiciones AND con sentido debe haber 3 elementos mínimo (C y 2F, o 2C y 1F, o 3C).

Nota: Voy a cambiar el orden de aparición un poco:
F < C
C < F
F <= C
C <= F
F == C
F != C
...por aquello de "al valor menor lo pondré del lado izquierdo".

Lista de las 2 condiciones OR que implican 1C y 1F:
F < C o C < F: R (F != C)
F < C o F <= C: R (F <= C)
F < C o C <= F: R (la condición se cumple siempre).
F < C o F == C: R (F <= C).
F < C o F != C: R (F != C).

C < F o F <= C: R (la condición se cumple siempre).
C < F o C <= F: R (C<=R).
C < F o F == C: R (C <= F).
C < F o F != C: R (F != C).

F <= C o C <= F: R (la condición se cumple siempre).
F <= C o F == C: R (F <= C).
F <= C o F != C: R (la condición se cumple siempre).

C <= F o F == C: R (C <= F).
C <= F o F != C: R (la condición se cumple siempre).

F == C o F != C: R (la condición se cumple siempre).
Tampoco aquí parece haber condiciones que tengan sentido.

Lista de las 2 condiciones AND que implican 1C y 2F:
Lista de las 2 condiciones OR que implican 1C y 2F:
En fin, podemos seguir, pero no se trata de hacer todas las listas, me remito a la pregunta en negrita, arriba.
Imagen
Avatar de Usuario
Tachikomaia
Mensajes: 15819
Registrado: 10 Ago 2011, 20:39
Rango personalizado: 1st Year Class D

Re: ¿Evitar condiciones absurdas (matemáticas y programación

Mensaje por Tachikomaia »

Actualización:
Se me ocurrió un método que me parece mejor pero aún no es suficiente.
Hago una regla, decimos que F es -5 y F2 es 5. En este caso funcionaría para casos donde hay 1C y 2Fs. A continuación lo que hacemos es ir ubicando Cs en diferentes posiciones en la regla. No haré los dibujos, pero por ejemplo la empezamos colocando luego de F2. ¿Cómo se describe eso? F2<C.
Luego la ubicamos en F2. F2==C
Luego, entre F y F2. F<C y C<F2.
Y así sucesivamente. El problema es que hay que pensar qué condición corresponde a cada dibujo, y me resulta molesto. Tampoco me dice a priori qué dibujos corresponden a condiciones que requieren AND o OR. Pero supongo que sí hay un método...

Knil (leedlo al revés):
Se trata de un paradigma de programación basado en la especificación de un conjunto de restricciones, las cuales deben ser satisfechas por cualquier solución del problema planteado, en lugar de especificar los pasos para obtener dicha solución.
Recuerdo haber preguntado cómo era esto y no entendí. ¿Es diferente a fuerza bruta? Pero incluso en ese caso, sí se plantean los pasos a seguir para hallar una solución.
EJ: Quiero un número X tal que X+20*3+7=80
Probad el 1. ¿No sirve? Probad el 2. Etc.
El método para hallar la solución es probar distintos valores hasta que cumpla la condición.

Si lo que me has dado es eso, ya lo sé pero no cómo eso me ayudaría a resolver el tema. Si quieres intentamos hacer un programa que haga las listas, pero el tema no va por ahí.

Bueno puedo leer más pero básicamente no lo entendí.

Me resulta interesante el dibujito de acá:
https://es.wikipedia.org/wiki/Restricci ... 3%A1ticas)
Si dibujo estados de reglas de un lado, y condiciones de otro ¿habrá estados a los que les corresponda más de una regla o viceversa? Supongo que no. Estados en el mismo nivel de complejidad, digo (por ejemplo 1c y 2fs, pero claro que hay reglas con otra complejidad pero redundantes que pueden ser descritas con las mismas condiciones).
Imagen
Avatar de Usuario
Nil
Mensajes: 5163
Registrado: 10 Jun 2011, 21:52

Re: ¿Evitar condiciones absurdas (matemáticas y programación

Mensaje por Nil »

No es fuerza bruta. Hay varias opciones. Aquí un ejemplo: https://en.wikipedia.org/wiki/Local_consistency
Spoiler: show
Responder