
\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[italian]{babel}
\usepackage{times}
%\usepackage{DW}
%\usepackage{graphs}
%\usepackage{amsmath}
%\usepackage{amssymb}
%\usepackage{bdsa}
\usepackage{listings}
\usepackage{graphicx} 

%%%%%
\oddsidemargin=0.1cm
\evensidemargin=0.1cm
\textwidth=15cm
%%%%%%%

\newcommand{\smalltextsf}[1]{{\footnotesize\textsf{#1}}}

\newcommand{\scaledpsfigure}[4]{\begin{figure}[htb]
  %\epsfxsize=#3
  \begin{center}
\includegraphics[scale=#4]{#1#2}
  \end{center}
  \caption{#3 \label{f:#2}}
  \end{figure}}
\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{\small\sffamily{\bfseries#1} \hspace{1.6mm} #2}%
%  \sbox\@tempboxa{\small\bfseries\sffamily#1 \hspace{1.6mm} #2}%
  \ifdim \wd\@tempboxa >\hsize
%    {\small\bfseries\sffamily#1 \hspace{1.6mm}} {\small\sffamily#2}\par
    \small\sffamily{\bfseries#1} \hspace{1.6mm} #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\box\@tempboxa}%
  \fi
  \vskip\belowcaptionskip}

%\newcommand{\smalltextsf}[1]{{\small\textsf{#1}}}
%\newcommand{\smalltextsf}[1]{{\footnotesize\textsf{#1}}}

\newenvironment{program}
{\footnotesize\sffamily\begin{tabbing}}{\end{tabbing}}
%\newcommand {\BJoin}{\mbox{\normalsize $\bowtie$}}
%\newcommand {\JoinC}[1]{\,\mbox{\small ${\BJoin  \atop #1}$}\,}
%%%%%%%%%%%%%%

\author{Giorgio Ghelli}
\title{Riconoscere e formalizzare le dipendenze funzionali}

\date{\normalsize \today}

%\date{ }

\begin{document}

\maketitle

\section{Riconoscere e formalizzare le dipendenze funzionali}

Non sempre \`e facile individuare le dipendenze funzionali espresse in linguaggio naturale, perch\'e esistono diversi modi di esprimere la stessa dipendenza, ed esistono espressioni simili tra loro che esprimono dipendenze diverse.
In questa nota esploriamo questa variet\`a di espressioni in modo sistematico, in modo da facilitarne il riconoscimento e la traduzione nella dipendenza corrispondente.

Affrontiamo per prima cosa le dipendenze in cui il determinante \`e un solo attributo, per poi passare al caso pi\`u generale delle dipendenze con pi\`u attributi nel determinante, ed al caso particolare dei vincoli di superchiave.

\subsection{Dipendenze funzionali  \textsf{A}   $\rightarrow$  \textsf{B}}

Una dipendenza \smalltextsf{X}   $\rightarrow$  \smalltextsf{Y}  su di una relazione \smalltextsf{R}  rappresenta il seguente vincolo:

\begin{program}
$\forall r$ istanza valida di R, $\forall t_1, t_2 \in r.\ t_1[X] = t_2[X]  \Rightarrow  t_1[Y] = t_2[Y]  $
\end{program}
Quindi, tale dipendenza rappresenta un'implicazione di \textit{uguaglianze}, che noi indicheremo sinteticamente come:

\begin{program}
\smalltextsf{X$_=$}  $\Rightarrow$  \smalltextsf{Y$_=$} 
\end{program}
Ad esempio, si consideri una relazione che rappresenta l'allocazione settimanale delle aule di una struttura didattica a dei corsi, con schema:


\begin{program}
Allocazioni(Aula, Giorno, Ora, Corso, Docente)
\end{program}

\noindent
Il vincolo:

\begin{program}
\smalltextsf{Corso}  $\rightarrow$  \smalltextsf{Docente} 
\end{program}

\noindent
significa che ogni volta che due allocazioni riguardano lo stesso corso, esse riguardano anche lo stesso docente, ovvero che per ogni corso c'\`e un unico docente, ovvero l'implicazione 
\smalltextsf{Corso $_=$}  $\Rightarrow$  \smalltextsf{Docente $_=$}.

La stessa sentenza pu\`o essere espressa in almeno altri due modi con opportune manipolazioni logiche sfruttando  le seguenti equivalenze della logica proposizionale (dove $\wedge$ lega pi\`u di $\Rightarrow $):


%\begin{program}
%mmmmmmmmmmmmm\=mmmmmmmmmmmmmmmmmmm\=\kill
%\smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}  \>(A implica B) \> $\Leftrightarrow $\\
%\smalltextsf{A}  $\wedge$ $\neg$\smalltextsf{B} $\Rightarrow$  \smalltextsf{False}  \>(A e non B \`e impossibile) \> $\Leftrightarrow $\\
%$\neg$\smalltextsf{B}  $\Rightarrow$  $\neg$\smalltextsf{A}  \>(non B implica non A)\\
%\end{program}

\begin{program}
mmmmmmmmmmmmm\=mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\=\kill
\smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}  \>(A implica B: implicazione di uguaglianze o implicazione diretta) \> $\Leftrightarrow $\\
\smalltextsf{A}  $\wedge$ $\neg$\smalltextsf{B} $\Rightarrow$  \smalltextsf{False}  \>(A e non B \`e impossibile: impossibilità o per assurdo) \> $\Leftrightarrow $\\
$\neg$\smalltextsf{B}  $\Rightarrow$  $\neg$\smalltextsf{A}  \>(non B implica non A: implicazione di disuguaglianze o implicazione contrapposta)\\
\end{program}

\noindent
In altre parole, una proposizione si pu\`o spostare da un lato all'altro dell'implicazione, purch\'e ne venga cambiato il segno. Per essere precisi, in una formula 
\begin{quote}
\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}  $\wedge$ \smalltextsf{True}
$\Rightarrow$  \smalltextsf{B$_1$} $\vee$ \ldots $\vee$ \smalltextsf{B$_m$}
$\vee$ \smalltextsf{False} 
\end{quote}
\`e possibile spostare a destra, negandolo, ciascun fattore \smalltextsf{A$_i$} e spostare a sinistra, negandolo, ciascun addendo \smalltextsf{B$_j$}. 
%Se a destra fosse per\`o presente una congiunzione  \smalltextsf{B$_1$} \wedge \ldots \wedge \smalltextsf{B$_m$}, non potremmo spostare un fattore alla volta, ma potremmo pur sempre spostare l'intera espressione.

Se indichiamo con \smalltextsf{A$_{\neq}$} la negazione di  \smalltextsf{A$_=$}, abbiamo quindi tre modi diversi di esprimere una dipendenza funzionale \smalltextsf{Corso}  $\rightarrow$  \smalltextsf{Docente}:
\begin{enumerate}
\item  \smalltextsf{Corso$_=$}  $\Rightarrow$  \smalltextsf{Docente$_=$} (implicazione  diretta): ``se in due allocazioni il corso \`e uguale, allora in docente \`e uguale''.

\item	 \smalltextsf{Corso $_=$} $\wedge$  \smalltextsf{Docente $_{\neq}$}  $\Rightarrow$ \smalltextsf{False} (impossibilità): ``non possono esserci due allocazioni con lo stesso corso e docente diverso''.
\item	 \smalltextsf{Docente$_{\neq}$}   $\Rightarrow$   \smalltextsf{Corso$_{\neq}$}
 (implicazione contrapposta): ``se in due allocazioni il docente \`e diverso, allora in corso \`e diverso''.

\end{enumerate}

Sulla base di questa osservazione, proponiamo il seguente metodo per riconoscere le dipendenze funzionali di questo tipo:
\begin{enumerate}
\item  riconoscere se l'affermazione da formalizzare \`e un'implicazione diretta, un'espressione di impossibilit\`a, o un'implicazione contrapposta, e formalizzarla usando la notazione indicata in predecenza;
\item nel caso non si tratti di un'implicazione diretta, spostare le disuguaglianze \smalltextsf{Attributo$_{\neq}$} nella parte opposta dell'implicazione, in modo da arrivare ad un'implicazione diretta.
\end{enumerate}

 
\paragraph{Esercizio 1} 
Date le seguenti sentenze, (a) stabilite in che forma di trovano, (b) rappresentatele in forma \smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}  oppure \smalltextsf{A}  $\wedge$ \smalltextsf{B$_{\neq}$} $\Rightarrow$  \smalltextsf{False}  oppure \smalltextsf{B$_{\neq}$}  $\Rightarrow$ \smalltextsf{A$_{\neq}$}, (c) portatele nella forma \smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}, ed infine (d) scrivete la dipendenza funzionale corrispondente.
\begin{enumerate}
\item Non ci sono mai due corsi diversi con lo stesso docente.
\item	In una tabella \smalltextsf{Esami(Voto, Matricola, Cognome)}, se la \smalltextsf{Matricola} \`e diversa, allora anche il \smalltextsf{Cognome} \`e diverso.
\item 	In una tabella \smalltextsf{Esami(Voto, Matricola, Cognome)}, ad ogni \smalltextsf{Matricola} corrisponde un unico \smalltextsf{Cognome}.

\end{enumerate}


\subsection{Dipendenze funzionali  \textsf{X}   $\rightarrow$  \textsf{B}}

Nel caso di dipendenze con pi\`u attributi nel determinante, le manipolazioni logiche si generalizzano come segue:

\begin{program}
mmmmmmmmmmmmmmmmmmmmmm\=mmmmmmmmmmmmmmmmmmm\=\kill
\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}  $\Rightarrow$  \smalltextsf{B}  \>(implicazione diretta) \> $\Leftrightarrow $\\
\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}    $\wedge$ $\neg$\smalltextsf{B} $\Rightarrow$  \smalltextsf{False}  \>(impossibilità) \> $\Leftrightarrow $\\
\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ $\neg$\smalltextsf{B}  $\Rightarrow$  $\neg$\smalltextsf{A}  \>(implicazione contrapposta)\\
\end{program}

\noindent
Quindi, l'espressione di una dipendenza di questo tipo in modo diretto o tramite impossibilità non cambia rispetto al caso precedente. Tuttavia, per quanto riguarda l'implicazione contrapposta, osserviamo come, tra le tante uguaglianze a sinistra della dipendenza, solo una \`e negata e va quindi spostata. Facciamo un esempio.

Il vincolo

\begin{program}
\smalltextsf{Aula, Giorno, Ora}  $\rightarrow$  \smalltextsf{Corso} 
\end{program}

\noindent
significa che se due righe coincidono su \smalltextsf{Aula, Giorno, Ora} devono coincidere anche su   \smalltextsf{Corso}  (\smalltextsf{Aula$_=$}   $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$}  $\Rightarrow$  \smalltextsf{Corso$_=$}). Anche questo vincolo si pu\`o esprimere nei tre stili indicati.
\begin{enumerate}
 \item Implicazione diretta (``se in due allocazioni aula, giorno ed ora coincidono, il corso \`e uguale'' oppure  ``aula, giorno ed ora determinano il corso''):  
 
 \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$}  $\Rightarrow$  \smalltextsf{Corso$_=$}
 
 \item Impossibilità (``non possono esserci due corsi diversi contemporaneamente nella stessa aula''): 
 
 \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$}   $\wedge$ \smalltextsf{Corso$_{\neq}$} $\Rightarrow$  \smalltextsf{False}
 
 \item Implicazione contrapposta 
 \begin{enumerate}
 \item (``in ogni giorno ed ora, due corsi diversi stanno in due aule diverse''): 
 
  \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$}   $\wedge$ \smalltextsf{Corso$_{\neq}$} $\Rightarrow$  \smalltextsf{Aula$_{\neq}$}
 
  \item (``in ogni giorno ed in ogni aula, due corsi diversi devono fare lezione in due ore diverse''):  
  
  
  \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$  \smalltextsf{Corso$_{\neq}$} $\Rightarrow$  \smalltextsf{Ora$_{\neq}$}
  
   \item (``in ogni ora ed in ogni aula, due corsi diversi devono fare lezione in due giorni diversi''):  
   
   
  \smalltextsf{Aula$_=$}   $\wedge$ \smalltextsf{Ora$_{=}$} $\wedge$  \smalltextsf{Corso$_{\neq}$} $\Rightarrow$  \smalltextsf{Giorno$_{\neq}$}
  
  \item ecc.
   
   \end{enumerate}
  
  \end{enumerate}
  La forma (2) \`e probabilmente la pi\`u comune per esprimere dipendenze complesse come queste. Anche per queste dipendenze si consiglia il metodo indicato in precedenza: riconoscerne la forma, formalizzarle, spostare le disuguaglianze sul lato opposto dell'implicazione.

\paragraph{Esercizio 2} 
Date le seguenti sentenze, (a) stabilite in che forma di trovano, (b) rappresentatele in forma 

\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}  $\Rightarrow$  \smalltextsf{B}   oppure


\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}    $\wedge$ $\neg$\smalltextsf{B} $\Rightarrow$  \smalltextsf{False}   oppure


\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ $\neg$\smalltextsf{B}  $\Rightarrow$  $\neg$\smalltextsf{A}   

(c) portatele nella forma \smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n}$}  $\Rightarrow$  \smalltextsf{B} , ed infine (d) scrivete la dipendenza funzionale corrispondente.
\begin{enumerate}
\item  Lo stesso docente non pu\`o essere in due aule contemporaneamente.
\item	In una tabella \smalltextsf{Esami(Voto, Materia, Matricola)}, se in due esami c'\`e la stessa \smalltextsf{Matricola}  ma il voto \`e diverso, allora anche la \smalltextsf{Materia} \`e diversa.
 
\item 	In una tabella \smalltextsf{Esami(Voto, Materia, Matricola)}, non posso trovare due esami diversi che hanno la stessa \smalltextsf{Materia} e \smalltextsf{Matricola}.


\end{enumerate}

  \subsection{Dipendenze funzionali  \textsf{X}   $\rightarrow$  \textsf{T}, ovvero vincoli di superchiave}
  
  Si consideri l'affermazione: ``Aula, giorno ed ora non possono coincidere tutte e tre''. Si potrebbe essere tentati di formalizzarla come segue:

  
  \begin{program}
    \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$  \smalltextsf{Ora$_{=}$} $\Rightarrow$  \smalltextsf{False}
     \end{program}
    
\noindent
Per\`o questa implicazione non ha nessuna delle forme che noi vogliamo, e non ci porta a nessuna dipendenza funzionale (inoltre, questa implicazione \`e falsa: se consideriamo due volte la stessa riga, abbiamo due righe che soddisfano l'ipotesi ma non la tesi). La soluzione pi\`u semplice \`e osservare che questa affermazione esprime in realtà un vincolo di superchiave, e quindi si pu\`o immediatamente formalizzare come:

    
      \begin{program}
    \smalltextsf{Aula, Giorno, Ora} $\rightarrow$  \smalltextsf{tutti gli altri attributi} 
     \end{program}
     
     \noindent
La discussione potrebbe fermarsi qui. Se per\`o vogliamo trattare anche questo caso come gli altri, dobbiamo per prima cosa rendere esplicito il fatto che stiamo parlando di righe diverse, e dobbiamo riscrivere l'affermazione come segue:
     
     \medskip
	 Aula, giorno ed ora non possono coincidere tutte e tre \emph{in due righe diverse}

     
     \medskip
     \noindent
Infatti, se consideriamo due volte la stessa riga, l'affermazione originaria era falsa. Questa affermazione corretta si formalizza come segue:

     
\begin{program}
    \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$}  $\wedge$  \smalltextsf{Ora$_{=}$} $\wedge$ $\neg$(\smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$  \smalltextsf{Ora$_{=}$} $\wedge$  \smalltextsf{Corso$_=$} $\wedge$ \smalltextsf{Docente$_{=}$}) $\Rightarrow$  \smalltextsf{False}
     \end{program}
     
	%Aula= ? Giorno= ? Ora= ? ¬(Aula= ? Giorno= ? Ora= ? Corso= ? Docente=)==> F.
\noindent
Oppure (equivalentemente):
         
        \begin{program}
    \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$}  $\wedge$  \smalltextsf{Ora$_{=}$} $\wedge$ $\neg$(\smalltextsf{Corso$_=$}  $\wedge$  \smalltextsf{Docente$_{=}$}) $\Rightarrow$  \smalltextsf{False}
     \end{program}
     
	%Aula= ? Giorno= ? Ora= ? ¬( Corso= ? Docente=)==> False

     \noindent
Passando dalla forma (2) alla forma (1), ovvero portando a destra la sottoformula negata, otteniamo:

     \begin{program}
    \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$}  $\wedge$  \smalltextsf{Ora$_{=}$} 
    $\Rightarrow$ (\smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$  \smalltextsf{Ora$_{=}$} $\wedge$  \smalltextsf{Corso$_=$} $\wedge$ \smalltextsf{Docente$_{=}$})  
     \end{program}
	
     
     %Aula= ? Giorno= ? Ora= ==> (Aula= ? Giorno= ? Ora= ? Corso= ? Docente=)
 \noindent
Oppure:

     
       \begin{program}
    \smalltextsf{Aula$_=$}  $\wedge$ \smalltextsf{Giorno$_{=}$}  $\wedge$  \smalltextsf{Ora$_{=}$} 
    $\Rightarrow$ (\smalltextsf{Corso$_=$}  $\wedge$  \smalltextsf{Docente$_{=}$})  
     \end{program}
     
	%Aula= ? Giorno= ? Ora= ==> ( Corso= ? Docente=)
 \noindent
A cui corrispondono le dipendenze equivalenti:

     
         \begin{program}
    \smalltextsf{Aula, Giorno, Ora} $\rightarrow$  \smalltextsf{Aula, Giorno, Ora, Corso, Docente} \\
     \smalltextsf{Aula, Giorno, Ora} $\rightarrow$  \smalltextsf{Corso, Docente} \\
     \end{program}
     
	%Aula, Giorno, Ora ? Aula, Giorno, Ora, Corso, Docente
	%Aula, Giorno, Ora ? Corso, Docente
     
 \noindent	
L'osservazione di fondo \`e che quando usiamo la forma (2) per descrivere un vincolo, in genere esprimiamo esplicitamente un attributo che deve essere diverso (il \smalltextsf{Docente} o il \smalltextsf{Corso} negli esempi dei Capitoli 1.1 e 1.2). Nei vincoli di superchiave basta che sia diverso un attributo qualunque, e questa condizione viene spesso espressa in modo ambiguo (``\textit{due} righe non possono coincidere su X Y Z'': la diversità su almeno un attributo \`e espressa dal numerale \textit{due}) o addirittura non viene espressa per nulla (``X Y e Z non possono mai coincidere tutti e tre''). Per usare il nostro metodo, questa ipotesi di diversità deve diventare esplicita.

  
  %%%%%
  \section{Soluzione agli esercizi}

\paragraph{Esercizio 1} 
Date le seguenti sentenze, (a) stabilite in che forma di trovano, (b) rappresentatele in forma 
\smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}  oppure 
\smalltextsf{A}  $\wedge$ \smalltextsf{B$_{\neq}$} $\Rightarrow$  \smalltextsf{False}  oppure 
\smalltextsf{B$_{\neq}$}  $\Rightarrow$ \smalltextsf{A$_{\neq}$}, 

(c) portatele nella forma \smalltextsf{A}  $\Rightarrow$  \smalltextsf{B}, ed infine (d) scrivete la dipendenza funzionale corrispondente.
\begin{enumerate}
\item Non ci sono mai due corsi diversi con lo stesso docente.
\begin{enumerate}
\item forma (2)  (impossibilità),
\item \smalltextsf{Corso$_{\neq}$}  $\wedge$ \smalltextsf{Docente$_{=}$} $\Rightarrow$  \smalltextsf{False} 
\item \smalltextsf{Docente$_{=}$} $\Rightarrow$  \smalltextsf{Corso$_{=}$} 

\item \smalltextsf{Docente} $\rightarrow$  \smalltextsf{Corso} 
\end{enumerate}
\item	In una tabella \smalltextsf{Esami(Voto, Matricola, Cognome)}, se la \smalltextsf{Matricola} \`e diversa, allora anche il \smalltextsf{Cognome} \`e diverso.
\begin{enumerate}
\item forma (3) (implicazione contrapposta),
\item \smalltextsf{Matricola$_{\neq}$}  $\Rightarrow$  \smalltextsf{Cognome$_{\neq}$} 

\item \smalltextsf{Cognome$_{=}$} $\Rightarrow$  \smalltextsf{Matricola$_{=}$} 

\item \smalltextsf{Cognome} $\rightarrow$  \smalltextsf{Matricola} 
\end{enumerate}

\item 	In una tabella \smalltextsf{Esami(Voto, Matricola, Cognome)}, ad ogni \smalltextsf{Matricola} corrisponde un unico \smalltextsf{Cognome}.

\begin{enumerate}
\item forma (1) (implicazione diretta),
\item \smalltextsf{Matricola$_{=}$}  $\Rightarrow$  \smalltextsf{Cognome$_{=}$} 

\item \smalltextsf{Matricola$_{=}$}  $\Rightarrow$  \smalltextsf{Cognome$_{=}$} 

\item \smalltextsf{Matricola} $\rightarrow$  \smalltextsf{Cognome} 
\end{enumerate}


\end{enumerate}


\paragraph{Esercizio 2} 
Date le seguenti sentenze, (a) stabilite in che forma di trovano, (b) rappresentatele in forma 

\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}  $\Rightarrow$  \smalltextsf{B}   oppure


\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ \smalltextsf{A$_{n}$}    $\wedge$ $\neg$\smalltextsf{B} $\Rightarrow$  \smalltextsf{False}   oppure


\smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n-1}$} $\wedge$ $\neg$\smalltextsf{B}  $\Rightarrow$  $\neg$\smalltextsf{A}   

(c) portatele nella forma \smalltextsf{A$_1$} $\wedge$ \ldots $\wedge$ \smalltextsf{A$_{n}$}  $\Rightarrow$  \smalltextsf{B} , ed infine (d) scrivete la dipendenza funzionale corrispondente.
\begin{enumerate}
\item  Lo stesso docente non pu\`o essere in due aule contemporaneamente.

\begin{enumerate}
\item forma (2)  (impossibilità),
\item \smalltextsf{Aula$_{\neq}$}  $\wedge$ \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$} $\wedge$ \smalltextsf{Docente$_{=}$} 
$\Rightarrow$  \smalltextsf{False}
 

\item  \smalltextsf{Giorno$_{=}$} $\wedge$ \smalltextsf{Ora$_{=}$} $\wedge$ \smalltextsf{Docente$_{=}$} $\Rightarrow$  \smalltextsf{Aula$_{=}$} 

\item \smalltextsf{Giorno, Ora, Docente} $\rightarrow$  \smalltextsf{Aula} 
 
\end{enumerate}

\item	In una tabella \smalltextsf{Esami(Voto, Materia, Matricola)}, se in due esami c'\`e la stessa \smalltextsf{Matricola}  ma il voto \`e diverso, allora anche la \smalltextsf{Materia} \`e diversa.

\begin{enumerate}
\item forma (3)  (implicazione contrapposta),

\item  \smalltextsf{Matricola$_{=}$} $\wedge$ \smalltextsf{Voto$_{\neq}$} $\Rightarrow$  
 \smalltextsf{Materia$_{\neq}$} 
 
 \item  \smalltextsf{Matricola$_{=}$} $\wedge$ \smalltextsf{Materia $_{=}$} $\Rightarrow$  
 \smalltextsf{Voto $_{=}$} 

\item \smalltextsf{Matricola, Materia} $\rightarrow$  \smalltextsf{Voto} 
\end{enumerate}

 
\item 	In una tabella \smalltextsf{Esami(Voto, Materia, Matricola)}, non posso trovare due esami diversi che hanno la stessa \smalltextsf{Materia} e \smalltextsf{Matricola}.
 
 \begin{enumerate}
\item forma (2)  (impossibilità),
\item  \smalltextsf{Matricola$_{=}$} $\wedge$ \smalltextsf{Materia$_{=}$} $\wedge$ \smalltextsf{Voto$_{\neq}$} $\Rightarrow$   \smalltextsf{False} 
 
 \item  \smalltextsf{Matricola$_{=}$} $\wedge$ \smalltextsf{Materia $_{=}$} $\Rightarrow$  
 \smalltextsf{Voto $_{=}$} 

\item \smalltextsf{Matricola, Materia} $\rightarrow$  \smalltextsf{Voto} 
\end{enumerate}


\end{enumerate}


       \end{document}
  %%%%%%%%%%%
  
\newpage
 \begin{enumerate}
 \item Due spettacoli contemporanei hanno il regista diverso
 
\smalltextsf{Spettacolo$_{\neq}$} $\wedge$ \smalltextsf{Data$_=$}  $\Rightarrow$  \smalltextsf{Regista$_{\neq}$} 

\smalltextsf{Regista$_=$} $\wedge$ \smalltextsf{Data$_=$}  $\Rightarrow$  \smalltextsf{Spettacolo$_=$} 

\smalltextsf{Regista, Data}   $\rightarrow$  \smalltextsf{Compagnia, Titolo, Teatro} 
 
 \newpage
  \item Non \`e possibile avere due spettacoli diversi nella stessa data e nello stesso teatro
  
 \smalltextsf{Spettacolo$_{\neq}$} $\wedge$ \smalltextsf{Data$_=$} $\wedge$  \smalltextsf{Teatro$_=$}  $\Rightarrow$  \smalltextsf{False} 

\smalltextsf{Data$_=$} $\wedge$ \smalltextsf{Teatro$_=$}  $\Rightarrow$  \smalltextsf{Spettacolo$_=$} 

\smalltextsf{Data, Teatro}   $\rightarrow$  \smalltextsf{Compagnia, Regista, Titolo} 

 
 \item Se due spettacoli hanno il regista diverso anche le compagnie sono diverse
 
  \smalltextsf{Regista$_{\neq}$}  $\Rightarrow$  \smalltextsf{Compagnia$_{\neq}$}

\smalltextsf{Compagnia$_=$} $\Rightarrow$  \smalltextsf{Regista$_=$} 

\smalltextsf{Compagnia}   $\rightarrow$  \smalltextsf{Regista} 
 
  \end{enumerate}

 
  
  
       \end{document}
       
       
       
       
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
