Sistemas de Reescritura Cristóbal Domínguez González Jorge García de la Nava Ruiz Michel Piliougine Rocha Miguel Ángel Rico Blanco

Documentos relacionados
Introducción al Lambda Cálculo (C)

Teorema de incompletitud de Gödel

Descripción de los Lenguajes Aceptados por Autómatas

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Contenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

Lenguajes funcionales: λ-cálculo

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario

Definición 1 Un semigrupo es un conjunto E provisto de una operación binaria asociativa sobre E, se denota por (E, ).

Jerarquía de Chomsky. 1. Clasificación de gramáticas. 2. Clasificación de lenguajes. 3. Gramáticas regulares. 5. Gramáticas dependientes del contexto

PARADIGMAS DE PROGRAMACIÓN CALCULO LAMBDA CALCULO LAMBDA

Máquinas de Turing Definición y descripción

Lenguajes Incontextuales

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

Expresiones Regulares y Gramáticas Regulares

Procesadores de Lenguaje

Introducción a la Lógica y la Computación

Gramáticas independientes del contexto TEORÍA DE LA COMPUTACIÓN LENGUAJES INDEPENDIENTES DEL CONTEXTO Y AUTÓMATAS DE PILA. Otras definiciones I

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

La lógica de segundo orden: Sintaxis

Máquinas de Turing. Complexity D.Moshkovitz

Teorema de Lagrange. En esta sección demostramos algunos hechos básicos sobre grupos, que se pueden deducir de la definición

b) Sea una relación de equivalencia en A y una operación en A. Decimos que y son compatibles si a b a c b c y c a c b para todo a, b, c A

Departamento de Tecnologías de la Información. Tema 5. Decidibilidad. Ciencias de la Computación e Inteligencia Artificial

Introducción a la Lógica y la Computación

Ciencias de la Computación I

Hacia las Gramáticas Propias

Departamento de Ingeniería Matemática - Universidad de Chile

Tema 2: Métodos de Deducción para la Lógica Proposicional

Sea V un conjunto no vacío (cuyos elementos se llamarán vectores) y sea K un cuerpo (cuyos elementos se llamarán escalares).

10. Series de potencias

Lógica proposicional: Lectura única

La Ambigüedad en el Parsing

Complejidad Computacional

Métodos de Inteligencia Artificial

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Introducción a la complejidad computacional

Introducción a la indecidibilidad

Computabilidad y Lenguajes Formales: Teoría de la Computabilidad: Máquinas de Turing

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45

Relaciones IIC1253. IIC1253 Relaciones 1 / 32

Propiedades de lenguajes independientes del contexto

Descomposición del valor singular y sus aplicaciones

Tema 2: Métodos de Deducción para la Lógica Proposicional

Introducción a la Complejidad Computacional

Curso: Teoría de la Computación. Unidad 2, Sesión 7: Complejidad computacional

El indeterminismo en programación lógico-funcional: un enfoque basado en reescritura 1

Metodología de Programación I Corte y Aritmética

Programación Internet con Lenguajes Declarativos Multiparadigma. PARTE I: Fundamentos

Lógica de primer orden: Repaso y notación

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Conjuntos, Aplicaciones y Relaciones

Álgebra y estructuras finitas/discretas (Grupos A)

Métodos Matemáticos: Análisis Funcional

Alfabetos y cadenas (1) Alfabetos y cadenas (2) Lenguajes. Propiedades de la concatenación:

Nicolás Rivera. 20 de Marzo de 2012

Repaso de Lógica de Primer Orden

Tema 3: Espacios vectoriales

Descomposición de dos Anillos de Funciones Continuas

Coordinación de Ciencias Computacionales INAOE. Teoría de Autómatas y Lenguajes Formales. Temario detallado para examen de ingreso 2012

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Teoría Matemática de la Computación Segundo Problemario Prof. Miguel A. Pizaña 13 de julio de 2016

Lenguaje Regular. Sumario. Lenguaje Regular. Autómatas y Lenguajes Formales. Capítulo 8: Propiedades de los Lenguajes Regulares

1 er Parcial Febrero 2009

Teoría de Autómatas y Lenguajes Formales.

INSTITUCIÓN EDUCATIVA SANTA TERESA DE JESÚS IBAGUÉ - TOLIMA GUIA No.4 ALGEBRA DOCENTE: EDGARD RODRIGUEZ USECHE GRADO : NOVENO

autómatas finitos y lenguajes regulares LENGUAJES FORMALES Y

Tema 7: Problemas clásicos de Programación Lineal

OCW-V.Muto El algoritmo de bisección Cap. VI CAPITULO VI. EL ALGORITMO DE BISECCION 1. INTRODUCCION Y METODO

Métodos Matemáticos: Análisis Funcional

Conjuntos y expresiones regulares. Propiedades de las expresiones regulares (1) Propiedades de las expresiones regulares (2)

Entscheidungsproblem I TEORÍA DE LA COMPUTACIÓN MÁQUINAS DE TURING Y DECIDIBILIDAD. Máquinas de Turing (TM) Procedimiento efectivo

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña

Lógica proposicional. Semántica Lógica 2018

Teoría de la Computación puesta en Práctica

AMPLIACIÓN DE MATEMÁTICAS. a = qm + r

Entscheidungsproblem I LENGUAJES RECURSIVAMENTE ENUMERABLES MÁQUINAS DE TURING. DECIDIBILIDAD. Máquinas de Turing (TM) Procedimiento efectivo

Equivalencia Entre PDA y CFL

Sucesiones monótonas Monotonía. Tema 6

Contenido. 2 Operatoria con matrices. 3 Determinantes. 4 Matrices elementales. 1 Definición y tipos de matrices

1. Cadenas EJERCICIO 1

Programación Internet con Lenguajes Declarativos Multiparadigma. PARTE I: Fundamentos

Conjuntos finitos y conjuntos numerables

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

Nombre de la asignatura: Lenguajes y Autómatas I. Créditos: Aportación al perfil

Teoría de Lenguajes. Clase Teórica 7 Autómatas de Pila y Lenguajes Independientes del Contexto Primer cuartimestre 2014

Autómatas Finitos Deterministicos (DFA)

Expresiones Regulares

Autómatas Finitos Deterministicos (DFA)

Tema 2: Lenguajes Formales. Informática Teórica I

Clases de complejidad computacional: P y NP

Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1)

Espacios Vectoriales Euclídeos. Métodos de los mínimos cuadrados

En 1936 se introdujeron dos modelos computacionales: Alan Turing inventó la máquina de Turing y la noción de función computable en sus

Conjuntos finitos y conjuntos numerables

Autómatas Finitos Deterministicos (DFA) Introducción a la Complejidad Computacional FFHA, Universidad Nacional de San Juan

Transcripción:

Sistemas de Reescritura Cristóbal Domínguez González Jorge García de la Nava Ruiz Michel Piliougine Rocha Miguel Ángel Rico Blanco 13 de Marzo del 2001 PROGRAMACIÓN DECLARATIVA II

Introducción Comenzamos con conceptos ya estudiados anteriormente. Entre estos conceptos tenemos los siguientes: -Ecuaciones matemáticas -Haskell -Prolog -lambda-calculo -Maquina de Turing Para las ecuaciones matemáticas lo que nos interesa es ver como se aplica la igualdad para reducir expresiones complejas en otras mas simples para realizar un computo. La utilización de estas igualdades es muy ambigua, no sabemos que ecuación aplicar ni sobre que expresión, ni en que orden... De modo que un humano puede hacerlo de manera intuitiva, pero un computador no tiene esta habilidad. El caso de Haskell plantea, frente a las ecuaciones, una simplificación importante: la unidireccionalidad de sus reglas. Aunque no elimina otros problemas como la elección de la subexpresión o el de elección de la regla a aplicar. Cambia el resultado final según el orden de aplicación la regla? y según la subexpresión? Con Prolog tenemos dos variantes sobre los apartados anteriores: la unificación, que es una sustitución en ambos sentidos y el backtracking, que permite calcular distintos resultados para una misma expresión. Si se prohíbe la unificación y el backtracking, tenemos un sistema de reescritura puro. Si permiten, no obtenemos un sistema de reescritura puro, sino que habría que incluir elementos extras que simulen estas características. El lambda-calculo es un sistema particular de reescritura y ya se ha estudiado en esta asignatura. Este documento generaliza muchos de los resultados del lambda-calculo y, en cierta manera, justificarlos en una teoría mas amplia y abstracta. Dado que el lambda-calculo es un modelo de computación, cualquier otro modelo de computación será equivalente. En particular las maquinas de Turing, en las cuales si tomamos como expresión su configuración obtenemos un sistemas de reescritura de configuraciones basado en la tabla de estados de la maquina, que harían la función de reglas. Esto es extensible a el caso determinista e indeterminista ya que son equivalentes. Como caso particular de un modelo de computación tenemos la ejecución de un programa en un computador real, que podría ser visto como un sistema de reescritura del contenido de la memoria. Finalizando, un sistema de escritura, desde el punto de vista mas abstracto, puede ser visto como un grupo de relaciones (reglas) sobre un conjunto. Dependiendo de estas reglas y de este conjunto tendremos sistemas de reescritura particulares.

Sistemas abstractos de reescritura, propiedades y relaciones entre ellas. Definición Sea un Sistema Abstracto de Reescritura definido de la forma siguiente = (A,( R1, R2, Rn)), donde A es un conjunto sobre el que se dan la relaciones de reescritura o reducción R1, R2,.. Rn Supongamos definida sobre A la relación de igualdad = como nosotros la conocemos, en ambos sentidos. Usaremos la siguiente notación. R = R * = -1 = (Inversa) + (Cierre Transitivo) = (Cierre Reflexivo) = R según la relación R (relación de convertibilidad) Veamos que = R es de equivalencia dada la siguiente definición: a R b a = R b (Definición y Simétrica) a = R b b = R a (Reflexiva) a = R b b = R c a = R c (Transitiva) OTRAS DEFINICIONES. â es forma normal b : b A : â b. b A tiene forma normal â : â A : b â y â es esa forma normal. Usaremos la notación â para indicar que a es forma normal. Débilmente Normalizante WN( ). b : b A : â : â A : â b Notas: b puede no ser unica puede que no todos los caminos lleguen hasta b Fuertemente Normalizante SN( ) Es WN Terminación Únicamente Normalizante UN( R ) â, ê : â, ê A : â= R ê â=ê Inductividad Ind( ) Sea una cadena infinita de la forma a b c, entonces se da que a ς, b ς, c ς,

Incremental Inc( ) f : f:a N : a, b : a, b A : a b f(a)<f(b) Notas. N es el conjunto de los naturales Esta propiedad refleja que un elemento al que se llega por una relación tendrá un numero asociado mayor que los anteriores, y por tanto las formas normales de una cadena de elementos relacionados tendrán un numero asignado mayor que cualquiera de sus antecedentes. Confluencia Débil WCR( ) a, b, c : a, b, c A : c a b d : d A : c d b Confluencia CR( ) a, b, c : a, b, c A : c a b d : d A : c d b Subconmutativa WCR 1 ( ) a, b, c : a, b, c A : c a b d : d A : c = d = b Confluencia por Equivalencia CEq( R ) a, b : a, b A : a= R b c : c A : a = c = b RELACIÓN ENTRE PROPIEDADES. CR( ) WCR( ) WCR 1 ( ) CEq( ) GRAFO CONLA RELACIÓN ENTRE PROPIEDADES Según un teorema tenemos las siguientes relaciones entre propiedades que se representarán mediante un grafo: CR UN SN WCR CR ( lema de Newman ) UN WN CR UN WN Ind Ind Inc SN WCR WN Inc SN WCR CR WCR WCR 1 CR

Sistemas de reescritura de términos. Sistemas ortogonales y propiedades. Estrategias de reducción. Definición Sea un sistema de reescritura de términos definido de la forma siguiente = (Σ, ( R1, R2, Rn)), donde Σ es un alfabeto de términos formado por: Σ V = Alfabeto de variables (x, y, z ) Σ F = Alfabeto de funtores (F, G, H ) cada uno con una aridad dada. Σ = Alfabeto de puntuación ( (,,, ) ) Y i son reglas formadas por un par de términos ( s t ) Se define el conjunto de los términos sobre Σ, llamado Ter(Σ), de la siguiente forma: Σ V Ter(Σ) T 1,, T n Ter(Σ) F Σ F con aridad n F(T 1,, T n ) Ter(Σ) Este conjunto Ter(Σ) es el conjunto A de un sistema de reescritura abstracto, pero para definir las relaciones de reescritura hay que definir dos operaciones sobre Ter(Σ): Sobre el conjunto Ter(Σ) se definen dos operaciones: Sustitución y Contexto. Una sustitución es una aplicación σ : Ter(Σ) Ter(Σ) que cumple las siguientes propiedades: σ(x) Ter(Σ) donde x Σ V σ(f(t 1,,T n )) = F(σ(T 1 ),,σ(t n )) donde F Σ F con aridad n y T 1,,T n Ter(Σ) Un contexto C[ ] es un término donde hay una variable especial, llamada hueco y representada por, que ocurre sólo una vez en él. Entonces, dado un término T Ter(Σ), C[T] = σ( C[ ] ) siendo σ una sustitución tal que σ( ) = T, es decir, se sustituye el hueco por el término. σ(x) = x si x Σ V y x no es el hueco Ahora estamos en condiciones de definir las relaciones i del sistema de reescritura abstracto a partir de las reglas i del sistema de reescritura de términos. C[ ], σ : C[ ] contexto y σ sustitución : S i T C[σ(S)] i C[σ(T)] Al subtérmino σ(s) se le llama expresión reducible (redex). Así pues, se construye un sistema abstracto de reescritura a partir de un sistema de reescritura de términos y se pueden analizar todas las propiedades. Sin embargo, se pueden garantizar ciertas propiedades si se construye un sistema de reescritura de términos especial. Sistemas ortogonales de escritura de términos Un sistema ortogonal es un sistema de reescritura de términos donde dado cualquier término T de Ter(Σ), no hay en él un funtor implicado en dos redex distintos. Equivalentemente se puede decir que los redex del sistema no se solapan. Un ejemplo de sistema no ortogonal sería:

L(L(x)) x Ya que con el término L(L(L(A))) se podrían reducir las dos L s externas o las dos internas, estando la L intermedia implicada en las dos reducciones. Otro ejemplo de sistema no ortogonal sería: OR(x,y) x OR(x,y) y Ya que con la expresión OR(A,B) se podría aplicar la regla primera o la segunda utilizando el mismo funtor OR. Un sistema ortogonal es: SUMA(0,x) x SUMA(S(y),x) S(SUMA(y,x)) Ya que no existe ningún primer argumento que satisfaga que es 0 y que es S(x). Para ver si un sistema es ortogonal basta comprobar que no haya un antecedente unificable con un subtérmino (no variable) de otro antecedente (o del mismo, siendo subtérmino propio) y que cada variable no aparezca más de una vez en cada antecedente (reglas lineales por la izquierda o en los antecedentes). En L(L(x)) x puedo unificar el antecedente L(L(x)) con el subtérmino propio del mismo L(x) haciendo x=l(x) en el segundo. En OR(x,y) no hace falta ni renombrar variables ya que el antecedente de la primera regla es igual al antecedente de la segunda, es igual pero no el mismo (están en distintas reglas). Propiedades de los sistemas ortogonales Hay una importante propiedad: Todos los sistemas ortogonales son confluentes. Otra propiedad es: Si en cada regla las mismas variables ocurren en antecedente y en consecuente, decimos que es un sistema no borrador, ocurre que WN SN. Si en un sistema ortogonal siempre se puede encontrar una forma normal mediante el orden de evaluación aplicativo (más interior), entonces es SN y viceversa. Estrategias de reducción en los sistemas ortogonales Tenemos cinco estrategias principales según los redex que vayamos a reducir: Más a la izquierda, más interior (aplicativo) Todos los interiores Más a la izquierda, más exterior ( En general no es normal!) Todos los exteriores (normal) Todos (sólo válida en sistemas ortogonales donde no se solapan los redex). Se llama reducción de Kleene o de Gross Knuth. Además de normal es cofinal (una condición más fuerte: encuentra la forma normal por el mejor camino) La reducción más a la izquierda, más exterior es normal en los sistemas ortogonales normales por la izquierda. En estos sistemas no hay constantes ni funtores a la derecha de una variable.

Técnicas para estudiar la terminación. Método de Dershowitz La propiedad SN (de terminación) es deseable, entre otras razones porque si se cumple a la par que WCR, tenemos también que se cumple CR ( por el lema de Newman ). Pero el determinar si un sistema de reescritura de términos genera o no derivaciones infinitas es un problema indecidible. Pero bajo ciertas condiciones son aplicables técnicas que resuelven dicho problema. Una de ellas el método de Dershowitz, que está basado en el teorema de Kruskal. Definición Sea un conjunto de árboles finitos y conmutativos, cuyos nodos están etiquetados con números naturales. Sea * otro conjunto de árboles finitos y conmutativos, con nodos etiquetados también con números naturales, con la salvedad de que algunos de estos nodos pueden estar macados con un asterisco ( * ). Es fácil entender *. Definición Definamos sobre * la relación de reducción como: Siendo n,m naturales y t i cualquier árbol, 1. n (t 1,t 2,...,t n ) n * (t 1,t 2,...,t n ) 2. Si n>m, n * (t 1,t 2,...,t n ) m(n * (t 1,t 2,...,t n ),n * (t 1,t 2,...,t n ),...,n * (t 1,t 2,...,t n )) 3. n * (m,t 1,...,t n ) n(m *, m *,...,m * 1,t 1,...,t n ), donde m * aparece repetida j veces con j 0. 4. n * (t 1, t 2,...,t n ) t i donde i {1,...,n} con n 1. Es fácil ver que la relación no cumple SN en *. Pero por el contrario... Teorema La relación +, restringida a cumple SN. Esto significa que no existe ninguna secuencia infinita t 0 + t 1 + t 2 +... siendo los t i árboles sin marcas. Método de Dershowitz Sea R un sistema de reescritura de términos. Primero tenemos que asignar un peso a cada uno de los funtores que intervienen en las reglas (de lo afortunada que sea esta asignación dependerá el éxito del método). Si sustituimos los nodos por sus pesos, cada antecedente de las reglas del sistema será un elemento de ( idem para cada consecuente). Luego, regla por regla, trataremos de reducir el antecedente de la misma hasta el consecuente que le corresponda usando exclusivamente +. Si esto es posible para cada regla habremos demostrado que cada una de ellas es un caso particular de +, y como + es SN cuando nos restringimos a, nuestro TRS también será SN. Ejemplo: x x Sea R un TRS de como el de la figura ( x y ) ( x y ) Primero asignamos pesos: 1 a, 2 a, 3 a. Y ahora... ( x y ) ( x y ) x (y z) (x y) (x z) Para la primera regla : 3(3(t)) 3*(3(t)) 3(t) 3*(t) t, luego 3(3(t)) + (y z) x (y x) (z x) t Para la segunda regla: 3(1(t,s)) 3*(1(t,s)) 2(3*(1(t,s)), 3*(1(t,s))) 2(3(1*(t,s)), 3(1*(t,s))) 2(3(t), 3(s)), luego 3(1(t,s)) + 2(3(t), 3(s)) Se procede análogamente para el resto de las reglas. Transformación de sistemas ecuacionales en TRS s Dado un conjunto de ecuaciones de la forma f 1 = g 1, f 2 = g 2, f 3 = g 3,..., f n = g n, sería interesante obtener a partir de él un sistema de reescritura, tal que, la convertibilidad inducida por el sistema de reescritura equivalga al concepto de igualdad que se quiere capturar con dicho

sistema de ecuaciones. En un principio se podría, por cada ecuación de la forma f i = g i, obtener una regla, que podría ser bien f i g i, o bien g i f i. Cuál de las dos reglas posibles incorporamos a nuestro TRS? A veces las mismas condiciones sintácticas que los TRS s imponen a sus reglas descartan una de las opciones ( siendo la otra opción la adecuada ). Pero otras veces no está claro el sentido de la reducción. La elección está en nuestras manos y determinará las propiedades del sistema de reescritura que obtengamos. Definición: Par Crítico Sea R un TRS, y sean α β y γ δ dos reglas de R tal que α es unificable con un subtérmino no-variable de γ. Sea σ el unificador más general de ambos y sea t un término tal que σ(t) σ(α). Entonces el término σ(γ) sería de la forma σ(c[t]) puede reducirse de dos maneras distintas, usando la primera regla, o bien usando la segunda. Dando dos posibles reducciones, por un lado C[σ(β)] y por otro σ(δ). A este par de valores <C[σ(β)],σ(δ)> se le llama par crítico. La confluencia del sistema dependerá de la capacidad de reducción de ambos términos a uno común. Un par crítico va asociado a lo que en apartados anteriores llamábamos solapamiento de reglas Definición: Convergencia De un par crítico <s,t > se dice que es convergente en un TRS (y se escribe s t ) si es posible una reducción a un término común. Lema del par crítico: Sea R un TRS, WCR(R) ( <s, t> : par crítico de R : s t ) Corolario: Sea R un TRS, tal que SN(R). Entonces: CR(R) ( <s, t> : par crítico de R : s t ) Definición: Orden de reducción Un orden de reducción > es un orden parcial sobre los el conjunto de términos que cumple: s > t σ(s) > σ(t) s > t C[s] > C[t] Algoritmo de Knuth-Bendix ( para un orden de reducción prefijado ) Sea el E el conjunto de ecuaciones y sea R el cojunto de reglas. R:=Ø; mientras E tenga elementos seleccionar una ecuación s=t de E reducir s ˉs y t ˉt si ˉs ˉt entonces E:= E { s=t } en otro caso si (ˉs > ˉt) entonces α := ˉs ; β := ˉt en caso de que ˉs > ˉt β := ˉs ; α := ˉt en otro caso fracaso fin_si fin_si fin_mientras CP:={ P=Q <P,Q> es un par crítico, entre las reglas de R y α β } R:=R {α β} E:=E (CP-[s=t ])

Epílogo Con los conocimientos teóricos recién adquiridos, podemos volver a los ejemplos mencionados en la introducción para llegar a interesantes conclusiones. Hemos visto un algoritmo para transformar ecuaciones matemáticas en reglas de reescritura. Dicho algoritmo no es determinista y no funciona en todos los casos, pero a cambio los sistemas de reescritura generados son ortogonales y por tanto consistentes (si hay dos formas normales distintas). Haskell es un sistema casi ortogonal, ya que aunque el sistema permite definir dos reglas que se solapen, solo la primera que aparezca en el código será la efectiva, de manera que no se pueden aplicar las dos a la vez y no se pueden producir pares críticos. Esto hace que Haskell sea un sistema confluente y por tanto consistente. Por otro lado, esto no implica que Haskell tenga terminación asegurada. Como ya se dijo, Prolog es muy distinto a los dos casos anteriores aun asi se pueden llegar a algunas conclusiones. Por ejemplo, si dos reglas se solapan (si las dos se pueden aplicar sobre un mismo redes) el Prolog introduce un Choice-Point, de manera que nunca se van aplicar dos reglas en una misma rama. Siendo cada rama ortogonal y por lo tanto consistente. Por otro lado, gracias al backtracking tenemos varias formas normales, y cada una de ellas será un resultado de la computación. El lambda-calculo ya ha sido estudiado, pero podemos destacar el teorema de Church- Rosser que dice que es confluente y por tanto si tiene dos formas normales distintas (que las tiene, basta tomar dos variables distintas) es consistente.