ejercicios examen 2

This commit is contained in:
Vladimir Lemus 2024-05-05 23:29:10 -06:00
parent 4a51b23a84
commit b7f53c81ea
9 changed files with 334 additions and 0 deletions

BIN
ejercicios_ex2.pdf Normal file

Binary file not shown.

54
ejercicios_ex2.tex Normal file
View File

@ -0,0 +1,54 @@
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{xcolor}
\usepackage{caption}
\renewcommand{\rmdefault}{ptm}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
%\tikzset{->, % makes the edges directed
% >=stealth, % makes the arrow heads bold
% node distance=3cm, % specifies the minimum distance between two nodes. Change if necessary.
% every state/.style={thick, fill=gray!10}, % sets the properties for each state node
% initial text=$ $ % sets the text that appears on the start arrow
% }
%\usetikzlibrary{arrows,automata}
%\usepackage[all,cmtip]{xy}
%\usepackage{graphicx}
\author{Lógica computacional}
\title{Ejercicios para el examen 2}
\begin{document}
\maketitle
\begin{enumerate}
\item Da un modelo para las siguientes fórmulas:
\begin{align*}
&\neg \exists x.(P_1^2(c,f_1^1(x))) \\
&\forall x.(\neg P_1^2(c,f_1^1(x))) \\
&\forall x.(\exists y.P_1^2(x,y)) \\
&\exists x.(\neg \forall y.P_2^2(x,y)) \\
\end{align*}
\item Formaliza en un predicado a los números pares y los impares.
\item Demuestra por deducción natural los siguientes teoremas:
\begin{align*}
&\forall x.(A(x)\implies \neg B(x)) \implies \neg \exists x.(A(x)\wedge B(x)) \\
&\neg \forall x.A(x) \iff \exists x.(\neg A(x))\\
&\forall x.A(x)\implies \forall x.(A(x)\vee B(x))\\
&\forall x.A(x)\implies (\forall x.B(x)\implies \forall y.(A(y)\wedge B(y)))
\end{align*}
\item Escribe un programa lógico que genere un ciclo infinito
\item Escribe un programa lógico que te de todas las estaciones terminales del metro a las que puedes llegar desde metro Pantitlan haciendo 0, 1 o 2 transbordes.
\item \textbf{En un rato agrego ejercicios de base de datos.}
\end{enumerate}
\end{document}

54
ejercicios_ex2.tex~ Normal file
View File

@ -0,0 +1,54 @@
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{xcolor}
\usepackage{caption}
\renewcommand{\rmdefault}{ptm}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
%\tikzset{->, % makes the edges directed
% >=stealth, % makes the arrow heads bold
% node distance=3cm, % specifies the minimum distance between two nodes. Change if necessary.
% every state/.style={thick, fill=gray!10}, % sets the properties for each state node
% initial text=$ $ % sets the text that appears on the start arrow
% }
%\usetikzlibrary{arrows,automata}
%\usepackage[all,cmtip]{xy}
%\usepackage{graphicx}
\author{Lógica computacional}
\title{Ejercicios para el examen 2}
\begin{document}
\maketitle
\begin{enumerate}
\item Da un modelo para las siguientes fórmulas:
\begin{align*}
&\forall x.(\exists y. P_1^²(x,y)) \\
&\exits x.(\neg \forall y.P_2^2(x,y)) \\
&\neg \exists x.(P_1^2(c,f_1^1(x))) \\
&\forall x.(\neg P_1^2(c,f_1^1(x)))
\end{align*}
\item Formaliza en un predicado a los números pares y los impares.
\item Demuestra por deducción natural los siguientes teoremas:
\begin{align*}
&\forall x.(A(x)\implies \neg B(x)) \implies \neg \exists x.(A(x)\wedge B(x)) \\
&\neg \forall x.A(x) \iff \exists x.(\neg A(x))\\
&\forall x.A(x)\implies \forall x.(A(x)\vee B(x))\\
&\forall x.A(x)\implies (\forall x.B(x)\implies \forall y.(A(y)\wedge B(y)))
\end{align*}
\item Escribe un programa lógico que genere un ciclo infinito
\item Escribe un programa lógico que te de todas las estaciones terminales del metro a las que puedes llegar desde metro Pantitlan haciendo 0, 1 o 2 transbordes.
\item \textbf{En un rato agrego ejercicios de base de datos.}
\end{enumerate}
\end{document}

34
logica_modal.tex Normal file
View File

@ -0,0 +1,34 @@
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{caption}
\renewcommand{\rmdefault}{ptm}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
%\tikzset{->, % makes the edges directed
% >=stealth, % makes the arrow heads bold
% node distance=3cm, % specifies the minimum distance between two nodes. Change if necessary.
% every state/.style={thick, fill=gray!10}, % sets the properties for each state node
% initial text=$ $ % sets the text that appears on the start arrow
% }
%\usetikzlibrary{arrows,automata}
%\usepackage[all,cmtip]{xy}
%\usepackage{graphicx}
\author{Lógica computacional}
\title{Programación lógica y bases de datos}
\begin{document}
\maketitle
\section{Necesidad y posibilidad}
En todo lo que se ha tratado de lógica hasta el momento, los enunciados son verdaderos o falsos de manera permanente, conforme pasa el tiempo el valor es el mismo. Pero eso no se parece mucho a la realidad, si decimos que una película es buena a los 8 años, puede que nuestra apreciación cambie con el tiempo, el enunciado puede ya no ser verdadero. Si pensamos en un programa de computadora tiene sentido que las cosas cambien con el tiempo- ¿Cómo introducir esto a la lógica que conocemos hasta el momento?
\end{document}

34
logica_modal.tex~ Normal file
View File

@ -0,0 +1,34 @@
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{multicol}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{caption}
\renewcommand{\rmdefault}{ptm}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
%\tikzset{->, % makes the edges directed
% >=stealth, % makes the arrow heads bold
% node distance=3cm, % specifies the minimum distance between two nodes. Change if necessary.
% every state/.style={thick, fill=gray!10}, % sets the properties for each state node
% initial text=$ $ % sets the text that appears on the start arrow
% }
%\usetikzlibrary{arrows,automata}
%\usepackage[all,cmtip]{xy}
%\usepackage{graphicx}
\author{Lógica computacional}
\title{Programación lógica y bases de datos}
\begin{document}
\maketitle
\section{Necesidad y posibilidad}
En todo lo que se ha tratado de lógica hasta el momento, los enunciados son verdaderos o falsos de manera permanente, conforme pasa el tiempo el valor es el mismo. Pero eso no se parece mucho a la realidad, si decimos que una película es buena a los 8 años, puede que nuestra apreciación cambie con el tiempo, el enunciado puede ya no ser verdadero. Si pensamos en un programa de computadora tiene sentido que las cosas cambien con el tiempo- ¿Cómo introducir esto a la logica que conocemos hasta el momento?
\end{document}

Binary file not shown.

View File

@ -502,4 +502,9 @@ Veamos algunos ejemplos más.
}
\]
\begin{thebibliography}{10}
\bibitem{Metakides1996} Metakides, G. y Nerode, A. ``Principles of Logic and Logic Programming''. Elsevier, Amsterdam (1996).
\bibitem{Reeves1990} Reeves, S. y Clarke, M. ``Logic for computer science'' Addison-Wesley Publishers Ltd. (1990)
\end{thebibliography}
\end{document}

Binary file not shown.

View File

@ -8,6 +8,8 @@
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{xcolor}
\usepackage{caption}
\renewcommand{\rmdefault}{ptm}
@ -207,4 +209,155 @@ Ya son términos idénticos, las sustituciones que forma el umg son $\{z/h(x)\{x
\end{itemize}
\end{defi}
Una meta se escribe como
\begin{equation*}
\leftarrow \beta = \neg \exists y_1,...,y_k. \beta
\end{equation*}
Algunas definiciones extras y una paráfrasis de \emph{metas}, si escribimos la clausula definida o de \emph{Horn} como
\begin{equation*}
A_1\vee ...\vee A_k \leftarrow B_1\wedge ... \wedge B_m
\end{equation*}
\begin{enumerate}
\item $k=1$ y $n>0$ es lo que se llama una \emph{regla}
\item $k=1$ y $n=0$ es lo que se llama un \emph{hecho}
\item $k=0$ y $n>0$ es lo que se llama un \emph{objetivo} (una meta)
\end{enumerate}
\textbf{Un ejemplo:} Como ecribiríamos una relación familiar entre dos hermanas como una clausula definida.
\begin{equation*}
hermanas(X,Y) \leftarrow mujer(X) \wedge mujer(Y) \wedge padres(X,P,M) \wedge padres(Y,P,M)
\end{equation*}
\section{Resolución Proposicional}
Propuesta en 1965 por J.A. Robinson, se trabaja sobre clausulas. No es el caso más general pero lo usaremos para dar una introducción a la resolución SLD. Este tipo de resolución es que convierte una fórmula de lógica proposicional a un conjunto de clausulas.
Tenemos las clausulas, que se convierte en una \emph{meta} para finalmente dar solución:
\begin{equation*}
\frac{\alpha \leftarrow \beta_1,..., \beta_n\hspace{2mm} \leftarrow, \gamma_1, \gamma_k}{\leftarrow \beta_1,...\beta_n, \gamma_1,...,\gamma_k}
\end{equation*}
Aplicamos un algoritmo para tener la solución:
\begin{algorithm}
\caption{Algoritmo de resolución proposicional}\label{alg:respro}
\begin{algorithmic}
\Require Conjunto de clausulas
\Ensure Detecta si $C$ es insatisfacible
\State Buscar dos cláusulas $C_1,C_2\in C$ tales que exista $\ell$ que cumple $\ell\in C_1$ y $\neg \ell \in C_2$
\If{Se encuentran las cláusulas}
\State Calcular $R_{\ell}(C_1,C_2)$ (el resultante\footnote{El resultante se define como $R_{\ell}(C_1,C_2)= (C_1-\{\ell\})\cup (C_2-\{\neg \ell\})$}) y añadirlo a $C$
\If{Si $R_{\ell}=\emptyset$}
\State Salir y declarar que $C$ es insatisfacible
\ElsIf{Si no}
\State Volver al primer estado
\EndIf
\ElsIf{En caso de no encontrarse las cláusulas}
\State Salir y declarar que C es insatisfacible
\EndIf
\end{algorithmic}
\end{algorithm}
\section{Bases de datos relacionales}
Ya en la primera parte del curso hablamos de relaciones, ese es el concepto base en una base de datos relacional, pero vamos puntualizando.
Sean $D_1, D_2, ...,D_n$ una colección de símbolos llamados \emph{dominios}, los miembros del dominio son atómicos o indivisibles, no se puede acceder a una parte propia de un miembro.
\begin{defi}
Una \emph{relación de base de datos} $R$ sobre los dominios $D_1,D_2,...,D_n$ es un subconjunto de $D_1\times D_2\times ...\times D_n$. Se dice en este caso que $R$ es $n-$ario. Una \emph{base de datos relacional} es un número finito de tales relaciones (finitas).
\end{defi}
\textbf{Ejemplo:} Sean las relaciones, siguiendo con los ejemplos de familia\footnote{Disculpen el binarismo de los ejemplos, así lo pone el libro. Si en un futuro estas notas se amplían buscaré la manera de mejorar esos ejemplos.}, \emph{PADRE}, \emph{MADRE} y \emph{MAPADRES} y los dominios \emph{HOMBRE}$:=$ {adán, beto}, \emph{MUJER} $:=$ {ana, bere} y \emph{PERSONA} $:=$ \emph{HOMBRE} $\cup$ \emph{MUJER}.
De los dominios podemos definir las relaciones \emph{HOMBRE} $\times$ \emph{PERSONA}, \emph{MUJER} $\times$ \emph{PERSONA} y \emph{PERSONA} $\times$ \emph{PERSONA}. POr pomer un ejemplo de como se vería una de estas relaciones:
\begin{equation*}
HOMBRE \times PERSONA = \begin{Bmatrix}
\langle adan, adan \rangle & \langle beto, adan \rangle \\
\langle adan, beto \rangle & \langle beto, beto \rangle \\
\langle adan, ana \rangle & \langle beto, ana \rangle \\
\langle adan, bere \rangle & \langle beto, bere \rangle
\end{Bmatrix}
\end{equation*}
Las relaciones \emph{PADRE}, \emph{MADRE} y \emph{MAPADRES} será sobre estas otras relaciones, de la forma:
\begin{align*}
PADRE :=& \{\langle adan, beto\rangle, \langle adan, bere\rangle\} \\
MADRE :=& \{\langle ana, beto\rangle, \langle ana, bere\rangle\} \\
MAPADRE :=& \{\langle adan, beto\rangle, \langle adan, bere\rangle, \langle ana, beto\rangle, \langle ana, bere\rangle\}
\end{align*}
Una representación sintáctica diferente puede ser con tablas:
\begin{multicols}{3}
\emph{PADRE}
\begin{tabular}{ |c|c| }
\hline
$C_1$ & $C_2$ \\
\hline
adan & beto \\
adan & bere \\
\hline
\end{tabular}
\emph{MADRE}
\begin{tabular}{ |c|c| }
\hline
$C_1$ & $C_2$ \\
\hline
ana & beto \\
ana & bere \\
\hline
\end{tabular}
\emph{MAPADRE}
\begin{tabular}{ |c|c| }
\hline
$C_1$ & $C_2$ \\
\hline
adan & beto \\
adan & bere \\
ana & beto \\
ana & bere \\
\hline
\end{tabular}
\end{multicols}
O como una colección de eneadas etiquetadas:
\begin{align*}
&padre(adan, beto).\\
&padre(adan, bere).\\
&madre(ana, beto).\\
&madre(ana, bere).\\
&mapadre(adan, beto).\\
&mapadre(adan, bere).\\
&mapadre(ana, beto).\\
&mapadre(ana, bere).\\
\end{align*}
Las representaciones son isomórficas siempre y cuando no se ponga mucha importancia a los nombgres de las columnas, los \emph{atributos} que son de ayuda para establecer relaciones pero no son cruciales.
\subsection{Bases de datos deductivas}
Podemos representar las bases de datos anteriores como programas, de la forma:
\begin{align*}
mapadre(X,Y) &\leftarrow padre(X,Y).\\
mapadre(X,Y) &\leftarrow madre(X,Y).\\
padre(adan, beto).\\
padre(adan, bere).\\
madre(ana, beto).\\
madre(ana, bere).\\
\end{align*}
Que es lo que llamamos una \emph{base de datos intencional}, que sólo está formada por reglas y hechos no básicos
\end{document}