Diferencia entre revisiones de «Problema 1»
De Lógica matemática y fundamentos (2012-13)
(→Enunciado) |
|||
Línea 8: | Línea 8: | ||
== Soluciones colaborativas == | == Soluciones colaborativas == | ||
+ | --Pedro G. Ros | ||
+ | |||
+ | -- Primero definimos los operadores como tipo: | ||
+ | |||
+ | data F = Const Bool | ||
+ | |Vari Char | ||
+ | |Nega F | ||
+ | |Conj F F | ||
+ | |Impl F F | ||
+ | |||
+ | --Ahora las funciones: | ||
+ | nv:: F -> Int | ||
+ | nv (Vari a) = 1 | ||
+ | nv (Impl a b) = (nv a) + (nv b) | ||
+ | nv (Nega p) = 1 + (nv p) | ||
+ | nv (Conj c d)= (nv c) + (nv d) | ||
+ | |||
+ | -- *Main> nv (Impl (Vari 'p') (Conj (Vari 'p') (Vari 'q'))) | ||
+ | -- 3 | ||
+ | |||
+ | prof::F-> Int | ||
+ | prof (Vari a) = 0 | ||
+ | prof (Impl a b) = 1 + (prof a) + (prof b) | ||
+ | prof (Nega b) = 1 + (prof b) | ||
+ | prof (Conj a b) = 1+ (prof a) + (prof b) | ||
+ | |||
+ | -- *Main> prof (Impl (Vari 'p') (Conj (Vari 'p') (Vari 'q'))) | ||
+ | --2 | ||
+ | |||
+ | {- | ||
+ | La demostración por inducción es sencilla: | ||
+ | Caso base: | ||
+ | nv (Vari a) = 1 ≤ 2^(prof (Vari a)) = 2^0 = 1 | ||
+ | |||
+ | Supongamos cierta la hipótesis para m y n dos proposiciones, y pongamos los casos: | ||
+ | |||
+ | nv (Nega m) = 1 + (nv m) ≤ 1+ 2^(prof m) | ||
+ | y obviamente: prof (Nega m) = 1+ (prof m)≤ 1+ 2^(prof m) | ||
+ | |||
+ | Ya que estamos practicando la inducción haré que | ||
+ | n ≤ 2^n. | ||
+ | (i) Se cumple trivialmente en el 1. | ||
+ | (ii) Suponemos cierto que se cumple en n. | ||
+ | (iii) n≤ 2^n -> 2n≤2^(n+1), luego si (n+1)≤2n ya hemos acabado, cosa obvia si 1≤n. | ||
+ | |||
+ | nv (Impl m n) = (nv m) + (nv n) ≤ 2^(prof m) + 2^(prof n) | ||
+ | prof (Impl m n) = 1+ (prof m) + (prof n), y también es trivial ver que 2^(prof Impl m n) es una cota superior a la dada por la hipótesis de inducción. | ||
+ | |||
+ | nv (Conj m n) == nv (Impl m n) | ||
+ | |||
+ | Por lo que hemos acabado y queda demostrado para todo tipo de fórmula F. | ||
+ | |||
+ | -} |
Revisión del 23:45 18 feb 2013
Enunciado
Definir por recursión sobre fórmulas las siguientes funciones
- nv(F) que calcula el número variables proposicionales que ocurren en la fórmula F. Por ejemplo,
- nv(p → p ∨ q) = 3.
- prof(F) que calcula la profundidad del árbol de análisis de la fórmula F. Por ejemplo,
- prof(p → p ∨ q) = 2.
Demostrar por inducción, que para toda fórmula F, nv(F) ≤ 2^prof(F)
Soluciones colaborativas
--Pedro G. Ros
-- Primero definimos los operadores como tipo:
data F = Const Bool
|Vari Char |Nega F |Conj F F |Impl F F
--Ahora las funciones: nv:: F -> Int nv (Vari a) = 1 nv (Impl a b) = (nv a) + (nv b) nv (Nega p) = 1 + (nv p) nv (Conj c d)= (nv c) + (nv d)
-- *Main> nv (Impl (Vari 'p') (Conj (Vari 'p') (Vari 'q'))) -- 3
prof::F-> Int prof (Vari a) = 0 prof (Impl a b) = 1 + (prof a) + (prof b) prof (Nega b) = 1 + (prof b) prof (Conj a b) = 1+ (prof a) + (prof b)
-- *Main> prof (Impl (Vari 'p') (Conj (Vari 'p') (Vari 'q'))) --2
{- La demostración por inducción es sencilla: Caso base: nv (Vari a) = 1 ≤ 2^(prof (Vari a)) = 2^0 = 1
Supongamos cierta la hipótesis para m y n dos proposiciones, y pongamos los casos:
nv (Nega m) = 1 + (nv m) ≤ 1+ 2^(prof m) y obviamente: prof (Nega m) = 1+ (prof m)≤ 1+ 2^(prof m)
Ya que estamos practicando la inducción haré que n ≤ 2^n. (i) Se cumple trivialmente en el 1. (ii) Suponemos cierto que se cumple en n. (iii) n≤ 2^n -> 2n≤2^(n+1), luego si (n+1)≤2n ya hemos acabado, cosa obvia si 1≤n.
nv (Impl m n) = (nv m) + (nv n) ≤ 2^(prof m) + 2^(prof n) prof (Impl m n) = 1+ (prof m) + (prof n), y también es trivial ver que 2^(prof Impl m n) es una cota superior a la dada por la hipótesis de inducción.
nv (Conj m n) == nv (Impl m n)
Por lo que hemos acabado y queda demostrado para todo tipo de fórmula F.
-}