<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
Cours : ''Intelligence Artificielle par la Logique''

Responsable du cours : Sławek Staworko 

Materiel :
# Le moteur [[DLV|http://www.dbai.tuwien.ac.at/proj/dlv/]] (version [[en ligne|http://asptut.gibbi.com/]])
Bibliographie :
# Mordechai ~Ben-Ari, //Mathematical Logic for Computer Science//, ~Springer-Verlag, 2001, 2nd edition.
# Chitta Baral, //Knowlege Representation, Reasoning and Declarative Problem Solving//, Cambridge University Press, 2003
# Patrick Blackburn, Johan Bos, Kristina Striegnitz, //Learn Prolog Now//, College Publications, 2006
#* Version française : [[Prolog, Tout De Suite!|http://www.amazon.fr/Prolog-Tout-Suite-Patrick-Blackburn/dp/1904987524/ref=sr_1_1?ie=UTF8&s=books&qid=1284981933&sr=8-1]], College Publications, 2007
TD :
# [[Logique propositionnelle|teaching/ail10/td1.pdf]]
# [[Calcul propositionnel|teaching/ail10/td2.pdf]]
# [[Programmation logique I|teaching/ail10/td3.pdf]] 
# [[Négation par l'échec|teaching/ail10/td4.pdf]]
# [[Logique de premier ordre|teaching/ail10/td5.pdf]]
# [[Calcul des prédicats|teaching/ail10/td6.pdf]]
# [[Programmation logique II|teaching/ail10/td7.pdf]] 
Quiz : 
# [[Logique propositionnelle|teaching/ail10/quiz1.pdf]]
DM : 
# [[Énigme d'Einstein|teaching/ail10/dm1.pdf]]
# [[Soirée trop classe|teaching/ail10/dm2.pdf]]
Cours : ''Intelligence Artificielle par la Logique''

Responsable du cours : Sławek Staworko 


Moodle : 
* [[IA+Logique|http://moodle.univ-lille3.fr/course/view.php?id=1192]] (utilisée pour des rendus et la diffusion d'information, donc il est nécessaire de s'y inscrire). 

Bibliographie :
# Mordechai ~Ben-Ari, //Mathematical Logic for Computer Science//, ~Springer-Verlag, 2001, 2nd edition.
# Chitta Baral, //Knowlege Representation, Reasoning and Declarative Problem Solving//, Cambridge University Press, 2003
# Patrick Blackburn, Johan Bos, Kristina Striegnitz, //Learn Prolog Now//, College Publications, 2006
#* Version française : [[Prolog, Tout De Suite!|http://www.amazon.fr/Prolog-Tout-Suite-Patrick-Blackburn/dp/1904987524/ref=sr_1_1?ie=UTF8&s=books&qid=1284981933&sr=8-1]], College Publications, 2007

Materiel:
# [[Une courte introduction à LaTeX2e|teaching/log11/flshort-3.20.pdf]]
# [[Aide-mémoire LaTeX|teaching/log11/latexsheet.pdf]]

TD :
# [[Introduction rapide à LaTeX|teaching/ail11/td1.pdf]]
DM : 
# [[LaTeX|teaching/ail11/dm1.pdf]]
# [[Logique des propositions|teaching/ail11/td2.pdf]]
Cours: [[Algorithmique Avancée et Complexité|http://www.fil.univ-lille1.fr/portail/index.php?dipl=M1&sem=S7&ue=AAC&choix=pres]] (semestre septembre-févier 2008)

Responsable du cours: [[Sophie Tison|mailto:Sophie.Tison@lifl.fr]] 

Quoi, Quand, et Où: 
*TP, le mercredi 15h45 - 17h15, ~M5-A6
*TD, le jeudi 10h - 12h, ~M5-A12

[img[img/rss-icon.png][http://www.grappa.univ-lille3.fr/~staworko/AaC08.xml]] Le flux RSS a été déactivé après la fin du cours et il n'est plus disponible.   

Quelques matériels:
# Solutions de quelques questions TD 1 ([[pdf|teaching/aac08/rec01.pdf]]). 
# Sources Java et un testeur pour [[Distance d'édition]] sont disponibles. //(la dernière mise à jour le 16 octobre, 2008)//
# [[Big Numbers]] en Java. Analyse de la complexité logarithmique de quelques opérations arithmétiques.
# Implémentation d'[[Exercice 7|teaching/aac08/Bag.cs]] de TD 1 en C#.
# [[Transformée de Fourier Rapide]] implémentée en C# en plusieurs versions. 
# Corrigé de [[DS|http://www.fil.univ-lille1.fr/~tison/AAC/Cours/DScor.pdf]] (Sophie Tison).
# Corrigé d'[[Exercice 4|http://www.fil.univ-lille1.fr/~tison/AAC/td/td3exo4cor.pdf]] de TD 3 (Sophie Tison).
# Corrigé d'[[Exercice 3|http://www.fil.univ-lille1.fr/~tison/AAC/td2008/td6ex3c.pdf]] et [[Exercice 4|http://www.fil.univ-lille1.fr/~tison/AAC/td2008/td6ex4c.pdf]] de TD 6 (~Marie-Emillie Voge et Sophie Tison).

''Dates limites importantes'':
# 22/10/2008 -- devoir maison facultatif: faire x ($0\leq x\leq 3$) exercices parmi les trois derniers de [[TD1|http://www.fil.univ-lille1.fr/~tison/AAC/td2008/td1.pdf]]. (à retourner pendant TD)
# 8:00AM 24/10/2008 -- vos solutions de [[TP1|http://www.fil.univ-lille1.fr/~tison/AAC/td2008/td1.pdf]] (à retourner en utilisant PROF)
# 8:00AM 20/12/2008 -- vos solutions de ~TP2: [[partie 1|http://www.fil.univ-lille1.fr/~tison/AAC/tp2008/TP2-1.pdf]] et [[partie 2|http://www.fil.univ-lille1.fr/~tison/AAC/tp2008/TP2-2.pdf]]. (à retourner en utilisant PROF)
''Education'':
* 2002 to 2007 Ph.D. in Computer Science, University at Buffalo, Buffalo, New York, USA. Dissertation topic: [[Declarative Inconsistency Handling in Relational and Semi-structured Databases|papers/staworko-phd-thesis.pdf]]. Supervisor: [[Jan Chomicki|http://www.cse.buffalo.edu/~chomicki]]
* 1998 to 2002 M.S./B.S. in Computer Science, Wroclaw University, Wroclaw, Poland. Thesis title: Effective Implementation of Priority Queues (in Polish)
* My CV is available [[here|papers/staworko-cv.pdf]]
* A list of my scientific ancestors can be found <<slider genealogy [[Genealogy]] here>>

''Publications'':
* Local copies of (some of) my publications are available [[here|Publications]]
* my [[DBLP page|http://dblp.uni-trier.de/db/indices/a-tree/s/Staworko:Slawomir.html]]


''Ph.D. students'':
* [[Benoît Groz|http://researchers.lille.inria.fr/~groz/documents/welcome.php]]
* [[Grégoire Laurence|http://greglaurence.free.fr/]]


''Calendars'':

* [[Research|webcal://www.me.com/ca/sharesubscribe/1.1083949995/42AEAA79-1CCD-45C3-87FA-4F45C60BACD6.ics]] related activities
* [[Teaching|webcal://www.me.com/ca/sharesubscribe/1.1083949995/A5D8981F-257D-49DE-AE85-3084B0D2BC88.ics]] related activities
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'>
   <span macro='message views.editor.tagPrompt'></span>
   <span macro='tagChooser'></span>
</div>
<!--}}}-->
Your username for signing your edits:
<<option txtUserName>>
<<option chkSaveBackups>> Save backups
<<option chkAutoSave>> Auto-save
<<option chkRegExpSearch>> Regular expressions search
<<option chkCaseSensitiveSearch>> Case sensitive search
<<option chkAnimate>> Enable animations
<<option chkSinglePageMode>> Single page mode
<<option chkFilterPublicTagsSearch>> Filter public tags in search results
<<option chkInsertTabs>> Insert Tab characters
<<option chkUnixFileSystem>> Unix file system

----
Also see AdvancedOptions
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='Author.SideBarOptions'></div>
<div id='sidebarTabs' refresh='macro' force='true' macro='slider chkSideBarTabs Author.SideBarTabs "index »" "display lists of tiddlers"'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<search>><<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel Author.OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<tabs txtMainTab "Main" "Principal index" Index.All "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!LLNST11
{{{
@inproceedings{LLNST11,
  Author = {Laurence, G. and Lemay, A. and Niehren, J. and Staworko, S. and Tommasi, M.},
  Title = {Normalization of Sequential Top-Down Tree-to-Word Transducers},
  Booktitle = {Language and Automata Theory and Applications (LATA)},
  Year = {2011},
  Pages = {352--363},
  Publisher = {Springer LNCS 6638}
}
}}}
!BGTCRS11
{{{
@inproceedings{BGTCRS11,
  Author = {Boneva, I. and Groz, B. and Tison, S. and Caron, A.-C. and Roos, Y. and Staworko, S. },
  Title = {View update translation for {XML}},
  Booktitle = {International Conference on Database Theory (ICDT)},
  Year = {2011},
  Month = {March},
  Pages = {42--53},
  Publisher = {ACM}
}
}}}
!StBoGr10
{{{
@inproceedings{StBoGr10,
  Author = {Staworko, S. and Boneva, I. and Groz, B.},
  Title = {The View Update Problem for {XML}},
  Booktitle = {EDBT Workshops (Updates in XML)},
  Year = {2010},
  Month = {March},
  Publisher = {ACM}
}
}}}

!StChMa09
{{{
@article{StChMa09,
	Author = {Staworko, S. and Chomicki, J. and Marcinkowski, J.},
	Journal = {Annals of Mathematics and Artificial Intelligence},
	Note = {To appear.},
	Title = {Prioritized Repairing and Consistent Query Answering in Relational Databases}
}
}}}
!ChMaSt04b
{{{
@inproceedings{ChMaSt04b,
	Author = {Chomicki, J. and Marcinkowski, J. and Staworko, S.},
	Booktitle = {International Conference on Information and Knowledge Management (CIKM)},
	Month = {November},
	Pages = {417--426},
	Publisher = {ACM Press},
	Title = {Computing Consistent Query Answers Using Conflict Hypergraphs},
	Year = {2004}
}
}}}
!StCh10
{{{
@article{StCh10,
	Author = {Staworko, S. and Chomicki, J.},
	Journal = {Information Systems},
	Number = {1},
	Pages = {1-22},
	Title = {Consistent Query Answers in the Presence of Universal Constraints},
	Volume = {35},
	Year = {2010}
}
}}}
!Staworko07
{{{
@phdthesis{Staworko07,
	Author = {Staworko, S.},
	School = {State University of New York at Buffalo},
	Title = {Declarative Inconsistencies Handling in Relational and Semi-structured Databases},
	Year = {2007}
}
}}}
!ChMaSt04a
{{{
@inproceedings{ChMaSt04a,
	Author = {Chomicki, J. and Marcinkowski, J. and Staworko, S.},
	Booktitle = {International Conference on Extending Database Technology (EDBT)},
	Month = {March},
	Note = {System demo.},
	Pages = {841--844},
	Publisher = {Springer LNCS 2992},
	Title = {Hippo: A System for Computing Consistent Answers to a Class of {SQL} Queries},
	Year = {2004}
}
}}}
!StChMa06
{{{
@inproceedings{StChMa06,
	Author = {Staworko, S. and Chomicki, J. and Marcinkowski, J.},
	Booktitle = {EDBT Workshops (IIDB)},
	Pages = {318--335},
	Publisher = {Springer LNCS 4254},
	Title = {Preference-Driven Querying of Inconsistent Relational Databases},
	Year = {2006}
}
}}}
!StCh05
{{{
@techreport{StCh05,
	Author = {Staworko, S. and Chomicki, J.},
	Institution = {arXiv.org e-Print archive},
	Month = {June},
	Number = {cs.DB/0506063},
	Title = {Priority-Based Conflict Resolution in Inconsistent Relational Databases},
	Type = {Technical Report},
	Year = {2005}
}
}}}
!StFiCh08
{{{
@inproceedings{StFiCh08,
	Author = {Staworko, S. and Filiot, E. and Chomicki, J.},
	Booktitle = {International Workshop on Logic in Databases (LiD)},
	Title = {Querying Regular Sets of {XML} Documents},
	Year = {2008}
}
}}}
!StCh06
{{{
@inproceedings{StCh06,
	Author = {Staworko, S. and Chomicki, J.},
	Booktitle = {EDBT Workshops (dataX)},
	Pages = {164--177},
	Publisher = {Springer LNCS 4254},
	Title = {Validity-Sensitive Querying of {XML} Databases},
	Year = {2006}
}
}}}
!GSCRT09
{{{
@inproceedings{GSCRT09,
	Author = {Groz, B. and Staworko, S. and Caron, A.-C. and Roos, Y. and Tison, S.},
	Booktitle = {International Symposium on Database Programming Languages (DBPL)},
	Month = {August},
	Publisher = {Springer LNCS 5708},
	Title = {{XML} Security Views Revisited},
	Year = {2009}
}
}}}
!SLLN09
{{{
@inproceedings{SLLN09,
   Author = {Staworko, S. and Laurence, G. and Lemay, A. and Niehren, J.}, 
   Booktitle = {International Symposium on Fundamentals of Computation Theory (FCT)},
   Month = {August},
   Pages={310--322},
   Publisher = {Springer LNCS 5699},
   Title = {Equivalence of Deterministic Nested Word to Word Transducers}, 
   Year = {2009}
}
}}}
Je vais présenter une implémentation de quelques simples opérations arithmétiques sur la représentation binaire de nombres entiers. Vous pouvez télécharger le //[[code source|teaching/aac08/BigNumbers.java]]// et expérimenter. 

D'abord nous allons définir la structure qui permettra de stocker la représentation binaire d'un nombre.
{{{
class big
{
    int[] t = new int[100];
    int size = 0; 
}
}}}
La table {{{t}}} sera utilisée pour stocker les bits du nombre et {{{size}}} indiquera //la taille// de ce nombre, i.e. le nombre de cellules (bites) qui sont utilisées. Remarquez qu'ici la taille d'un nombre est différente de la longueur de {{{t}}}. Pour simplicité, nous allons travailler avec des tables d'une longueur fixe en supposant que ça va aller. Ça nous permettra d'éviter beaucoup de détail techniques. Pour avoir une vraie représentation, il faudrait changer dynamiquement la longueur de {{{t}}}.

La façon de représentation d'un nombre avec {{{big}}} est illustrée dans l'exemple suivant.

''Exemple''. Le nombre {{{13 = 1*8 + 1*4 + 0*2 + 1*1}}} est représenté avec {{{ t={1,0,1,1} }}} et le nombre de cellules utilisées est {{{size=4}}}. Plus précisément, {{{t[0]=1, t[1]=0, t[2]=1, t[3]=1}}}. Observez qu'une nouvelle instance de {{{big}}} est initialisée avec le valeur {{{0}}} (i.e. {{{size=0}}}). 

Nous allons utiliser deux constantes {{{ZERO}}} et {{{ONE}}} qui représentent des nombres {{{0}}} et {{{1}}} respectivement. 

Deux grands nombres sont inégal si leur taille est différente ou s'ils sont pas égaux à un des bits. Ça nous donne une simple procédure pour tester l'égalité de deux nombres:
{{{
boolean equal(big a, big b)
{
    if (a.size != b.size) 
        return false;

    for (int i = 0; i < a.size; i++) {
        if (a.t[i] != b.t[i])
            return false;
    }

    return true;
}
}}}
''Complexité'': linéaire, i.e. //O(a.size)//. 

L'addition est effectuée bit par bit. A chaque fois il faut garder le surplus ({{{carry}}}) et l'ajouter à l'opération sur le bit suivant. ''Rappel'': en Java pour deux entiers {{{x}}} et {{{y}}}, la division est effectuée avec {{{x/y}}} et le reste de division avec {{{x%y}}}.
{{{
big add(big a, big b)
{
    big c = ZERO;

    int carry = 0; 

    int i = 0;
    while (i < max(a.size,b.size) || carry == 1) {
        c.t[i] = (a.t[i] + b.t[i] + carry) % 2; 
        carry  = (a.t[i] + b.t[i] + carry) / 2; 
        i++;
    }
    c.size = i;

    return c;
        
}
}}}
''Complexité'': linéaire, i.e. //O(a.size+b.size)//
''Taille de la sortie'': //~max(a.size,b.size)//

L'opération de décalage à gauche d'un nombre {{{a}}} par {{{s}}} bits est simple. 
{{{
big shift(big a, int s)
{
    big b = new big();

    for (int i = 0; i < a.size; i++) 
        b.t[i+s] = a.t[i];

    b.size = a.size+s;

    return b;
}
}}}
''Complexité'': linéaire, i.e //O(size)//
''Taille de la sortie'': //a.size+s//

Et maintenant, la multiplication avec la méthode de l'école.
{{{
big mult(big a, big b)
{
    big c = new big();

    for (int i = 0; i < b.size; i++) {
        if (b.t[i] == 1) 
            c = add(c,a);
        a = shift(a,1);
    }

    return c;
}
}}}
''Complexité'': //O(a.size*b.size)//
''Taile de la sortie'': //~a.size+b.size//

L'exponentiation naïve est faite comme ça:
{{{
big exp(big a, int k)
{
    big b = ONE;

     for (int i = 0; i < k; i++) {
        b = mult(b,a);
     }

    return b;
}
}}}
''Complexité'': Nous allons poursuivre l'exécution de cette procédure en notant le temps de multiplication {{{mult(b,a)}}} et la taille de {{{b}}} en chaque l'itération de la boucle {{{for}}}. C'est parti...
|{{{i}}}|{{{mult(b,a)}}}|{{{b.size}}}|
|-1 | - | 1|
| 1 | a.size | a.size |
| 2 | a.size^2 | 2*a.size |
| 3 | 2*a.size^2 | 3*a.size |
| 4 | 3*a.size^2 | 4*a.size |
| ... | ... | ... |
| i | (i-1)*a.size^2 | i*a.size |
| ... | ... | ... |
| k | (k-1) *a.size^2 | k*a.size |
En somme, le temps est égal à //a.size+(1+2+...+(k-1))*a.size^2=O(k^2*a.size^2)//
''La taille de la sortie'': Évidement, //~k*a.size// 

Par contre, on peut utiliser //la méthode de monoïde// pour calculer l'exponentiation plus vite:
{{{
big exp-fast(big a, int k)
{
    if (k < 0)
        throw IllegalArgumentException("Hmmm...");
    if (k == 0) 
        return ONE;
    if (k == 1)
        return a;

    big b = exp-fast(a,k/2);
    big c = mult(b,b);

    if ( k%2 == 0) 
        return c;
    else
        return mult(c,a);
}
}}}
L'analyse de complexité //est votre devoir//. 
Background: #eef
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
PageTemplate
|>|>|SiteTitle - SiteSubtitle|
|MainMenu|DefaultTiddlers<br><br><br><br>ViewTemplate<br><br>EditTemplate|SideBarOptions|
|~|~|OptionsPanel|
|~|~|AdvancedOptions|
|~|~|<<tiddler Configuration.SideBarTabs>>|

''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint

SiteUrl
SideBarTabs
|[[Timeline|TabTimeline]]|[[All|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]] |
|>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
!!!!Email
slawomir [dot] staworko [at] inria.fr
slawomir [dot] staworko [at] univ-lille3.fr

!!!!INRIA Lille - Nord Europe 
INRIA Lille - Nord Europe ([[map|http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=108140276224441622275.00047a9e96d8bf5f6fb5f&ll=50.605943,3.144064&spn=0.009655,0.017467&t=h&z=16]])
Parc Scientifique de la Haute Borne
Park Plaza - Bât A - 40 avenue Halley
59650 Villeneuve d'Ascq
FRANCE

Office: 117

Phone: (33 | 0) 3.59.57.79.22
Fax: (33 | 0) 3.59.57.78.50


!!!!Université ~Charles-de-Gaulle Lille 3
U.F.R. IDIST 
Université de Charles de Gaulle - Lille 3
59653 Villeneuve d'Ascq CEDEX
FRANCE

Office: INRIA research suite, Building C (previously Modulaire M) ([[map|http://maps.google.com/maps/ms?ie=UTF8&hl=en&msa=0&msid=108140276224441622275.00047a9ea4fa4b8afadab&t=h&z=17]])

Phone: (33 | 0) 3.20.41.61.79
Fax: (33|0) 3.20.41.61.71
This material is presented to ensure timely dissemination of scholarly and technical work. Copyrights and all rights therein are retained by authors or by other copyright holders. All persons copying this material are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works cannot be reposted or commercially distributed without the explicit permission of the copyright holder.

''ACM COPYRIGHT NOTICE'':

Copyright © 199x by the Association for Computing Machinery, Inc. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that new copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. 
[[Home]]
Le matériel disponible:
* un archive avec des sources Java à remplir: [[zip|teaching/aac08/tp1.zip]] ou [[tar.gz|teaching/aac08/tp1.tar.gz]]
* une classe Java qui permet de tester vos solutions: [[testeur|teaching/aac08/TesterTP1.class]] //(la dernière mise à jour 16 octobre)//

Utilisation de Testeur:
# Téléchargez et sauvegardez le [[testeur|teaching/aac08/TesterTP1.class]] dans le même répertoire que les fichiers Java avec votre solution.
# Remplissez les fichier avec votre code. Il n'est pas nécessaire de résoudre tous les problèmes pour tester. Seulement les solutions qui réussissent à compiler seront testées. ''Quelques remarques importantes:''
#*Ne définissiez pas de constructeurs dans vos //solvers//. Si vous en avez besoin, définissez aussi le constructeur //default// (prenant zéro paramètres). Le constructeur //default// est utilisé par le testeur pour créer les instance de vos //solvers//.
#*Ne mettez pas vos solutions dans un package dédié. Le testeur va essayer de charger que des //solvers// qui appartiennent au package //default//, i.e. les solvers qui n'utilisent pas le mot clé {{{package}}}. Pourtant, il est possible de tester des //solvers// appartenants à d'autres packages en utilisant les paramètres de testeur.  
# Compilez les fichiers Java avec {{{javac *.java}}}
# Si vous voulez tester vos solutions avec grandes données, supprimez {{{SolverNaifRec.class}}}. Sinon, seulement le test avec des données jouets {{{"abcbab"}}} et {{{"acbbb"}}} sera effectué. (Utile pour trouver des bugs)
# Faites exécuter le testeur avec {{{java TesterTP1}}} 
# Le testeur génère aléatoirement deux chaînes de la taille ~1000 et dont la distance est ~50. (Seulement si la class {{{SolverNaifRec}}} n'est pas présente)
# Puis chaque de vos //solvers// est testé et le résultat est affiché sur la console. Le testeur dit si le //solver// a réussi à bien calculer la distance, pendant combien de temps et en utilisant combien de mémoire. La consommation de mémoire est calculée avec des méthodes standards de Java et alors le résultat est presque toujours absurde. 
# Pour référence, les chaînes sont sauvegarder dans le répertoire curant sur les noms {{{u.txt}}} et {{{v.txt}}}. Vos //solvers// ne doivent pas essayer d'accéder ces fichiers. Pour les voir sans les bloquer, utilisez les commandes {{{cat u.txt}}} et {{{cat v.txt}}}.
# Quelques remarques (options avancées):
#*Le testeur essaie de tester toutes les classes (dans le répertoire curant) qui implémentent l'interface {{{Solver}}}. Pour ça, le tester utilise le chargeur de classes standard. Remarquez qu'il n'est pas nécessaire que tous vos //solvers// aient été bien compilés. 
#*Pour démarrer, le testeur a besoin des fichiers {{{Solver.class}}} et {{{PbDiff.class}}}. Vérifiez que les fichiers {{{Solver.java}}} et {{{PbDiff.class}}} ont bien compilé. 
#*Le fonctionnement de testeur peut être configure avec paramètres. Des paramètres suivants sont acceptés:
#** {{{--string-size=n}}} La taille des chaînes à générer (par défaut: //1000//)
#** {{{--string-dist=n}}} La distance entre les deux chaînes (par défaut: //50//)
#** {{{--write-data=b}}} Écrire des données (par défaut: //true//)
#** {{{--u-file-name=str}}} Le nom de fichier pour la première chaîne (par défaut: //u.txt//)
#** {{{--v-file-name=str}}} Le nom de fichier pour la deuxième chaîne (par défaut: //v.txt//)
#** {{{--ignore-solver=str}}} Le nom de //solver// à ignorer; Utilisez plusieurs fois pour ignorer de multiple //solvers//
#** {{{--only-solver=str}}} Tester uniquement le //solver// donné; Utilisez plusieurs fois pour spécifier de multiple //solvers//
#** {{{--toy-data=b}}} Utiliser des données jouets (par défaut: //false//);  des données jouets seront toujours utilisées si //~SolverRecNaif// est présent 
#** {{{--toy-data-u=str}}} La première chaîne jouet (par défaut: //abcbab//)
#** {{{--toy-data-v=str}}} La deuxiéme chaîne jouet (par défaut: //acbbb//)
#** {{{--quiet=b}}} Supprimer des messages (sauf erreurs) (par défaut: //false//) 
#** {{{--verbose=b}}} Afficher des valeurs de paramètres (par défaut: //false//) 
#** {{{--help}}} Imprimer la liste de paramètres acceptés.
#* Exemples d'utilisation:
#** {{{java TesterTP1}}}<br>Tester tous les //solvers//. Si //~SolverNaifRec// est present, données jouets sont utilisées; sinon le testeur génère de grandes données.
#** {{{java TesterTP1 --ignore-solver=SolverNaifRec --ignore-solver=SolverDynRec}}}<br>Tester tous les //solvers// sauf ~SolverNaifRec et ~SolverDynRec
#** {{{java TesterTP1 --only-solver=SolverDynRec --only-solver=SolverDynIter}}}<br>Tester seulement sur ~SolverDynRec et ~SolverDynIter
#** {{{java TesterTP1 --toy-data=true --toy-data-u=abba --toy-data-v=aabab}}}<br>Tester tous les //solvers// en utilisant les chaînes "abba" et "abab"
#** {{{java TesterTP1 --string-size=100 --string-dist=10}}}<br>Tester tous les //solvers//. La première chaîne est générée aléatoirement et compris 100 caractères. La deuxième chaîne est une copie de la première déformée avec 10 opération d'édition (insertion, délétion et modification)
#N'hésitez pas à me contacter (par email) s'il y a des problèmes avec le testeur.  
#Le [[code source|teaching/aac08/TesterTP1.java]] de Testeur est disponible (la partie qui calcule la distance a été supprimée).
''Cours''
* 2011-2012, 1er semestre
** CM/TD [[Inteligence Artificielle par la Logique|AIL11]] (Licence MAISHS)
** CM/TD [[XML|XML11]] (Master ICD)
* 2010-2011, 2e semestre
** CM/TD [[Logique des Propositions|LOG11]] (UE Libre Licence)
** CM/TD Modélisation XML (Master ID)
* 2010-2011, 1e semestre
** CM/TD [[Intelligence Artificielle par la Logique|AIL10]] (Licence MAISHS)
** CM/TD [[Information et Language Informatique|ILI10]] (Master ICD)
* 2009-2010, 2e semestre
** CM/TD [[Structuration de l'information|SQL10]] (Master ICD)
** TD [[Technologie du Web|http://grappa.univ-lille3.fr/~gonzalez/enseignement/2009-2010/technoweb/]] (License MIASHS) 
* 2009-2010, 1er semestre
** CM/TD [[Information et Langage Informatique|ILI09]] (Master ICD) 
** TD [[Bases de Données|http://grappa.univ-lille3.fr/~gonzalez/enseignement/2009-2010/bd/]] (License MIASHS)
* 2008-2009, 1er semestre 
** TP/TD [[Algorithmique Avancée et Complexité|AaC08]] (Master 1)

''Sujets des stages et des projets de recherche''
* 2e semestre 2010/2011 [Stage]
** [[L'apprentisage des reqêtes XPath|TwigLearning]]
* 1er semestre 2011/2012 [Projets de recherche]
** [[L'apprentissage des requêtes XPath en présence de schéma|TwigLearningWithSchema]]
** [[Le calcul de la distance d'édition entre un arbre et un langage régulier d'arbres|TreeEditDistance]]



   ¤ Alfred Tarski (1924)
   ¤ ¤ Andrzej Mostowski (1938)
   ¤ ¤ ¤ [[Wiktor Marek|http://www.cs.engr.uky.edu/~marek]] (1968)
   ¤ ¤ ¤ ¤ Witold Lipski, Jr. (1974)
   ¤ ¤ ¤ ¤ ¤ [[Tomasz Imielinski|http://www.cs.rutgers.edu/~imielins]] (1981)
   ¤ ¤ ¤ ¤ ¤ ¤ [[Jan Chomicki|http://www.cse.buffalo.edu/~chomicki]] (1990)
   ¤ ¤ ¤ ¤ ¤ ¤ ¤ Sławek Staworko (2007)
[>img[img/staworko-face-by-mfalski.jpg]]I'm an Assistant Professor at the [[University of Lille 3|http://www.univ-lille3.fr/fr/]] and a member of the [[INRIA|http://www.inria.fr/lille]] project [[Mostrare|http://mostrare.lille.inria.fr]]. My current research topics include //Machine Learning of XML Transformations and Queries//, //Security of XML Databases//, and //Consistency Management and Database Repairing//. 

Currently, I participate in several collaboration projects: [[Enumeration|https://gforge.inria.fr/plugins/wiki/index.php?EnumerationProject&id=267&type=g]], [[Access|http://acxml.gforge.inria.fr/index.php]], [[Codex|http://codex.saclay.inria.fr]], and [[Transduce|http://gforge.inria.fr/plugins/wiki/index.php?id=390&type=g]].

All type of research positions at Mostrare are available: [[more details| http://mostrare.lille.inria.fr/positions]].
----

//Nothing in life is to be feared, it is only to be understood. 
Now is the time to understand more, so that we may fear less.// 
Marie Skłodowska-Curie 
1867-1934, ~Polish-French chemist & physicist
Cours: ''Information et Langage Informatique'' 

Responsable du cours: Slawek Staworko 

Contenu du cours:
# L'informatique et l'ordinateur
# Les donnée et le codage de texte
# Le document éléctronique et sa structirization 
# Le revue des format du document structuré
# Le Web (et l'Internet)
# La programmation

Examen:
* le 4 Novembre 2009
* [[Corrigé|teaching/ili09/exam1-corrige.pdf]]

Devoir Maison:
# [[Votre site web et CV|teaching/ili09/dm1.pdf]] ([[2e session|teaching/ili09/dm1-2e-session.pdf]])
# [[Programmation Robot|teaching/ili09/dm2.pdf]] ([[2e session|teaching/ili09/dm2-2e-session.pdf]])

Projet Document Electronique:
* [[Descriptif|teaching/ili09/projet.pdf]] ([[2e session|teaching/ili09/projet-2e-session.pdf]])
* Exemple (presque complet) 
** [[Livre de cuisine|teaching/ili09/cuisinage-projet.zip]]

TD:
# [[Premiers pas en Linux|teaching/ili09/td1.pdf]] ([[tex|teaching/ili09/td1.tex]]) 
#* Fichier pour l'exercice 3 ([[aleatoire.txt|teaching/ili09/aleatoire.txt]])
#* [[Corrigé|teaching/ili09/td1-corrige.pdf]] ([[tex|teaching/ili09/td1-corrige.tex]])
#* [[Ubuntu|http://www.ubuntu.com/]] ([[version francaise|http://www.ubuntu-fr.org/]])
#**[[Instalation d'Ubuntu sur une clé USB|https://wiki.ubuntu.com/LiveUsbPendrivePersistent]] (en anglais)
# [[Introduction à LaTeX|teaching/ili09/td2.pdf]]
#* [[LaTeX en 84 minutes|teaching/ili09/flshort-3.20.pdf]] (en français, 109 pages)
#* [[Aide-memoire|teaching/ili09/latexsheet.pdf]] (en anglais, 2 pages)
# [[Langages de document Web|teaching/ili09/td3.pdf]]
#* exemples XHTML ([[hello world|teaching/ili09/helloworld.html]],[[journal|teaching/ili09/journal.html]],[[list|teaching/ili09/list.html]],[[table|teaching/ili09/table.html]],[[links|teaching/ili09/links.html]],[[references|teaching/ili09/references.html]])
#* Page [[TiddlyWiki|teaching/ili09/tiddlywiki.html]] à télécharger (en tappant la touche droite sur le lien et "Enregistrer sous...")
#* aide-mémoire de syntaxe [[Wiki|teaching/ili09/wiki.pdf]] (dialecte ~TiddlyWiki)
#* aide-mémoire [[TiddlyWiki|http://tiddlypocketbook.com/]] (en anglais)
#* la page française de [[TiddlyWiki|http://www.tiddlywiki.fr]] 
# [[CSS dans XHTML|teaching/ili09/td4.pdf]]
# [[XML, DTD et XSLT|teaching/ili09/td5.pdf]]
#* [[Tutoriel XML|http://www.zvon.org/xxl/XMLTutorial/General_fre/book.html]] 
#* [[Tutoriel DTD|http://www.zvon.org/xxl/DTDTutorial/General_fre/book.html]]
#* [[Tutoriel XPath|http://www.zvon.org/xxl/XPathTutorial/General_fre/examples.html]] 
#* [[Tutoriel XSLT|http://www.zvon.org/xxl/XSLTutorial/Output_fre/index.html]]
#* Fichier XML avec un livre de cuisine [[cuisinage.xml|teaching/ili09/cuisinage.xml]]
#* Fichier DTD avec schema du livre de cuisine [[cuisinage.dtd|teaching/ili09/cuisinage.dtd]]
#* Fichier XSLT pour transformer le fichier XML au ficher HTML [[cuisinage.xsl|teaching/ili09/cuisinage.xsl]]
#* Fichier HTML obtenu après la transformation [[cuisinage.html|teaching/ili09/cuisinage.html]]
# [[Programmation avec le Robot|teaching/ili09/td6.pdf]] (basé sur le [[matériel|http://www.grappa.univ-lille3.fr/~torre/Enseignement/TPs/robot.php]] de Fabien Torre)
#* [[Le Robot|teaching/ili09/Robot.zip]] (archive zip)
#[[Programmation en Pascal|teaching/ili09/td7.pdf]]
#* [[Programmes|teaching/ili09/pascal1.zip]] (archive zip)
Cours: ''Information et Langage Informatique'' 

Responsable du cours: Sławek Staworko 

Contenu du cours:
# Vocabulaire informatique fondamental
# Codage des données
# Document électronique 
# Structuration de l'information
# Bases de données relationnelles et XML

DM : 
# [[Standards de codage|teaching/ili10/dm1.pdf]]
#* [[Liste de sujet réservés|https://docs.google.com/document/pub?id=1nram5q3a8AzJ3Zr-fvlDJ_z-hCEMCwtFgDITfqv_BuY]]
#* À partir du 6 Novembre il faut envoyer des demandes d'approbation de vos sujets uniquement à [[Yassine Benabbas|mailto:yassine.benabass@lifl.fr]] 
#* Note sur la taille du document : Il faut traiter le sujet en détail mais sans exagération. Par exemple, quand vous décrivez comment l'information est représentée par un codage, le détail du traitement dépend de la complexité du codage : pour des codages simples (e.g. Morse) il faut l'expliquer bien et donner quelques exemples, mais pour des codages complexes (e.g. ~MPEG4) il faut plutôt décrire les codages des composantes (le sont, l'image, etc.) et donner des exemples de caractéristiques qui illustrent son fonctionnement (e.g. pour encoder une heure de film de resolution 300x200 et 24 million couleurs il faut 450Mo et si on tient pas à la bonne qualité on peut même descendre à 300Mo)

TD:
# [[Premiers pas en Linux|teaching/ili10/td1.pdf]] 
#* Fichier pour l'exercice 3 ([[aleatoire.txt|teaching/ili10/aleatoire.txt]])
#* [[Ubuntu|http://www.ubuntu.com/]] ([[version francaise|http://www.ubuntu-fr.org/]])
#* Machine virtuelle pour executer Linux sous Windows [[Virtual Box|http://www.virtualbox.org/]]
#* Tutoriel [[Linux/Bash|http://www.linux-kheops.com/doc/delcros/index.html]]
# [[Introduction à LaTeX|teaching/ili10/td2.pdf]]
#* [[LaTeX en 84 minutes|teaching/ili10/flshort-3.20.pdf]] (requis: Chapitres 1 et 2, Sections 4.2 et 4.3)
#* [[Aide-memoire|teaching/ili10/latexsheet.pdf]] (en anglais, 2 pages)
# [[Format de graphismes|teaching/ili10/td3.pdf]] (par Yassine Benabbas)
#* [[Archive avec des fichiers supplémentaires|teaching/ili10/td3.tar.bz2]]
#* [[Manuel d'ImageMagic|http://www.imagemagick.org/script/index.php]]
# Création et gestion de ~BDs avec ~OpenOffice.
#* La fac ([[Fac.odb|teaching/ili10/Fac.odb]]) <<slider QBE.FAC [[ILI10Sliders##QBE.FAC]] Requêtes>>
# Algèbre relationnelle 
# Requêtes (QBE)
#* BD Resource Humaines ([[RH.odb|teaching/ili10/RH.odb]], [[RH.sql|teaching/ili10/RH.sql]]) <<slider QBE.RH [[ILI10Sliders##QBE.RH]] Requêtes>>
#* BD Discothèque ([[Discotheque.odb|teaching/ili10/Discotheque.odb]], [[discotheque.sql|teaching/ili10/discotheque.sql]]) <<slider QBE.RH [[ILI10Sliders##QBE.Discotheque]] Requêtes>>
# [[XML, DTD et XSLT|teaching/ili10/td7.pdf]]
#* [[Tutoriel XML|http://www.zvon.org/xxl/XMLTutorial/General_fre/book.html]] 
#* [[Tutoriel DTD|http://www.zvon.org/xxl/DTDTutorial/General_fre/book.html]]
#* [[Tutoriel XPath|http://www.zvon.org/xxl/XPathTutorial/General_fre/examples.html]] 
#* [[Tutoriel XSLT|http://www.zvon.org/xxl/XSLTutorial/Output_fre/index.html]]
#* Fichier XML avec un livre de cuisine [[cuisinage.xml|teaching/ili10/cuisinage.xml]]
#* Fichier DTD avec schema du livre de cuisine [[cuisinage.dtd|teaching/ili10/cuisinage.dtd]]
#* Fichier XSLT pour transformer le fichier XML au ficher HTML [[cuisinage.xsl|teaching/ili10/cuisinage.xsl]]
#* Fichier HTML obtenu après la transformation [[cuisinage.html|teaching/ili10/cuisinage.html]]
!QBE.RH
# Afficher les noms et prénoms de tous les employés. 
# Afficher les noms et prénoms de tous les employés dont la salaire est inférieure à 15000.
# Afficher les noms, prénoms et salaires de tous les employés embauchés dans la première moitié de 2000.
# Idem + ordonner les résultats par la salaire (en ordre croissant).
# Afficher tous les titres sans répétition. 
# Idem + le montant moyen de salaire pour tout titre.
# Idem + le montant minimum et maximum de salaire pour tout titre.
# Afficher les noms et prénoms des employés qui travaillent à&nbsp;Lille.
# Idem + ou à Marseille. 
# Afficher les noms et prénoms des employés qui travaillent à Paris et gagnent moins de 20000.
# Afficher les noms et prénoms des employés qui travaillent à Paris où à&nbsp;Lille et qui gagnent moins de 20000.
# Afficher les noms et prénoms des employés qui travaillent à Paris et gagnent moins de 20000 où qui travaillent à Lille.
# Afficher les nom de tous les départements. 
# Idem + le montant moyen de salaire pour tout département.
# Afficher les nom de tous les villes avec le montant moyen de salaire.
# Pour tout employé afficher son nom et prénom suivit par le ID de son supérieur. 
# Pour tout employé afficher son nom et prénom suivit par le nom et prénom de son supérieur. 
# Pour tout employé lister le nombre des employés dont il est responsable. 
# Idem + le montant moyen de salaire des employés dont il est responsable. 
# Pour tous employé afficher son nom et prénom avec le nom et prénom du supérieur de son supérieur. 
!QBE.Discotheque
# Projection avec sélection.
## Afficher les titres des disques dont le prix est inférieur de 11.
## Idem + en ordre croissant du prix.  
## Afficher les titres des disques dont le prix est entre 11 et 12.
## Afficher les titres des disques sortis en 1999.
## Afficher les titres des disques sortis dans les années 90 
## Idem + en ordre décroissant de l'année et puis en croissant du prix (dans un groupe de disques sortis en même année).
## Afficher les titres des disques sortis entre 1995 et 1998 dont le prix est entre 11 et 13.
## Afficher les titres des disques endommagés.
## Idem + en ordre décroissant du prix
## Idem + en ordre croissant du l'année de sortie. 
## Afficher les titres des disques endommagés, sortis en 1998 et dont le prix est inférieur à 13
## Afficher les titres des disques qui sont pas neufs.
# Agrégation simple  
## Afficher le nombre total de disques.
## Afficher le nombre de disques endommagés. 
## Afficher le nombre total de chansons. 
## Afficher le nombre total d'artistes. 
## Afficher la somme totale des prix de tous les disques.
## Afficher la somme des prix de tous les disques détruits.
## Afficher l'année moyenne de disques neufs. 
## Afficher l'année moyenne de tous les 
## Afficher le prix minimum et maximum de tous les disques.
## Idem + le prix moyen. 
# Jointures
## Pour toute chanson afficher son titre et son genre.
## Afficher les titres des chansons Blues (faire ça en utilisant une jointure).
## Afficher les titres des chansons dont le genre est soit New Age soit Jazz.
## Afficher les titres des chansons interprétées par Gothic Slam (Idem pour DJ Ray et The Police). 
## Afficher les titres des disques avec des chansons interprétées par Le Tigre.
## IDEM + ordonner les résultats par le titre en ordre alphabétique croissant (A,B,C,...,Z).
## Afficher les noms d'artistes qui interprètent une des chansons sur le disque intitulé "Il faut tourner l'apache" (sans répétition).
## Afficher les noms des disques contenant la chanson "(I can't get no) Satisfaction" (Idem pour "Brown Sugar" et "Je t'aime... Moi non plus")
## Afficher pour tout artiste tous les genres dont il interprète des chansons.  
# Jointures + Agrégation
## Calculer le prix moyen de disque contenant des chansons de genre Rock. (Idem + avec tous les genres)
## Afficher pour tout genre le nombre de chansons de ce genre. 
## Afficher pour tout disques son titre et nombre de chansons qu'il contient, ordonner les résultat par le nombre de chansons (en ordre décroissant)
## Trouver le 10 artistes avec le plus de chansons interprétées.
## Pour tout genre afficher l'année moyenne, minimum et maximum de disques contenant des chansons de ce genre. 
!QBE.FAC
# Afficher les noms et prénoms de tous les étudiants. 
# Afficher les noms et prénoms de tous les étudiants nés avant 1990.
# Idem + ordonner par nom (en ordre croisant).
# Afficher les noms et prénoms de tous les étudiants nés dans les années 1990.
# Idem + ordonner par date (en ordre décroisant).
# Afficher les intitulés des cours qui se déroulent au semestre 1 dans la salle `C201'.
# Afficher les intitulés des cours qui se déroulent au semestre 1 dans les salles `C201', ou `C300'.
# Afficher les noms et prénoms de tous les étudiants qui ont obtenu une note égale à 5.
# Afficher les noms et prénoms et les notes de tous les étudiants qui ont obtenu une note supérieure à 17 (trier par note en ordre croissant).
# Afficher les noms et prénoms et les notes de tous les étudiants qui ont obtenu une note supérieure à 10 pour le module `XML'.
# Afficher les noms, prénoms des étudiants qui étudient dans la salle `C201'.
# Afficher les noms, prénoms des étudiants nés en 1997 et étudient dans la salle `C201' ou `C300'.
# Afficher les noms, prénoms et notes des étudiants nés dans les années 1990 et qui prennent le cours intitulé `XML'.
# Afficher les nom et prénoms des enseignants qui sont dans le bureau 'B201' ou `B202'.
# Afficher le nom et le prénom de l'enseignant qui enseigne le module `XML'.
# Afficher les noms et prénoms des enseignants qui enseignent dans la salle `C201'.
# Afficher les intitulés des modules enseignés par les enseignants du bureau `B201'.
# Pour tous les enseignants dans le bureau `B202' afficher leur noms, prénoms et les intitulés des modules qu'ils enseignent.
# Afficher les noms prénoms des enseignants qui ont attribué une note inférieure à 5 (trier par nte en ordre décroissant).
# Afficher les noms et prénoms et des étudiants qui ont cours avec Mr. Stewart au premier semestre.
<<list filter "[tag[index]]">>
<<list filter "[tag[teaching]]">>
Cours : ''Logique des Propositions''

Responsable du cours : Sławek Staworko 

Moodle : 
* [[Logique des propositions|http://moodle.univ-lille3.fr/course/view.php?id=1435]] (utilisée pour des rendus et la diffusion d'information, donc il est nécessaire de s'y inscrire). 

Bibliographie :
# Mordechai ~Ben-Ari, //Mathematical Logic for Computer Science//, ~Springer-Verlag, 2001, 2nd edition.
# Chitta Baral, //Knowlege Representation, Reasoning and Declarative Problem Solving//, Cambridge University Press, 2003

Materiel:
# [[Une courte introduction à LaTeX2e|teaching/log11/flshort-3.20.pdf]]
# [[Aide-mémoire LaTeX|teaching/log11/latexsheet.pdf]]

DM:
# [[Calcul propositionnel et une énigme|teaching/log11/dm1.pdf]]
# [[La Vérité, le Calcul Propositionnel et les Preuves|teaching/log11/dm2.pdf]]
#* <<slider PreuvesEnLaTeX [[LOG11Sliders##PreuvesEnLaTeX]] "Comment écrire des preuves en LaTeX">>

TD:
# [[Language des propositions|teaching/log11/td1.pdf]]
# [[La vérité|teaching/log11/td2.pdf]]
# [[Une introduction rapide à LaTeX|teaching/log11/td3.pdf]]
# [[Calcul propositionnel|teaching/log11/td4.pdf]]
# [[Preuves|teaching/log11/td5.pdf]] 
!PreuvesEnLaTeX
# [[source LaTeX|teaching/log11/aide1.tex]] 
# [[vérsion compilée PDF|teaching/log11/aide1.pdf]]
*[[Solar Impulse|http://www.solarimpulse.com/]]
*[[Free Rice|http://www.freerice.com/index.php]]
*[[TED|http://www.ted.com/index.php]]
*[[NOTCOT|http://www.notcot.org/]]
*[[I Fix It|http://www.ifixit.com/]]
*[[Greenpeace|http://www.greenpeace.org/international/en/]]
*[[Free Software Foundation|http://www.fsf.org/]]
*[[Wikileaks|http://wikileaks.org]]
[[Home]]

[[Contact Information]]

[[Academia]]

[[Publications]]

[[Teaching|Enseignement]] (in French)

[[Links]]
|''Name''|MainTheme|
|''Description''|main theme limiting access of ReadOnly users|

!Author Mode
|PageTemplate|Author.PageTemplate|
|ViewTemplate|Author.ViewTemplate|
|EditTemplate|Author.EditTemplate|
|StyleSheet|StyleSheet|
|ColorPalette|ColorPalette|

!Read-Only Mode
|PageTemplateReadOnly|ReadOnly.PageTemplate|
|ViewTemplateReadOnly|ReadOnly.ViewTemplate|
|EditTemplateReadOnly|ReadOnly.ViewTemplate|
|StyleSheetReadOnly|StyleSheet|
|ColorPalette|ColorPalette|

!StyleSheet
/*{{{*/
#sidebarTabs {
	display: none;
}
/*}}}*/
/***
Hijicking (and overloading) the core search functions
***/

//{{{
config.macros.search.doSearch = function(txt)
{
	if(txt.value.length > 0) {
		story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch,config.options.chkFilterPublicTagsSearch);
		txt.setAttribute("lastSearchText",txt.value);
	}
};

Story.prototype.search = function(text,useCaseSensitive,useRegExp,filterPublicTags)
{
	this.closeAllTiddlers();
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack,"title","excludeSearch",false,filterPublicTags);
	this.displayTiddlers(null,matches);
	highlightHack = null;
	var q = useRegExp ? "/" : "'";
	if(matches.length > 0)
		displayMessage(config.macros.search.successMsg.format([matches.length.toString(),q + text + q]));
	else
		displayMessage(config.macros.search.failureMsg.format([q + text + q]));
};


// Return an array of tiddlers matching a search regular expression
TiddlyWiki.prototype.search  = function(searchRegExp,sortField,excludeTag,match,filterPublicTags)
{
	var candidates = this.reverseLookup("tags",excludeTag,!!match);
	var results = [];
	for(var t=0; t<candidates.length; t++) {
        if (!(filterPublicTags && !candidates[t].isTagged("public"))) 
            if((candidates[t].title.search(searchRegExp) != -1) || 
               (candidates[t].text.search(searchRegExp) != -1))
                results.push(candidates[t]);
	}
	if(!sortField)
		sortField = "title";
	results.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
	return results;
};

//}}}
/***
|Name|Plugin: jsMath|
|Created by|BobMcElrath|
|Email|my first name at my last name dot org|
|Location|http://bob.mcelrath.org/tiddlyjsmath.html|
|Version|1.5.1|
|Requires|[[TiddlyWiki|http://www.tiddlywiki.com]] &ge; 2.0.3, [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]] &ge; 3.0|
!Description
LaTeX is the world standard for specifying, typesetting, and communicating mathematics among scientists, engineers, and mathematicians.  For more information about LaTeX itself, visit the [[LaTeX Project|http://www.latex-project.org/]].  This plugin typesets math using [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]], which is an implementation of the TeX math rules and typesetting in javascript, for your browser.  Notice the small button in the lower right corner which opens its control panel.
!Installation
In addition to this plugin, you must also [[install jsMath|http://www.math.union.edu/~dpvc/jsMath/download/jsMath.html]] on the same server as your TiddlyWiki html file.  If you're using TiddlyWiki without a web server, then the jsMath directory must be placed in the same location as the TiddlyWiki html file.

I also recommend modifying your StyleSheet use serif fonts that are slightly larger than normal, so that the math matches surrounding text, and \\small fonts are not unreadable (as in exponents and subscripts).
{{{
.viewer {
  line-height: 125%;
  font-family: serif;
  font-size: 12pt;
}
}}}

If you had used a previous version of [[Plugin: jsMath]], it is no longer necessary to edit the main tiddlywiki.html file to add the jsMath <script> tag.  [[Plugin: jsMath]] now uses ajax to load jsMath.
!History
* 11-Nov-05, version 1.0, Initial release
* 22-Jan-06, version 1.1, updated for ~TW2.0, tested with jsMath 3.1, editing tiddlywiki.html by hand is no longer necessary.
* 24-Jan-06, version 1.2, fixes for Safari, Konqueror
* 27-Jan-06, version 1.3, improved error handling, detect if ajax was already defined (used by ZiddlyWiki)
* 12-Jul-06, version 1.4, fixed problem with not finding image fonts
* 26-Feb-07, version 1.5, fixed problem with Mozilla "unterminated character class".
* 27-Feb-07, version 1.5.1, Runs compatibly with TW 2.1.0+, by Bram Chen
!Examples
|!Source|!Output|h
|{{{The variable $x$ is real.}}}|The variable $x$ is real.|
|{{{The variable \(y\) is complex.}}}|The variable \(y\) is complex.|
|{{{This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.}}}|This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.|
|{{{This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.}}}|This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.|
|{{{Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation} }}}|Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation}|
|{{{Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} }}}|Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} |
|{{{I spent \$7.38 on lunch.}}}|I spent \$7.38 on lunch.|
|{{{I had to insert a backslash (\\) into my document}}}|I had to insert a backslash (\\) into my document|
!Code
***/
//{{{

// AJAX code adapted from http://timmorgan.org/mini
// This is already loaded by ziddlywiki...
if(typeof(window["ajax"]) == "undefined") {
  ajax = {
      x: function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}},
      gets: function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText}
  }
}

// Load jsMath
jsMath = {
  Setup: {inited: 1},          // don't run jsMath.Setup.Body() yet
  Autoload: {root: new String(document.location).replace(/[^\/]*$/,'jsMath/')}  // URL to jsMath directory, change if necessary
};

if (!jsMath.Font) {jsMath.Font = {}}
jsMath.Font.Message = function () {};

var jsMathstr;
try {
  jsMathstr = ajax.gets(jsMath.Autoload.root+"jsMath.js");
} catch(e) {
  alert("jsMath was not found: you must place the 'jsMath' directory in the same place as this file.  "
       +"The error was:\n"+e.name+": "+e.message);
  throw(e);  // abort eval
}
try {
  window.eval(jsMathstr);
} catch(e) {
  alert("jsMath failed to load.  The error was:\n"+e.name + ": " + e.message + " on line " + e.lineNumber);
}
jsMath.Setup.inited=0;  //  allow jsMath.Setup.Body() to run again

// Define wikifers for latex
config.formatterHelpers.mathFormatHelper = function(w) {
    var e = document.createElement(this.element);
    e.className = this.className;
    var endRegExp = new RegExp(this.terminator, "mg");
    endRegExp.lastIndex = w.matchStart+w.matchLength;
    var matched = endRegExp.exec(w.source);
    if(matched) {
        var txt = w.source.substr(w.matchStart+w.matchLength, 
            matched.index-w.matchStart-w.matchLength);
        if(this.keepdelim) {
          txt = w.source.substr(w.matchStart, matched.index+matched[0].length-w.matchStart);
        }
        e.appendChild(document.createTextNode(txt));
        w.output.appendChild(e);
        w.nextMatch = endRegExp.lastIndex;
    }
}

config.formatters.push({
  name: "displayMath1",
  match: "\\\$\\\$",
  terminator: "\\\$\\\$\\n?", // 2.0 compatability
  termRegExp: "\\\$\\\$\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

config.formatters.push({
  name: "inlineMath1",
  match: "\\\$", 
  terminator: "\\\$", // 2.0 compatability
  termRegExp: "\\\$",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

var backslashformatters = new Array(0);

backslashformatters.push({
  name: "inlineMath2",
  match: "\\\\\\\(",
  terminator: "\\\\\\\)", // 2.0 compatability
  termRegExp: "\\\\\\\)",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

backslashformatters.push({
  name: "displayMath2",
  match: "\\\\\\\[",
  terminator: "\\\\\\\]\\n?", // 2.0 compatability
  termRegExp: "\\\\\\\]\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

backslashformatters.push({
  name: "displayMath3",
  match: "\\\\begin\\{equation\\}",
  terminator: "\\\\end\\{equation\\}\\n?", // 2.0 compatability
  termRegExp: "\\\\end\\{equation\\}\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper
});

// These can be nested.  e.g. \begin{equation} \begin{array}{ccc} \begin{array}{ccc} ...
backslashformatters.push({
  name: "displayMath4",
  match: "\\\\begin\\{eqnarray\\}",
  terminator: "\\\\end\\{eqnarray\\}\\n?", // 2.0 compatability
  termRegExp: "\\\\end\\{eqnarray\\}\\n?",
  element: "div",
  className: "math",
  keepdelim: true,
  handler: config.formatterHelpers.mathFormatHelper
});

// The escape must come between backslash formatters and regular ones.
// So any latex-like \commands must be added to the beginning of
// backslashformatters here.
backslashformatters.push({
    name: "escape",
    match: "\\\\.",
    handler: function(w) {
        w.output.appendChild(document.createTextNode(w.source.substr(w.matchStart+1,1)));
        w.nextMatch = w.matchStart+2;
    }
});

config.formatters=backslashformatters.concat(config.formatters);

window.wikify = function(source,output,highlightRegExp,tiddler)
{
    if(source && source != "") {
        if(version.major == 2 && version.minor > 0) {
            var wikifier = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
            wikifier.subWikifyUnterm(output);
        } else {
            var wikifier = new Wikifier(source,formatter,highlightRegExp,tiddler);
            wikifier.subWikify(output,null);
        }
        jsMath.ProcessBeforeShowing();
    }
}
//}}}
<<helloWorld "Slawek">>
''Journals''
#[[Prioritized Repairing and Consistent Query Answering in Relational Databases|papers/staworko-amai09.pdf]], //To appear in the special SUM'08 issue of Annals of Mathematics and Artificial Intelligence//, (with J. Chomicki and J. Marcinkowski) <<slider bibtexStChMa09 [[BibTeX##StChMa09]] bibtex>>
#[[Consistent Query Answers in the Presence of Universal Constraints|papers/staworko-is09.pdf]], //Information Systems//, Volume 35(1), 2010, pp. 1-22 (with J. Chomicki) <<slider bibtexStCh10 [[BibTeX##StCh10]] bibtex>>
''Conferences and Workshops''
# [[Normalization of Sequential Top-Down Tree-to-Word Transducers|papers/staworko-lata11.pdf]], //Language and Automata Theory and Applications (LATA)//, March 2011, Tarragona, Spain (with G. Laurence, A. Lemay, J. Niechren, and M. Tommasi) <<slider bibtexLLNST11 [[BibTeX##LLNST11]] bibtex>>
# [[View Update Translation for XML|papers/boneva-icdt11.pdf]], //International Conference on Database Theory (ICDT)//, March 2011, Uppsala, Sweden (with I. Boneva, B. Groz, A.-C. Caron, Y. Roos, and S. Tison) <<slider bibtexBGTCRS11 [[BibTeX##BGTCRS11]] bibtex>>
# [[The View Update Problem for XML|papers/staworko-wuxml10.pdf]], //EDBT/ICDT Workshops (Updates in XML)//, March 2010, Lausanne, Switzerland (with I. Boneva, B. Groz) <<slider bibtexStBoGr10 [[BibTeX##StBoGr10]] bibtex>>
# [[XML Security Views Revisited|papers/staworko-dbpl09.pdf]], //Database Programming Languages (DBPL)//, August 2009, Lyon, France (with B. Groz, A.-C. Caron, Y. Roos, and S. Tison) ([[slides|papers/staworko-dbpl09-talk.pdf]])<<slider bibtexGSCRT09 [[BibTeX##GSCRT09]] bibtex>> 
# [[Equivalence of Deterministic Nested Word to Word Transducers|papers/staworko-fct09.pdf]], //Fundamentals of Computation Theory (FCT)//, September 2009, Wroclaw, Poland (with G. Laurence, A. Lemay, and J. Niechren)<<slider bibtexSLLN09 [[BibTeX##SLLN09]] bibtex>>
# [[Querying Regular Sets of XML Documents|papers/staworko-lid08.pdf]], //~LiD Workshop//, May 2008, Rome. (with E. Filiot and J. Chomicki)<<slider bibtexStFiCh08 [[BibTeX##StFiCh08]] bibtex>>
# [[Validity Sensitive Querying of XML Databases|papers/staworko-datax06.pdf]], //EDBT Workshops (dataX)//, March 2006, Munich, Germany. (with J. Chomicki) ([[slides|papers/staworko-datax06-talk.pdf]])<<slider bibtexStCh06 [[BibTeX##StCh06]] bibtex>>
# [[Preference-Driven Querying of Inconsistent Relational Databases|papers/staworko-iidb06.pdf]], //EDBT Workshops (IIDB)//, March 2006, Munich, Germany.  (with J. Chomicki and J. Marcinkowski) ([[slides|papers/staworko-iidb06-talk.pdf]])<<slider bibtexStChMa06 [[BibTeX##StChMa06]] bibtex>>
# [[Computing Consistent Query Answers using Conflict Hypergraphs|papers/staworko-cikm04.pdf]], //Information and Knowledge Management (CIKM)//, November 2004, Washington, D.C. (with J. Chomicki and J. Marcinkowski)<<slider bibtexChMaSt04b [[BibTeX##ChMaSt04b]] bibtex>>
# [[Hippo: a System for Computing Consistent Query Answers to a Class of SQL Queries|papers/staworko-edbt04-demo.pdf]],  // International Conference on Extending Database Technology//. (EDBT), March 2004, Heraklion, Greece. //System demo//. (with J. Chomicki and J. Marcinkowski)<<slider bibtexChMaSt04a [[BibTeX##ChMaSt04a]] bibtex>>

''Manuscripts''
#[[Priority-Based Conflict Resolution in Inconsistent Relational Databases|papers/staworko-arxiv-cqa-preferences.pdf]], //arXiv.org e-Print archive//, cs/0506063, June 2005 (with J. Chomicki) <<slider bibtexStCh05 [[BibTeX##StCh05]] bibtex>>
# [[Declarative Inconsistency Handling in Relational and Semi-structured Databases|papers/staworko-phd-thesis.pdf]], //Ph.D. thesis dissertation//, University at Buffalo, May 2007. ([[slides|papers/staworko-phd-talk.pdf]])<<slider bibtexStaworko07 [[BibTeX##Staworko07]] bibtex>>

''Talks''
#[[Consistent Query Answering|papers/staworko-deis10-talk.pdf]], //Advanced School on Data Exchange, Integration, and Streams (DEIS)//, ~GI-Dagstuhl Seminar, November 2010.
#[[Rewriting of Queries and Updates across XML Security Views|papers/staworko-secret11-talk.pdf]], //Dagstuhl Seminar: Security and Rewriting//, August 2011.

<<slider copyright [[Copyright]] "Copyright Notice">>
Options are saved in your browser:
<<option chkRegExpSearch>> Regular expression search
<<option chkCaseSensitiveSearch>> Case sensitive search
<<option chkAnimate>> Enable animations
<<option chkSinglePageMode>> Single page mode
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='ReadOnly.SideBarOptions'></div>
<div id='sidebarTabs' refresh='macro' force='true' macro='slider chkSideBarTabs ReadOnly.SideBarTabs "index »" "display lists of tiddlers"'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<search>><<closeAll>><<permaview>><<slider chkSliderOptionsPanel ReadOnly.OptionsPanel "options »" "Change TiddlyWiki options">>
<<tabs txtMainTab "All" "All entries" Index.All "Enseignement" "Enseignement" Index.Teaching>>
<!--{{{-->
<!--div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div-->
<div class='title' macro='view title'></div>
<!--div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div-->
<!--div class='tagging' macro='tagging'></div-->
<!--div class='tagged' macro='tags'></div-->
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
Cours: Structuration de l'Information

Responsable du cours: Slawek Staworko 

Contenu du cours:
# Diagrames ER (~Entity-Relationship)
# Model relationnel de bases de données. 
# Algèbre relationele
# Requêtes SQL (Structured Query Language)


TD:
# Création et gestion de ~BDs avec ~OpenOffice.
# Requêtes (QBE)
#* BD Resource Humaines ([[RH.odb|teaching/sql10/RH.odb]], [[RH.sql|teaching/sql10/RH.sql]]) <<slider QBE.RH [[SQL10Sliders##QBE.RH]] Requêtes>>
#* BD Discothèque ([[Discotheque.odb|teaching/sql10/Discotheque.odb]], [[discotheque.sql|teaching/sql10/discotheque.sql]]) <<slider QBE.RH [[SQL10Sliders##QBE.Discotheque]] Requêtes>>

Projet:
# [[Description|teaching/sql10/projet.pdf]] ([[2e session|teaching/sql10/projet-2e-session.pdf]])
# Exemple de l'inclusion d'un fichier PNG dans ~LaTeX ([[fourmiliere.zip|teaching/sql10/fourmiliere.zip]])
!QBE.RH
# Afficher les noms et prénoms de tous les employés. 
# Afficher les noms et prénoms de tous les employés dont la salaire est inférieure à 15000.
# Afficher les noms, prénoms et salaires de tous les employés embauchés dans la première moitié de 2000.
# Idem + ordonner les résultats par la salaire (en ordre croissant).
# Afficher tous les titres sans répétition. 
# Idem + le montant moyen de salaire pour tout titre.
# Idem + le montant minimum et maximum de salaire pour tout titre.
# Afficher les noms et prénoms des employés qui travaillent à&nbsp;Lille.
# Idem + ou à Marseille. 
# Afficher les noms et prénoms des employés qui travaillent à Paris et gagnent moins de 20000.
# Afficher les noms et prénoms des employés qui travaillent à Paris où à&nbsp;Lille et qui gagnent moins de 20000.
# Afficher les noms et prénoms des employés qui travaillent à Paris et gagnent moins de 20000 où qui travaillent à Lille.
# Afficher les nom de tous les départements. 
# Idem + le montant moyen de salaire pour tout département.
# Afficher les nom de tous les villes avec le montant moyen de salaire.
# Pour tout employé afficher son nom et prénom suivit par le ID de son supérieur. 
# Pour tout employé afficher son nom et prénom suivit par le nom et prénom de son supérieur. 
# Pour tout employé lister le nombre des employés dont il est responsable. 
# Idem + le montant moyen de salaire des employés dont il est responsable. 
# Pour tous employé afficher son nom et prénom avec le nom et prénom du supérieur de son supérieur. 
!QBE.Discotheque
# Projection avec sélection.
## Afficher les titres des disques dont le prix est inférieur de 11.
## Idem + en ordre croissant du prix.  
## Afficher les titres des disques dont le prix est entre 11 et 12.
## Afficher les titres des disques sortis en 1999.
## Afficher les titres des disques sortis dans les années 90 
## Idem + en ordre décroissant de l'année et puis en croissant du prix (dans un groupe de disques sortis en même année).
## Afficher les titres des disques sortis entre 1995 et 1998 dont le prix est entre 11 et 13.
## Afficher les titres des disques endommagés.
## Idem + en ordre décroissant du prix
## Idem + en ordre croissant du l'année de sortie. 
## Afficher les titres des disques endommagés, sortis en 1998 et dont le prix est inférieur à 13
## Afficher les titres des disques qui sont pas neufs.
# Agrégation simple  
## Afficher le nombre total de disques.
## Afficher le nombre de disques endommagés. 
## Afficher le nombre total de chansons. 
## Afficher le nombre total d'artistes. 
## Afficher la somme totale des prix de tous les disques.
## Afficher la somme des prix de tous les disques détruits.
## Afficher l'année moyenne de disques neufs. 
## Afficher l'année moyenne de tous les 
## Afficher le prix minimum et maximum de tous les disques.
## Idem + le prix moyen. 
# Jointures
## Pour toute chanson afficher son titre et son genre.
## Afficher les titres des chansons Blues (faire ça en utilisant une jointure).
## Afficher les titres des chansons dont le genre est soit New Age soit Jazz.
## Afficher les titres des chansons interprétées par Gothic Slam (Idem pour DJ Ray et The Police). 
## Afficher les titres des disques avec des chansons interprétées par Le Tigre.
## IDEM + ordonner les résultats par le titre en ordre alphabétique croissant (A,B,C,...,Z).
## Afficher les noms d'artistes qui interprètent une des chansons sur le disque intitulé "Il faut tourner l'apache" (sans répétition).
## Afficher les noms des disques contenant la chanson "(I can't get no) Satisfaction" (Idem pour "Brown Sugar" et "Je t'aime... Moi non plus")
## Afficher pour tout artiste tous les genres dont il interprète des chansons.  
# Jointures + Agrégation
## Calculer le prix moyen de disque contenant des chansons de genre Rock. (Idem + avec tous les genres)
## Afficher pour tout genre le nombre de chansons de ce genre. 
## Afficher pour tout disques son titre et nombre de chansons qu'il contient, ordonner les résultat par le nombre de chansons (en ordre décroissant)
## Trouver le 10 artistes avec le plus de chansons interprétées.
## Pour tout genre afficher l'année moyenne, minimum et maximum de disques contenant des chansons de ce genre. 
| a | b |
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|
|Options|##Configuration|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
	config.options.chkSinglePageMode=eval(v);
	if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
	config.options.chkSinglePageMode=true;
if (config.options.chkSinglePagePermalink==undefined)
	config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
	config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
	config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
	config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
	config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
	config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
		story.displayTiddler(null,tids[0]);
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
		story.closeAllTiddlers();
		story.displayTiddlers(null,tids);
	}
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
	Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;
	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
				return;
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
			}
			story.closeTiddler(tid);
		});
	}
	else if (top)
		arguments[0]=null;
	else if (bottom)
		arguments[0]="bottom";
	if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
			tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
		else if (bottom)
			tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=document.getElementById(story.idPrefix+title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;
		setTimeout("window.scrollTo(0,"+yPos+")",delay); 
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
	Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	opt.chkBottomOfPageMode=saveBPM;
	opt.chkTopOfPageMode=saveTPM;
	opt.chkSinglePageMode=saveSPM;
}
//}}}
/***
|Name|SinglePageModePluginInfo|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|Documentation for SinglePageModePlugin|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.  SinglePageModePlugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.
!!!!!Usage
<<<
When the plugin is enabled, only one tiddler will be displayed at a time and the browser window's titlebar is updated to include the current tiddler title.  The browser's location URL is also updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.  Alternatively, even when displaying multiple tiddlers //is// permitted, you can still reduce the potential for confusion by forcing  tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* {{block{
The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}. You can also use {{{SPM:expression}}}, where 'expression' is any javascript statement that evaluates to true or false.  This allows you to create hard-coded links in other documents that can selectively enable/disable the use of this option based on various programmatic conditions, such as the current username. For example, using
&nbsp;&nbsp;&nbsp;{{{#SPM:config.options.txtUserName!="SomeName"}}}
enables 'one tiddler at a time' display for all users //other than// "~SomeName")}}}
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
2008.06.12 [2.9.5] corrected 'scroll to top of page' logic in auto-scroll handling
2008.06.11 [2.9.4] added chkSinglePageKeepEditedTiddlers option
2008.06.05 [2.9.3] in displayTiddler(), bypass single/top/bottom mode handling if startingUp.  Allows multiple tiddlers to be displayed during startup processing (e.g., #story:DefaultTiddlers), even if single/top/bottom mode is enabled.
2008.04.18 [2.9.2] in displayTiddler() and checkLastURL(), handling for Unicode in tiddler titles (remove explicit conversion between Unicode and UTF, as this is apparently done automatically by encode/decodeURIComponent, resulting in double-encoding!
2008.04.08 [2.9.1] don't automatically add options to AdvancedOptions shadow tiddler
2008.04.02 [2.9.0] in displayTiddler(), when single-page mode is in use and a tiddler is being edited, ask for permission to save-and-close that tiddler, instead of just leaving it open.
2008.03.29 [2.8.3] in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.14 [2.8.2] in displayTiddler(), if editing specified tiddler, just move it to top/bottom of story *without* re-rendering (prevents discard of partial edits).
2008.03.06 [2.8.1] in paramifier handler, start 'checkURL' timer if chkSinglePageMode is enabled
2008.03.06 [2.8.0] added option, {{{config.options.chkSinglePageKeepFoldedTiddlers}}}, so folded tiddlers won't be closed when using single-page mode.  Also, in checkURL(), if hash is a ''permaview'' (e.g., "#foo bar baz"), then display multiple tiddlers rather than attempting to display "foo bar baz" as a single tiddler
2008.03.05 [2.7.0] added support for "SPM:" URL paramifier
2008.03.01 [2.6.0] in hijack of displayTiddler(), added 'title' argument to closeAllTiddlers() so that target tiddler isn't closed-and-reopened if it was already displayed.  Also, added config.options.chkSinglePageAutoScrolloption to bypass automatic 'scroll into view' logic (note: core still does it's own ensureVisible() handling)
2007.12.22 [2.5.3] in checkLastURL(), use decodeURIComponent() instead of decodeURI so that tiddler titles with commas (and/or other punctuation) are correctly handled.
2007.10.26 [2.5.2] documentation cleanup
2007.10.08 [2.5.1] in displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.
2007.09.13 [2.5.0] for TPM/BPM modes, don't force tiddler to redisplay if already shown.  Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.
2007.09.12 [2.4.0] added option to disable automatic permalink feature.  Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.
2007.03.03 [2.3.1] fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
2007.03.03 [2.3.0] added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
2007.02.06 [2.2.3] in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
2007.01.08 [2.2.2] use apply() to invoke hijacked core functions
2006.07.04 [2.2.1] in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
2006.06.01 [2.2.0] added chkTopOfPageMode (TPM) handling
2006.02.04 [2.1.1] moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2005.12.27 [2.1.0] hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list).  Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
2005.12.27 [2.0.0] Update for TW2.0
2005.11.24 [1.1.2] When the back and forward buttons are used, the page now changes to match the URL.  Based on code added by Clint Checketts
2005.10.14 [1.1.1] permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
2005.10.14 [1.1.0] added automatic setting of window title and location bar ('auto-permalink').  feature suggestion by David Dickens.
2005.10.09 [1.0.1] combined documentation and code in a single tiddler
2005.08.15 [1.0.0] Initial Release
<<<
 New Page is here http://researchers.lille.inria.fr/~staworko/index.html  
--Sławek Staworko-- OLD OBSOLETE home page
http://www.grappa.univ-lille3.fr/~staworko/
/***
This fixes a problem with the tabs slider
***/
/*{{{*/
#sidebarTabs .button {
    margin:0em 0.2em;
    padding:0.2em 0.3em;
    display:block;
}
/*}}}*/
/***
Toolbar
***/
/*{{{*/
.toolbar {color:[[ColorPalette::Background]];}
.toolbar a {color:[[ColorPalette::Background]];}
/*}}}*/
/***
Bigger fonts
***/
/*{{{*/
.viewer {
  line-height: 125%;
/*  font-family: serif;*/
  font-size: 12pt;
}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<<list shadowed>>
|~ViewToolbar|closeTiddler > closeOthers +editTiddler fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
Ici, vous pouvez trouver quelques implémentations de la Transformée de Fourier Rapide (FFT de l'ang. Fast Fourier Tranform). La FFT est largement utilisée dans la domaine de traitement de signal. Pourtant, j'ai suivi la présentation utilisée dans le chapitre 32 de "//Intorduction to Algorithms//" par T. Cormen où elle est introduite pour multiplier vite deux polynômes. La méthode directe de multiplication de deux polynômes prend $O(n^2)$ de temps. Cependant, FFT permet de le faire en temps $O(n log n).$ 

Le package que j'ai préparé comprend 5 méthodes de calculer une convolution de deux vecteurs (le nom formel associé avec multiplication des polynômes):
* Méthode directe qui est exacte mais pour de grandes données n'est pas très efficace
* Méthode basée sur l'interpolation et l'évaluation des polynômes.
* 3 Méthodes basées sur FFT:
** FFT Récursive qui est vite. 
** FFT Itérative qui est même plus vite grâce à l'élimination des appelles récursives.  
** FFT Parallèle qui permet de profiter de plusieurs processeurs.  

Tous les algorithmes ont été implémentés en C#. J'ai utilisé le compiler [[Mono|http://www.mono-project.com]] et le système [[Doxygen|http://www.doxygen.org]] . Les [[sources|teaching/aac08/fft-src.tar.gz]], la [[documentation d'API|teaching/aac08/fft-doc/index.html]] et l'[[exécutable|teaching/aac08/FFT.exe]] sont disponibles. 
''Sujet'' : Le calcul de la distance d'édition entre un arbre et un langage régulier d'arbres
''Équipe'' : [[Mostrare|http://mostrare.lille.inria.fr/]]
''Responsable HDR'' : [[Sophie Tison|http://www.lifl.fr/~tison/]]
''Encadrant'' : Slawek Staworko et [[Sophie Tison|http://www.lifl.fr/~tison/]]

''Descriptif'' :La distance d'édition entre deux objets est définie comme le nombre minimal d'opérations élémentaires d'édition pour transformer l'objet de départ en l'objet cible. Les variants les plus connus et étudiés sont la distance d'édition des mots et la distance d'édition des arbres. Les deux variants ont de nombreux applications dans presque tous les domaines de l'informatique comme bioinformatique, compression et cryptographie.

La distance d'édition est généralisée en remplaçant l'objet cible par un ensemble d'objets cibles possibles et le but est d'attendre un objet cible avec le nombre minimal d'opérations élémentaires. L'ensemble d'objets cibles est typiquement représenté avec un formalisme régulière comme un automate des mot ou un automate des arbres.

Le calcul de la distance d'édition entre un mot et un langage régulier est effectué avec un algorithme qui généralise l'algorithme standard du calcul de la distance d'édition entre deux mot. Cependant, le calcul de la distance d'édition entre un arbre et un langage régulier d'arbres n'a pas toujours été abordé. Le but de ce projet sera généraliser les algorithmes du calcul de la distance d'édition entre deux arbres. Il est évident que ce but est atteignable mais la complexité de l'algorithme final peut être peu attrayant. Par conséquent, le projet visera aussi à développer des heuristiques permettant un calcul plus rapide.
''Sujet'' : L'apprentissage automatique des requêtes ~XPath.
''Équipe'' : [[Mostrare|http://mostrare.lille.inria.fr/]]
''Responsable HDR'' : [[Remi Gilleron|http://www.grappa.univ-lille3.fr/~gilleron/index.html]]
''Encadrants'' : Slawek Staworko et [[Fabien Torre|http://www.grappa.univ-lille3.fr/~torre/]]

''Descriptif'' : 

Un des événements les plus importants de l'informatique et des bases de données durant la dernière décade est l'adoption de XML comme un standard d'échange des données sur le Web et la profusion de données utilisant ce format qui a suivi. Plusieurs langages permettant le traitement des données XML ont été proposées par la communauté informatique, il s'agit de ~XPath, XSLT et ~XQuery. De plus, des implémentations efficaces d'outils basés sur ces langages ont rapidement été proposés. Cependant, ces langages restent difficiles à utiliser par M. Dupont.

Nous proposons d'assister un tel utilisateur lambda à l'aide d'algorithmes d'apprentissage automatique de requêtes ~XPath. Dans ce cadre l'utilisateur indique sur un fragment du document XML des noeuds qu'il veut sélectionner. L'algorithme calcule une requête en généralisant la sélection de l'utilisateur. Ensuite, l'utilisateur observe sur un fragment plus grand du document XML si la requête se comporte comme voulu. L'utilisateur peut alors soit ajouter de nouveaux éléments à la sélection pour indiquer que la généralisation n'était pas assez robuste, soit marquer certains noeuds comme interdits si l'algorithme a trop généralisé. Cette interaction se poursuit jusqu'à ce que l'algorithme produise une requête qui satisfait l'utilisateur. 

Notre recherche se concentre sur un fragment de ~XPath très souvent utilisé en pratique et connu sous le nom de « requêtes Twig » (d'après la représentation graphique de ces requêtes). Nos résultats préliminaires indiquent que cette classe n'est pas apprenable. Cependant, nous avons étendu cette classe avec l'opérateur d'union, obtenant ainsi une nouvelle classe ~UTwig. Chose étonnante, cette classe étant plus puissante elle permet d'éviter les problèmes qui rendent Twig impossible à apprendre. Nous avons également identifié un ensemble d'opérations de généralisation simples et intuitives que nous pensons suffisant pour permettre d'inférer les requêtes d'utilisateur. Nous avons également construit une première version d'algorithme d'inférence des requêtes basée sur ces opérations de généralisation.

Le but du stage est une implémentation de l'algorithme d'inférence de requêtes ~UTwig à partir d'exemples donnés par l'utilisateur. A priori, l'algorithme devrait suivre les grandes lignes données ci-dessus. Il s'agira également de construire une suite de tests qui permettant d'évaluer le fonctionnement de l'algorithme et de l'approche en elle-même. Comme beaucoup de questions théoriques sur l'apprenabilité des requêtes ~XPath sont toujours ouvertes, il est envisageable de continuer ce projet en stage voire en thèse. 

Un rapport interne avec des résultats préliminaires est disponible. Pour l'obtenir et toute question supplémentaire, contactez Slawek Staworko <slawomir.staworko@inria.fr>.
''Sujet'' : L'apprentissage automatique des requêtes ~XPath en présence de schema
''Équipe'' : [[Mostrare|http://mostrare.lille.inria.fr/]]
''Responsable HDR'' : [[Remi Gilleron|http://www.grappa.univ-lille3.fr/~gilleron/index.html]]
''Encadrants'' : Slawek Staworko et [[Fabien Torre|http://www.grappa.univ-lille3.fr/~torre/]]

''Descriptif'' : 

Récemment nous avons développé une suite d'algorithmes d'apprentissage des requêtes ~XPath à partir des exemples donnés par un utilisateur. Un tel algorithme prend un ensemble des documents XML avec certains éléments annotés comme requis (exemples positives) et certains éléments annotés comme interdits (exemples négatives). Le résultat de l'algorithme est une requête ~XPath qui sélectionne tous les noeuds requis et aucun noeud interdit (la requête peut aussi englober à volonté des noeuds non-annotés). Nous avons construit une famille d'algorithmes qui travaillent uniquement avec des exemples positives et une famille d'algorithmes qui acceptent des exemples positives et négatives. En plus, nous avons évalué ses algorithmes sur plusieurs corpus XML. 

Nos résultats montrent que nos algorithmes apprennent des requêtes contentant des conditions essentielles pour sélectionner des noeuds requis. Cependant, les documents typiquement suivent une certaine schéma qui est souvent donnée en forme d'un DTD ou XML Schema. Comme certains de nos algorithmes d'apprentissage sont basés sur l'identification de tous les motives commun aux exemples positives, les requêtes  contiendront beaucoup de conditions qui suivent du schéma des documents. Ces conditions, étant toujours satisfaites par les documents du domaine, servent essentiellement à rien, mais leur présence augmente la taille de la requête, peut la rendre illisible et augmente le temps de l'évaluation de la requête. 

Le but de ce projet est de trouver des mécanismes permettant de profiter du schéma des documents afin d'éviter l'ajout des conditions redondantes pendant l'apprentissage des requêtes. Le premier étape comprendra une étude de la complexité du problème intrinsèque à l'identification des redondances: le problème d'inclusion et d'équivalence des requêtes en présence du schéma. Il est bien connu que ce genre de problèmes sont typiquement (coNP-)dures. Le but ici sera d'identifier les sous-classes des requêtes et les classes de schéma pour lesquelles ce problème devient décidable en temps polynomial. Ensuite, il faudra utiliser ses résultat pour modifier des algorithmes d'apprentissage pour améliorer la qualité des requêtes construites.
/***
Some set-up for read-only users
***/
//{{{
if (readOnly) 
    config.options.chkFilterPublicTagsSearch = true;
//}}}

/***
Set the main theme
***/
//{{{
config.options.txtTheme = "MainTheme";
//}}}