Diferencia entre revisiones de «Relación 12»
De Lógica matemática y fundamentos (2014-15)
(Página creada con '<source lang = "haskell"> -- ResolucionProposicional.hs -- Resolución proposicional. -- --------------------------------------------------------------------- module Resolucion...') |
|||
Línea 24: | Línea 24: | ||
-- resolvente [no p,q] [no p,no q] q ==> [no p] | -- resolvente [no p,q] [no p,no q] q ==> [no p] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
+ | |||
+ | -- Francisco Javier Carmona | ||
resolvente :: Cláusula -> Cláusula -> Literal -> Cláusula | resolvente :: Cláusula -> Cláusula -> Literal -> Cláusula | ||
− | resolvente c1 c2 l = | + | resolvente c1 c2 l = nub (filter (/= l )(filter |
+ | (/= (complementario l)) (c1 ++ c2))) | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 36: | Línea 39: | ||
-- resolventes [no p,q] [p,q] ==> [[q]] | -- resolventes [no p,q] [p,q] ==> [[q]] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
+ | |||
+ | -- Francisco Javier Carmona | ||
resolventes :: Cláusula -> Cláusula -> [Cláusula] | resolventes :: Cláusula -> Cláusula -> [Cláusula] | ||
− | resolventes c1 c2 = | + | resolventes c1 c2 = [resolvente c1 c2 l | l <- c1, |
+ | elem (complementario l) c2 ] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 48: | Línea 54: | ||
-- ==> [[q],[q,r],[no p,s]] | -- ==> [[q],[q,r],[no p,s]] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
+ | |||
+ | -- Francisco Javier Carmona | ||
resolventesCláusulaConjunto :: Cláusula -> [Cláusula] -> [Cláusula] | resolventesCláusulaConjunto :: Cláusula -> [Cláusula] -> [Cláusula] | ||
− | resolventesCláusulaConjunto c s = | + | resolventesCláusulaConjunto c s = aux c s |
+ | where aux x [] = [] | ||
+ | aux x (y:ys) = resolventes x y ++ | ||
+ | aux x ys | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 65: | Línea 76: | ||
-- esTautología [] ==> False | -- esTautología [] ==> False | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
+ | |||
+ | -- Francisco Javier Carmona | ||
esTautología :: Cláusula -> Bool | esTautología :: Cláusula -> Bool | ||
− | esTautología c = | + | esTautología c = or [elem (complementario x) c | x <- c] |
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
Línea 76: | Línea 89: | ||
-- eliminaTautologías [[p, q], [p, q, no p]] ==> [[p,q]] | -- eliminaTautologías [[p, q], [p, q, no p]] ==> [[p,q]] | ||
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- | ||
+ | |||
+ | -- Francisco Javier Carmona | ||
eliminaTautologías :: [Cláusula] -> [Cláusula] | eliminaTautologías :: [Cláusula] -> [Cláusula] | ||
− | eliminaTautologías s = | + | eliminaTautologías s = [ x | x <- s, not( esTautologia x)] |
-- --------------------------------------------------------------------- | -- --------------------------------------------------------------------- |
Revisión del 19:49 30 abr 2015
-- ResolucionProposicional.hs
-- Resolución proposicional.
-- ---------------------------------------------------------------------
module ResolucionProposicional where
import SintaxisSemantica
import FormasNormales
import Clausulas
import Data.List
-- ---------------------------------------------------------------------
-- Resolventes --
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 1: Definir la función
-- resolvente :: Cláusula -> Cláusula -> Literal -> Cláusula
-- tal que (resolvente c1 c2 l) es la resolvente de c1 y c2 respecto del
-- literal l. Por ejemplo,
-- resolvente [no p,q] [no q,r] q ==> [no p,r]
-- resolvente [no p,no q] [q,r] (no q) ==> [no p,r]
-- resolvente [no p,q] [no p,no q] q ==> [no p]
-- ---------------------------------------------------------------------
-- Francisco Javier Carmona
resolvente :: Cláusula -> Cláusula -> Literal -> Cláusula
resolvente c1 c2 l = nub (filter (/= l )(filter
(/= (complementario l)) (c1 ++ c2)))
-- ---------------------------------------------------------------------
-- Ejercicio 2: Definir la función
-- resolventes :: Cláusula -> Cláusula -> [Cláusula]
-- tal que (resolventes c1 c2) es el conjunto de las resolventes de c1 y
-- c2. Por ejemplo,
-- resolventes [no p,q] [p,no q] ==> [[q,no q],[no p,p]]
-- resolventes [no p,q] [p,q] ==> [[q]]
-- ---------------------------------------------------------------------
-- Francisco Javier Carmona
resolventes :: Cláusula -> Cláusula -> [Cláusula]
resolventes c1 c2 = [resolvente c1 c2 l | l <- c1,
elem (complementario l) c2 ]
-- ---------------------------------------------------------------------
-- Ejercicio 3: Definir la función
-- resolventesCláusulaConjunto :: Cláusula -> [Cláusula] -> [Cláusula]
-- tal que (resolventes c s) es el conjunto de las resolventes de c y
-- s. Por ejemplo,
-- resolventesCláusulaConjunto [no p,q] [[p,q],[p,r],[no q,s]]
-- ==> [[q],[q,r],[no p,s]]
-- ---------------------------------------------------------------------
-- Francisco Javier Carmona
resolventesCláusulaConjunto :: Cláusula -> [Cláusula] -> [Cláusula]
resolventesCláusulaConjunto c s = aux c s
where aux x [] = []
aux x (y:ys) = resolventes x y ++
aux x ys
-- ---------------------------------------------------------------------
-- Eliminación de tautologías --
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 1: Definir la función
-- esTautología :: Cláusula -> Bool
-- tal que (esTautología c) se verifica si c es una tautología. Por
-- ejemplo,
-- esTautología [p, q, no p] ==> True
-- esTautología [p, q, no r] ==> False
-- esTautología [] ==> False
-- ---------------------------------------------------------------------
-- Francisco Javier Carmona
esTautología :: Cláusula -> Bool
esTautología c = or [elem (complementario x) c | x <- c]
-- ---------------------------------------------------------------------
-- Ejercicio 2: Definir la función
-- eliminaTautologías :: [Cláusula] -> [Cláusula]
-- tal que (eliminaTautologías s) es el conjunto obtenido eliminando las
-- tautologías de s. Por ejemplo,
-- eliminaTautologías [[p, q], [p, q, no p]] ==> [[p,q]]
-- ---------------------------------------------------------------------
-- Francisco Javier Carmona
eliminaTautologías :: [Cláusula] -> [Cláusula]
eliminaTautologías s = [ x | x <- s, not( esTautologia x)]
-- ---------------------------------------------------------------------
-- Decisión de inconsistencia por resolución --
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 4: Definir la función
-- esInconsistentePorResolución :: [Cláusula] -> Bool
-- tal que (esInconsistentePorResolución s) se verifica si s es
-- inconsistente mediante resolución. Por ejemplo,
-- esInconsistentePorResolución [[p],[no p,q],[no q]]
-- ==> True
-- esInconsistentePorResolución [[p],[no p,q]]
-- ==> False
-- esInconsistentePorResolución [[p,q],[no p,q],[p,no q],[no p,no q]]
-- ==> True
-- esInconsistentePorResolución [[p,q],[p,r],[no q,no r],[no p]]
-- ==> True
-- ---------------------------------------------------------------------
esInconsistentePorResolución :: [Cláusula] -> Bool
esInconsistentePorResolución s = undefined
-- ---------------------------------------------------------------------
-- Validez mediante resolución --
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 5: Definir la función
-- esVálidaPorResolución :: Prop -> Bool
-- tal que (esVálidaPorResolución f) se verifica si f es válida por
-- resolución. Por ejemplo,
-- esVálidaPorResolución (p --> p) ==> True
-- esVálidaPorResolución ((p --> q) \/ (q --> p)) ==> True
-- esVálidaPorResolución (p --> q) ==> False
-- ---------------------------------------------------------------------
esVálidaPorResolución :: Prop -> Bool
esVálidaPorResolución f = undefined
-- ---------------------------------------------------------------------
-- Consecuencia mediante resolución --
-- ---------------------------------------------------------------------
-- ---------------------------------------------------------------------
-- Ejercicio 6: Definir la función
-- esConsecuenciaPorResolución :: [Prop] -> Prop -> Bool
-- tal que (esConsecuenciaPorResolución s f) se verifica si f es
-- consecuencia de s mediante el método de resolución. Por ejemplo,
-- esConsecuenciaPorResolución [p --> q, q --> r] (p --> r)
-- ==> True
-- esConsecuenciaPorResolución [p --> q, q --> r] (p <--> r)
-- ==> False
-- ---------------------------------------------------------------------
esConsecuenciaPorResolución :: [Prop] -> Prop -> Bool
esConsecuenciaPorResolución s f = undefined