<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FireTeam &#187; Programmazione</title>
	<atom:link href="http://www.fireteam.it/category/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fireteam.it</link>
	<description>#fuoco@AzzurraNet</description>
	<lastBuildDate>Tue, 16 Mar 2010 15:55:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Metodo dei Tableaux Analitici in Prolog</title>
		<link>http://www.fireteam.it/2010/03/metodo-dei-tableaux-analitici-in-prolog/</link>
		<comments>http://www.fireteam.it/2010/03/metodo-dei-tableaux-analitici-in-prolog/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 22:45:54 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[tableaux]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=748</guid>
		<description><![CDATA[


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Implementazione, nel linguaggio prolog, del metodo dei Tableaux Analitici studiato nel corso di Logica.
Nel sistema sono stati definiti i seguenti operatori:
:- op(650, xfy, sse).
:- op(640, xfy, implies).
:- op(630, yfx, or).
:- op(620, yfx, and).
:- op(610, fy, not).
Il primo parametro del predicato [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if !mso]><br />
<mce :style>< !<br />
v\:* {behavior:url(#default#VML);}<br />
o\:* {behavior:url(#default#VML);}<br />
w\:* {behavior:url(#default#VML);}<br />
.shape {behavior:url(#default#VML);}<br />
--></p>
<p><!--[endif]--></p>
<p class="Section1">
<p class="MsoNormal" style="text-align:right" align="right"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="mso-ansi-language:EN-US" lang="EN-US"> </span></p>
<p><span style="font-size:36.0pt;mso-bidi-font-size:28.0pt"> </span></p>
<p class="Section1">
<p class="MsoNormal" style="text-align:justify">Implementazione, nel linguaggio prolog, del metodo dei Tableaux Analitici studiato nel corso di Logica.</p>
<p class="MsoNormal" style="text-align:justify">Nel sistema sono stati definiti i seguenti operatori:</p>
<pre class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:10.0pt; mso-bidi-font-size:11.0pt;font-family:">:- op(650, xfy, sse).
:- op(640, xfy, implies).
:- op(630, yfx, or).
:- op(620, yfx, and).
:- op(610, fy, not).</span></pre>
<p class="MsoNormal" style="text-align:justify">Il primo parametro del predicato <em style="mso-bidi-font-style:normal">op/3</em> rappresenta la priorità dell’operatore definito; nel nostro caso l’operatore con maggior priorità è il not, seguito in ordine da and, or, implies, sse.<br />
Questi operatori rappresentano i connettivi logici come rappresentato in tabella:
</p>
<p class="MsoNormal" style="text-align:justify"><span id="more-748"></span></p>
<div>
<table class="MsoNormalTable" style="border: medium none; width: 7cm; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0" width="265">
<tbody>
<tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes">
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><strong style="mso-bidi-font-weight:normal">Connettivo</strong></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><strong style="mso-bidi-font-weight:normal">Operatore</strong></p>
</td>
</tr>
<tr style="mso-yfti-irow:1">
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">~<br />
</span></span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center">not</p>
</td>
</tr>
<tr style="mso-yfti-irow:2">
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">^<br />
</span></span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center">and</p>
</td>
</tr>
<tr style="mso-yfti-irow:3">
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">?<br />
</span></span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center">or</p>
</td>
</tr>
<tr style="mso-yfti-irow:4">
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">-&gt;<br />
</span></span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center">implies</p>
</td>
</tr>
<tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes">
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">&lt;-&gt;<br />
</span></span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 244.3pt;" width="326" valign="top">
<p class="MsoNormal" style="text-align:center" align="center">sse</p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal" style="text-align:center" align="center">
<p class="MsoNormal" style="text-align:justify">Per i quantificatori utilizziamo invece due predicati (<span style="font-size:10.0pt;mso-bidi-font-size:11.0pt; font-family:">forall(x,fbf)</span> e <span style="font-size:10.0pt;mso-bidi-font-size: 11.0pt;font-family:">exists(x,fbf)</span>), entrambi hanno bisogno di due parametri: il primo è la variabile da quantificare ed il secondo è la formula ben formata quantificata. I simboli di variabile presenti nelle formule<br />
ben formate passate in input sono in minuscolo in modo da distinguerli dalle variabili Prolog. Il sistema presentato elabora fbf (formule ben formate) della logica del primo ordine chiuse e pure.<br />
Prima di iniziare a sviluppare il tableau per la formula data in input, è interrogato il predicato <em style="mso-bidi-font-style:normal">fbf_chiusa/1</em>:
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
X and Y ) :- !, fbf_chiusa(X),fbf_chiusa(Y).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
X or Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
X implies Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
X sse Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
forall(X,Y) ) :- atomic(X),instantiate(Y,X,-1,Y1),!, fbf_chiusa(Y1).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
exists(X,Y) ) :- atomic(X), instantiate(Y,X,-1,Y1),!,fbf_chiusa(Y1).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
not X ) :- ! ,fbf_chiusa(X).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">fbf_chiusa(<br />
X ) :- atomo_ground(X).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">%instantiate(Y,X,N,Y1)<br />
:- Y1 è la formula Y dove ogni occorrenza di X è sostituita con N</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">%atomo_ground(X)<br />
:- X è un atomo ground.</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Questo predicato è vero se il suo argomento è una formula ben formata chiusa. In particolare il controllo <em style="mso-bidi-font-style:normal">atomo_ground(X)</em> è fatto verificando che X sia un atomo, e che tutti i suoi termini siano degli interi (istanziamo le variabili sul dominio dei numeri interi).</p>
<p class="MsoNormal" style="text-align:justify">
<h1>Descrizione implementazione</h1>
<p class="MsoNormal">Cominciamo la descrizione dell’implementazione presentando i predicati ausiliari. Innanzitutto abbiamo i predicati che ci permettono di identificare il tipo di formula:</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_alpha(_<br />
and _).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_alpha(_<br />
sse _).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_alpha(not<br />
(_ or _)).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_alpha(not<br />
(_ implies _)).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_beta(_ or<br />
_).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_beta(_<br />
implies _).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_beta(not<br />
(_ and _)).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_beta(not<br />
(_ sse _)).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_delta(exists(<br />
_ , _ )).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_delta(not<br />
forall( _ , _ )).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_fresh_gamma(forall(<br />
X , Y ), forall( X , Y , 0)).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_fresh_gamma(not<br />
exists( X , Y ), not exists( X , Y , 0)).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_gamma(forall(<br />
_ , _ , _ )).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">is_gamma(not<br />
exists( _ , _ , _ )).</span>
</p>
<p class="MsoNormal">
<p class="MsoNormal">Altri predicati sono <em style="mso-bidi-font-style:normal">atomo/1</em> e <em style="mso-bidi-font-style:normal">atomo_ground/1</em> :</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">atomo_ground(X)<br />
:- compound( X ), X =.. [_|Terms], lista_interi(Terms).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">lista_interi([]).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">lista_interi([Termine<br />
| Terms]) :- integer(Termine), lista_interi(Terms).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">atomo(X) :-<br />
compound( X ), X =.. Parametri, parametri_validi(Parametri).</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">parametri_validi([]).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">parametri_validi([Parametro<br />
| Tail]) :- atomic(Parametro),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== not,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== and,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== or,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== implies,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== sse,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>Parametro \== forall,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>Parametro<br />
\== exists,</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>parametri_validi(Tail).</span>
</p>
<p class="MsoNormal">
<p class="MsoNormal">Questi predicati sono utilizzati da <em style="mso-bidi-font-style: normal">fbf_chiusa/1</em> (già presentata nel precedente paragrafo) e da <em style="mso-bidi-font-style:normal">istantiate/4</em> riportato di seguito:</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
X and Y , Var , Par , X1 and Y1) :- !,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1),</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1).</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
X or Y , Var , Par , X1 or Y1) :- !,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1),</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1).</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
X implies Y , Var , Par , X1 implies Y1) :- !,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1),</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
X sse Y , Var , Par , X1 sse Y1) :- !,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1),</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
forall(X,Y),Var,Par,forall(X,Y1)) :- X \== Var,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>!,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1).</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
forall(X,Y),Var,_,forall(X,Y)) :- X == Var, !. </span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
exists(X,Y),Var,Par,exists(X,Y1)) :- X \== Var,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>!,</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>instantiate(Y,Var,Par,Y1).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
exists(X,Y),Var,_,exists(X,Y)) :- X == Var,!.</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
not X,Var,Par, not X1 ) :-!, instantiate(X,Var,Par,X1).</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">instantiate(<br />
X,Var,Par,X1 ) :- atomo(X), !, substitute_occurrences(X,Var,Par,X1).</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">substitute_occurrences(X,Var,Par,X1):-<br />
X =.. [Pred|Terms], substitute(Terms,Var,Par,Terms1),X1=.. [Pred|Terms1].</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">substitute([],_,_,[]).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">substitute([Term<br />
| Tail],Var,Par,[Term1 | Tail1]) :- Term == Var,Term1 = Par,!,<br />
substitute(Tail,Var,Par,Tail1).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">substitute([Term<br />
| Tail],Var,Par,[Term1 | Tail1]) :- Term \== Var,Term1 = Term,!,<br />
substitute(Tail,Var,Par,Tail1).</span>
</p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">Il predicato istantiate(X, V, P,<br />
X1) è vero quando X1 è la formula ottenuta sostituendo nella formula X tutte le<br />
occorrenze della variabile V con il parametro P.
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Passiamo ora allo sviluppo dell’albero di fbf costituente il tableau.</p>
<p class="MsoNormal" style="text-align:justify">Il cuore del calcolo è nel predicato <em style="mso-bidi-font-style:normal">tclose(Fbf, Limite)</em> che è vero se il tableau sviluppato per la formula Fbf chiude istanziando massimo “<em style="mso-bidi-font-style:normal">Limite</em>” parametri. <em style="mso-bidi-font-style: normal">Fbf</em><span style="mso-spacerun:yes"> </span>deve essere una formula ben formata chiusa:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">tclose(Fbf,Limite)<br />
:- fbf_chiusa(Fbf), closed_branch([Fbf],[],[],[],[],[],Limite,0,[]).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Ogni ramo del tableau è descritto dai termini di closed_branch/9:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch(Fbfs,As,Ds,Bs,Gs,Ls,Limite,Params,Elaborate)</span></p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">in particolare:</p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Fbfs: lista delle formule in attesa di essere<br />
inserite in uno stack sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">As: stack delle formule di tipo alfa sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Ds: stack delle formule di tipo delta sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Bs: stack delle formule di tipo beta sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Gs: stack delle formule di tipo gamma sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Ls: stack di letterali sul ramo</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Limite: massimo numero di parametri da utilizzare</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Params: parametri introdotti (rappresentati dagli<br />
interi da 1 a Params)</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l0 level1 lfo3;      tab-stops:list 36.0pt">Elaborate: lista delle formule già elaborate (utile<br />
per stampare il ramo)</li>
</ul>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Il tableau è sviluppato elaborando le formule in base alla priorità: prima le formule alfa, poi le delta,<span style="mso-spacerun:yes"> </span>le beta, ed infine le gamma. Per memorizzare le formule del ramo ancora da elaborare sono utilizzati quattro stack (As, Ds, Bs,Gs).</p>
<h3>Elaborazione formule alfa</h3>
<p class="MsoNormal" style="text-align:justify">La formula da elaborare è presa in testa allo stack<span style="mso-spacerun:yes"> </span>“As”<span style="mso-spacerun:yes"> </span>delle formule alfa. Successivamente vengono introdotte due nuove formule Alpha1 ed Alpha2<span style="mso-spacerun:yes"> </span>tali che il predicato <span style="font-size:11.0pt;mso-bidi-font-size: 12.0pt;font-family:">regola_alpha(Formula,Alpha1,Alpha2)</span> risulta vero. Tali formule sono poi inserite nello stack delle formule da elaborare. Di seguito è riportato il codice necessario:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%alpha</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([Formula|As],Ds,Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:- </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>regola_alpha(Formula,Alpha1,Alpha2),</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Alpha1,Alpha2],As,Ds,Bs,Gs,Ls,Limite,Params,[Formula|Elaborate]).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_alpha(<br />
A and B, A, B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_alpha(<br />
not ( A implies B ), A, not B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_alpha(<br />
not ( A or B ), not A, not B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_alpha(<br />
A sse B, A implies B, B implies A).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">La formula elaborata viene inserita nella lista <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt; font-family:">Elaborate</span>.</p>
<p class="MsoNormal" style="text-align:justify">
<h3>Elaborazione formule delta</h3>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">La formula da elaborare è presa in testa allo stack <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt; font-family:">“Ds”</span>delle formule delta ed a partire da essa viene introdotta una nuova formula Delta1 che soddisfa il<span style="mso-spacerun:yes"> </span>predicato<span style="mso-spacerun:yes"> </span><span style="font-size:11.0pt;mso-bidi-font-size: 12.0pt;font-family:">regola_delta(Formula,Delta1,Limite,Params)</span>. Questa formula è poi inserita nello stack delle formule da elaborare. Di seguito è riportato il codice necessario:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%delta<br />
</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([],[Formula|Ds],Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>Params &lt; Limite, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_delta(Formula,Delta1,Limite,Params), </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params1 is Params + 1, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Delta1],[],Ds,Bs,Gs,Ls,<br />
Limite,Params1,[Formula|Elaborate]). </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%delta<br />
</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([],[Formula|Ds],Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params &gt;= Limite, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([],[],Ds,Bs,Gs,Ls, Limite,Params,[Formula|Elaborate]). </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_delta(exists(X,Fbf),Fbf1,_,N):-<br />
N1 is N+1, instantiate( Fbf , X , N1 , Fbf1).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_delta(not<br />
forall(X,Fbf),not Fbf1,_,N):- N1 is N+1, instantiate( Fbf , X , N1 , Fbf1).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">La formula elaborata viene inserita nella lista <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt; font-family:">Elaborate</span>.</p>
<p class="MsoNormal" style="text-align:justify">
<h3>Elaborazione formule beta</h3>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">La formula da elaborare è presa in testa allo stack “Bs” delle formule beta e sono introdotte due nuove formule Beta1 e Beta2 che soddisfano il predicato <span style="font-size:11.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_beta(Formula,Beta1,Beta2). </span>Queste formule prodotte sono inserite nello stack delle formule da elaborare, ma in questo caso vi sono due chiamate ricorsive al predicato poichè una formula di tipo beta prevede una biforcazione del ramo.</p>
<p class="MsoNormal" style="text-align:justify">Di seguito è riportato il codice necessario:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%beta<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([],[],[Formula|Bs],Gs,Ls,Limite,Params,Elaborate)<br />
:- </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_beta(Formula,Beta1,Beta2),</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Beta1],[],[],Bs,Gs,Ls,<br />
Limite,Params,[Formula|Elaborate]),</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>closed_branch([Beta2],[],[],Bs,Gs,Ls,<br />
Limite,Params,[Formula|Elaborate]).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_beta(<br />
A or B, A, B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_beta(<br />
A implies B, not A, B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_beta(<br />
not ( A and B ), not A, not B ).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_beta(<br />
not ( A sse B ), not ( A implies B ), not ( B implies A ) ).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">La formula elaborata viene inserita nella lista <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt; font-family:">Elaborate</span>.</p>
<p class="MsoNormal" style="text-align:justify">
<h3>Elaborazione formule gamma</h3>
<p class="MsoNormal" style="text-align:justify">Le formule di tipo gamma sono date in input nella forma:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family:">forall(x,fbf)</span><span style="mso-spacerun:yes"> </span>oppure<span style="mso-spacerun:yes"><br />
</span><span style="font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family: ">not exists(x,fbf)</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Per semplificare la gestione di queste formule sono introdotte nuove formule ad esse equivalenti attraverso il predicato <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family: ">is_fresh_gamma/2</span>:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">is_fresh_gamma(forall(<br />
X , Y ), forall( X , Y , 0)).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">is_fresh_gamma(not<br />
exists( X , Y ), not exists( X , Y , 0)).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Queste nuove formule hanno la forma:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:center" align="center"><span style="font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family:">forall(x,fbf,n)</span><span style="mso-spacerun:yes"> </span>oppure<span style="mso-spacerun:yes"><br />
</span><span style="font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family: ">not exists(x,fbf,n)</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">dove <span style="font-family: ">n</span> è un intero che porta traccia dei parametri per i quali già è stata istanziata la formula fbf. Ogni volta si istanzia la formula, cambiamo il valore di <span style="font-family:">n</span> in questo modo:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">incrementa(forall(X,<br />
Fbf, _), forall(X, Fbf, Params), Params).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">incrementa(not<br />
exists(X, Fbf, _), not exists(X, Fbf, Params), Params).</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">La formula gamma da elaborare è presa in testa allo stack <span style="font-size:11.0pt;mso-bidi-font-size: 12.0pt;font-family:">“Gs”</span>delle formule gamma. A partire da questa formula vengono introdotte una<span style="mso-spacerun:yes"> </span>lista Gammas di nuove formule. Tali formule, introdotte attraverso il predicato <span style="font-size:11.0pt;mso-bidi-font-size:12.0pt; font-family:">regola_gamma(Formula,Gammas,Limite,Params,Params1), </span>rappresentano<span style="mso-spacerun:yes"> </span>tutte le instanziazioni della formula quantificata con i parametri<span style="mso-spacerun:yes"> </span>da <span style="font-family:">n</span> fino a <span style="font-family: ">Params1</span>.<span style="font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify">Queste formule prodotte sono inserite nello stack delle formule da elaborare.</p>
<p class="MsoNormal" style="text-align:justify">Di seguito è riportato il codice necessario:</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%gamma<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([],[],[],[Formula|Gs],Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>is_gamma(Formula), </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params &lt; Limite, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>regola_gamma(Formula,Gammas,Limite,Params,Params1),<br />
</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>incrementa(Formula, Formula1,<br />
Params1), </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>append(Gs, [Formula1], Gs2), </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>closed_branch(Gammas,<br />
[],[],[],Gs2,Ls, Limite,Params1,[Formula|Elaborate]).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>%gamma<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([],[],[],[Formula|Gs],Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>is_gamma(Formula), </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params &gt;= Limite, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Formula,Gammas,Limite,Params,Params1),</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>closed_branch(Gammas,<br />
[],[],[],Gs,Ls, Limite,Params1,[Formula|Elaborate]).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma(forall(X,<br />
Fbf, N), Gammas, Limite, Params, Params1) :- </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Gammas, X, Fbf, N, N, Limite, Params, Params1). </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma(not<br />
exists(X, Fbf, N), Gammas, Limite, Params, Params1) :- </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Gammas, X, not Fbf, N, N, Limite, Params, Params1). </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%<br />
la regola gamma introduce parametri nuovi</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma([],<br />
_, _, N, _, Limite, Params, _) :- N == Params, N<span style="mso-spacerun:yes"> </span>&gt;= Limite,!.</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma([Fbf1],<br />
X, Fbf, N, _, Limite, Params, Params1) :- N == Params,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params &lt;<br />
Limite,</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Params1 is Params<br />
+ 1, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>instantiate( Fbf<br />
, X , Params1 , Fbf1).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">%<br />
la regola gamma non introduce parametri nuovi<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma([Fbf1<br />
| Gammas], X, Fbf, N, Next, _, Params, Params1) :- N &lt; Params, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Next &lt; Params,<br />
</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>Next1 is Next+1, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>instantiate( Fbf<br />
, X , Next1 , Fbf1), </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>regola_gamma(Gammas,<br />
X, Fbf, N, Next1, _, Params, Params1).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">regola_gamma([],<br />
_, _, N, Next, _, Params, Params) :- N &lt; Params , Next == Params.</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Notiamo che se la formula è stata già istanziata sul ramo su tutti i parametri permessi dal limite, essa non sarà ulteriormente istanziata.</p>
<h3>Inserimento delle formule negli stack</h3>
<p class="MsoNormal" style="text-align:justify">Quando il predicato closed_branch ha arietà 9, allora il primo termine è la lista delle fbf in attesa di essere inserite nello stack adatto (<em style="mso-bidi-font-style:normal">push/11</em>).</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([Fbf|_],As,Ds,Bs,Gs,Ls,_,_,Elaborate)<br />
:-</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>chiude(Fbf,As,Ds,Bs,Gs,Ls),</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>stampa_ramo([Fbf],As,Ds,Bs,Gs,Ls,Elaborate,&#8217;CHIUSO&#8217;).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([Fbf|Fbfs],As,Ds,Bs,Gs,Ls,Limite,Params,Elaborate):-<br />
</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>\+ chiude(Fbf,As,Ds,Bs,Gs,Ls),</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>push_formula(Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1),</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch(Fbfs,As1,Ds1,Bs1,Gs1,Ls1,Limite,Params,Elaborate).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(not<br />
not Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1) :-</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>!,</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>push_formula(Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,[Fbf<br />
| As],Ds,Bs,Gs,Ls) :- is_alpha(Fbf), !. </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,[Fbf<br />
| Ds],Bs,Gs,Ls) :- is_delta(Fbf), !. </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,[Fbf<br />
| Bs],Gs,Ls) :- is_beta(Fbf), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,[Fbf1<br />
| Gs],Ls) :- is_fresh_gamma(Fbf, Fbf1), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,[Fbf<br />
| Gs],Ls) :- is_gamma(Fbf), !. </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,Gs,[Fbf<br />
| Ls]) :- atomo(Fbf), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">push_formula(not<br />
Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,Gs,[not Fbf | Ls]) :- atomo(Fbf), !. </span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">In questo punto è fatto il controllo di chiusura del ramo: un ramo è chiuso se contiene una coppia di fbf<span style="mso-spacerun:yes"> </span>complementari(<em style="mso-bidi-font-style: normal">chiude/6</em>). Resta invece aperto quando non ci sono più formule da sviluppare.</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">closed_branch([],[],[],[],[],Ls,_,_,Elaborate)<br />
:- !,</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>stampa_ramo([],[],[],[],[],Ls,Elaborate,&#8217;APERTO&#8217;).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">closed_branch([Fbf|_],As,Ds,Bs,Gs,Ls,_,_,Elaborate)<br />
:- chiude(Fbf,As,Ds,Bs,Gs,Ls), </span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"><span style="mso-spacerun:yes"><br />
</span>stampa_ramo([Fbf],As,Ds,Bs,Gs,Ls,Elaborate,&#8217;CHIUSO&#8217;).</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(not<br />
Fbf,_,_,Bs,_,_) :- is_alpha(Fbf), member(Fbf, Bs), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(not<br />
Fbf,_,_,_,Gs,_) :- is_delta(Fbf), member(Fbf, Gs), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(not<br />
Fbf,As,_,_,_,_) :- is_beta(Fbf), member(Fbf, As), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(not<br />
Fbf,_,Ds,_,_,_) :- is_gamma(Fbf), member(Fbf, Ds), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(not<br />
Fbf,_,_,_,_,Ls) :- atomo_ground(Fbf), member(Fbf, Ls), !.</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(Fbf,_,_,Bs,_,_)<br />
:- is_alpha(Fbf), member(not Fbf, Bs), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(Fbf,_,_,_,Gs,_)<br />
:- is_delta(Fbf), member(not Fbf, Gs), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(Fbf,As,_,_,_,_)<br />
:- is_beta(Fbf), member(not Fbf, As), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(Fbf,_,Ds,_,_,_)<br />
:- is_gamma(Fbf), member(not Fbf, Ds), !.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9.0pt; mso-bidi-font-size:12.0pt;font-family:">chiude(Fbf,_,_,_,_,Ls)<br />
:- atomo_ground(Fbf), member(not Fbf, Ls), !.</span>
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Quando è terminata l’elaborazione di un ramo lo si stampa a video con <em style="mso-bidi-font-style:normal">stampa_ramo/8</em>.</p>
<p class="MsoNormal">
<h1>Output</h1>
<p class="MsoNormal" style="text-align:justify">Per ogni ramo del tableau sviluppato, è stampata a video la lista delle formule contenute in quel ramo. Il predicato è <em style="mso-bidi-font-style:normal">stampa_ramo/8</em>:</p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoNormal" style="text-align:justify;mso-list:l2 level1 lfo4;      tab-stops:list 36.0pt">il primo termine Fbf contiene la lista contenente<br />
la fbf con la quale viene chiuso quel ramo (se il ramo è aperto questo<br />
parametro è una lista vuota)</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l2 level1 lfo4;      tab-stops:list 36.0pt">l’ultimo termine Tipo è una stringa che può essere:
<ul style="margin-top:0cm" type="circle">
<li class="MsoNormal" style="text-align:justify;mso-list:l2 level2 lfo4;       tab-stops:list 72.0pt">APERTO: se il ramo è aperto</li>
<li class="MsoNormal" style="text-align:justify;mso-list:l2 level2 lfo4;       tab-stops:list 72.0pt">CHIUSO: se il ramo è chiuso</li>
</ul>
</li>
</ul>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">stampa_ramo(Fbf,As,Ds,Bs,Gs,Ls,Elaborate,Tipo)<br />
:-</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>write(&#8217;===========[RAMO '),<br />
write(Tipo), write(']===========&#8217;), nl,</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Elaborate),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(As),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Ds),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Bs),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>stampa_formule(Gs),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Ls),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_ultima_formula(Fbf),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>nl,</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>write(&#8217;===================================&#8217;), nl, nl.</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">stampa_formule(<br />
[] ).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">stampa_formule(<br />
[Formula | Formulas] ) :-</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>stampa_formule(Formulas),</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"><span style="mso-spacerun:yes"> </span>write(Formula),<br />
nl.</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">stampa_ultima_formula([]).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">stampa_ultima_formula([Fbf])<br />
:- write(Fbf), write(&#8217; XXX&#8217;).</span>
</p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">Esempi di output a video sono riportati negli esempi d’uso.</p>
<h1>Esempi d’uso</h1>
<p class="MsoNormal">In questa sezione sono riportati degli esempi d’uso: il primo con una formula valida (tableau con un unico ramo), il secondo con una formula soddisfacibile ma non valida e infine un esempio con una formula valida<br />
con un tableau con più rami.
</p>
<p class="MsoNormal">Tutte le prove sono state fatte con un limite sul numero di parametri introducibili pari a 10, quindi quando si parlerà di soddisfacibilità  in relazione alla presenza di rami aperti del tableau si intenderà sempre relativamente a un dominio con cardinalità uguale al numero di parametri introducibili.</p>
<p class="MsoNormal">
<h2>Esempio formula valida</h2>
<p>Per prima cosa bisogna caricare il codice nell’interprete prolog (swi-prolog), e poi chiedere all’interprete:</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">?- prova(not<br />
exists(y,forall(x,(f(y) implies f(x))))).</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">===========[RAMO<br />
CHIUSO]===========</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
forall(x, f(y)implies f(x)), 0)</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(x,<br />
f(1)implies f(x))</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not<br />
(f(1)implies f(2))</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
forall(x, f(y)implies f(x)), 1)</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(x,<br />
f(2)implies f(x))</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not<br />
(f(2)implies f(3))</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
forall(x, f(y)implies f(x)), 2)</span>
</p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">f(1)</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">not f(2)</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">f(2) XXX</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">===================================</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">true.</span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;mso-bidi-font-size:12.0pt; font-family:">?- </span></p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">E’ stampato a video un unico ramo<br />
chiuso: questo vuol dire che la formula di partenza <span style="font-family: Symbol;mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol">Ø</span></span><span style="font-family: Symbol;mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol">$</span></span>y<span style="font-family: Symbol;mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol">&#8220;</span></span>x(F(y)<span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">®</span></span>F(x))<br />
è insoddisfacibile, e quindi la sua negata <span style="font-family:Symbol; mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol">$</span></span>y<span style="font-family: Symbol;mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol">&#8220;</span></span>x(F(y)<span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol">®</span></span>F(x))<br />
è valida.
</p>
<p class="MsoNormal">
<h2>Esempio formula soddisfacibile</h2>
<p class="MsoNormal">Verifichiamo la non validità di una formula<span style="font-family:Symbol;mso-ascii-font-family:"><span style="mso-char-type:symbol;mso-symbol-font-family:Symbol"> </span></span>. Con un’analisi semantica si può facilmente vedere che {f(0,1), f(1,0)} è un contro-modello nel dominio {0, 1}. Neghiamo la formula e proviamo a dimostrarla con il metodo dei Tableaux:</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">?- prova(not<br />
(forall(y,exists(x,f(x,y))) implies exists(x,forall(y, f(x,y))))).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===========[RAMO<br />
APERTO]===========</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not<br />
(forall(y, exists(x, f(x, y)))implies exists(x, forall(y, f(x, y))))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
forall(y, f(x, y)), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(y,<br />
f(1, y))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">forall(y,<br />
exists(x, f(x, y)), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 2))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 1))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
forall(y, f(x, y)), 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(y,<br />
f(4, y))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(y,<br />
f(3, y))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not forall(y,<br />
f(2, y))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">forall(y,<br />
exists(x, f(x, y)), 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 7))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 6))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 5))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 3))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
f(x, 4))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">forall(y,<br />
exists(x, f(x, y)), 7)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
forall(y, f(x, y)), 4)</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not f(1, 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">f(3, 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">f(4, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not f(4, 5)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not f(3, 6)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not f(2, 7)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">f(8, 7)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">f(9, 6)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">f(10, 5)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===================================</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">true.</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">?-</span></p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align:justify">Siccome il tableau sviluppato per la formula negata non chiude, allora la formula originale <span style="font-family:Symbol; mso-ascii-font-family:"><span style="mso-char-type: symbol;mso-symbol-font-family:Symbol"> </span></span>non è valida. Per sapere se essa è soddisfacibile o insoddisfacibile<br />
sviluppiamo un altro tableau non negando la formula:
</p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">?-<br />
prova((forall(y,exists(x,f(x,y))) implies exists(x,forall(y, f(x,y))))).</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">===========[RAMO<br />
APERTO]===========</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
exists(x, f(x, y)))implies exists(x, forall(y, f(x, y)))</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
forall(y, exists(x, f(x, y)))</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 0)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 2)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 3)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 4)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 5)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 6)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 7)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 9)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
exists(x, f(x, 1), 10)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(1, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(2, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(3, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(4, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(5, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(6, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(7, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(8, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(9, 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">not<br />
f(10, 1)</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">===================================</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">===========[RAMO<br />
APERTO]===========</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
exists(x, f(x, y)))implies exists(x, forall(y, f(x, y)))</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">exists(x,<br />
forall(y, f(x, y)))</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 0)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 2)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 3)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 4)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 5)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 6)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 7)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 9)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">forall(y,<br />
f(1, y), 10)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
1)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
2)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
3)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
4)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
5)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
6)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
7)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
 <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
9)</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">f(1,<br />
10)</span>
</p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">===================================</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">true.</span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:"> </span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:10.0pt; mso-bidi-font-size:12.0pt;font-family:">?-</span></p>
<p class="MsoNormal" style="text-align:justify">
<p class="MsoNormal" style="text-align:justify">Abbiamo due rami aperti, quindi la formula è soddisfacibile.</p>
<p class="MsoNormal">
<h2>Ultimo esempio d’uso</h2>
<p class="MsoNormal">Vogliamo provare la validità della formula.</p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">?- prova(not<br />
(exists(x, exists(y,r(x,y) or r(y,x)) ) implies exists(x,exists(y,r(x,y))) )).</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===========[RAMO<br />
CHIUSO]===========</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not<br />
(exists(x, exists(y, r(x, y)or r(y, x)))implies exists(x, exists(y, r(x, y))))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
exists(y, r(x, y)or r(y, x)))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(y,<br />
r(1, y)or r(y, 1))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">r(1, 2)or<br />
r(2, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
exists(y, r(x, y)), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(2, y), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(1, y), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(1, y), 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(2, y), 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
exists(y, r(x, y)), 2)</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">r(1, 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not r(2, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not r(2, 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not r(1, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not r(1, 2)<br />
XXX</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===================================</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===========[RAMO<br />
CHIUSO]===========</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not<br />
(exists(x, exists(y, r(x, y)or r(y, x)))implies exists(x, exists(y, r(x, y))))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(x,<br />
exists(y, r(x, y)or r(y, x)))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">exists(y,<br />
r(1, y)or r(y, 1))</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">r(1, 2)or<br />
r(2, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
exists(y, r(x, y)), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(2, y), 0)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(2, y), 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(x,<br />
exists(y, r(x, y)), 2)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not exists(y,<br />
r(1, y), 0)</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">r(2, 1)</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">not r(2, 1)<br />
XXX</span>
</p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">===================================</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">true.</span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:"> </span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:12.0pt; font-family:">?-</span></p>
<p class="MsoNormal">
<p class="MsoNormal">Dall’output dell’elaborazione si vede che il tableau<br />
sviluppato ha due rami chiusi, quindi la formula è valida.</p>
<p><span style="font-size:12.0pt;font-family:"><br style="page-break-before:always" /><br />
</span></p>
<h1>Codice sorgente completo</h1>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt; padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="tab-stops:65.35pt;border:none;mso-border-bottom-alt: solid windowtext 1.5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm">“tableaux.pl”</p>
</div>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Definizione degli operatori logici </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(650, xfy, sse). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(640, xfy, implies). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(630, yfx, or). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(620, yfx, and). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(610, fy, not). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">% Per i<br />
quantificatori usiamo forall(x,fbf) e exists(x,fbf). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">% Le<br />
costanti devono essere dei numeri, e le lettere in minuscolo sono le variabili </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">:-<br />
op(600, xfy, \). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Predicato per verificare il tipo </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>delle formule ben formate </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_alpha(_<br />
and _). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_alpha(_<br />
sse _). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_alpha(not<br />
(_ or _)). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_alpha(not<br />
(_ implies _)). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_beta(_<br />
or _). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_beta(_<br />
implies _). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_beta(not<br />
(_ and _)). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_beta(not<br />
(_ sse _)). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_delta(exists(<br />
_ , _ )). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_delta(not<br />
forall( _ , _ )). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_fresh_gamma(forall(<br />
X , Y ), forall( X , Y , 0)). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_fresh_gamma(not<br />
exists( X , Y ), not exists( X , Y , 0)). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_gamma(forall(<br />
_ , _ , _ )). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">is_gamma(not<br />
exists( _ , _ , _ )). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Controllo formula atomica ground </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">atomo_ground(X)<br />
:- compound( X ), X =.. [_|Terms], lista_interi(Terms). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">lista_interi([]).<br />
</span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">lista_interi([Termine<br />
| Terms]) :- integer(Termine), lista_interi(Terms). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Controllo formula atomica </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">atomo(X)<br />
:- compound( X ), X =.. Parametri, parametri_validi(Parametri). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">parametri_validi([]).<br />
</span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">parametri_validi([Parametro<br />
| Tail]) :- atomic(Parametro), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== not, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== and, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== or, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== implies, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== sse, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== forall, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Parametro \== exists, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>parametri_validi(Tail). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Controllo formula ben formata </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
X and Y ) :- !, fbf_chiusa(X),fbf_chiusa(Y). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
X or Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
X implies Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
X sse Y ) :- !, fbf_chiusa(X), fbf_chiusa(Y). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
forall(X,Y) ) :- atomic(X),instantiate(Y,X,-1,Y1),!, fbf_chiusa(Y1). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
exists(X,Y) ) :- atomic(X), instantiate(Y,X,-1,Y1),!,fbf_chiusa(Y1). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
not X ) :- ! ,fbf_chiusa(X). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">fbf_chiusa(<br />
X ) :- atomo_ground(X).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Instanziazione di fbf quantificate </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
X and Y , Var , Par , X1 and Y1) :- !, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
X or Y , Var , Par , X1 or Y1) :- !, </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>instantiate(X,Var,Par,X1), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
X implies Y , Var , Par , X1 implies Y1) :- !, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>instantiate(Y,Var,Par,Y1). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
X sse Y , Var , Par , X1 sse Y1) :- !, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(X,Var,Par,X1), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
forall(X,Y),Var,Par,forall(X,Y1)) :- X \== Var, </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%le<br />
occorrenze interne della variabile sono bounded nel quantificatore </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
forall(X,Y),Var,_,forall(X,Y)) :- X == Var, !.<span style="mso-spacerun:yes"><br />
</span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
exists(X,Y),Var,Par,exists(X,Y1)) :- X \== Var, </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>instantiate(Y,Var,Par,Y1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%le<br />
occorrenze interne della variabile sono bounded nel quantificatore </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
exists(X,Y),Var,_,exists(X,Y)) :- X == Var,!. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
not X,Var,Par, not X1 ) :-!, instantiate(X,Var,Par,X1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">instantiate(<br />
X,Var,Par,X1 ) :- atomo(X), !, substitute_occurrences(X,Var,Par,X1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute_occurrences(X,Var,Par,X1):-<br />
X =.. [Pred|Terms], substitute(Terms,Var,Par,Terms1),X1=.. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">[Pred|Terms1].<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute([],_,_,[]).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute([Term<br />
| Tail],Var,Par,[Term1 | Tail1]) :- Term == Var,Term1 = Par,!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute(Tail,Var,Par,Tail1).<br />
</span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute([Term<br />
| Tail],Var,Par,[Term1 | Tail1]) :- Term \== Var,Term1 = Term,!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">substitute(Tail,Var,Par,Tail1).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>calcolo del Tableau </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">prova(Fbf)<br />
:- tclose(Fbf, 10). % il numero 10 e&#8217; un valore indicativo </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">tclose(Fbf,<br />
Limite) :- fbf_chiusa(Fbf), closed_branch([Fbf],[],[],[],[],[], Limite, 0, []).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"> </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"> </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"> </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[],[],[],[],Ls,_,_,Elaborate)<br />
:- !, stampa_ramo([],[],[],[],[],Ls,Elaborate,&#8217;APERTO&#8217;).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([Fbf|_],As,Ds,Bs,Gs,Ls,_,_,Elaborate)<br />
:- chiude(Fbf,As,Ds,Bs,Gs,Ls), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>stampa_ramo([Fbf],As,Ds,Bs,Gs,Ls,Elaborate,&#8217;CHIUSO&#8217;). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([Fbf|Fbfs],As,Ds,Bs,Gs,Ls,Limite,Params,Elaborate):-<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>\+<br />
chiude(Fbf,As,Ds,Bs,Gs,Ls), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>push_formula(Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>closed_branch(Fbfs,As1,Ds1,Bs1,Gs1,Ls1,Limite,Params,Elaborate).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],As,Ds,Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:- closed_branch(As,Ds,Bs,Gs,Ls,Limite,Params,Elaborate).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"> </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%alpha </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([Formula|As],Ds,Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_alpha(Formula,Alpha1,Alpha2), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Alpha1,Alpha2],As,Ds,Bs,Gs,Ls,Limite,Params,[Formula|Elaborate]).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%delta </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[Formula|Ds],Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params &lt; Limite, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_delta(Formula,Delta1,Limite,Params), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params1 is Params + 1, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Delta1],[],Ds,Bs,Gs,Ls, Limite,Params1,[Formula|Elaborate]).<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%delta </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[Formula|Ds],Bs,Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params &gt;= Limite, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([],[],Ds,Bs,Gs,Ls, Limite,Params,[Formula|Elaborate]). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"> </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%beta<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[],[Formula|Bs],Gs,Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_beta(Formula,Beta1,Beta2), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>closed_branch([Beta1],[],[],Bs,Gs,Ls,<br />
Limite,Params,[Formula|Elaborate]), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>closed_branch([Beta2],[],[],Bs,Gs,Ls,<br />
Limite,Params,[Formula|Elaborate]). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%gamma<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[],[],[Formula|Gs],Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>is_gamma(Formula), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params &lt; Limite, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Formula,Gammas,Limite,Params,Params1), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>incrementa(Formula, Formula1,<br />
Params1), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>append(Gs, [Formula1], Gs2), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>closed_branch(Gammas,<br />
[],[],[],Gs2,Ls, Limite,Params1,[Formula|Elaborate]).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>%gamma<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">closed_branch([],[],[],[Formula|Gs],Ls,Limite,Params,Elaborate)<br />
:-<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>is_gamma(Formula), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params &gt;= Limite, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Formula,Gammas,Limite,Params,Params1),</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>closed_branch(Gammas,<br />
[],[],[],Gs,Ls, Limite,Params1,[Formula|Elaborate]).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_alpha(<br />
A and B, A, B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_alpha(<br />
not ( A implies B ), A, not B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_alpha(<br />
not ( A or B ), not A, not B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_alpha(<br />
A sse B, A implies B, B implies A). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_beta(<br />
A or B, A, B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_beta(<br />
A implies B, not A, B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_beta(<br />
not ( A and B ), not A, not B ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_beta(<br />
not ( A sse B ), not ( A implies B ), not ( B implies A ) ). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_delta(exists(X,Fbf),Fbf1,_,N):-<br />
N1 is N+1, instantiate( Fbf , X , N1 , Fbf1). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_delta(not<br />
forall(X,Fbf),not Fbf1,_,N):- N1 is N+1, instantiate( Fbf , X , N1 , Fbf1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma(forall(X,<br />
Fbf, N), Gammas, Limite, Params, Params1) :- </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Gammas, X, Fbf, N, N, Limite, Params, Params1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma(not<br />
exists(X, Fbf, N), Gammas, Limite, Params, Params1) :- </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>regola_gamma(Gammas, X, not Fbf,<br />
N, N, Limite, Params, Params1). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">% la<br />
regola gamma introduce parametri nuovi</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma([],<br />
_, _, N, _, Limite, Params, _) :- N == Params, N<span style="mso-spacerun:yes"> </span>&gt;= Limite,!.</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma([Fbf1],<br />
X, Fbf, N, _, Limite, Params, Params1) :- N == Params, Params &lt; Limite,</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Params1 is Params<br />
+ 1, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>instantiate( Fbf<br />
, X , Params1 , Fbf1).<span style="mso-spacerun:yes"><br />
</span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">% la<br />
regola gamma non introduce parametri nuovi<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma([Fbf1<br />
| Gammas], X, Fbf, N, Next, _, Params, Params1) :- N &lt; Params, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>Next &lt; Params,<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>Next1 is Next+1, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>instantiate( Fbf<br />
, X , Next1 , Fbf1), </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>!, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>regola_gamma(Gammas, X, Fbf, N, Next1, _, Params, Params1).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">regola_gamma([],<br />
_, _, N, Next, _, Params, Params) :- N &lt; Params , Next == Params. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>push_formula(not not<br />
Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1) :- !, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As1,Ds1,Bs1,Gs1,Ls1).<br />
</span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,[Fbf<br />
| As],Ds,Bs,Gs,Ls) :- is_alpha(Fbf), !.<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,[Fbf<br />
| Ds],Bs,Gs,Ls) :- is_delta(Fbf), !.<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,[Fbf<br />
| Bs],Gs,Ls) :- is_beta(Fbf), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,[Fbf1<br />
| Gs],Ls) :- is_fresh_gamma(Fbf, Fbf1), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,[Fbf<br />
| Gs],Ls) :- is_gamma(Fbf), !.<span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,Gs,[Fbf<br />
| Ls]) :- atomo(Fbf), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">push_formula(not<br />
Fbf,As,Ds,Bs,Gs,Ls,As,Ds,Bs,Gs,[not Fbf | Ls]) :- atomo(Fbf), !.<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(not<br />
Fbf,_,_,Bs,_,_) :- is_alpha(Fbf), member(Fbf, Bs), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(not<br />
Fbf,_,_,_,Gs,_) :- is_delta(Fbf), member(Fbf, Gs), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(not<br />
Fbf,As,_,_,_,_) :- is_beta(Fbf), member(Fbf, As), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(not<br />
Fbf,_,Ds,_,_,_) :- is_gamma(Fbf), member(Fbf, Ds), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(not<br />
Fbf,_,_,_,_,Ls) :- atomo_ground(Fbf), member(Fbf, Ls), !. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(Fbf,_,_,Bs,_,_)<br />
:- is_alpha(Fbf), member(not Fbf, Bs), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(Fbf,_,_,_,Gs,_)<br />
:- is_delta(Fbf), member(not Fbf, Gs), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(Fbf,As,_,_,_,_)<br />
:- is_beta(Fbf), member(not Fbf, As), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(Fbf,_,Ds,_,_,_)<br />
:- is_gamma(Fbf), member(not Fbf, Ds), !. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">chiude(Fbf,_,_,_,_,Ls)<br />
:- atomo_ground(Fbf), member(not Fbf, Ls), !. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<br />
incrementa(Fbf, Fbf1) :- Fbf1 e&#8217; la formula di tipo gamma Fbf con il campo<br />
contatore N incrementato </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">incrementa(forall(X,<br />
Fbf, _), forall(X, Fbf, Params), Params). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">incrementa(not<br />
exists(X, Fbf, _), not exists(X, Fbf, Params), Params). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Utilita&#8217; </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<br />
maximum(X, Y, Z) :- Z e&#8217; il massimo tra X e Y </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">maximum(X,Y,X)<br />
:- X &gt;= Y. </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">maximum(X,Y,Y)<br />
:- X &lt; Y. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<br />
delete(X, Lista, Lista1) :- Lista1 e&#8217; la lista risultante dalla cancellazione<br />
di X da Lista </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">delete(X,<br />
[X|Rest], Rest). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">delete(X,<br />
[Y | Rest], [Y|Deleted]) :- !, delete(X, Rest, Deleted).<span style="mso-spacerun:yes"> </span></span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">nonmember(_,<br />
[]). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">nonmember(X,<br />
[Y|Ys]):- X \== Y, !, nonmember(X, Ys). </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%<span style="mso-spacerun:yes"> </span>Utilita&#8217; per la stampa </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%<br />
</span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">stampa_ramo(Fbf,As,Ds,Bs,Gs,Ls,Elaborate,Tipo)<br />
:- </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>write(&#8217;===========[RAMO '), write(Tipo),<br />
write(']===========&#8217;), nl, </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Elaborate), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(As), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Ds), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Bs), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Gs), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_formule(Ls), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>stampa_ultima_formula(Fbf), </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span>nl, </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"><br />
</span>write(&#8217;===================================&#8217;), nl, nl. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">stampa_formule(<br />
[] ). </span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">stampa_formule(<br />
[Formula | Formulas] ) :- stampa_formule(Formulas), write(Formula), nl. </span>
</p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:"><span style="mso-spacerun:yes"> </span></span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">stampa_ultima_formula([]).<br />
</span></p>
<p class="MsoNormal" style="tab-stops:65.35pt"><span style="font-size:8.0pt; font-family:">stampa_ultima_formula([Fbf])<br />
:- write(Fbf), write(&#8217; XXX&#8217;).</span><span style="font-size:8.0pt;font-family: "> </span></p>
<p></mce></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2010/03/metodo-dei-tableaux-analitici-in-prolog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Implementazione della funzione di Ackermann</title>
		<link>http://www.fireteam.it/2009/11/implementazione-della-funzione-di-ackermann/</link>
		<comments>http://www.fireteam.it/2009/11/implementazione-della-funzione-di-ackermann/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 15:55:55 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione Java]]></category>
		<category><![CDATA[ackermann]]></category>
		<category><![CDATA[calcolabilità]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=734</guid>
		<description><![CDATA[La funzione di Ackermann è una funzione f(x,y,z) che ha come dominio l&#8217;insieme delle terne di numeri naturali e come codominio i numeri naturali.

Essa è un esempio di funzione ricorsiva che non è primitiva ricorsiva poiché cresce più velocemente di qualsiasi funzione ricorsiva primitiva.
Qui il codice java che implementa questa funzione:

Ackermann.java

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Ackermann &#123;
 
 static long [...]]]></description>
			<content:encoded><![CDATA[<p>La funzione di Ackermann è una funzione f(x,y,z) che ha come dominio l&#8217;insieme delle terne di numeri naturali e come codominio i numeri naturali.</p>
<p style="text-align: center;"><img class="size-full wp-image-736 aligncenter" title="ackermann" src="http://www.fireteam.it/wp-content/uploads/2009/11/ackermann.png" alt="ackermann" width="477" height="87" /></p>
<p>Essa è un esempio di funzione ricorsiva che non è primitiva ricorsiva poiché cresce più velocemente di qualsiasi funzione ricorsiva primitiva.</p>
<p>Qui il codice java che implementa questa funzione:</p>
<p><span id="more-734"></span></p>
<p><span style="text-decoration: underline;">Ackermann.java</span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Ackermann <span style="color: #009900;">&#123;</span>
 
 <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">long</span> count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
 
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">long</span> h<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> m, <span style="color: #000066; font-weight: bold;">long</span> n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  
  count<span style="color: #339933;">++;</span>
  
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>m <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">return</span> n <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>n <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">return</span> h<span style="color: #009900;">&#40;</span>m<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  
  <span style="color: #000000; font-weight: bold;">return</span> h<span style="color: #009900;">&#40;</span>m<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>, h<span style="color: #009900;">&#40;</span>m,n<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">long</span> ack<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">long</span> n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">return</span> h<span style="color: #009900;">&#40;</span>n, n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>args.<span style="color: #006633;">length</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;usage: Ackermann &lt;number&gt;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\t</span>where number is a positive integer&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  
  <span style="color: #000066; font-weight: bold;">long</span> n <span style="color: #339933;">=</span> <span style="color: #003399;">Long</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  
  count <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">long</span> retValue <span style="color: #339933;">=</span> ack<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ack(&quot;</span> <span style="color: #339933;">+</span> n <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;) = &quot;</span> <span style="color: #339933;">+</span> retValue <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; [recursive calls = &quot;</span><span style="color: #339933;">+</span> count <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  
  <span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Il meccanismo di calcolo della funzione è estremamente semplice quanto pesante dal punto di vista computazionale. Questi sono i risultati ottenuti:</p>
<ul>
<li>ack(0) = <strong>1</strong>  [recursive calls = <strong>1</strong>]</li>
<li>ack(1) = <strong>3</strong>  [recursive calls = <strong>4</strong>]</li>
<li>ack(2) = <strong>7</strong>  [recursive calls = <strong>27</strong>]</li>
<li>ack(3) = <strong>61</strong> [recursive calls = <strong>2432</strong>]</li>
</ul>
<p>Non riesco a calcolare ack(4) causa stack overflow (Exception in thread &#8220;main&#8221; java.lang.StackOverflowError).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/11/implementazione-della-funzione-di-ackermann/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Descrivere i media con Mpeg-7</title>
		<link>http://www.fireteam.it/2009/09/descrivere-i-media-con-mpeg-7/</link>
		<comments>http://www.fireteam.it/2009/09/descrivere-i-media-con-mpeg-7/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 12:34:35 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Mpeg-7]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=705</guid>
		<description><![CDATA[La diffusione delle connessioni a banda larga ha agevolato la diffusione di audio e video via web: un esempio eclatante è YouTube! Ma riuscire a trovare un video particolare tra la grossa quantità di dati multimediali sul web è un compito arduo: il valore del dato multimediale dipende da quanto è agevole trovarlo, gestirlo, ed [...]]]></description>
			<content:encoded><![CDATA[<p class="western">La diffusione delle connessioni a banda larga ha agevolato la diffusione di audio e video via web: un esempio eclatante è YouTube! Ma riuscire a trovare un video particolare tra la grossa quantità di dati multimediali sul web è un compito arduo: il valore del dato multimediale dipende da quanto è agevole trovarlo, gestirlo, ed accedere.</p>
<p style="margin-bottom: 0cm">Per gestire questa grossa quantità di dati multimediali, sia da parte degli utenti, sia da parte dei sistemi automatici, ci aiuta Mpeg-7: uno standard nato per codificare i contenuti multimediali attraverso la definizione di metadati sui dati multimediali.</p>
<p style="margin-bottom: 0cm">I precedenti standard Mpeg-1 (1992), Mpeg-2 (1994), e Mpeg-4 (1999) riguardano la codifica del video. Nel 2001 è stato definito Mpeg-7 che non definisce il modo di codificare un video, ma riguarda la sua metataggatura attraverso un linguaggio XML.<br />
Perché 7? Mpeg-7 permette di definire metadati sui video codificati con Mpeg 1, 2, e 4. Siccome 4+2+1=7, nasce il nome Mpeg-7.
</p>
<p style="margin-bottom: 0cm"><span id="more-705"></span></p>
<p style="margin-bottom: 0cm">Notiamo come non è stato nominato Mpeg-3, lo standard per i famosissimi mp3 <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . In realtà questo standard non esiste, ma il nome Mpeg-3 è usato per riferirsi alla parte audio di Mpeg-2.</p>
<h2 class="western">Metadati</h2>
<p style="margin-bottom: 0cm">I metadati associati ad un video permettono di descrivere cosa c&#8217;è nel video. Mpeg-7 permette descrizioni sia a basso livello (caratteristiche del segnale, come il colore di un oggetto), sia ad alto livello (informazioni semantiche, come la scena di un goal in una partita di calcio).<br />
Un esempio di file XML in formato Mpeg-7 contenente la descrizione di un video di una notizia è:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span> <span style="color: #000066;">standalone</span>=<span style="color: #ff0000;">&quot;no&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
 <span style="color: #808080; font-style: italic;">&lt;!--Metadati generati automaticamente dall'applicazione--&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Mpeg7</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:schema:2001&quot;</span> <span style="color: #000066;">xmlns:mpeg7</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:schema:2001&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:schema:2001 Mpeg7-2001.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Description</span> <span style="color: #000066;">xsi:type</span>=<span style="color: #ff0000;">&quot;ContentEntityType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MultimediaContent</span> <span style="color: #000066;">xsi:type</span>=<span style="color: #ff0000;">&quot;VideoType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Video<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaProfile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Content</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;MPEG7ContentCS&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;FileFormat</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:FileFormatCS:2001:3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>mpeg<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/FileFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;FileSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>17333073<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/FileSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;VisualCoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Format</span> <span style="color: #000066;">colorDomain</span>=<span style="color: #ff0000;">&quot;color&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:VisualCodingFormatCS:2001:1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Frame</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;576&quot;</span> <span style="color: #000066;">rate</span>=<span style="color: #ff0000;">&quot;8000&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;720&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/VisualCoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaInstance</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;v20090201_video_15213221&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InstanceIdentifier</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_15213221.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaInstance<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaProfile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;CreationInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Creation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Obama: presto un piano per famiglie Usa per tagliare costi
 mutui<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Abstract<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;FreeTextAnnotation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 Presidente cerca arginare effetti devastante crisi economica
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/FreeTextAnnotation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;StructuredAnnotation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;When<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1 Feb 2009<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/When<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/StructuredAnnotation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Abstract<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Role</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:RoleCS:2001:producer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Red<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Role<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Agent</span> <span style="color: #000066;">xsi:type</span>=<span style="color: #ff0000;">&quot;OrganizationType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Apcom<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Agent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;CreationCoordinates<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Location<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>milano<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Location<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;TimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2009-02-01T15:21:32<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/TimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/CreationCoordinates<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;CopyrightString<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>TMNews<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/CopyrightString<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Creation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Classification<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Genre</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:TVAnytime_v0.1ContentCS:3.14&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>est<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Genre<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaReview<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Rating<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RatingValue<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RatingValue<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RatingScheme</span> <span style="color: #000066;">best</span>=<span style="color: #ff0000;">&quot;5&quot;</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;higherBetter&quot;</span> <span style="color: #000066;">worst</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Overall<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RatingScheme<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Rating<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaReview<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Classification<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_17483840.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_18024720.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_18094945.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_18153193.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090202_video_13033231.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090202_video_13094131.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090202_video_16491593.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090202_video_17042673.mov<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/RelatedMaterial<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/CreationInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;UsageInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Availability</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;onDemand&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InstanceRef</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;MPEG7PublicationTypeCS:4&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Dissemination<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Format</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;MPEG7PublicationTypeCS:4&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Internet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Format<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Location<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Region<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>it<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Region<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Location<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Dissemination<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Availability<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;UsageRecord<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;AvailabilityRef</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;onDemand&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Audience<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Audience<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/UsageRecord<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/UsageInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaTime<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaTimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>T00:00:00<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaTimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaDuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>PT0H0M29S<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaDuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaTime<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Video<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MultimediaContent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MultimediaContent</span> <span style="color: #000066;">xsi:type</span>=<span style="color: #ff0000;">&quot;ImageType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaProfile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Content</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:ContentCS:2001:2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>visual<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Content<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;FileFormat</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:FileFormatCS:2001:3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>JPEG2000<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/FileFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;FileSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>12014<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/FileSize<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;VisualCoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Format</span> <span style="color: #000066;">colorDomain</span>=<span style="color: #ff0000;">&quot;binary&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:VisualCodingFormatCS:2001:1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>JPEG2000<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Format<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Frame</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;288&quot;</span> <span style="color: #000066;">rate</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;360&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/VisualCoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaFormat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaInstance</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;i20090201_video_15213221&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;InstanceIdentifier</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20090201_video_15213221.jpg<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaUri<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaLocator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaInstance<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaProfile<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MediaInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;CreationInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Creation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 Foto
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Role</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;urn:mpeg:mpeg7:cs:RoleCS:AUTHOR&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Red<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Role<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Agent</span> <span style="color: #000066;">xsi:type</span>=<span style="color: #ff0000;">&quot;OrganizationType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>MPEG<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Agent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Creation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/CreationInformation<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/MultimediaContent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Mpeg7<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

</p>
<p style="margin-bottom: 0cm">Mpeg-7 è un linguaggio XML, ossia usa XML per definire i metadati. In realtà un file Mpeg-7 non è altro che un file &#8216;.xml&#8217; associato ad uno o più oggetti multimediali. Quindi è possibile memorizzare i metadati indipendentemente dai video&#8230; ad esempio un possibile uso di Mpeg-7, è la costruzione di un database multimediale!</p>
<h2 class="western">Componenti di Mpeg-7</h2>
<p style="margin-bottom: 0cm">Lo standard Mpeg-7 è composta da quattro elementi fondamentali:</p>
<ul>
<li>
<p style="margin-bottom: 0cm">Description Tools</p>
</li>
<li>
<p style="margin-bottom: 0cm">Descriptor</p>
</li>
<li>
<p style="margin-bottom: 0cm">Description Scheme</p>
</li>
<li>
<p style="margin-bottom: 0cm">DDL – Description Definition<br />
Language</p>
</li>
<li>
<p style="margin-bottom: 0cm">System Tool</p>
</li>
</ul>
<p style="margin-bottom: 0cm">I metadati di un oggetto multimediale saranno descritti usando i &#8216;Description Tools&#8217;.<br />
I &#8216;Description Tools&#8217; a loro volta fanno uso del &#8216;Description Definition Language&#8217; (DDL) che è una estensione di XML Schema proprio per Mpeg-7.<br />
I &#8216;System Tool&#8217; non riguardano la definizione di metadati, ma la loro rappresentazione e trasmissione. Quindi il file XML è prodotto utilizzando solo &#8216;Description Tools&#8217; e &#8216;DDL&#8217;, e poi questo file XML può essere diffuso utilizzando le tecniche dei &#8216;System Tools&#8217;.</p>
<h3 class="western">Description Definition Language (DDL)</h3>
</p>
<p style="margin-bottom: 0cm">Il DDL è basato su XML Schema Language e ne rappresenta una sorta di estensione orientata al multimedia. In particolare XML Schema non è stato progettato per le descrizioni di contenuti audio/video e necessita quindi di tipi di dato per array e matrici, e tipo di dato per gestire il tempo (BasicTimePoint e BasicDuration).</p>
<p style="margin-bottom: 0cm">Ad esempio la definizione di TimeType è:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Definition of Time datatype --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;complexType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TimeType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;sequence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;choice<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TimePoint&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;mpeg7:TimePointType&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;RelTimePoint&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;mpeg7:RelTimePointType&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;RelIncrTimePoint&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;mpeg7:RelIncrTimePointType&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/choice<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;choice</span> <span style="color: #000066;">minOccurs</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Duration&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;mpeg7:durationType&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;element</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;IncrDuration&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;mpeg7:IncrDurationType&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/choice<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/sequence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/complexType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- Definition of TimePoint datatype --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;simpleType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;TimePointType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;restriction</span> <span style="color: #000066;">base</span>=<span style="color: #ff0000;">&quot;mpeg7:basicTimePointType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pattern</span></span>
<span style="color: #009900;"> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;(\-?\d+(\-\d{2}(\-\d{2})?)?)?(T\d{2}(:\d{2}(:\d{2} (:\d+)?)?)?)?(F\d+)?(\-|\+\d{2}:\d{2})?&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/restriction<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/simpleType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!-- Definition of duration datatype --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;simpleType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;durationType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;restriction</span> <span style="color: #000066;">base</span>=<span style="color: #ff0000;">&quot;mpeg7:basicDurationType&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pattern</span></span>
<span style="color: #009900;"> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;\-?P(\d+D)?(T(\d+H)?(\d+M)</span>
<span style="color: #009900;"> ?(\d+S)?(\d+N)?)?( \d+F)?((\-|\+)\d{2}:\d{2}Z)?&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/restriction<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/simpleType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p style="margin-bottom: 0cm">Usando queste definizioni di tipo contenute nella DDL, siamo in grado di descrivere il fatto che un certo filmato rappresenta un evento iniziato il 16 ottobre 2002 alle ore 17:00 in un paese con GTM+1, e dura 10 giorni, con questo codice:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Time<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;TimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2002-10-16T17:00+01:00<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/TimePoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Duration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>P10D<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Duration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Time<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p style="margin-bottom: 0cm">Ovviamente il DDL, oltre ai tipi qui introdotti (TimeType, TimePointType, e durationType), contiene molte altre definizioni che per brevità non tratteremo.</p>
<h3 class="western">Description Tools</h3>
<p style="margin-bottom: 0cm">I Description Tools comprendono &#8216;Descriptor&#8217; e &#8216;Descriptor Schemes&#8217; che preferisco non distinguere e trattarli insieme, raggruppandoli in base alle loro funzionalità:</p>
<ul>
<li>
<p style="margin-bottom: 0cm"><strong>Schema and Basic Elements</strong>:<br />
forniscono tutti i tipi di dato utilizzati nelle descrizioni, e la<br />
loro corrispondenza con i tag utilizzati in Mpeg-7;</p>
</li>
<li>
<p style="margin-bottom: 0cm"><strong>Content Description</strong>:<br />
rappresentazione dell&#8217;informazione audio/video sia a livello<br />
strutturale (basso livello), sia a livello semantico (alto livello);</p>
</li>
<li>
<p style="margin-bottom: 0cm"><strong>Content Management</strong>:<br />
permette di descrivere caratteristiche come creazione, formato, ed<br />
uso del materiale multimediale;</p>
</li>
<li>
<p style="margin-bottom: 0cm"><strong>Content Organization</strong>:<br />
Permette di gestire collezioni di materiale multimediale: si possono<br />
usare questi tool per implementare una base di dati XML di<br />
informazioni su materiale multimediale;</p>
</li>
<li>
<p style="margin-bottom: 0cm"><strong>Navigation and Access</strong>:<br />
aiutano l&#8217;accessibilità al file multimediale;</p>
</li>
<li>
<p style="margin-bottom: 0cm"><strong>User Interaction</strong>:<br />
permettono di memorizzare le preferenze dell&#8217;utente.</p>
</li>
</ul>
<p>Con i Description Tools siamo in grado di produrre due tipi di descrizioni Mpeg-7 valide: le &#8220;Complete Descriptions&#8221; che descrivono interamente un materiale multimediale come un video (l&#8217;esempio di file xml Mpeg-7 di questo articolo corrisponde ad una Complete Description perchè descrive completamente il video), e le &#8220;Descriptions Units&#8221; che non sono descrizioni intere ma dei componenti che possono far parte di una Complete Description.</p>
<h2 class="western">Conclusioni</h2>
<p style="margin-bottom: 0cm">Non si è trattata la parte dei System Tools, inoltre della parte dei Description Tool si è data una semplice descrizione generale. I Description Tool sono la parte più corposa dello standard Mpeg-7, e studiarli tutti può richiedere tempo. Si suggerisce a tal proposito di utilizzare i documenti ufficiali dello standard o l&#8217;utilissima guida di Chiariglione all&#8217;indirizzo http://www.chiariglione.org/mpeg/ .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/descrivere-i-media-con-mpeg-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introduzione alla Tecnologia XML</title>
		<link>http://www.fireteam.it/2009/09/introduzione-alla-tecnologia-xml/</link>
		<comments>http://www.fireteam.it/2009/09/introduzione-alla-tecnologia-xml/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 15:16:49 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Database XML]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/2009/09/introduzione-alla-tecnologia-xml/</guid>
		<description><![CDATA[Il linguaggio XML è diventato uno degli elementi fondamentali per la realizzazione di sistemi informativi, indipendentemente dalla tecnologia usata.
Storia
Il World Wide Web Consortium (W3C), in seguito alla guerra dei browser fu costretto a seguire le individuali estensioni al linguaggio HTML. Dovette scegliere quali caratteristiche standardizzare e quali lasciare fuori dalle specifiche ufficiali dell&#8217;HTML. Fu in [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_700" class="wp-caption alignleft" style="width: 268px"><a href="http://www.fireteam.it/wp-content/uploads/2009/09/xquery.png"><img class="size-full wp-image-700" title="xquery" src="http://www.fireteam.it/wp-content/uploads/2009/09/xquery.png" alt="Relazione tra XQuery ed XPath" width="258" height="169" /></a><p class="wp-caption-text">Relazione tra XQuery ed XPath</p></div>
<p>Il linguaggio XML è diventato uno degli elementi fondamentali per la realizzazione di sistemi informativi, indipendentemente dalla tecnologia usata.</p>
<h2>Storia</h2>
<p>Il World Wide Web Consortium (W3C), in seguito alla guerra dei browser fu costretto a seguire le individuali estensioni al linguaggio HTML. Dovette scegliere quali caratteristiche standardizzare e quali lasciare fuori dalle specifiche ufficiali dell&#8217;HTML. Fu in questo contesto che iniziò a delinearsi la necessità di un linguaggio di markup che desse maggiore libertà nella definizione dei tag, pur rimanendo in uno standard.</p>
<p>Il &#8220;progetto XML&#8221;, che ebbe inizio alla fine degli anni &#8216;80 nell&#8217;ambito della SGML Activity del W3C, suscitò un così forte interesse a tal punto che la W3C creò un gruppo di lavoro, chiamato XML Working Group, composto da esperti mondiali delle tecnologie SGML, ed una commissione, XML Editorial Review Board, deputata alla redazione delle specifiche del progetto.</p>
<p>Nel febbraio del 1998 le specifiche divennero una raccomandazione ufficiale con il nome di Extensible Mark-up Language, versione 1.0. Ben presto ci si accorse che XML non era solo limitato al contesto web, ma era qualcosa di più: uno strumento che permetteva di essere utilizzato nei più diversi contesti, dalla definizione della struttura di documenti, allo scambio delle informazioni tra sistemi diversi, dalla rappresentazione di immagini alla definizione di formati di dati.</p>
<p><span id="more-696"></span></p>
<h2>Il Linguaggio</h2>
<ul>
<li><strong>Definizione XML</strong>: (acronimo di eXtensible Markup Language) è un metalinguaggio di markup, ovvero un linguaggio marcatore che definisce un meccanismo sintattico che consente di estendere o controllare il significato di altri linguaggi marcatori. Costituisce il tentativo di produrre una versione semplificata di SGML che consenta di definire in modo semplice nuovi linguaggi di markup</li>
</ul>
<p>Quindi quello che si fa con XML è definire/progettare dei propri “Linguaggi XML” (cioè un linguaggio basato su XML); ad esempio possiamo scegliere di codificare in XML i risultati di una giornata del campionato di calcio:</p>
<p><!--more--></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;partite</span> <span style="color: #000066;">giornata</span>=”3°”<span style="color: #000000; font-weight: bold;">&gt;</span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;partita</span> <span style="color: #000066;">numero</span>=”1”<span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Napoli<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Juventus<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;risultato<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>3-0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/risultato<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/partita<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;partita</span> <span style="color: #000066;">numero</span>=”2”<span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Roma<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Lazio<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/squadra<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;risultato<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2-2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/risultato<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/partita<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/partite<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Il processo di sviluppo di un linguaggio XML è detto “XMLificazione”: ossia la scelta dei tag (partite, partita, squadra, risultato), degli attributi (giornata, numero), e della loro struttura.</p>
<p>Ci possono essere però altri linguaggi XML che usano i nostri stessi tag, e mischiare più linguaggi XML con nomi dei tag uguali può portare a confusione, per questo possiamo introdurre un namespace per i nostri nomi.</p>
<ul>
<li><strong>Namespace XML</strong>: Un namespace è una collezione di nomi di entità, definite dal programmatore, omogeneamente usate in uno o più file sorgente. Lo scopo dei namespace è quello di evitare confusione ed equivoci nel caso siano necessarie molte entità con nomi simili, fornendo il modo di raggruppare i nomi per categorie.Nel linguaggio XML i namespaces sono definiti esplicitamente.</li>
</ul>
<p>Nel nostro caso la prima riga diventerà:</p>
<p>&lt;partite giornata=”3°” xmlns=”http://www.fireteam.it”&gt;</p>
<p>In questo modo indichiamo che il tag &#8216;partite&#8217; e tutto il suo contenuto appartengono al namespace &#8216;http://www.fireteam.it&#8217; di default.</p>
<p>Fin qui XML sembra la più banale delle tecnologie, eppure ha avuto così tanto successo&#8230; allora perché è così importante?</p>
<h2>La Tecnologia XML</h2>
<p>Il primo motivo è che tutti i file XML sono codificati in UNICODE (i famosi UTF-8 UTF-16, ed UTF-32), e sono stati eliminati in questo modo molto dei fastidi che affligevano i formati testuali.</p>
<p>Il secondo motivo è che con XML si può rappresentare l&#8217;informazione in modo semplice, mantenendo un minimo di struttura; non a caso l&#8217;informazione codificata in XML è detta semistrutturata, che è il compromesso dalla completa strutturazione (come ad esempio la struttura rigida di uno schema di un database relazionale) e l&#8217;assenza di struttura (schema-less, ossia il testo puro).</p>
<p>Il terzo motivo, che ritengo più importante, è che attorno a questo semplice linguaggio di markup sono state definite parecchie tecnologie utili a risparmiare lavoro durante il trattamento dei dati. Queste sono:</p>
<ul>
<li><strong>Xpath</strong>: è un linguaggio parte della famiglia XML che permette di individuare i nodi all&#8217;interno di un documento XML.</li>
</ul>
<ul>
<li><strong>Linguaggi Schema</strong>: un linguaggio di schema è un linguaggio formale per esprimere “schemi”. Uno schema è la definizione formale della sintassi di un linguaggio XML, ovvero una famiglia di documenti XML.
<ul>
<li><strong>DTD</strong>: Il linguaggio DTD è utile a definire schemi DTD per un particolare linguaggio XML. DTD è semplice, con un potere espressivo limitato, non è autoesplicativo poiché non usa una notazione XML (è descritto da una grammatica BNF), e tra i tanti difetti non supporta i namespace in quanto il linguaggio DTD stato definito è stato definito prima dei namespace.</li>
<li><strong>Schema</strong>: è un linguaggio di schema nato per sostituire DTD. E&#8217; più espressivo, è quasi autoesplicativo (è scritto in XML e la sua sintassi è definibile con XML schema stesso, ma non si riescono a catturare tutti gli aspetti sintattici del linguaggio). Inoltre introduce i tipi di dato e permette di crearne nuovi, in modo da riuscire a fare buoni controlli sui contenuti dei file XML.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>XSL</strong>: acronimo di eXtensible Stylesheet Language, è il linguaggio di descrizione dei fogli di stile per i documenti in formato XML. Com&#8217;è noto, lo standard XML prevede che i contenuti di un documento siano separati dalla formattazione della pagina in cui verranno pubblicati.
<ul>
<li><strong>XSLT</strong>: XSL Transformations &#8211; il linguaggio di trasformazione dell&#8217;XML. Fa uso di XPath per accedere alle parti di un documento XML. La trasformazione è fatta da un modulo detto Processore XSLT, come ad esempio quello incluso nei browser.</li>
<li><strong>XSL-FO</strong>: XSL Formatting Objects &#8211; usato per l&#8217;applicazione degli stili e del modo di apparizione a un documento XML.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>XQuery</strong>: abbrevazione per XML Query Language, è un linguaggio di programmazione specificato dal W3C e destinato ad interrogare documenti e basi di dati XML.</li>
</ul>
<p>Qui è d&#8217;obbligo soffermarsi per discutere sull&#8217;utilità di un linguaggio di interrogazione XML. Un&#8217;ambiziosa applicazione di XML ha come scopo la generalizzazione del tradizionale modello delle basi di dati relazionali. Da tempo si sta cercando un&#8217;alternativa ai vecchissimi database relazionali, e si è provato in svariate direzioni&#8230; database gerarchici, database multidimensionali, database ad oggetti, ecc.</p>
<p>XML è un alternativa allettane! Oggi si scrive molto in XML, specialmente sul web dove vi sono pagine XHTML (che sono XML), e l&#8217;idea di avere un database XML perfettamente integrabile con tutti gli altri nostri dati non è affatto male&#8230; il World Wide Web può così diventare una gigantesca base di dati.</p>
<p>XQuery è un linguaggio per interrogare file XML, allo stesso modo in cui SQL interroga base di dati relazionali&#8230; ed è qui che una collezione di file XML è spesso chiamata Database XML.</p>
<p>E come tutti i linguaggi di interrogazione che si rispettano anche per XQuery c&#8217;è un algebra&#8230; XML Query Algebra definita dal W3C. In realtà i lavori sono ancora in progresso e ci sono varie proposte di algebra:</p>
<ul>
<li><strong>Algebra per linguaggi di interrogazione XML</strong>: sono stati proposti svariati linguaggi di interrogazione XML, come XQuery, XML-QL, ed altri; quindi c&#8217;è un interesse crescente verso l&#8217;interrogazione di file XML. Non ancora però è stata definita un&#8217;algebra comune per questi linguaggi. Un algebra formale è un passo obbligato per avere una buona ottimizzazione delle query.
<ul>
<li><strong>TAX</strong>: E&#8217; una proposta di algebra non standard, utilizzata da un motore di database XML chiamato “Timber XML”. TAX sta per “Tree Algebra for XML”, ed è una proposta interessante perché usa un modello di dati dove i documenti XML sono effettivamente visti come alberi, quindi le varie operazioni (Selezione, Proiezione, Prodotto, Set, Raggruppamento, Aggregazione, Renaming, Reordering, Copy-and-Paste, Cancellazione, Inserimento) risultano definite in modo naturale.</li>
<li><strong>XML Query Algebra</strong>: anche chiamata “The Algebra” è la proposta di standardizzazione da parte del W3C. Questa algebra, che sembra assomigliare ad un linguaggio di programmazione dichiarativo, non definisce le operazioni con operatori ad HOC, ma riesce a ricavare le consuete operazioni mediante l&#8217;uso di cicli for, assegnazioni di variabili, costrutti condizionali, ed altro. Inoltre i tipi di dato sono molto importanti, e sono definiti per ogni espressione. Una volta tradotta una query, la sua ottimizzazione sfrutta delle regole di inferenza logica; un metodo del tutto innovativo.</li>
</ul>
</li>
</ul>
<p>E quando queste tecnologie non riescono a soddisfare le nostre richieste, entra in gioco la solita programmazione:</p>
<ul>
<li><strong>Programmazione XML</strong>: Benchè gli strumenti XML (Schema, XSLT, XQuery, XPath, ecc&#8230;) ci permettono di fare molti tipi di elaborazione, spesso c&#8217;è la necessita di manipolare file XML da linguaggi di programmazione di uso generale come ad esempio Java.
<ul>
<li><strong>DOM</strong>: Il Document Object Model (DOM) è una forma di rappresentazione dei documenti strutturati come modello orientato agli oggetti. DOM definisce un API per accedere e manipolare file XML comune a diversi linguaggi.</li>
<li><strong>SAX</strong>: (Simple API for XML) è un&#8217;API per numerosi linguaggi di programmazione che permette di leggere ed elaborare dei documenti XML. Contrariarmente al DOM, il SAX processa i documenti linea per linea. Il flusso di dati XML è unidirezionale, così che dati a cui si è acceduto in precedenza non possono essere riletti senza la rielaborazione dell&#8217;intero documento.</li>
<li><strong>JDOM</strong>: JDom è un API per accedere ed elaborare documenti XMl specifica per il linguaggio di programmaziopne Java, che (rispettando il principio del 80/20) permette di sviluppare con semplicità l&#8217;80% delle applicazione, mentre richiede una soluzione ad HOC per il restante 20%&#8230; cioè JDom sacrifica parte della generalità per dar miglior supporto alle applicazioni più comuni.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>XML Retrieval</strong>: L&#8217;information retrieval (IR) è la disciplina che studia le tecniche utilizzate per il recupero mirato dell’informazione in formato elettronico.</li>
</ul>
<h2>Le Applicazioni XML</h2>
<p>XML è oggi una tecnologia matura ed utilizzata negli ambiti più disparati&#8230; basta provare a salvare un documento di testo scritto con il famosissimo word processor OpenOffice, rinominare questo file .zip, e provare ad estrarre il contenuto: dentro troveremo il nostro documento descritto in XML!!!</p>
<p>Un altro esempio è SVG, lo standard aperto per la grafica vettoriale che punta a sostituire la tecnologia &#8216;flash&#8217; sul web. Un file .svg è interamente scritto in XML, tant&#8217;è vero che si può aprire senza problemi con un qualsiasi editor di testo.</p>
<p>Alcuni linguaggi XML hanno avuto particolare successo come XHTML, CML (Chemical Markup Language), WML (usato nella tecnologia WAP dei cellulari), RSS ed altri&#8230; in particolare Mpeg7:</p>
<ul>
<li><strong>Mpeg-7</strong>: MPEG-7 è uno standard nato per codificare i contenuti multimediali; non è uno standard nato per codificare flussi audio o video come, ad esempio, MPEG-1 MPEG-2 o MPEG-4 ma per definire metadati sui dati multimediali.La codifica utilizza l&#8217;XML per memorizzare dei metadati che utilizzano a loro volta il timecode del filmato permettendo di sincronizzare i flussi multimediali con particolari eventi. Per esempio, permette di sincronizzare un filmato con i suoi sottotitoli o un video con il testo della canzone.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/introduzione-alla-tecnologia-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduzione alle Espressioni Regolari</title>
		<link>http://www.fireteam.it/2009/09/introduzione-alle-espressioni-regolari/</link>
		<comments>http://www.fireteam.it/2009/09/introduzione-alle-espressioni-regolari/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 06:35:43 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sistema]]></category>
		<category><![CDATA[espressioni regolari]]></category>
		<category><![CDATA[regular expression]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/2009/09/introduzione-alle-espressioni-regolari/</guid>
		<description><![CDATA[Le espressioni regolari sono utili per descrivere la validità di valori, come ad esempio valori di attributi, dati caratteri, e qualsiasi tipo di valore esprimibile con un certo alfabeto.
Il concetto di espressione regolare è un formalismo importante utilizzato, in varie forme, in svariate applicazioni&#8230; ad esempio nei linguaggi di schema (come DTD di XML) per [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-685" title="ingranaggi" src="http://www.fireteam.it/wp-content/uploads/2009/09/ingranaggi.png" alt="ingranaggi" width="170" height="270" />Le espressioni regolari sono utili per descrivere la validità di valori, come ad esempio valori di attributi, dati caratteri, e qualsiasi tipo di valore esprimibile con un certo alfabeto.</p>
<p>Il concetto di espressione regolare è un formalismo importante utilizzato, in varie forme, in svariate applicazioni&#8230; ad esempio nei linguaggi di schema (come DTD di XML) per descrivere sequenze di elementi o caratteri. I linguaggi regolari sono utilizzati in molte altre aree dell&#8217;informatica oltre a XML, dall&#8217;elaborazione del testo e del linguaggio naturale alla verifica formale dei componenti hardware.</p>
<p>Potrebbe essere necessario, ad esempio, vincolare un valore &#8216;data&#8217; in modo tale da rispettare il formato dd-mm-yyyy, ovvero sia composto da due cifre per il giorno, seguite da due per il mese e quattro per l&#8217;anno, tutto separato da un segno meno “-”. Alternativamente possiamo specificare che un certo valore deve essere un numero intero.</p>
<p>Chiamiamo Σ un alfabeto consistente in un insieme di atomi, che tipicamente sono caratteri Unicode o nomi di elementi. Un&#8217;espressione regolare su Σ è costruita in base alle seguenti regole:</p>
<p><span id="more-679"></span></p>
<ul>
<li>ogni atomo in Σ, preso da solo, è un espressione regolare;</li>
<li>se a e b sono espressioni regolari, allora lo sono anche le seguenti:
<ul>
<li>
<pre>a?</pre>
</li>
<li>
<pre>a*</pre>
</li>
<li>
<pre>a+</pre>
</li>
<li>
<pre>a b</pre>
</li>
<li>
<pre>a|b</pre>
</li>
<li>
<pre>(a)</pre>
</li>
</ul>
</li>
</ul>
<p>Gli operatori ?, , e + hanno una precedenza superiore alla concatenazione (l&#8217;operatore vuoto o “giustapposizione”), che a sua volta ha una precedenza superiore a |. E&#8217; sempre possibile usare le parentesi per raggruppare sotto-espressioni, superando così le precedenze di default. L&#8217;espressione ab*|c, in cui l&#8217;alfabeto Σ contiene a, b, e c, è interpretata come (a(b*))|c e non a(b*|c).</p>
<p>Una stringa finita di atomi di Σ può corrispondere o meno a una data espressione regolare a:</p>
<ul>
<li>un atomo r appartenente a Σ corrisponde unicamente al singolo atomo r;</li>
<li>a? corrisponde ad a opzionalmente, ovvero a qualsiasi stringa corrisponda ad a più la stringa vuota;</li>
<li>a* corrisponde a zero o più ripetizioni delle stringhe che corrispondono ad a;</li>
<li>a+ corrisponde ad una o più ripetizioni delle stringhe che corrispondono ad a;</li>
<li>a b corrisponde a ciò a cui corrisponde &#8216;a&#8217; seguito da ciò a cui corrisponde b;</li>
<li>a|b corrisponde all&#8217;unione delle corrispondenze di a e b;</li>
<li>(a) ha le stesse corrispondente di a.</li>
</ul>
<p>L&#8217;espressione regolare (a(b*))|c corrisponde così a tutte le stringhe composte da una a seguite da zero o più b, oppure una singola c da sola.</p>
<p>Un linguaggio regolare è un insieme di stringhe che corrispondono a una qualche espressione regolare.</p>
<p>E&#8217; possibile definire un&#8217;espressione regolare d (che sta per digit, cifra) scrivendo:</p>
<pre>0|1|2|3|4|5|6|7|8|9</pre>
<p>laddove l&#8217;alfabeto è composto ad esempio da tutti caratteri Unicode. Possiamo partire da questa definizione per definire un&#8217;altra espressione regolare &#8216;data&#8217; scrivendo dd-dd-dddd. Naturalmente quest&#8217;espressione corrisponde anche a stringhe come 88-26-9995, che non denotano date reali, ma con un po&#8217; più di sforzo è possibile catturare precisamente l&#8217;insieme di stringhe desiderato: in effetti su può usare un linguaggio regolare per gestire correttamente anche gli anni bisestili, ma allora le cose si fanno parecchie complicate!</p>
<p>La seguente espressione regolare descrive gli interi con un alfabeto composto dalle dieci cifre e dal segno meno:</p>
<pre>0|-?(|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*</pre>
<p>Secondo questa definizione, -42, 0, 117 sono accettabili, mentre 000, -0 e 3.14 non lo sono.</p>
<p>Adesso facciamo l&#8217;ultimo esempio, più complicato! In XHTML il contenuto di un elemento table dev&#8217;essere una sequenza che consiste in un elemento opzionale &#8216;caption&#8217; seguito da un certo numero di elementi &#8216;col&#8217; o alternativamente &#8216;colgroup&#8217;, i quali a loro volta sono opzionalmente seguiti da un elemento &#8216;thead&#8217; e uno &#8216;tfoot&#8217;, per concludere almeno un elemento &#8216;tbody&#8217; (o alternativamente &#8216;tr&#8217;). Possiamo scrivere con un&#8217;espressione regolare:</p>
<pre>caption? ( col* | colgroup* ) thead? tfoot? ( tbody+ | tr+ )</pre>
<p>Esistono molte varianti delle espressioni regolari&#8230; ad esempio le regular expression del linguaggio perl: tuttavia la maggior parte di queste varianti si limita ad aggiungere zucchero sintattico alla notazione base che abbiamo appena presentato.</p>
<p>Un&#8217;estensione tipica sono gli intervalli di caratteri: [0-9], ad esempio, è una comoda abbreviazione per indicare le cifre al posto di 0|1|2|3|4|5|6|7|8|9. In modo analogo a{n,m} con n e m numeri interi non negativi, denota da n ad m ripetizioni di a. Un altro esempio sono le espressioni regolari usate nella suit di ufficio OpenOffice.</p>
<div id="attachment_682" class="wp-caption aligncenter" style="width: 857px"><a href="http://www.fireteam.it/wp-content/uploads/2009/09/er.jpg"><img class="size-full wp-image-682" title="EspressioneRegolare" src="http://www.fireteam.it/wp-content/uploads/2009/09/er.jpg" alt="Espressioni Regolari in OpenOffice" width="847" height="320" /></a><p class="wp-caption-text">Espressioni Regolari in OpenOffice</p></div>
<p>Questa è l&#8217;introduzione alle espressioni regolari; per lavorare efficientemente con un vero implementazione di queste espressioni richiede ulteriore studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/introduzione-alle-espressioni-regolari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metodi Iterativi nel Calcolo Scientifico</title>
		<link>http://www.fireteam.it/2009/09/metodi-iterativi-nel-calcolo-scientifico/</link>
		<comments>http://www.fireteam.it/2009/09/metodi-iterativi-nel-calcolo-scientifico/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 06:48:12 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=621</guid>
		<description><![CDATA[INTRODUZIONE
Se applichiamo un metodo diretto a un sistema lineare con matrice dei
coefficienti sparsi, abbiamo che l&#8217;algoritmo esegue operazioni anche su
i valori nulli. Un sistema lineare con matrice dei coefficienti sparsa, si
dice sistema lineare sparso.
Ad esempio se applichiamo Gauss a un sistema sparso, i coefficienti che erano nulli, al
secondo passo diventano coefficienti non nulli: questo e&#8217; [...]]]></description>
			<content:encoded><![CDATA[<h2>INTRODUZIONE</h2>
<p>Se applichiamo un metodo diretto a un sistema lineare con matrice dei<br />
coefficienti sparsi, abbiamo che l&#8217;algoritmo esegue operazioni anche su<br />
i valori nulli. Un sistema lineare con matrice dei coefficienti sparsa, si<br />
dice sistema lineare sparso.<br />
Ad esempio se applichiamo Gauss a un sistema sparso, i coefficienti che erano nulli, al<br />
secondo passo diventano coefficienti non nulli: questo e&#8217; uno spreco<br />
computazionale!</p>
<h2>DEFINIZIONE MATRICE SPARSA</h2>
<p>E&#8217; una matrice a[n,m] in cui ci sono molti elementi uguali a 0. La sparsita&#8217; di una matrice<br />
si misura grazie al &#8220;Grado di sparsita&#8217;&#8221;:</p>
<p>numero coefficienti nulli<br />
SP = &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
numero totale coefficienti</p>
<p>Quando gli elementi nulli sono 0, allora  -&gt; SP = 0 |<br />
|-&gt; Quindi 0 &lt;= SP &lt;= 1<br />
Quando non ci sono elementi nulli, allora -&gt; SP = 1 |</p>
<p><span id="more-621"></span></p>
<p>La matrice e&#8217; molto sparsa quando SP e&#8217; molto vicino a 1.</p>
<h2>METODI ITERATIVI</h2>
<p>Dato un sistema lineare:</p>
<p>/ a*x[1] + b*x[2] = c<br />
|<br />
\ d*x[1] + e*x[2] = f</p>
<p>mettiamo da un membro x[1] e x[2]:</p>
<p>/ x[1] = 1/a * (c &#8211; b*x[2])<br />
|<br />
\ x[2] = 1/e * (f &#8211; d*x[1])</p>
<p>Adesso partiamo da una soluzione a caso x[1]=0 e x[2]=0, e iterando molte<br />
volte i calcoli pian piano si converge alla soluzione.</p>
<h2>JACOBI e GAUSS-SEIDEL</h2>
<p>Jacobi e Gauss-Seidel sono due metodi iterativi che implementano questa idea.<br />
L&#8217;unica differenza tra i due e&#8217; che Jacobi ad ogni iterazione si serve del<br />
vettore delle soluzioni calcolato all&#8217;iterazione precedente, mentre<br />
Gauss-Seidel man mano che calcola i nuovi valori li usa anche nell&#8217;iterazione<br />
corrente.</p>
<h2>SI CONVERGE SEMPRE ALLA SOLUZIONE?</h2>
<p>I metodi di Jacobi e Gauss-Seidel convergono quando dato il sistema Ax=b:<br />
- La norma infinito di A e&#8217;:    ||A|| &lt; 1<br />
Di conseguenza A e&#8217; a diagonale strettamente dominante</p>
<p>Si noti che queste sono solo condizioni sufficienti e non necessari, infatti<br />
ci sono alcuni sistemi dove ||A|| &gt; 1 e i metodi iterativi convergono<br />
lo stesso.</p>
<p>Notiamo che quando piu&#8217; ||A|| si avvicina a 0, tanto piu&#8217; velocemente<br />
converge il metodo iterativo.</p>
<h2>TEOREMA SULLA CONVERGENZA CONSISTENTE</h2>
<p>Se il metodo di Jacobi o Gauss-Seidel converge, allora esso converge alla<br />
soluzione.<br />
Quindi non puo&#8217; essere che converge a qualche altra cosa!!!<br />
Si dice che i metodi di Jacobi o Gauss-Seidel sono consistenti.</p>
<h2>CRITERIO D&#8217;ARRESTO</h2>
<p>Sarebbe bellissimo misurare il criterio d&#8217;arresto con l&#8217;errore relativo o<br />
l&#8217;errore assoluto&#8230; peccato che queste due formule richiedono la conoscenza<br />
della vera soluzione: cosa che noi vorremmo sapere!<br />
Quindi stimiamo l&#8217;errore con l&#8217;iterazione precedente:</p>
<p>Assoluto: | x[k+1] &#8211; x[k] | &lt;= tolleranza<br />
Relativo: | (x[k+1] &#8211; x[k]) / x[k+1] | &lt;= tolleranza</p>
<p>Solo che con questo criterio d&#8217;arresto, se il metodo non converge,<br />
l&#8217;algoritmo non si fermera&#8217; mai&#8230; quindi imponeremo che l&#8217;algoritmo deve<br />
effettuare al massimo un mumero preciso di iterazioni (kmax)</p>
<p>Un algoritmo efficiente utilizza entrambi questi criteri d&#8217;arresto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/metodi-iterativi-nel-calcolo-scientifico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduzione al Calcolo Scientifico</title>
		<link>http://www.fireteam.it/2009/09/introduzione-al-calcolo-scientifico/</link>
		<comments>http://www.fireteam.it/2009/09/introduzione-al-calcolo-scientifico/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 20:41:36 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione C]]></category>
		<category><![CDATA[calcolo scientifico]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=596</guid>
		<description><![CDATA[Caratteristiche fondamentali del software scientifico:
Efficienza, Accuratezza, Affidabilità, Modularità, API standard, Portabilità, Facilità d’uso, Facilità di manutenzione
Problem Solving:
Formulazione del problema P, Descrizione di P mediante un modello matematico:M(P) approssimazione di M(P) mediante metodi numerici Mh(P), Sviluppo dell’algoritmo risolutivo Mh(P),Implementazione in uno specifico ambiente di calcolo
Da che cosa dipende il tempo di esecuzione di un software?
Un’ implementazione [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fireteam.it/wp-content/uploads/2009/09/calcolo-massa-corporea.png"><img class="alignright size-full wp-image-598" title="calcolatrice" src="http://www.fireteam.it/wp-content/uploads/2009/09/calcolo-massa-corporea.png" alt="calcolatrice" width="190" height="208" /></a>Caratteristiche fondamentali del software scientifico:<br />
Efficienza, Accuratezza, Affidabilità, Modularità, API standard, Portabilità, Facilità d’uso, Facilità di manutenzione</p>
<p>Problem Solving:<br />
Formulazione del problema P, Descrizione di P mediante un modello matematico:M(P) approssimazione di M(P) mediante metodi numerici Mh(P), Sviluppo dell’algoritmo risolutivo Mh(P),Implementazione in uno specifico ambiente di calcolo</p>
<h2>Da che cosa dipende il tempo di esecuzione di un software?</h2>
<p>Un’ implementazione efficiente dipende oltre che dal numero di operazioni floating-point anche dagli accessi alla MEMORIA<br />
T1 = Nmem x tmem + N flop x t flop    mem=tempo di accesso alla memoria, flop=tempo operazioni floating point<br />
Nmem &amp; Nflop: dipende dall&#8217;algoritmo; tmem &amp; tflop: dipende dalla tecnologia.</p>
<p><span id="more-596"></span>Ridurre il numero di accessi alla memoria, ridurre il tempo di accesso alla memoria &#8211;&gt; riuso dei dati nei registri<br />
La complessità di tempo dell’algoritmo (Nflop) e la velocità del processore (tflop) sono fisse</p>
<h2>Vantaggi e caratteristiche delle BLAS</h2>
<p>Modularità: sw scritto in termini di building blocks; Chiarezza: codice più breve e più leggibile;<br />
Efficienza: implementazioni ottimizzate da parte dei costruttori di computer; Portabilità: interfacce standard, dipendenza dall’architettura incapsulata in BLAS; Affidabilità, robustezza: gestione accurata di “dettagli” algoritmici e implementativi e di situazioni di errore (es: overflow)</p>
<p>Traffico parassita:<br />
Parametro di valitazione del traffico parassita: q = #accessi alla memoria / #operazioni floating point<br />
SAXPY: y=y+ax  &#8211;&gt; preleva x (n accessi), preleva y (n accessi), preleva a (1 accesso), calcolo = (2n op. fl.p.), riponi y (n accessi)<br />
q = m/f = (3n+1) / (2n)<br />
DOT: a = x(trasposto) * y &#8211;&gt; preleva x (n accessi), preleva y (n accessi), calcolo = (2n op. fl.p.), riponi in a (1 accesso)<br />
q = m/f = (2n+1) / (2n)  &#8211;&gt; quasi 1.<br />
GAXPY: y=y+Mx  &#8211;&gt; preleva y (n accessi), preleva M (n^2 accessi), preleva x (n accessi), calcolo y+Mx = (2n^2 op. fl.p.), riponi y (n accessi)<br />
q = m/f = (3n+n^2) / (2n^2)<br />
Strategia: Suddivisione della matrice in blocchi di dimensione pari alla cache</p>
<h2>Tecnica di LOOP UNROLLING</h2>
<p>Lo “srotolamento” del ciclo consistente nel modificare il controllo del ciclo e nel replicare opportunamente le istruzioni all’interno del ciclo viene detto Tecnica di LOOP UNROLLING<br />
Vantaggi del loop unrolling: Utilizzo ottimale dei processori con architettura pipelined, riduzione dell’overhead del ciclo di iterazione riduzione del numero di trasferimenti fra i vari livelli memoria, aumento delle operazioni concorrenti;L’overhead del programma e il numero di trasferimenti di dati dai livelli più bassi di memoria ai registri, si riducono di un fattore proporzionale alla nuova lunghezza del ciclo (profondità dell’unrolling); Svantaggi del loop unrolling: unrolling;Aumento della memoria destinata al programma; Perdita della generalità del codice</p>
<p>Una matrice si dice simmetrica quando A[i][j] = A[j][i]</p>
<p>Cholesky e matrici simmetriche:<br />
Applicando l&#8217;algoritmo di Gauss senza pivoting ad una matrice simmetrica, abbiamo che le sottomatrici attive sono anch’esse simmetriche. Questo è vero in generale e si dimostra.<br />
Si può sfruttare la simmetria considerando solo un triangolo della matrice.<br />
Se si usa il pivoting parziale si perde la simmetria della matrice.<br />
Quindi, in generale, l&#8217;utilizzo di una tecnica di pivoting nell’algoritmo di Gauss NON CONSENTE di sfruttare, in termini di efficienza computazionale la simmetria della matrice<br />
In quali condizioni si può evitare il pivoting?<br />
- Matrici a diagonale dominante (al generico passo K, le sottomatrici attive sono a diagonale dominante – il pivot starebbe sempre sulla diagonale)<br />
- Matrici simmetriche e definite positive (una matrice è def positiva se det(A)&gt;0) (criterio di Sylvester)<br />
Se una matrice è simmetrica, la fattorizzazione A=LU (senza pivoting) si specializza in A=LDL^T (A=LU, D^-U=LT quindi U=DL^T, A=LDL^T) L=matrice triangolare inferiore(moltiplicatori), D=matrice diagonale(elementi diagonali di U))<br />
Come si specializza la fattorizzazione LDL^T di una matrice simmetrica e definita positiva?<br />
Esiste un’unica matrice L triangolare inferiore tale che: A=LL^T<br />
A=LLT &#8211;&gt; Algoritmo di Cholesky    T(chol)=O((n^3)/6))=Tgauss(n)/2<br />
L’Algoritmo di Cholesky ha una complessità di TEMPO che è la metà di quella dell’Algoritmo di Gauss!!<br />
A è simmetrica allora si memorizza solo una metà degli elementi; L è triangolare allora si memorizzano solo gli elementi non nulli<br />
L’Algoritmo di Cholesky ha una complessità di SPAZIO che è la metà di quella dell’Algoritmo di Gauss!!<br />
Quando è possibile applicare la fattorizzazione LL^T ad una matrice simmetrica e a diagonale dominante? ovvero quando una matrice simmetrica a diagonale dominante è anche definita positiva?<br />
- non singolare (det(A)&gt;0)<br />
- simmetrica<br />
- a diagonale dominante<br />
- ha gli elementi sulla diag non negativi</p>
<p>Matrici TOEPLITZ ottenute l’una da una rotazione dell’altra.</p>
<p>Matrice bidiagonale:<br />
- bidiagonale inferiore se: a(i,j)=0 per j&gt;i e per i&gt;j+1<br />
- bidiagonale superiore se: a(i,j)=0 per i&gt;j e per j&gt;i+1</p>
<p>Matrice tridiagonale: se a(i,j)=0 per |i-j|&gt;1<br />
In una matrice tridiagonale di dim nxn gli elementi che bisogna effettivamente conservare sono quelli delle tre diagonali cioè sono 3n-2.</p>
<p>Matrice a banda: ampiezza di banda inferiore=p, ampiezza di banda superiore=q  se a(i,j)=0 per i&gt;j+p e per j&gt;i+q</p>
<p>Si consideri la seguente matrice a banda 6&#215;6 con p=1 e q=2</p>
<p>a(1,1) a(1,2) a(1,3)<br />
a(2,1) a(2,2) a(2,3) a(2,4)<br />
a(3,2) a(3,3) a(3,4) a(3,5)<br />
a(4,3) a(4,4) a(4,5) a(4,6)<br />
a(5,4)  a(5,5) a(5,6)<br />
a(6,5) a(6,6)</p>
<p>questa matrice viene memorizzata nel seguente modo:</p>
<p>*            *     a(1,3) a(2,4) a(3,5) a(4,6)<br />
*         a(1,2) a(2,3) a(3,4) a(4,5) a(5,6)<br />
a(1,1) a(2,2) a(3,3) a(4,4) a(5,5) a(6,6)<br />
a(2,1) a(3,2) a(4,3) a(5,4) a(6,5)    *<br />
ossia l’elemento a(i,j) è memorizzato nella colonna di posto j e nella riga di posto 3+i-j=q+1+i-j</p>
<p>Fattorizzazione LU senza pivoting di una matrice tridiagonale e risoluzione dei sistemi lineari associati:<br />
si ha che i fattori L ed U di una matrice tridiagonale (che ammette fattorizzazione LU) sono matrici bidiagonali</p>
<p>Fattorizzazione LU di una matrice partizionata a blocchi:<br />
se abbiamo una matrice tridiagonale (w=p+q+1), conduce alle matrici bidiagonali dove<br />
L-&gt; w=p+1=1+1=2; U-&gt; w=q+1=1+1=2<br />
Gli elementi di U e di A appartenenti alla banda superiore coincidono; gli elementi di L da determinare sono L2 e L3; gli elementi di U da determinare sono le matrici diagonali U1, U2, U3</p>
<p>Come si specializzano gli algoritmi di Forward e Back Substitution per matrici a blocchi?<br />
Si risolve Lz=y O(n^2) operazioni poi Ux=z (z è stato ricavato precedentemente)</p>
<h3>ALGORITMO FORWARD:</h3>
<p>for i=1 to n do<br />
y[i]=b[i]-L[i]y[i-1]<br />
endfor<br />
(L[1]y[0]=0)</p>
<h3>ALGORITMO DI BACK</h3>
<p>for i=N to 1 do<br />
U[i]x[i]=y[i]-F[i]y[i+1]<br />
endfor<br />
(F[n]x[n+1]=0)</p>
<h2>FATTORIZZAZIONE LU DI UNA MATRICE A BLOCCHI</h2>
<p>Supponiamo di avere una matrice partizionata in 9=3&#215;3 blocchi<br />
(A11, A12, A13, A21, A22, A23, A31, A32, A33).<br />
Sappiamo che A=LU.<br />
Effettuando il prodotto:<br />
A11=L11 U11     A12=L11 U12                  A13=L11 U13<br />
A21=L21 U11     A22=L21 U12+L22 U22    A23=L21 U13+L22 U23<br />
A31=L31 U11     A32=L31 U12+L32 U22    A33=L31 U13+L32 U23+L33 U33<br />
Da queste uguaglianze si ricavano le espressioni per il calcolo dei blocchi di L e di U<br />
Ricordando l’algoritmo di fattorizzazione LU abbiamo che fissiamo la colonna e la riga e sotto abbiamo la matrice attiva.<br />
<span style="text-decoration: underline;">PASSO1:</span><br />
- fattorizzazione LU del “pannello verticale”<br />
- calcolo un pannello orizzontale di U<br />
- aggiorna la matrice attiva<br />
alla fine del passo 1 abbiamo:<br />
- il primo pannello verticale di L<br />
- il primo pannello orizzontale di U</p>
<p>Nel <span style="text-decoration: underline;">PASSO 2</span> scendiamo di un livello quindi alla fine avremo:<br />
- il secondo pannello verticale di L<br />
- il secondo pannello orizzontale di U</p>
<h2>ALGORITMO LU BLOCK PARTITIONED</h2>
<p>A dcomposta in nxn blocchi di dim nbxnb</p>
<p>For k=1, n step nb do<br />
- applica la fatt LU al pannello A(k:n,k:k+nb-1)<br />
- calcola il pannello U(k:k+nb-1, k+nb:n)<br />
- aggiorna la matrice attiva</p>
<h4>Sistema sparso:</h4>
<p>Un sistema di equazioni lineari si dice “sparso” se ha molti coefficienti nulli; il grado di sparsità è SP=numero di coefficienti nulli / numero totale di coefficienti. In generale in un sistema dove A=nxm e p è il numero di coefficienti non nulli: SP=(n x m) – p / n x m. Dunque 0=&lt;SP&gt;=1, e più SP è prossimo a 1 maggiore è il grado si sparsità della matrice.</p>
<h2>I metodi iterativi:</h2>
<p>Per sistemi con elevato grado di sparsità l’algoritmo di Gauss non è molto efficiente in quanto non solo effettua operazioni su coefficienti nulli ma può anche portarli a essere non nulli. Per tale motivo c’è bisogno di metodi alternativi detti iterativi, che lavorano sui coefficienti non nulli. Per tale motivo è anche possibile implementare opportune tecniche di memorizzazione di matrici sparse per migliorare la complessità di spazio. Una di queste tecniche è quella dei tre vettori – CSR -  R contenente gli elementi non nulli per riga della matrice A, IC contente l’indice di colonna in A degli elementi presenti in R, J contente la posizione in R del primo elemento non nullo per ciascuna riga di A.</p>
<h3>Metodi iterativi: Jacobi</h3>
<p>Procedimento iterativo:a partire da arbitrari valori iniziali delle incognite x1(^0), x2(^0), x3(^0) , esegue una sequenza di iterazioni in ognuna delle quali si calcolano nuovi valori per le incognite utilizzando i valori calcolati nella iterazione precedente. Dunque dato un sistema Ax=b:<br />
ad ogni passo i=1…n   -&gt;   xi(^k+1)=1/aii (bi – sum per j=1 to n con j!=i di (aij  xj(^k) )).<br />
La complessità di tale metodo per il calcolo delle n componenti ad ciascuna iterazione è<br />
Tjac(n)=n(2n-1) operazioni=n^2 operazioni, ma siccome le operazioni vengono effettuate solo sui p coefficienti non nulli (SP=1- p/n^2) allora Tjac(n)= p operazioni= n^2 (1-SP) operazioni</p>
<h3>Metodi iterativi: Gauss-Seidel</h3>
<p>Il procedimento è simile a quella di Jacobi, la differenza sostanziale è che mentre in Jacobi ad ogni iterazione k il nuovo valore delle incognite è calcolato utilizzando unicamente i valori x1(^k-1), x2(^k-1), x3(^k-1) calcolati all’iterata precedente, in Gauss Seidel invece ad ogni passo k nel calcolare una xi(^k) possono essere utilizzati i valori xj(^k), per j&lt;i e xj(^k-1) per j&gt;=i (ossia i valori delle soluzioni del passo precedente k-1). Ad esempio nel calcolare x2(^k) viene utilizzato x1(^k) e x2(^k-1), x3(^k-1). . Dunque dato un sistema Ax=b:<br />
ad ogni passo i=1…n   -&gt;   xi(^k+1)=1/aii (bi – [sum per j=1 to i-1 di (aij  xj(^k+1))] &#8211; [sum per j=i+1 to n di (aij  xj(^k))]). Analogamente a quanto accade per jacobi, Tgs(n)= p operazioni= n^2 (1-SP) operazioni.</p>
<h3>Convergenza e consistenza dei metodi iterativi:</h3>
<p>In generale Gauss-Seidel converge più velocemente alla soluzione rispetto a Jacobi. Tuttavia i metodi iterativi non sempre convergono alla soluzione del sistema.<br />
Un metodo iterativo si dice convergente se la successione generata dal metodo è convergente, qualunque siano i valori iniziali, cioè se lim (k-&gt;inf) di xi(^k)= xi(^*) per ogni i=1…n e per ogni xi(^0) approssimazione iniziale. Se il metodo converge allora esso convergerà alla soluzione; per tale caratteristica i metodi si dicono consistenti, ossia che quando converge esso converge alla soluzione. Un metodo iterativo si dive convergente se ||C||&lt;1, dove ||C|| indica la norma della matrice C nxn dei coefficienti cij del sistema. Inoltre Jacobi converge con certezza anche quando la matrice è a diagonale strettamente dominante. Tali condizioni tuttavia sono solo sufficienti non necessarie in quanto il metodo può convergere anche se queste condizioni non sono soddisfatte.</p>
<h3>Efficienza di un metodo iterativo:</h3>
<p>La complessità totale di un metodo iterativo è: Ttot(n)= k Tit(n); dove k indica il numero di iterazioni eseguite (parametro dipendente dalla velocità di convergenza) e Tit(n) indica la complessità di tempo di 1 iterazione (parametro dipendente dal costo di ciascuna iterazione). Sia per Jacobi che per Gauss Seidel il numero di operazioni effettuate è relativo solo ai coefficienti p non nulli dunque T(n)= p operazioni= n^2 (1-SP) operazioni.</p>
<h3>Velocità di convergenza:</h3>
<p>||C|| oltre a garantire la convergenza serve a determinare la velocità di convergenza dato che  quanto più piccolo è questo valore tanto più velocemente si convergerà alla soluzione ottima.<br />
Indicando con eps(^k)=x(^k)- x(^*) l’errore di troncamento ammissibile alla k-esima iterazione (differenza all’iterata k tra l’approssimazione e la soluzione), dove || eps(^k)||&lt;=||C^k || ||eps(^0)||, è possibili trovare il numero minimo di iterazioni per avere || eps(^k)||&lt;tol (tol=tolleranza desiderata): k=[ ln (tol) – ln (||eps(^0)||) ]/ ln (||C||).<br />
La convergenza del metodo equivale alla convergenza a 0 dell’errore di troncamento alla k-esima iterazione, cioè di di eps(^k).</p>
<h3>Criteri di arresto:</h3>
<p>Il metodo iterativo può essere arrestato o agendo sull’errore assoluto e in tal caso il criterio d’arresto sarà: ||x(^k) – x*||&lt;=tol, dove in generale tol=10(^-m) è l’approssimazione corretta a m cifre decimali; oppure sull’errore relativo ||x(^k) – x*|| / ||x*||&lt;=tol, dove in generale tol=10(^-m) è l’approssimazione corretta a m-1 cifre significative; tuttavia utilizzando questi criteri si presuppone la conoscenza della soluzione x* ottima e quindi la necessità di determinare stime calcolabili dell’errore ad ogni iterazione. Mentre criteri d’arresto effettivamente utilizzabili sono quelli basate su quantità già calcolate e quindi basati o sulla stima dell’errore assoluto ||x(^k+1) – x(^k)||&lt;=tol; o sull’errore relativo ||x(^k) – x(^k-1)|| / ||x(^k-1)||&lt;=tol.<br />
Altro criterio di arresto, aggiuntivo e/o sostitutivo, è quello basato sull’impostazione di un numero massimo Maxit di iterazioni che permette l’arresto anche nel caso in cui il metodo non converge e limita il costo computazionale del procedimento iterativo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/introduzione-al-calcolo-scientifico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tipi di Matrice e i Metodi di Memorizzazione</title>
		<link>http://www.fireteam.it/2009/09/tipi-di-matrici-metodi-memorizzazione/</link>
		<comments>http://www.fireteam.it/2009/09/tipi-di-matrici-metodi-memorizzazione/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 21:05:24 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=602</guid>
		<description><![CDATA[
In questo articolo si illustra i vari tidi di matrice, e i vari tipi di memorizzazione di matrice. Dal modo in cui sono collocati gli elementi all&#8217;interno di una matrice, possiamo distinguere vari tipi
Matrice SINGOLARE
e&#8217; una matrice triangolare (sueriore o inferiore), dove almeno un elemento
a[i,i] della diagonale e&#8217; uguale a 0.
La caratteristica di una matrice [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fireteam.it/wp-content/uploads/2009/09/welcome-to-the-matrix.gif"><img class="alignleft size-medium wp-image-607" title="welcome-to-the-matrix" src="http://www.fireteam.it/wp-content/uploads/2009/09/welcome-to-the-matrix-300x232.gif" alt="welcome-to-the-matrix" width="300" height="232" /></a></p>
<p>In questo articolo si illustra i vari tidi di matrice, e i vari tipi di memorizzazione di matrice. Dal modo in cui sono collocati gli elementi all&#8217;interno di una matrice, possiamo distinguere vari tipi</p>
<h2>Matrice SINGOLARE</h2>
<p>e&#8217; una matrice triangolare (sueriore o inferiore), dove almeno un elemento<br />
a[i,i] della diagonale e&#8217; uguale a 0.<br />
La caratteristica di una matrice triangolare e&#8217; che se fa parte di un<br />
sistema lineare, allora il sistema ammette infinite soluzioni.<br />
Il determinante di una matrice singolare e&#8217; uguale a zero.</p>
<p><span id="more-602"></span></p>
<h2>Matrice A DIAGONALE DOMINANTE</h2>
<p>matrice quadrate appartenente a R[nxn] di dice a diagonale dominante se per<br />
ogni i=1,2,&#8230;,n vale:<br />
n<br />
abs(a[i,i]) &gt;=  sum  abs(a[i,j]) quando i != j<br />
i,j=1<br />
se vale il segno &gt; allora di dice DIAGONALE STRETTAMENTE DOMINANTE</p>
<h2>Matrice DEFINITA POSITIVA</h2>
<p>una matrice quadrata A appartenente a R[nxn], che e&#8217; simmetrice, si dice<br />
definita positiva se per qualsiasi vettore x appartenente a R[n], e x != 0,<br />
risulta:  x(trasposto) * A * x &gt; 0</p>
<h2>Matrice ORTOGONALE</h2>
<p>una matrice Q e&#8217; ortogonale se la sua inversa e&#8217; proprio uguale alla sua<br />
trasposta.<br />
Da Q * Q(inversa) = I  segue che Q * Q(trasosta) = I</p>
<h2>Matrice CIRCOLANTE</h2>
<p>e&#8217; una matrice dove il vettore riga k-esimo e&#8217; ottenuto dal vettore riga<br />
(k-1)-esimo shiftato circolarmente di una posizione verso destra:<br />
Esempio:<br />
1 2 3 4 5<br />
5 1 2 3 4<br />
4 5 1 2 3<br />
3 4 5 1 2<br />
2 3 4 5 1</p>
<h2>Matrici di TOEPLITZ</h2>
<p>Sono uguali alle Matrici CIRCOLANTI, con la caratteristica che non viene<br />
effettuato lo shift circolare, ma ad ogni shift puo&#8217; etrare un nuovo<br />
elemento. Esempio<br />
1 2 3 4 5<br />
9 1 2 3 4<br />
6 9 1 2 3<br />
0 6 9 1 2<br />
1 0 6 9 1<br />
Una matrice di TOEPLITZ puo&#8217; essere immersa in una matrice CIRCOLANTE piu&#8217;<br />
grande in modo da poter usare algoritmi per matrici CIRCOLANTI.</p>
<h2>Matrice SIMMETRICA</h2>
<p>Una matrice si dice simmetrica quando A[i][j] = A[j][i]</p>
<h2>Matrice BIDIAGONALE (superiore o inferiore)</h2>
<p>Bidiagonale inferiore se: a(i,j)=0 per j&gt;i e per i&gt;j+1<br />
Bidiagonale superiore se: a(i,j)=0 per i&gt;j e per j&gt;i+1</p>
<h2>Matrice TRIDIAGONALE</h2>
<p>Matrice tridiagonale: se a(i,j)=0 per |i-j|&gt;1<br />
In una matrice tridiagonale di dim nxn gli elementi che bisogna effettivamente conservare<br />
sono quelli delle tre diagonali cioË sono 3n-2.</p>
<h2>Matrice SPARSA</h2>
<p>E&#8217; una matrice a[n,m] in cui ci sono molti elementi uguali a 0. La sparsita&#8217; di una matrice<br />
si misura grazie al &#8220;Grado di sparsita&#8217;&#8221;:</p>
<p>numero coefficienti nulli<br />
SP = &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
numero totale coefficienti</p>
<p>Quando gli elementi nulli sono 0, allora  -&gt; SP = 0 |<br />
|-&gt; Quindi 0 &lt;= SP &lt;= 1<br />
Quando non ci sono elementi nulli, allora -&gt; SP = 1 |</p>
<p>La matrice e&#8217; molto sparsa quando SP e&#8217; molto vicino a 1.</p>
<h2>Matrice A BANDA</h2>
<p>Ampiezza di banda inferiore=p, ampiezza di banda superiore=q  se a(i,j)=0 per i&gt;j+p e per j&gt;i+q</p>
<h2>CONFRONTO: SIMMETRICA DIAGONALE DOMINANTE E SIMMETRICA DEFINITA POSITIVA</h2>
<p>|-Simmetrica                        |-Simmetrica<br />
se   A = |                         =&gt;    A = |                         ?<br />
|-Diagonale dominante               |-Definita positiva</p>
<p>Ovvero quando una matrice simmetrica a diagonale dominante e&#8217; anche definita<br />
positiva? L&#8217;affermazione e&#8217; vera quando A e&#8217;:<br />
- non singolare (det(A)&gt;0)<br />
- simmetrica<br />
- a diagonale dominante<br />
- ha gli elementi sulla diag non negativi</p>
<h1>Tipi di Memorizzazione per una Matrice</h1>
<p>A secondo del tipo di matrice, possiamo scegliere il metodo di memorizzazione più adatto alle nostre esigenze. Le memorizzazioni sono spesse scelte per ottimizzare lo spazio su disco e i calcoli sulle matrici, come:</p>
<p>1) Prodotto scalare tra due vettori<br />
Da come risultato uno scalare.</p>
<p>2) Prodotto Matrice-Matrice<br />
Basato sul prodotto scalare di sue vettori.<br />
A[nxm] * B[mxp] = C[nxp]</p>
<p>3) Norma 1 di una matrice<br />
Data una matrice facciamo la somma degli elementi riga per riga. La<br />
norma 1 sara&#8217; uguale al massimo, in valore assoluto, di tutte le<br />
somme ottenute.</p>
<p>4) Norma infinito di una matrice<br />
Data una matrice facciamo la somma degli elementi colonna per colonna. La<br />
norma 1 sara&#8217; uguale al massimo, in valore assoluto, di tutte le<br />
somme ottenute.</p>
<p>Qui vi sono alcuni metodi di memorizzazione:</p>
<h2>BAND STORAGE</h2>
<p>Questa memorizzazione e&#8217; utile per memorizzare matrici a banda.<br />
Si consideri la seguente matrice a bandauna matrice 6&#215;6 con p=1 e q=2</p>
<p>a(1,1) a(1,2) a(1,3)<br />
a(2,1) a(2,2) a(2,3) a(2,4)<br />
a(3,2) a(3,3) a(3,4) a(3,5)<br />
a(4,3) a(4,4) a(4,5) a(4,6)<br />
a(5,4) a(5,5) a(5,6)<br />
a(6,5) a(6,6)</p>
<p>questa matrice viene memorizzata nel formato BAND STORAGE nel seguente<br />
modo:</p>
<p>*      *   a(1,3) a(2,4) a(3,5) a(4,6)<br />
*   a(1,2) a(2,3) a(3,4) a(4,5) a(5,6)<br />
a(1,1) a(2,2) a(3,3) a(4,4) a(5,5) a(6,6)<br />
a(2,1) a(3,2) a(4,3) a(5,4) a(6,5)    *</p>
<h2>PACKED STORAGE</h2>
<p>Questa memorizzazione e&#8217; utile per matrici simmetriche oppure triangolari (inferiori o superiori).<br />
Si consideri la seguente matrice triangolare:</p>
<p>a(1,1) a(1,2) a(1,3) a(1,4) a(1,5)<br />
a(2,2) a(2,3) a(2,4) a(2,5)<br />
a(3,3) a(3,4) a(3,5)<br />
a(4,4) a(4,5)<br />
a(5,5)</p>
<p>questa matrice memorizzata in PACKED STORAGE per righe:</p>
<p>a(1,1) a(1,2) a(1,3) a(1,4) a(1,5) a(2,2) a(2,3) a(2,4) a(2,5) a(3,3) a(3,4) a(3,5) a(4,4) a(4,5) a(5,5)</p>
<p>mentre memorizzata in PACKED STORAGE per colonne:</p>
<p>a(1,1) a(1,2) a(2,2) a(1,3) a(2,3) a(3,3) a(1,4) a(2,4) a(3,4) a(4,4) a(1,5) a(2,5) a(3,5) a(4,5) a(5,5)</p>
<h2>MEMORIZZAZIONE CON TRE VETTORI</h2>
<p>Questa memorizzazione e&#8217; utile per matrici sparse.<br />
Dicendo &#8220;nz&#8221; il numero di elementi non nulli dela matrice sparsa A ed n la sua dimensione, si memorizza<br />
la matrice in tre vettori:</p>
<p>R[nz]  = (elementi non nulli riga per riga)<br />
J[nz]  = (indici di colonna degli elementi di R[])<br />
I[n+1] = (posizione in R del primo elemento non nullo di ogni riga di A; L&#8217;ultimo elemento e&#8217; I(n+1)=nz+1)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/tipi-di-matrici-metodi-memorizzazione/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Win32 Api per Tutti!!!</title>
		<link>http://www.fireteam.it/2009/09/win32-api-per-tutti/</link>
		<comments>http://www.fireteam.it/2009/09/win32-api-per-tutti/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 10:26:36 +0000</pubDate>
		<dc:creator>ivan</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[win32]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=590</guid>
		<description><![CDATA[Iniziamo a parlare di cose più serie, oggi creeremo una finestra!
Per creare una finestra, bisogna fare una semplice chiamata alla funzione CreateWindow!

NON E’ TUTTO!
CreateWindow richiede dei parametri!

Il primo rappresenta la “classe di finestra” da creare… Come vedremo, esistono delle classi gia predefinite, come per esempio i pulsanti(button). Questa classe di finestra di solito è connessa [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;"><a href="http://www.fireteam.it/wp-content/uploads/2009/09/api_x_tutti-3_html_42765eee.png"><img class="alignleft size-full wp-image-594" title="api_x_tutti-3_html_42765eee" src="http://www.fireteam.it/wp-content/uploads/2009/09/api_x_tutti-3_html_42765eee.png" alt="api_x_tutti-3_html_42765eee" width="248" height="288" /></a>Iniziamo a parlare di cose più serie, oggi creeremo una finestra!<br />
Per creare una finestra, bisogna fare una semplice chiamata alla funzione</span><span style="font-size: small;"><strong> CreateWindow</strong></span><span style="font-size: small;">!</span></span>
</p>
<p style="margin-bottom: 0cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">NON E’ TUTTO!</span></span></p>
<p style="margin-bottom: 0cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;"><strong>CreateWindow</strong></span><span style="font-size: medium;"> richiede dei parametri!</span></span></p>
<p style="margin-bottom: 0cm" align="justify">
<p style="margin-bottom: 0cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Il primo rappresenta la “</span><span style="font-size: medium;"><strong>classe di finestra</strong></span><span style="font-size: medium;">” da creare… Come vedremo, esistono delle classi gia predefinite, come per esempio i pulsanti(button). Questa classe di finestra di solito è connessa ad una “</span><span style="font-size: medium;"><strong>procedura di finestra</strong></span><span style="font-size: medium;">” chiamata anche “</span><span style="font-size: medium;"><strong>WINDOW</strong></span><span style="font-size: medium;"><strong> PROCEDURE</strong></span><span style="font-size: medium;">”. Questa procedura serve a processare gli eventi che arrivano alla finestra e la vedremo in dettaglio tra poco.</span></span></p>
<p style="margin-bottom: 0cm" align="justify"><span id="more-590"></span></p>
<p style="margin-bottom: 0cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Facciamo quindi una panoramica sull’architettura di Windows..</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;"><strong>Uno sguardo all’architettura di Windows</strong></span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Di<br />
solito cosa potrebbe essere per noi una finestra? Beh semplicemente<br />
potrebbe essere quella che abbiamo in casa nostra <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ma parlando per<br />
una volta seriamente, immaginiamo di avere un contenitore principale!<br />
Di solito contiene un titolo, un icona a fianco, e quei pulsanti di<br />
riduzione e chiusura, e che… possiamo spostare. </span><span style="font-size: medium;"><span lang="en-GB">A<br />
volte contiene anche un menù.. altre volte no.. </span></span><span style="font-size: medium;">Anche<br />
le finestre di dialogo sono finestre.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Le<br />
finestre a sua volta contengono le caselle di testo, I pulsanti…<br />
Anche queste… </span><span style="font-size: medium;"><strong>SONO FINESTRE</strong></span><span style="font-size: medium;">!<br />
Più in dettaglio sono </span><span style="font-size: medium;"><strong>FINESTRE<br />
FIGLIE</strong></span><span style="font-size: medium;"><span style="font-weight: medium">(</span></span><span style="font-size: medium;"><em>Child<br />
Windows</em></span><span style="font-size: medium;">), i comuni controlli che troviamo<br />
nelle applicazioni.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">L’<br />
utente vede queste finestre come oggetti sullo schermo e interagisce<br />
direttamente con loro usando la tastiera o il mouse. La </span><span style="font-size: medium;"><strong>finestra</strong></span><span style="font-size: medium;"><span style="font-weight: medium">(</span></span><span style="font-size: medium;"><em><span style="font-weight: medium">cioè<br />
contenitore e widgets vari</span></em></span><span style="font-size: medium;"><span style="font-weight: medium">)</span></span><span style="font-size: medium;"><br />
riceve l’input dell’utente sotto forma di </span><span style="font-size: medium;"><strong>MESSAGGI</strong></span><span style="font-size: medium;">.<br />
Una </span><span style="font-size: medium;"><span style="text-decoration: underline;">finestra</span></span><span style="font-size: medium;"> può<br />
inviare messaggi anche ad altre </span><span style="font-size: medium;"><span style="text-decoration: underline;">finestre</span></span><span style="font-size: medium;">!<br />
Capire come usarli, è importante per imparare a scrivere<br />
applicazioni Windows.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Facendo<br />
un esempio fesso; come sai, molti programmi a finestre, hanno un<br />
bordo che può essere ridimensionato. Quando cambi la<br />
dimensione della finestra il programma risponde ridimensionando ed<br />
adattando gli elementi al suo interno.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Questo<br />
perché Windows infatti </span><span style="font-size: medium;"><span style="text-decoration: underline;">SA</span></span><span style="font-size: medium;"><br />
di quello che succede, infatti, è lui ad inviare i messaggi<br />
alla finestra indicando il ridimensionato, e il programma a questa<br />
risposta ridimensiona la finestra e adatta il contenuto. (</span><span style="font-size: medium;">Vabbe<br />
vabbe&#8230; Manco io ci ho capito un accidente di questo&#8230; Per ora!</span><span style="font-size: medium;">)<br />
</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">-<br />
Cosa potrebbe significare?</span></span></p>
<p>- 	Come può un sistema<br />
operativo inviare messaggi ad un programma?
</p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Quando<br />
io dico che Windows invia messaggi ad un programma, intendo dire che<br />
Windows chiama una funzione nel programma, una funzione scritta da<br />
te!.. E che è una parte essenziale del programma. I parametri<br />
di questa funzione descrivono un particolare messaggio inviato da<br />
Windows e ricevuto dal tuo programma. Questa funzione è<br />
conosciuta come la </span><span style="font-size: medium;"><strong>WINDOW<br />
PROCEDURE</strong></span><span style="font-size: medium;">(Ascoltatore di finestra, nà<br />
cosa simile).</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">AHHH<br />
Finalmente si capisce una mezza cosa!</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Ad<br />
ogni finestra che un programma può creare, è associata<br />
una <strong>WINDOW PROCEDURE</strong>. Questa funzione puoi scriverla nel tuo<br />
programma o anche in una DLL separata; quindi, per ricapitalore:<br />
Windows invia messaggi alla finestra chiamando la Window Procedure,<br />
la funzione sempre menzionata elabora e processa il messaggio(in base<br />
al tipo di evento farà qualcosa),  infine ritorna il controllo<br />
a Windows!</span></span>
</p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">CAPITO?</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Abbiamo<br />
accennato poco fa che ogni finestra è sempre creata in base ad<br />
una sua </span><span style="font-size: medium;"><strong>classe</strong></span><span style="font-size: medium;">.<br />
Qquesta </span><span style="font-size: medium;"><span style="text-decoration: underline;">classe di finestra</span></span><span style="font-size: medium;"><br />
identifica la sua </span><span style="font-size: medium;"><span style="text-decoration: underline;">WINDOW PROCEDURE</span></span><span style="font-size: medium;"><br />
che processa i messaggi che ci arrivano&#8230; L’uso della classe di<br />
finestra(</span><span style="font-size: medium;"><strong>WINDOW CLASS</strong></span><span style="font-size: medium;">)<br />
permette anche di creare più istanze della stessa finestra che<br />
a sua volta usano la stessa </span><span style="font-size: medium;"><strong>WINDOW PROCEDURE</strong></span><span style="font-size: medium;">!</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">CHE<br />
FIGATA!</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Per<br />
esempio, tutti i pulsanti in tutti i programmi di Windows sono basati<br />
su una classe di finestra(Quei button che clicchiamo, abbiamo detto<br />
che anche loro sono finestre!). Avendo fatto la corrispondenza che ad<br />
una classe di finestra(<span style="text-decoration: underline;">WINDOW CLAS</span>S) corrisponde una <span style="text-decoration: underline;">WINDOW<br />
PROCEDURE</span>, nei bottoni la <span style="text-decoration: underline;">WINDOW PROCEDURE</span> è locata<br />
in una DLL particolare di Windows che processa i messaggi di tutti i<br />
pulsanti.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">Spesso<br />
i messaggi che arrivano alla <em>WINDOW PROCEDURE</em> sono input da<br />
tastiera o da mouse. Per esempio, consideriamo un pulsante e<br />
premiamolo; Windows riconosce che il pulsante è stato ciccato.<br />
Altri messaggi dicono ad una finestra che inizia un ridimensionamento<br />
o quando la finestra deve essere ridisegnata.</span></span></p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; font-weight: medium" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;"><span lang="en-GB"><strong>Quando<br />
un programma Windows inizia la sua esecuzione, Windows crea per lui<br />
una coda di messaggi in cui può immagazzinare i messaggi che<br />
arrivano alla finestra. Di solito un normale programma Windows<br />
include un piccolo pezzo di codice chiamato </strong></span></span><span style="font-size: medium;"><span lang="en-GB"><span style="text-decoration: underline;"><strong>MESSAGE<br />
LOOP</strong></span></span></span><span style="font-size: medium;"><span lang="en-GB"><strong> che<br />
preleva i messaggi dalla coda, li traduce e li invia alla </strong></span></span><span style="font-size: medium;"><span lang="en-GB"><em><strong>WINDOW<br />
PROCEDURE</strong></em></span></span><span style="font-size: medium;"><span lang="en-GB"><strong>…<br />
Altri messaggi sono inviati direttamente alla Window Procedure senza<br />
essere messi nella coda di messaggi. </strong></span></span><span style="font-size: medium;"><span lang="en-GB"><span style="text-decoration: underline;"><strong>Tutto<br />
comincia a prendere forma!</strong></span></span></span></span>
</p>
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm" lang="en-GB" align="justify">
<p style="margin-top: 0.49cm; margin-bottom: 0.49cm; font-weight: medium; text-decoration: none" lang="en-GB" align="justify"><span style="font-family: Comic Sans MS,cursive;"><span style="font-size: medium;">E nella prossima puntata vedrete&#8230;</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/09/win32-api-per-tutti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrogazioni XQuery in Java</title>
		<link>http://www.fireteam.it/2009/08/interrogazioni-xquery-in-java/</link>
		<comments>http://www.fireteam.it/2009/08/interrogazioni-xquery-in-java/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 08:28:25 +0000</pubDate>
		<dc:creator>saverio</dc:creator>
				<category><![CDATA[Programmazione Java]]></category>
		<category><![CDATA[basex]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xquery]]></category>

		<guid isPermaLink="false">http://www.fireteam.it/?p=574</guid>
		<description><![CDATA[XQuery, una abbrevazione per XML Query Language, è un linguaggio di programmazione specificato dal W3C e destinato ad interrogare documenti e basi di dati XML. Questo perché XML si sta proponendo come la tecnologia per rimpiazzare i vecchi DBMS relazionali  
Il w3c ha definito il linguaggio XQuery 1.0; usa la sintassi delle espressioni di [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.fireteam.it/wp-content/uploads/2009/08/xquery.gif"><img class="alignright size-full wp-image-577" title="xquery" src="http://www.fireteam.it/wp-content/uploads/2009/08/xquery.gif" alt="xquery" width="160" height="160" /></a>XQuery, una abbrevazione per XML Query Language, è un linguaggio di programmazione specificato dal W3C e destinato ad interrogare documenti e basi di dati XML. Questo perché XML si sta proponendo come la tecnologia per rimpiazzare i vecchi DBMS relazionali <img src='http://www.fireteam.it/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Il w3c ha definito il linguaggio XQuery 1.0; usa la sintassi delle espressioni di XPath  2.0, con l&#8217;aggiunta delle cosiddette espressioni FLWOR per la formulazione di query complesse. Il risultato è un linguaggio di programmazione funzionale, dichiarativo, con somiglianze con il vecchio SQL.</p>
<p style="text-align: justify;">Per effettuare delle query xquery su un file XML possiamo usare delle librerie come BaseX e Saxon. Purtroppo attualmente Saxon non è un prodotto del tutto gratuito, quindi scegliamo di usare BaseX, un processore Xquery-XPath open source.</p>
<p style="text-align: justify;"><span id="more-574"></span>In realtà BaseX, oltre ad essere utlilizzabile come libreria all&#8217;interno del linguaggio Java, ci mette a disposizione un&#8217;interfaccia grafica dalla quale possiamo effettuare query su file XML ben formati arbitrari.</p>
<h2 style="text-align: justify;">Primo esempio di query</h2>
<p style="text-align: justify;">La prima cosa da fare è inserire i file jar di BaseX nel build path del nostro progetto; la seconda è assicurarsi di avere java 1.6 (non funziona con java 1.5) perché BaseX utilizza il package javax.xml.stream.</p>
<p style="text-align: justify;">Questo è un sempio dove si esegue la query <strong>//li </strong>sul file &#8216;<strong>input</strong>&#8216;:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.xquery.XQConnection</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.xquery.XQDataSource</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.xquery.XQPreparedExpression</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.xml.xquery.XQResultSequence</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> XQueryAPIExample <span style="color: #009900;">&#123;</span>
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** Database Driver. */</span>
 <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> DRIVER <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;org.basex.api.xqj.BXQDataSource&quot;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Gets the XQDataSource for the specified Driver.</span>
 XQDataSource source <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>XQDataSource<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span>DRIVER<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Creates an XQConnection</span>
 XQConnection conn <span style="color: #339933;">=</span> source.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Prepares the Expressionwith the Document and the Query.</span>
 XQPreparedExpression expr <span style="color: #339933;">=</span> conn.<span style="color: #006633;">prepareExpression</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;doc('input')//li&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Executes the XQuery query.</span>
 XQResultSequence result <span style="color: #339933;">=</span> expr.<span style="color: #006633;">executeQuery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Gets all results of the execution.</span>
 <span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #666666; font-style: italic;">// Prints the results to the console.</span>
 <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">getItemAsString</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Questo esempio funziona solo se il file XML interrogato non dichiara nessun namespace.</p>
<h2 style="text-align: justify;">Query in presenza di namespace</h2>
<p style="text-align: justify;">Supponiamo adesso di interrogare un file XML con namespace&#8230; ad esempio un file in formato XML Mpeg-7 che usa i seguenti namespace:<br />
xmlns=&#8221;urn:mpeg:mpeg7:schema:2001&#8243;<br />
xmlns:mpeg7=&#8221;urn:mpeg:mpeg7:schema:2001&#8243;<br />
xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p style="text-align: justify;">Per far riconoscere i namespace dobbiamo dichiararli nel prologo della xquery in questo modo:<br />
declare default element namespace &#8220;urn:mpeg:mpeg7:schema:2001&#8243;<br />
declare  namespace mpeg7 = &#8220;urn:mpeg:mpeg7:schema:2001&#8243;<br />
declare  namespace xsi = &#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;
</p>
<p style="text-align: justify;">Questo è il codice che esegue la query sul file file/video/extract.xml:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> prologoQuery <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">+</span>
 <span style="color: #0000ff;">&quot;declare default element namespace <span style="color: #000099; font-weight: bold;">\&quot;</span>urn:mpeg:mpeg7:schema:2001<span style="color: #000099; font-weight: bold;">\&quot;</span>; &quot;</span> <span style="color: #339933;">+</span>
 <span style="color: #0000ff;">&quot;declare  namespace mpeg7 = <span style="color: #000099; font-weight: bold;">\&quot;</span>urn:mpeg:mpeg7:schema:2001<span style="color: #000099; font-weight: bold;">\&quot;</span>; &quot;</span> <span style="color: #339933;">+</span>
 <span style="color: #0000ff;">&quot;declare  namespace xsi = <span style="color: #000099; font-weight: bold;">\&quot;</span>http://www.w3.org/2001/XMLSchema-instance<span style="color: #000099; font-weight: bold;">\&quot;</span>; &quot;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Gets the XQDataSource for the specified Driver.</span>
 XQDataSource source <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>XQDataSource<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span>DRIVER<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #666666; font-style: italic;">// Creates an XQConnection</span>
 XQConnection conn <span style="color: #339933;">=</span> source.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #666666; font-style: italic;">// Prepares the Expressionwith the Document and the Query.</span>
 <span style="color: #666666; font-style: italic;">//XQPreparedExpression expr = conn.prepareExpression(&quot;&lt;xml&gt;1 + 2 = { 1+2 }&lt;/xml&gt;/text()&quot;);</span>
 <span style="color: #666666; font-style: italic;">//XQPreparedExpression expr = conn.prepareExpression(&quot;doc('file/video/20090201_video_15213221.xml')//meta&quot;);</span>
 XQPreparedExpression expr <span style="color: #339933;">=</span> conn.<span style="color: #006633;">prepareExpression</span><span style="color: #009900;">&#40;</span>prologoQuery <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; doc('file/video/extract.xml')//Name&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;">// Executes the XQuery query.</span>
 XQResultSequence result <span style="color: #339933;">=</span> expr.<span style="color: #006633;">executeQuery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #666666; font-style: italic;">// Gets all results of the execution.</span>
 <span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #666666; font-style: italic;">//element = (org.w3c.dom.Element) result.getObject();</span>
 <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>result.<span style="color: #006633;">getItemAsString</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Nella riga 18 è commentato un altro modo per usare gli oggetti restiuiti dalla query, che ci restituisce il risultato come elementi della struttura DOM del file XML.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fireteam.it/2009/08/interrogazioni-xquery-in-java/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
