Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
teaching:cc4101:tareas:2015-2:tarea2 [2015/10/10 10:38] – [(3.0) Interpretación sobre conjuntos finitos] racruz | teaching:cc4101:tareas:2015-2:tarea2 [2015/10/10 16:16] – [(1.3) Optimización] racruz |
---|
> (satisfiable? (parse-expr '(or p q))) | > (satisfiable? (parse-expr '(or p q))) |
#t | #t |
> (satisfiable? (parse-expr '(and p (: p)))) | > (satisfiable? (parse-expr '(and p (not p)))) |
#f | #f |
> (satisfiable? (parse-expr '(<=> (=> p q) (or p q)))) | > (satisfiable? (parse-expr '(<=> (=> p q) (or p q)))) |
#t | #t |
> (satisfiable? (parse-expr '(<=> (=> p q) (and p (: q))))) | > (satisfiable? (parse-expr '(<=> (=> p q) (and p (not q))))) |
#f | #f |
</code> | </code> |
* ¬¬p <=> p | * ¬¬p <=> p |
Con esto se puede asegurar que en un programa válido, después de las negaciones ¬ no aparecen las expresiones: v, ^, ∀, ∃, ¬. Entiéndase programa válido (a este nivel), aquellos programas que no contienen operaciones invalidas como ''%%(+ #f 1)%%''. Ejemplos: <code scheme> | Con esto se puede asegurar que en un programa válido, después de las negaciones ¬ no aparecen las expresiones: v, ^, ∀, ∃, ¬. Entiéndase programa válido (a este nivel), aquellos programas que no contienen operaciones invalidas como ''%%(+ #f 1)%%''. Ejemplos: <code scheme> |
> (simplify-negations (parse-expr '(¬ (or (¬ p) (¬ q))))) | > (simplify-negations (parse-expr '(not (or (not p) (not q))))) |
(my-and (id 'p) (id 'q)) | |
> (simplify-negations (parse-expr '(¬ (¬ (¬ (or p q)))))) | |
(my-and (id 'p) (id 'q)) | (my-and (id 'p) (id 'q)) |
| > (simplify-negations (parse-expr '(not (not (not (or p q)))))) |
| (my-and (my-not (id 'p)) (my-not (id 'q))) |
</code> | </code> |
-(0.5) Defina la función ''%%(simplify expr)%%'' que se encargue de remplazar las siguientes expresiones: ''%%(and #f p)%%'', ''%%(or #t p)%%'', ''%%(¬ #t)%%'', ''%%(¬ #f)%%'', ''%%(or p p)%%'' y ''%%(and p p)%%'' por versiones más simples en el predicado representado por ''%%expr%%''. Asegúrese de utilizar la función ''%%simplify-negations%%'' definida anteriormente para uniformar las expresiones pues el predicado p puede ser arbitrariamente complejo. Hint: use la función ''%%equal?%%'' para verificar igualdad de predicados arbitrariamente complejos. No es necesario verificar permutaciones. <code scheme> | -(0.5) Defina la función ''%%(simplify expr)%%'' que se encargue de remplazar las siguientes expresiones: ''%%(and #f p)%%'', ''%%(or #t p)%%'', ''%%(¬ #t)%%'', ''%%(¬ #f)%%'', ''%%(or p p)%%'' y ''%%(and p p)%%'' por versiones más simples en el predicado representado por ''%%expr%%''. Asegúrese de utilizar la función ''%%simplify-negations%%'' definida anteriormente para uniformar las expresiones pues el predicado p puede ser arbitrariamente complejo. Hint: use la función ''%%equal?%%'' para verificar igualdad de predicados arbitrariamente complejos. No es necesario verificar permutaciones. <code scheme> |