ocaml todo

This commit is contained in:
Francesco Mecca 2020-02-17 17:31:11 +01:00
parent 033becaf80
commit 0d7ed5e91d
27 changed files with 100592 additions and 0 deletions

17
tesi/Makefile Normal file
View file

@ -0,0 +1,17 @@
SRC = prova.tex
AUX = prova.aux
DEL = prova.aux prova.bbl prova.blg prova.log prova.out
NAME = prova
prova:
@echo
@echo "=== Removing temporary files ==="
rm -f $(DEL)
@echo
@echo "=== Building from scratch ==="
pdflatex $(SRC)
bibtex $(AUX)
pdflatex $(SRC)
pdflatex $(SRC)
@echo
@echo "=== All done. Generated $(NAME).pdf ==="

17
tesi/galla/Makefile Normal file
View file

@ -0,0 +1,17 @@
SRC = tesi.tex
AUX = tesi.aux
DEL = tesi.aux tesi.bbl tesi.blg tesi.log tesi.out
NAME = tesi
tesi:
@echo
@echo "=== Removing temporary files ==="
rm -f $(DEL)
@echo
@echo "=== Building from scratch ==="
pdflatex $(SRC)
bibtex $(AUX)
pdflatex $(SRC)
pdflatex $(SRC)
@echo
@echo "=== All done. Generated $(NAME).pdf ==="

8
tesi/galla/preview.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
pid=$(ps a | grep -i "tesi.pdf" | grep -v grep | cut -d" " -f 1)
make
if [[ ! -z $pid ]]; then
kill $pid
fi
mupdf tesi.pdf &

95
tesi/galla/tesi.aux Normal file
View file

@ -0,0 +1,95 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent }
\newlabel{sec:org6f2d2bd}{{1}{1}{Introduction}{section.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Model Checking}{1}{subsection.1.1}\protected@file@percent }
\newlabel{sec:org4914978}{{1.1}{1}{Model Checking}{subsection.1.1}{}}
\citation{Pnueli77}
\citation{ClarkeE81}
\citation{Lamport80}
\citation{EmersonH86}
\citation{Vardi95}
\citation{Keller76}
\citation{Sistlac85}
\citation{Holzmann97}
\citation{HolzmannPy96}
\citation{FernandezMJJ92}
\citation{Peled96}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}A brief history of LTL model checking}{3}{subsection.1.2}\protected@file@percent }
\newlabel{sec:org25c390b}{{1.2}{3}{A brief history of LTL model checking}{subsection.1.2}{}}
\citation{SymbMC}
\citation{Clarke08}
\citation{ClarkeES86}
\citation{KantLMPBD15}
\citation{DijkP17}
\citation{CimattiCGGPRST02}
\citation{BiereCCZ99}
\citation{BolligW96}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}The origin of symbolic model checking}{4}{subsection.1.3}\protected@file@percent }
\newlabel{sec:orgce6f633}{{1.3}{4}{The origin of symbolic model checking}{subsection.1.3}{}}
\citation{BabarM10}
\citation{BabarBDM10}
\citation{AmparoreDBGM17}
\citation{ClarkeGH97}
\@writefile{toc}{\contentsline {section}{\numberline {2}Background}{5}{section.2}\protected@file@percent }
\newlabel{sec:orga42ce82}{{2}{5}{Background}{section.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Linear Temporal Logic}{5}{subsection.2.1}\protected@file@percent }
\newlabel{sec:orgdbca314}{{2.1}{5}{Linear Temporal Logic}{subsection.2.1}{}}
\@writefile{toc}{\contentsline {paragraph}{LTL Semantics}{6}{section*.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}CTL*}{6}{subsection.2.2}\protected@file@percent }
\newlabel{sec:orgfa1652d}{{2.2}{6}{CTL*}{subsection.2.2}{}}
\citation{Bryant86}
\citation{MDD}
\@writefile{toc}{\contentsline {paragraph}{CTL* Semantics}{7}{section*.2}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{State formulae: semantics}{7}{section*.3}\protected@file@percent }
\@writefile{toc}{\contentsline {paragraph}{Path formulae: semantics}{7}{section*.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Decision Diagrams}{8}{subsection.2.3}\protected@file@percent }
\newlabel{sec:org4ea21ea}{{2.3}{8}{Decision Diagrams}{subsection.2.3}{}}
\@writefile{toc}{\contentsline {paragraph}{Reduced ordered MDDs}{8}{section*.5}\protected@file@percent }
\citation{VardiW94}
\bibstyle{/usr/share/texmf-dist/bibtex/bst/base/acm}
\bibdata{tesi}
\bibcite{AmparoreDBGM17}{1}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Automata over infinite words}{9}{subsection.2.4}\protected@file@percent }
\newlabel{sec:org350d6d0}{{2.4}{9}{Automata over infinite words}{subsection.2.4}{}}
\bibcite{BabarBDM10}{2}
\bibcite{BabarM10}{3}
\bibcite{BiereCCZ99}{4}
\bibcite{BolligW96}{5}
\bibcite{Bryant86}{6}
\bibcite{CimattiCGGPRST02}{7}
\bibcite{Clarke08}{8}
\bibcite{ClarkeE81}{9}
\bibcite{ClarkeES86}{10}
\bibcite{ClarkeGH97}{11}
\bibcite{EmersonH86}{12}
\bibcite{FernandezMJJ92}{13}
\bibcite{Holzmann97}{14}
\bibcite{HolzmannPy96}{15}
\bibcite{MDD}{16}
\bibcite{KantLMPBD15}{17}
\bibcite{Keller76}{18}
\bibcite{Lamport80}{19}
\bibcite{SymbMC}{20}
\bibcite{Peled96}{21}
\bibcite{Pnueli77}{22}
\bibcite{Sistlac85}{23}
\bibcite{DijkP17}{24}
\bibcite{Vardi95}{25}
\bibcite{VardiW94}{26}

180
tesi/galla/tesi.bbl Normal file
View file

@ -0,0 +1,180 @@
\begin{thebibliography}{10}
\bibitem{AmparoreDBGM17}
{\sc Amparore, E.~G., Donatelli, S., Beccuti, M., Garbi, G., and Miner, A.~S.}
\newblock Decision diagrams for petri nets: Which variable ordering?
\newblock In {\em Proceedings of the International Workshop on Petri Nets and
Software Engineering (PNSE'17), co-located with the38th International
Conference on Application and Theory of Petri Nets and Concurrency Petri Nets
2017 and the 17th International Conference on Application of Concurrency to
System Design {ACSD} 2017, Zaragoza, Spain, June 25-30, 2017\/} (2017),
D.~Moldt, L.~Cabac, and H.~R{\"{o}}lke, Eds., vol.~1846 of {\em {CEUR}
Workshop Proceedings}, CEUR-WS.org, pp.~31--50.
\bibitem{BabarBDM10}
{\sc Babar, J., Beccuti, M., Donatelli, S., and Miner, A.~S.}
\newblock Greatspn enhanced with decision diagram data structures.
\newblock In {\em Applications and Theory of Petri Nets, 31st International
Conference, {PETRI} {NETS} 2010, Braga, Portugal, June 21-25, 2010.
Proceedings\/} (2010), J.~Lilius and W.~Penczek, Eds., vol.~6128 of {\em
Lecture Notes in Computer Science}, Springer, pp.~308--317.
\bibitem{BabarM10}
{\sc Babar, J., and Miner, A.~S.}
\newblock Meddly: Multi-terminal and edge-valued decision diagram library.
\newblock In {\em {QEST} 2010, Seventh International Conference on the
Quantitative Evaluation of Systems, Williamsburg, Virginia, USA, 15-18
September 2010\/} (2010), {IEEE} Computer Society, pp.~195--196.
\bibitem{BiereCCZ99}
{\sc Biere, A., Cimatti, A., Clarke, E.~M., and Zhu, Y.}
\newblock Symbolic model checking without bdds.
\newblock In {\em Tools and Algorithms for Construction and Analysis of
Systems, 5th International Conference, {TACAS} '99, Held as Part of the
European Joint Conferences on the Theory and Practice of Software, ETAPS'99,
Amsterdam, The Netherlands, March 22-28, 1999, Proceedings\/} (1999),
R.~Cleaveland, Ed., vol.~1579 of {\em Lecture Notes in Computer Science},
Springer, pp.~193--207.
\bibitem{BolligW96}
{\sc Bollig, B., and Wegener, I.}
\newblock Improving the variable ordering of obdds is np-complete.
\newblock {\em {IEEE} Trans. Computers 45}, 9 (1996), 993--1002.
\bibitem{Bryant86}
{\sc Bryant, R.~E.}
\newblock Graph-based algorithms for boolean function manipulation.
\newblock {\em {IEEE} Trans. Computers 35}, 8 (1986), 677--691.
\bibitem{CimattiCGGPRST02}
{\sc Cimatti, A., Clarke, E.~M., Giunchiglia, E., Giunchiglia, F., Pistore, M.,
Roveri, M., Sebastiani, R., and Tacchella, A.}
\newblock Nusmv 2: An opensource tool for symbolic model checking.
\newblock In {\em Computer Aided Verification, 14th International Conference,
{CAV} 2002,Copenhagen, Denmark, July 27-31, 2002, Proceedings\/} (2002),
E.~Brinksma and K.~G. Larsen, Eds., vol.~2404 of {\em Lecture Notes in
Computer Science}, Springer, pp.~359--364.
\bibitem{Clarke08}
{\sc Clarke, E.~M.}
\newblock The birth of model checking.
\newblock In {\em 25 Years of Model Checking - History, Achievements,
Perspectives\/} (2008), O.~Grumberg and H.~Veith, Eds., vol.~5000 of {\em
Lecture Notes in Computer Science}, Springer, pp.~1--26.
\bibitem{ClarkeE81}
{\sc Clarke, E.~M., and Emerson, E.~A.}
\newblock Design and synthesis of synchronization skeletons using
branching-time temporal logic.
\newblock In {\em Logics of Programs, Workshop, Yorktown Heights, New York,
USA, May 1981\/} (1981), D.~Kozen, Ed., vol.~131 of {\em Lecture Notes in
Computer Science}, Springer, pp.~52--71.
\bibitem{ClarkeES86}
{\sc Clarke, E.~M., Emerson, E.~A., and Sistla, A.~P.}
\newblock Automatic verification of finite-state concurrent systems using
temporal logic specifications.
\newblock {\em {ACM} Trans. Program. Lang. Syst. 8}, 2 (1986), 244--263.
\bibitem{ClarkeGH97}
{\sc Clarke, E.~M., Grumberg, O., and Hamaguchi, K.}
\newblock Another look at {LTL} model checking.
\newblock {\em Formal Methods in System Design 10}, 1 (1997), 47--71.
\bibitem{EmersonH86}
{\sc Emerson, E.~A., and Halpern, J.~Y.}
\newblock "sometimes" and "not never" revisited: on branching versus linear
time temporal logic.
\newblock {\em J. {ACM} 33}, 1 (1986), 151--178.
\bibitem{FernandezMJJ92}
{\sc Fernandez, J., Mounier, L., Jard, C., and J{\'{e}}ron, T.}
\newblock On-the-fly verification of finite transition systems.
\newblock {\em Formal Methods in System Design 1}, 2/3 (1992), 251--273.
\bibitem{Holzmann97}
{\sc Holzmann, G.~J.}
\newblock The model checker {SPIN}.
\newblock {\em {IEEE} Trans. Software Eng. 23}, 5 (1997), 279--295.
\bibitem{HolzmannPy96}
{\sc Holzmann, G.~J., Peled, D.~A., and Yannakakis, M.}
\newblock On nested depth first search.
\newblock In {\em The Spin Verification System, Proceedings of a {DIMACS}
Workshop, New Brunswick, New Jersey, USA, August, 1996\/} (1996),
J.~Gr{\'{e}}goire, G.~J. Holzmann, and D.~A. Peled, Eds., vol.~32 of {\em
{DIMACS} Series in Discrete Mathematics and Theoretical Computer Science},
{DIMACS/AMS}, pp.~23--31.
\bibitem{MDD}
{\sc Kam, T., Villa, T., and Brayton, R.}
\newblock Multi-valued decision diagrams: Theory and applications,"
multiple-valued logic.
\newblock {\em Multiple-Valued Logic 4\/} (01 1998).
\bibitem{KantLMPBD15}
{\sc Kant, G., Laarman, A., Meijer, J., van~de Pol, J., Blom, S., and van Dijk,
T.}
\newblock Ltsmin: High-performance language-independent model checking.
\newblock In {\em Tools and Algorithms for the Construction and Analysis of
Systems - 21st International Conference, {TACAS} 2015, Held as Part of the
European Joint Conferences on Theory and Practice of Software, {ETAPS} 2015,
London, UK, April 11-18, 2015. Proceedings\/} (2015), C.~Baier and
C.~Tinelli, Eds., vol.~9035 of {\em Lecture Notes in Computer Science},
Springer, pp.~692--707.
\bibitem{Keller76}
{\sc Keller, R.~M.}
\newblock Formal verification of parallel programs.
\newblock {\em Commun. {ACM} 19}, 7 (1976), 371--384.
\bibitem{Lamport80}
{\sc Lamport, L.}
\newblock "sometime" is sometimes "not never" - on the temporal logic of
programs.
\newblock In {\em Conference Record of the Seventh Annual {ACM} Symposium on
Principles of Programming Languages, Las Vegas, Nevada, USA, January 1980\/}
(1980), P.~W. Abrahams, R.~J. Lipton, and S.~R. Bourne, Eds., {ACM} Press,
pp.~174--185.
\bibitem{SymbMC}
{\sc McMillan, K.~L.}
\newblock {\em Symbolic model checking}.
\newblock Kluwer, 1993.
\bibitem{Peled96}
{\sc Peled, D.~A.}
\newblock Combining partial order reductions with on-the-fly model-checking.
\newblock {\em Formal Methods in System Design 8}, 1 (1996), 39--64.
\bibitem{Pnueli77}
{\sc Pnueli, A.}
\newblock The temporal logic of programs.
\newblock In {\em 18th Annual Symposium on Foundations of Computer Science,
Providence, Rhode Island, USA, 31 October - 1 November 1977\/} (1977), {IEEE}
Computer Society, pp.~46--57.
\bibitem{Sistlac85}
{\sc Sistla, A.~P., and Clarke, E.~M.}
\newblock The complexity of propositional linear temporal logics.
\newblock {\em J. {ACM} 32}, 3 (1985), 733--749.
\bibitem{DijkP17}
{\sc van Dijk, T., and van~de Pol, J.}
\newblock Sylvan: multi-core framework for decision diagrams.
\newblock {\em {STTT} 19}, 6 (2017), 675--696.
\bibitem{Vardi95}
{\sc Vardi, M.~Y.}
\newblock An automata-theoretic approach to linear temporal logic.
\newblock In {\em Logics for Concurrency - Structure versus Automata (8th Banff
Higher Order Workshop, Banff, Canada, August 27 - September 3, 1995,
Proceedings)\/} (1995), F.~Moller and G.~M. Birtwistle, Eds., vol.~1043 of
{\em Lecture Notes in Computer Science}, Springer, pp.~238--266.
\bibitem{VardiW94}
{\sc Vardi, M.~Y., and Wolper, P.}
\newblock Reasoning about infinite computations.
\newblock {\em Inf. Comput. 115}, 1 (1994), 1--37.
\end{thebibliography}

664
tesi/galla/tesi.bib Normal file
View file

@ -0,0 +1,664 @@
@inproceedings{Pnueli77,
author = {Amir Pnueli},
title = {The Temporal Logic of Programs},
booktitle = {18th Annual Symposium on Foundations of Computer Science, Providence,
Rhode Island, USA, 31 October - 1 November 1977},
pages = {46--57},
year = {1977},
crossref = {DBLP:conf/focs/FOCS18},
url = {https://doi.org/10.1109/SFCS.1977.32},
doi = {10.1109/SFCS.1977.32},
timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
biburl = {https://dblp.org/rec/bib/conf/focs/Pnueli77},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/focs/FOCS18,
title = {18th Annual Symposium on Foundations of Computer Science, Providence,
Rhode Island, USA, 31 October - 1 November 1977},
publisher = {{IEEE} Computer Society},
year = {1977},
url = {https://ieeexplore.ieee.org/xpl/conhome/4567914/proceeding},
timestamp = {Wed, 16 Oct 2019 14:14:54 +0200},
biburl = {https://dblp.org/rec/bib/conf/focs/FOCS18},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{ClarkeE81,
author = {Edmund M. Clarke and
E. Allen Emerson},
title = {Design and Synthesis of Synchronization Skeletons Using Branching-Time
Temporal Logic},
booktitle = {Logics of Programs, Workshop, Yorktown Heights, New York, USA, May
1981},
pages = {52--71},
year = {1981},
crossref = {DBLP:conf/lop/1981},
url = {https://doi.org/10.1007/BFb0025774},
doi = {10.1007/BFb0025774},
timestamp = {Tue, 14 May 2019 10:00:52 +0200},
biburl = {https://dblp.org/rec/bib/conf/lop/ClarkeE81},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/lop/1981,
editor = {Dexter Kozen},
title = {Logics of Programs, Workshop, Yorktown Heights, New York, USA, May
1981},
series = {Lecture Notes in Computer Science},
volume = {131},
publisher = {Springer},
year = {1982},
url = {https://doi.org/10.1007/BFb0025769},
doi = {10.1007/BFb0025769},
isbn = {3-540-11212-X},
timestamp = {Tue, 14 May 2019 10:00:52 +0200},
biburl = {https://dblp.org/rec/bib/conf/lop/1981},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{EmersonH86,
author = {E. Allen Emerson and
Joseph Y. Halpern},
title = {"Sometimes" and "Not Never" revisited: on branching versus linear
time temporal logic},
journal = {J. {ACM}},
volume = {33},
number = {1},
pages = {151--178},
year = {1986},
url = {https://doi.org/10.1145/4904.4999},
doi = {10.1145/4904.4999},
timestamp = {Tue, 06 Nov 2018 12:51:44 +0100},
biburl = {https://dblp.org/rec/bib/journals/jacm/EmersonH86},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{Lamport80,
author = {Leslie Lamport},
title = {"Sometime" is Sometimes "Not Never" - On the Temporal Logic of Programs},
booktitle = {Conference Record of the Seventh Annual {ACM} Symposium on Principles
of Programming Languages, Las Vegas, Nevada, USA, January 1980},
pages = {174--185},
year = {1980},
crossref = {DBLP:conf/popl/1980},
url = {https://doi.org/10.1145/567446.567463},
doi = {10.1145/567446.567463},
timestamp = {Tue, 06 Nov 2018 11:07:43 +0100},
biburl = {https://dblp.org/rec/bib/conf/popl/Lamport80},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/popl/1980,
editor = {Paul W. Abrahams and
Richard J. Lipton and
Stephen R. Bourne},
title = {Conference Record of the Seventh Annual {ACM} Symposium on Principles
of Programming Languages, Las Vegas, Nevada, USA, January 1980},
publisher = {{ACM} Press},
year = {1980},
url = {http://dl.acm.org/citation.cfm?id=567446},
isbn = {0-89791-011-7},
timestamp = {Mon, 21 May 2012 16:19:49 +0200},
biburl = {https://dblp.org/rec/bib/conf/popl/1980},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@book{SymbMC,
author = {Kenneth L. McMillan},
title = {Symbolic model checking},
publisher = {Kluwer},
year = {1993},
url = {https://doi.org/10.1007/978-1-4615-3190-6},
doi = {10.1007/978-1-4615-3190-6},
isbn = {978-0-7923-9380-1},
timestamp = {Tue, 23 Jul 2019 12:44:35 +0200},
biburl = {https://dblp.org/rec/bib/books/daglib/0071856},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{Keller76,
author= {Robert M. Keller},
title = {Formal Verification of Parallel Programs},
journal = {Commun. {ACM}},
volume = {19},
number = {7},
pages = {371--384},
year = {1976},
url = {https://doi.org/10.1145/360248.360251},
doi = {10.1145/360248.360251},
timestamp = {Tue, 06 Nov 2018 12:51:40 +0100},
biburl = {https://dblp.org/rec/bib/journals/cacm/Keller76},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{SistlaC85,
author = {A. Prasad Sistla and
Edmund M. Clarke},
title = {The Complexity of Propositional Linear Temporal Logics},
journal = {J. {ACM}},
volume = {32},
number = {3},
pages = {733--749},
year = {1985},
url = {https://doi.org/10.1145/3828.3837},
doi = {10.1145/3828.3837},
timestamp = {Wed, 14 Nov 2018 10:35:24 +0100},
biburl = {https://dblp.org/rec/bib/journals/jacm/SistlaC85},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{Holzmann97,
author = {Gerard J. Holzmann},
title = {The Model Checker {SPIN}},
journal = {{IEEE} Trans. Software Eng.},
volume = {23},
number = {5},
pages = {279--295},
year = {1997},
url = {https://doi.org/10.1109/32.588521},
doi = {10.1109/32.588521},
timestamp = {Wed, 17 May 2017 10:56:37 +0200},
biburl = {https://dblp.org/rec/bib/journals/tse/Holzmann97},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{SPOT2,
author = {Alexandre Duret{-}Lutz and
Alexandre Lewkowicz and
Amaury Fauchille and
Thibaud Michaud and
Etienne Renault and
Laurent Xu},
title = {Spot 2.0 - {A} Framework for {LTL} and {\textbackslash}omega -Automata
Manipulation},
booktitle = {Automated Technology for Verification and Analysis - 14th International
Symposium, {ATVA} 2016, Chiba, Japan, October 17-20, 2016, Proceedings},
pages = {122--129},
year = {2016},
crossref = {DBLP:conf/atva/2016},
url = {https://doi.org/10.1007/978-3-319-46520-3\_8},
doi = {10.1007/978-3-319-46520-3\_8},
timestamp = {Tue, 14 May 2019 10:00:49 +0200},
biburl = {https://dblp.org/rec/bib/conf/atva/Duret-LutzLFMRX16},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/atva/2016,
editor = {Cyrille Artho and
Axel Legay and
Doron Peled},
title = {Automated Technology for Verification and Analysis - 14th International
Symposium, {ATVA} 2016, Chiba, Japan, October 17-20, 2016, Proceedings},
series = {Lecture Notes in Computer Science},
volume = {9938},
year = {2016},
url = {https://doi.org/10.1007/978-3-319-46520-3},
doi = {10.1007/978-3-319-46520-3},
isbn = {978-3-319-46519-7},
timestamp = {Tue, 14 May 2019 10:00:49 +0200},
biburl = {https://dblp.org/rec/bib/conf/atva/2016},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{HolzmannPY96,
author = {Gerard J. Holzmann and
Doron A. Peled and
Mihalis Yannakakis},
title = {On nested depth first search},
booktitle = {The Spin Verification System, Proceedings of a {DIMACS} Workshop,
New Brunswick, New Jersey, USA, August, 1996},
pages = {23--31},
year = {1996},
crossref = {DBLP:conf/dimacs/dimacs32},
url = {https://doi.org/10.1090/dimacs/032/03},
doi = {10.1090/dimacs/032/03},
timestamp = {Tue, 16 Jul 2019 16:47:56 +0200},
biburl = {https://dblp.org/rec/bib/conf/dimacs/HolzmannPY96},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/dimacs/dimacs32,
editor = {Jean{-}Charles Gr{\'{e}}goire and
Gerard J. Holzmann and
Doron A. Peled},
title = {The Spin Verification System, Proceedings of a {DIMACS} Workshop,
New Brunswick, New Jersey, USA, August, 1996},
series = {{DIMACS} Series in Discrete Mathematics and Theoretical Computer Science},
volume = {32},
publisher = {{DIMACS/AMS}},
year = {1997},
url = {https://doi.org/10.1090/dimacs/032},
doi = {10.1090/dimacs/032},
isbn = {978-0-8218-0680-7},
timestamp = {Tue, 16 Jul 2019 16:47:56 +0200},
biburl = {https://dblp.org/rec/bib/conf/dimacs/dimacs32},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{FernandezMJJ92,
author = {Jean{-}Claude Fernandez and
Laurent Mounier and
Claude Jard and
Thierry J{\'{e}}ron},
title = {On-the-fly Verification of Finite Transition Systems},
journal = {Formal Methods in System Design},
volume = {1},
number = {2/3},
pages = {251--273},
year = {1992},
url = {https://doi.org/10.1007/BF00121127},
doi = {10.1007/BF00121127},
timestamp = {Mon, 16 Sep 2019 14:47:14 +0200},
biburl = {https://dblp.org/rec/bib/journals/fmsd/FernandezMJJ92},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{Peled96,
author = {Doron A. Peled},
title = {Combining Partial Order Reductions with On-the-Fly Model-Checking},
journal = {Formal Methods in System Design},
volume = {8},
number = {1},
pages = {39--64},
year = {1996},
url = {https://doi.org/10.1007/BF00121262},
doi = {10.1007/BF00121262},
timestamp = {Sat, 27 May 2017 14:24:05 +0200},
biburl = {https://dblp.org/rec/bib/journals/fmsd/Peled96},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{ClarkeGH97,
author = {Edmund M. Clarke and
Orna Grumberg and
Kiyoharu Hamaguchi},
title = {Another Look at {LTL} Model Checking},
journal = {Formal Methods in System Design},
volume = {10},
number = {1},
pages = {47--71},
year = {1997},
url = {https://doi.org/10.1023/A:1008615614281},
doi = {10.1023/A:1008615614281},
timestamp = {Sat, 27 May 2017 14:24:04 +0200},
biburl = {https://dblp.org/rec/bib/journals/fmsd/ClarkeGH97},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{BabarBDM10,
author = {Junaid Babar and
Marco Beccuti and
Susanna Donatelli and
Andrew S. Miner},
title = {GreatSPN Enhanced with Decision Diagram Data Structures},
booktitle = {Applications and Theory of Petri Nets, 31st International Conference,
{PETRI} {NETS} 2010, Braga, Portugal, June 21-25, 2010. Proceedings},
pages = {308--317},
year = {2010},
crossref = {DBLP:conf/apn/2010},
url = {https://doi.org/10.1007/978-3-642-13675-7\_19},
doi = {10.1007/978-3-642-13675-7\_19},
timestamp = {Tue, 14 May 2019 10:00:45 +0200},
biburl = {https://dblp.org/rec/bib/conf/apn/BabarBDM10},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/apn/2010,
editor = {Johan Lilius and
Wojciech Penczek},
title = {Applications and Theory of Petri Nets, 31st International Conference,
{PETRI} {NETS} 2010, Braga, Portugal, June 21-25, 2010. Proceedings},
series = {Lecture Notes in Computer Science},
volume = {6128},
publisher = {Springer},
year = {2010},
url = {https://doi.org/10.1007/978-3-642-13675-7},
doi = {10.1007/978-3-642-13675-7},
isbn = {978-3-642-13674-0},
timestamp = {Tue, 14 May 2019 10:00:45 +0200},
biburl = {https://dblp.org/rec/bib/conf/apn/2010},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{MDD,
author = {Kam, Timothy and Villa, Tiziano and Brayton, R.K.},
year = {1998},
month = {01},
pages = {},
title = {Multi-valued decision diagrams: Theory and applications," Multiple-Valued Logic},
volume = {4},
journal = {Multiple-Valued Logic}
}
@inproceedings{Clarke08,
author = {Edmund M. Clarke},
title = {The Birth of Model Checking},
booktitle = {25 Years of Model Checking - History, Achievements, Perspectives},
pages = {1--26},
year = {2008},
crossref = {DBLP:conf/spin/5000},
url = {https://doi.org/10.1007/978-3-540-69850-0\_1},
doi = {10.1007/978-3-540-69850-0\_1},
timestamp = {Tue, 14 May 2019 10:00:36 +0200},
biburl = {https://dblp.org/rec/bib/conf/spin/Clarke08},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/spin/5000,
editor = {Orna Grumberg and
Helmut Veith},
title = {25 Years of Model Checking - History, Achievements, Perspectives},
series = {Lecture Notes in Computer Science},
volume = {5000},
publisher = {Springer},
year = {2008},
url = {https://doi.org/10.1007/978-3-540-69850-0},
doi = {10.1007/978-3-540-69850-0},
isbn = {978-3-540-69849-4},
timestamp = {Tue, 14 May 2019 10:00:36 +0200},
biburl = {https://dblp.org/rec/bib/conf/spin/5000},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{KantLMPBD15,
author = {Gijs Kant and
Alfons Laarman and
Jeroen Meijer and
Jaco van de Pol and
Stefan Blom and
Tom van Dijk},
title = {LTSmin: High-Performance Language-Independent Model Checking},
booktitle = {Tools and Algorithms for the Construction and Analysis of Systems
- 21st International Conference, {TACAS} 2015, Held as Part of the
European Joint Conferences on Theory and Practice of Software, {ETAPS}
2015, London, UK, April 11-18, 2015. Proceedings},
pages = {692--707},
year = {2015},
crossref = {DBLP:conf/tacas/2015},
url = {https://doi.org/10.1007/978-3-662-46681-0\_61},
doi = {10.1007/978-3-662-46681-0\_61},
timestamp = {Tue, 20 Aug 2019 15:27:24 +0200},
biburl = {https://dblp.org/rec/bib/conf/tacas/KantLMPBD15},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/tacas/2015,
editor = {Christel Baier and
Cesare Tinelli},
title = {Tools and Algorithms for the Construction and Analysis of Systems
- 21st International Conference, {TACAS} 2015, Held as Part of the
European Joint Conferences on Theory and Practice of Software, {ETAPS}
2015, London, UK, April 11-18, 2015. Proceedings},
series = {Lecture Notes in Computer Science},
volume = {9035},
publisher = {Springer},
year = {2015},
url = {https://doi.org/10.1007/978-3-662-46681-0},
doi = {10.1007/978-3-662-46681-0},
isbn = {978-3-662-46680-3},
timestamp = {Tue, 14 May 2019 10:00:53 +0200},
biburl = {https://dblp.org/rec/bib/conf/tacas/2015},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{DijkP17,
author = {Tom van Dijk and
Jaco van de Pol},
title = {Sylvan: multi-core framework for decision diagrams},
journal = {{STTT}},
volume = {19},
number = {6},
pages = {675--696},
year = {2017},
url = {https://doi.org/10.1007/s10009-016-0433-2},
doi = {10.1007/s10009-016-0433-2},
timestamp = {Sun, 02 Jun 2019 21:00:20 +0200},
biburl = {https://dblp.org/rec/bib/journals/sttt/DijkP17},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{BabarM10,
author = {Junaid Babar and
Andrew S. Miner},
title = {Meddly: Multi-terminal and Edge-Valued Decision Diagram LibrarY},
booktitle = {{QEST} 2010, Seventh International Conference on the Quantitative
Evaluation of Systems, Williamsburg, Virginia, USA, 15-18 September
2010},
pages = {195--196},
year = {2010},
crossref = {DBLP:conf/qest/2010},
url = {https://doi.org/10.1109/QEST.2010.34},
doi = {10.1109/QEST.2010.34},
timestamp = {Wed, 16 Oct 2019 14:14:56 +0200},
biburl = {https://dblp.org/rec/bib/conf/qest/BabarM10},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/qest/2010,
title = {{QEST} 2010, Seventh International Conference on the Quantitative
Evaluation of Systems, Williamsburg, Virginia, USA, 15-18 September
2010},
publisher = {{IEEE} Computer Society},
year = {2010},
url = {https://ieeexplore.ieee.org/xpl/conhome/5599994/proceeding},
isbn = {978-0-7695-4188-4},
timestamp = {Wed, 16 Oct 2019 14:14:56 +0200},
biburl = {https://dblp.org/rec/bib/conf/qest/2010},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{CimattiCGGPRST02,
author = {Alessandro Cimatti and
Edmund M. Clarke and
Enrico Giunchiglia and
Fausto Giunchiglia and
Marco Pistore and
Marco Roveri and
Roberto Sebastiani and
Armando Tacchella},
title = {NuSMV 2: An OpenSource Tool for Symbolic Model Checking},
booktitle = {Computer Aided Verification, 14th International Conference, {CAV}
2002,Copenhagen, Denmark, July 27-31, 2002, Proceedings},
pages = {359--364},
year = {2002},
crossref = {DBLP:conf/cav/2002},
url = {https://doi.org/10.1007/3-540-45657-0\_29},
doi = {10.1007/3-540-45657-0\_29},
timestamp = {Sun, 02 Jun 2019 21:10:36 +0200},
biburl = {https://dblp.org/rec/bib/conf/cav/CimattiCGGPRST02},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/cav/2002,
editor = {Ed Brinksma and
Kim Guldstrand Larsen},
title = {Computer Aided Verification, 14th International Conference, {CAV}
2002,Copenhagen, Denmark, July 27-31, 2002, Proceedings},
series = {Lecture Notes in Computer Science},
volume = {2404},
publisher = {Springer},
year = {2002},
url = {https://doi.org/10.1007/3-540-45657-0},
doi = {10.1007/3-540-45657-0},
isbn = {3-540-43997-8},
timestamp = {Tue, 14 May 2019 10:00:43 +0200},
biburl = {https://dblp.org/rec/bib/conf/cav/2002},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{BiereCCZ99,
author = {Armin Biere and
Alessandro Cimatti and
Edmund M. Clarke and
Yunshan Zhu},
title = {Symbolic Model Checking without BDDs},
booktitle = {Tools and Algorithms for Construction and Analysis of Systems, 5th
International Conference, {TACAS} '99, Held as Part of the European
Joint Conferences on the Theory and Practice of Software, ETAPS'99,
Amsterdam, The Netherlands, March 22-28, 1999, Proceedings},
pages = {193--207},
year = {1999},
crossref = {DBLP:conf/tacas/1999},
url = {https://doi.org/10.1007/3-540-49059-0\_14},
doi = {10.1007/3-540-49059-0\_14},
timestamp = {Sun, 02 Jun 2019 21:19:27 +0200},
biburl = {https://dblp.org/rec/bib/conf/tacas/BiereCCZ99},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/tacas/1999,
editor = {Rance Cleaveland},
title = {Tools and Algorithms for Construction and Analysis of Systems, 5th
International Conference, {TACAS} '99, Held as Part of the European
Joint Conferences on the Theory and Practice of Software, ETAPS'99,
Amsterdam, The Netherlands, March 22-28, 1999, Proceedings},
series = {Lecture Notes in Computer Science},
volume = {1579},
publisher = {Springer},
year = {1999},
url = {https://doi.org/10.1007/3-540-49059-0},
doi = {10.1007/3-540-49059-0},
isbn = {3-540-65703-7},
timestamp = {Tue, 14 May 2019 10:00:53 +0200},
biburl = {https://dblp.org/rec/bib/conf/tacas/1999},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{AmparoreDBGM17,
author = {Elvio Gilberto Amparore and
Susanna Donatelli and
Marco Beccuti and
Giulio Garbi and
Andrew S. Miner},
title = {Decision Diagrams for Petri Nets: Which Variable Ordering?},
booktitle = {Proceedings of the International Workshop on Petri Nets and Software
Engineering (PNSE'17), co-located with the38th International Conference
on Application and Theory of Petri Nets and Concurrency Petri Nets
2017 and the 17th International Conference on Application of Concurrency
to System Design {ACSD} 2017, Zaragoza, Spain, June 25-30, 2017},
pages = {31--50},
year = {2017},
crossref = {DBLP:conf/apn/2017pnse},
url = {http://ceur-ws.org/Vol-1846/paper3.pdf},
timestamp = {Tue, 28 May 2019 16:23:32 +0200},
biburl = {https://dblp.org/rec/bib/conf/apn/AmparoreDBGM17},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/apn/2017pnse,
editor = {Daniel Moldt and
Lawrence Cabac and
Heiko R{\"{o}}lke},
title = {Proceedings of the International Workshop on Petri Nets and Software
Engineering (PNSE'17), co-located with the38th International Conference
on Application and Theory of Petri Nets and Concurrency Petri Nets
2017 and the 17th International Conference on Application of Concurrency
to System Design {ACSD} 2017, Zaragoza, Spain, June 25-30, 2017},
series = {{CEUR} Workshop Proceedings},
volume = {1846},
publisher = {CEUR-WS.org},
year = {2017},
url = {http://ceur-ws.org/Vol-1846},
urn = {urn:nbn:de:0074-1846-1},
timestamp = {Tue, 28 May 2019 16:23:32 +0200},
biburl = {https://dblp.org/rec/bib/conf/apn/2017pnse},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{BolligW96,
author = {Beate Bollig and
Ingo Wegener},
title = {Improving the Variable Ordering of OBDDs Is NP-Complete},
journal = {{IEEE} Trans. Computers},
volume = {45},
number = {9},
pages = {993--1002},
year = {1996},
url = {https://doi.org/10.1109/12.537122},
doi = {10.1109/12.537122},
timestamp = {Wed, 14 Nov 2018 10:48:34 +0100},
biburl = {https://dblp.org/rec/bib/journals/tc/BolligW96},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{Bryant86,
author = {Randal E. Bryant},
title = {Graph-Based Algorithms for Boolean Function Manipulation},
journal = {{IEEE} Trans. Computers},
volume = {35},
number = {8},
pages = {677--691},
year = {1986},
url = {https://doi.org/10.1109/TC.1986.1676819},
doi = {10.1109/TC.1986.1676819},
timestamp = {Wed, 14 Nov 2018 10:48:32 +0100},
biburl = {https://dblp.org/rec/bib/journals/tc/Bryant86},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{Vardi95,
author = {Moshe Y. Vardi},
title = {An Automata-Theoretic Approach to Linear Temporal Logic},
booktitle = {Logics for Concurrency - Structure versus Automata (8th Banff Higher
Order Workshop, Banff, Canada, August 27 - September 3, 1995, Proceedings)},
pages = {238--266},
year = {1995},
crossref = {DBLP:conf/banff/1995},
url = {https://doi.org/10.1007/3-540-60915-6\_6},
doi = {10.1007/3-540-60915-6\_6},
timestamp = {Sun, 02 Jun 2019 21:10:52 +0200},
biburl = {https://dblp.org/rec/bib/conf/banff/Vardi95},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@proceedings{DBLP:conf/banff/1995,
editor = {Faron Moller and
Graham M. Birtwistle},
title = {Logics for Concurrency - Structure versus Automata (8th Banff Higher
Order Workshop, Banff, Canada, August 27 - September 3, 1995, Proceedings)},
series = {Lecture Notes in Computer Science},
volume = {1043},
publisher = {Springer},
year = {1996},
url = {https://doi.org/10.1007/3-540-60915-6},
doi = {10.1007/3-540-60915-6},
isbn = {3-540-60915-6},
timestamp = {Sun, 02 Jun 2019 21:10:52 +0200},
biburl = {https://dblp.org/rec/bib/conf/banff/1995},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{VardiW94,
author = {Moshe Y. Vardi and
Pierre Wolper},
title = {Reasoning About Infinite Computations},
journal = {Inf. Comput.},
volume = {115},
number = {1},
pages = {1--37},
year = {1994},
url = {https://doi.org/10.1006/inco.1994.1092},
doi = {10.1006/inco.1994.1092},
timestamp = {Wed, 14 Nov 2018 10:35:07 +0100},
biburl = {https://dblp.org/rec/bib/journals/iandc/VardiW94},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{ClarkeES86,
author = {Edmund M. Clarke and
E. Allen Emerson and
A. Prasad Sistla},
title = {Automatic Verification of Finite-State Concurrent Systems Using Temporal
Logic Specifications},
journal = {{ACM} Trans. Program. Lang. Syst.},
volume = {8},
number = {2},
pages = {244--263},
year = {1986},
url = {https://doi.org/10.1145/5397.5399},
doi = {10.1145/5397.5399},
timestamp = {Wed, 14 Nov 2018 10:30:40 +0100},
biburl = {https://dblp.org/rec/bib/journals/toplas/ClarkeES86},
bibsource = {dblp computer science bibliography, https://dblp.org}
}

46
tesi/galla/tesi.blg Normal file
View file

@ -0,0 +1,46 @@
This is BibTeX, Version 0.99d (TeX Live 2019 Gentoo Linux)
Capacity: max_strings=100000, hash_size=100000, hash_prime=85009
The top-level auxiliary file: tesi.aux
The style file: /usr/share/texmf-dist/bibtex/bst/base/acm.bst
Database file #1: tesi.bib
You've used 26 entries,
2253 wiz_defined-function locations,
761 strings with 10388 characters,
and the built_in function-call counts, 10476 in all, are:
= -- 1027
> -- 463
< -- 0
+ -- 184
- -- 153
* -- 858
:= -- 1624
add.period$ -- 78
call.type$ -- 26
change.case$ -- 143
chr.to.int$ -- 0
cite$ -- 26
duplicate$ -- 406
empty$ -- 857
format.name$ -- 153
if$ -- 2231
int.to.chr$ -- 0
int.to.str$ -- 26
missing$ -- 27
newline$ -- 133
num.names$ -- 72
pop$ -- 140
preamble$ -- 1
purify$ -- 118
quote$ -- 0
skip$ -- 285
stack$ -- 0
substring$ -- 756
swap$ -- 145
text.length$ -- 0
text.prefix$ -- 0
top$ -- 0
type$ -- 102
warning$ -- 0
while$ -- 122
width$ -- 28
write$ -- 292

692
tesi/galla/tesi.log Normal file
View file

@ -0,0 +1,692 @@
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019 Gentoo Linux) (preloaded format=pdflatex 2020.2.13) 13 FEB 2020 15:23
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**tesi.tex
(./tesi.tex
LaTeX2e <2018-12-01>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size11.clo
File: size11.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
)
\c@part=\count80
\c@section=\count81
\c@subsection=\count82
\c@subsubsection=\count83
\c@paragraph=\count84
\c@subparagraph=\count85
\c@figure=\count86
\c@table=\count87
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
)
(/usr/share/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2018/08/11 v1.3c Input encoding file
\inpenc@prehook=\toks14
\inpenc@posthook=\toks15
)
(/usr/share/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2018/08/11 v2.0j Standard LaTeX package
(/usr/share/texmf-dist/tex/latex/base/t1enc.def
File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file
LaTeX Font Info: Redeclaring font encoding T1 on input line 48.
))
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks16
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 99.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
))
\Gin@req@height=\dimen103
\Gin@req@width=\dimen104
)
(/usr/share/texmf-dist/tex/latex/oberdiek/grffile.sty
Package: grffile 2017/06/30 v1.18 Extended file name support for graphics (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty
Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch
)
(/usr/share/texmf-dist/tex/generic/ifxetex/ifxetex.sty
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
)
(/usr/share/texmf-dist/tex/latex/oberdiek/kvoptions.sty
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
)
(/usr/share/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/infwarerr.sty
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
)
(/usr/share/texmf-dist/tex/generic/oberdiek/etexcmds.sty
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
Package ifluatex Info: LuaTeX not detected.
))))
(/usr/share/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO
)
Package pdftexcmds Info: LuaTeX not detected.
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
)
Package grffile Info: Option `multidot' is set to `true'.
Package grffile Info: Option `extendedchars' is set to `false'.
Package grffile Info: Option `space' is set to `true'.
Package grffile Info: \Gin@ii of package `graphicx' fixed on input line 494.
)
(/usr/share/texmf-dist/tex/latex/tools/longtable.sty
Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC)+ FMi change
\LTleft=\skip43
\LTright=\skip44
\LTpre=\skip45
\LTpost=\skip46
\LTchunksize=\count88
\LTcapwidth=\dimen105
\LT@head=\box27
\LT@firsthead=\box28
\LT@foot=\box29
\LT@lastfoot=\box30
\LT@cols=\count89
\LT@rows=\count90
\c@LT@tables=\count91
\c@LT@chunks=\count92
\LT@p@ftn=\toks17
) (./wrapfig.sty
\wrapoverhang=\dimen106
\WF@size=\dimen107
\c@WF@wrappedlines=\count93
\WF@box=\box31
\WF@everypar=\toks18
Package: wrapfig 2003/01/31 v 3.6
)
(/usr/share/texmf-dist/tex/latex/graphics/rotating.sty
Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX
(/usr/share/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
)
\c@r@tfl@t=\count94
\rotFPtop=\skip47
\rotFPbot=\skip48
\rot@float@box=\box32
\rot@mess@toks=\toks19
)
(/usr/share/texmf-dist/tex/generic/ulem/ulem.sty
\UL@box=\box33
\UL@hyphenbox=\box34
\UL@skip=\skip49
\UL@hook=\toks20
\UL@height=\dimen108
\UL@pe=\count95
\UL@pixel=\dimen109
\ULC@box=\box35
Package: ulem 2012/05/18
\ULdepth=\dimen110
)
(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2018/12/01 v2.17b AMS math features
\@mathmargin=\skip50
For additional information on amsmath, use the `?' option.
(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2000/06/29 v2.01 AMS text
(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks21
\ex@=\dimen111
))
(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen112
)
(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 2016/03/08 v2.02 operator names
)
\inf@bad=\count96
LaTeX Info: Redefining \frac on input line 223.
\uproot@=\count97
\leftroot@=\count98
LaTeX Info: Redefining \overline on input line 385.
\classnum@=\count99
\DOTSCASE@=\count100
LaTeX Info: Redefining \ldots on input line 482.
LaTeX Info: Redefining \dots on input line 485.
LaTeX Info: Redefining \cdots on input line 606.
\Mathstrutbox@=\box36
\strutbox@=\box37
\big@size=\dimen113
LaTeX Font Info: Redeclaring font encoding OML on input line 729.
LaTeX Font Info: Redeclaring font encoding OMS on input line 730.
\macc@depth=\count101
\c@MaxMatrixCols=\count102
\dotsspace@=\muskip10
\c@parentequation=\count103
\dspbrk@lvl=\count104
\tag@help=\toks22
\row@=\count105
\column@=\count106
\maxfields@=\count107
\andhelp@=\toks23
\eqnshift@=\dimen114
\alignsep@=\dimen115
\tagshift@=\dimen116
\tagwidth@=\dimen117
\totwidth@=\dimen118
\lineht@=\dimen119
\@envbody=\toks24
\multlinegap=\skip51
\multlinetaggap=\skip52
\mathdisplay@stack=\toks25
LaTeX Info: Redefining \[ on input line 2844.
LaTeX Info: Redefining \] on input line 2845.
)
(/usr/share/texmf-dist/tex/latex/base/textcomp.sty
Package: textcomp 2018/08/11 v2.0j Standard LaTeX package
Package textcomp Info: Sub-encoding information:
(textcomp) 5 = only ISO-Adobe without \textcurrency
(textcomp) 4 = 5 + \texteuro
(textcomp) 3 = 4 + \textohm
(textcomp) 2 = 3 + \textestimated + \textcurrency
(textcomp) 1 = TS1 - \textcircled - \t
(textcomp) 0 = TS1 (full)
(textcomp) Font families with sub-encoding setting implement
(textcomp) only a restricted character set as indicated.
(textcomp) Family '?' is the default used for unknown fonts.
(textcomp) See the documentation for details.
Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79.
(/usr/share/texmf-dist/tex/latex/base/ts1enc.def
File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
Now handling font encoding TS1 ...
... processing UTF-8 mapping file for font encoding TS1
(/usr/share/texmf-dist/tex/latex/base/ts1enc.dfu
File: ts1enc.dfu 2018/10/05 v1.2f UTF-8 support for inputenc
defining Unicode char U+00A2 (decimal 162)
defining Unicode char U+00A3 (decimal 163)
defining Unicode char U+00A4 (decimal 164)
defining Unicode char U+00A5 (decimal 165)
defining Unicode char U+00A6 (decimal 166)
defining Unicode char U+00A7 (decimal 167)
defining Unicode char U+00A8 (decimal 168)
defining Unicode char U+00A9 (decimal 169)
defining Unicode char U+00AA (decimal 170)
defining Unicode char U+00AC (decimal 172)
defining Unicode char U+00AE (decimal 174)
defining Unicode char U+00AF (decimal 175)
defining Unicode char U+00B0 (decimal 176)
defining Unicode char U+00B1 (decimal 177)
defining Unicode char U+00B2 (decimal 178)
defining Unicode char U+00B3 (decimal 179)
defining Unicode char U+00B4 (decimal 180)
defining Unicode char U+00B5 (decimal 181)
defining Unicode char U+00B6 (decimal 182)
defining Unicode char U+00B7 (decimal 183)
defining Unicode char U+00B9 (decimal 185)
defining Unicode char U+00BA (decimal 186)
defining Unicode char U+00BC (decimal 188)
defining Unicode char U+00BD (decimal 189)
defining Unicode char U+00BE (decimal 190)
defining Unicode char U+00D7 (decimal 215)
defining Unicode char U+00F7 (decimal 247)
defining Unicode char U+0192 (decimal 402)
defining Unicode char U+02C7 (decimal 711)
defining Unicode char U+02D8 (decimal 728)
defining Unicode char U+02DD (decimal 733)
defining Unicode char U+0E3F (decimal 3647)
defining Unicode char U+2016 (decimal 8214)
defining Unicode char U+2020 (decimal 8224)
defining Unicode char U+2021 (decimal 8225)
defining Unicode char U+2022 (decimal 8226)
defining Unicode char U+2030 (decimal 8240)
defining Unicode char U+2031 (decimal 8241)
defining Unicode char U+203B (decimal 8251)
defining Unicode char U+203D (decimal 8253)
defining Unicode char U+2044 (decimal 8260)
defining Unicode char U+204E (decimal 8270)
defining Unicode char U+2052 (decimal 8274)
defining Unicode char U+20A1 (decimal 8353)
defining Unicode char U+20A4 (decimal 8356)
defining Unicode char U+20A6 (decimal 8358)
defining Unicode char U+20A9 (decimal 8361)
defining Unicode char U+20AB (decimal 8363)
defining Unicode char U+20AC (decimal 8364)
defining Unicode char U+20B1 (decimal 8369)
defining Unicode char U+2103 (decimal 8451)
defining Unicode char U+2116 (decimal 8470)
defining Unicode char U+2117 (decimal 8471)
defining Unicode char U+211E (decimal 8478)
defining Unicode char U+2120 (decimal 8480)
defining Unicode char U+2122 (decimal 8482)
defining Unicode char U+2126 (decimal 8486)
defining Unicode char U+2127 (decimal 8487)
defining Unicode char U+212E (decimal 8494)
defining Unicode char U+2190 (decimal 8592)
defining Unicode char U+2191 (decimal 8593)
defining Unicode char U+2192 (decimal 8594)
defining Unicode char U+2193 (decimal 8595)
defining Unicode char U+2329 (decimal 9001)
defining Unicode char U+232A (decimal 9002)
defining Unicode char U+2422 (decimal 9250)
defining Unicode char U+25E6 (decimal 9702)
defining Unicode char U+25EF (decimal 9711)
defining Unicode char U+266A (decimal 9834)
defining Unicode char U+FEFF (decimal 65279)
))
LaTeX Info: Redefining \oldstylenums on input line 334.
Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349.
Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350.
Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351.
Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352.
Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353.
Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354.
Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355.
Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356.
Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357.
Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358.
Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359.
Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360.
Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361.
Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362.
Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363.
Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364.
Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365.
Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366.
Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367.
Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368.
Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369.
Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370.
Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371.
Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372.
Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373.
Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374.
Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375.
Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376.
Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377.
Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378.
Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379.
Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380.
Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381.
Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382.
Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383.
Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384.
Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385.
Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386.
Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387.
Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388.
Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389.
Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390.
Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391.
Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392.
Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393.
Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394.
Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395.
Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396.
Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397.
Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398.
Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399.
Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400.
Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401.
Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402.
Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403.
Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404.
Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405.
Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406.
Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407.
Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408.
Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409.
)
(/usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
(/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\symAMSa=\mathgroup4
\symAMSb=\mathgroup5
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
))
(/usr/share/texmf-dist/tex/latex/capt-of/capt-of.sty
Package: capt-of 2009/12/29 v0.2 standard captions outside of floats
)
(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty
Package: hyperref 2018/11/30 v6.88e Hypertext links for LaTeX
(/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO)
Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO)
Package hobsub Info: Skipping package `infwarerr' (already loaded).
Package hobsub Info: Skipping package `ltxcmds' (already loaded).
Package hobsub Info: Skipping package `ifluatex' (already loaded).
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
Package ifvtex Info: VTeX not detected.
Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO)
Package hobsub Info: Skipping package `ifpdf' (already loaded).
Package hobsub Info: Skipping package `etexcmds' (already loaded).
Package hobsub Info: Skipping package `kvsetkeys' (already loaded).
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO)
Package hobsub Info: Skipping package `pdftexcmds' (already loaded).
Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO)
Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO
)
Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO)
Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO)
)
Package hobsub Info: Skipping package `hobsub' (already loaded).
Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO)
Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO)
Package: xcolor-patch 2016/05/16 xcolor patch
Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO)
Package atveryend Info: \enddocument detected (standard20110627).
Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO)
Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO)
Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO)
)
(/usr/share/texmf-dist/tex/latex/oberdiek/auxhook.sty
Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO)
)
\@linkdim=\dimen120
\Hy@linkcounter=\count108
\Hy@pagecounter=\count109
(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def
File: pd1enc.def 2018/11/30 v6.88e Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
)
\Hy@SavedSpaceFactor=\count110
(/usr/share/texmf-dist/tex/latex/latexconfig/hyperref.cfg
File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
)
Package hyperref Info: Hyper figures OFF on input line 4519.
Package hyperref Info: Link nesting OFF on input line 4524.
Package hyperref Info: Hyper index ON on input line 4527.
Package hyperref Info: Plain pages OFF on input line 4534.
Package hyperref Info: Backreferencing OFF on input line 4539.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4772.
\c@Hy@tempcnt=\count111
(/usr/share/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip11
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
LaTeX Info: Redefining \url on input line 5125.
\XeTeXLinkMargin=\dimen121
\Fld@menulength=\count112
\Field@Width=\dimen122
\Fld@charsize=\dimen123
Package hyperref Info: Hyper figures OFF on input line 6380.
Package hyperref Info: Link nesting OFF on input line 6385.
Package hyperref Info: Hyper index ON on input line 6388.
Package hyperref Info: backreferencing OFF on input line 6395.
Package hyperref Info: Link coloring OFF on input line 6400.
Package hyperref Info: Link coloring with OCG OFF on input line 6405.
Package hyperref Info: PDF/A mode OFF on input line 6410.
LaTeX Info: Redefining \ref on input line 6450.
LaTeX Info: Redefining \pageref on input line 6454.
\Hy@abspage=\count113
\c@Item=\count114
\c@Hfootnote=\count115
)
Package hyperref Info: Driver (autodetected): hpdftex.
(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def
File: hpdftex.def 2018/11/30 v6.88e Hyperref driver for pdfTeX
\Fld@listcount=\count116
\c@bookmark@seq@number=\count117
(/usr/share/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
82.
)
\Hy@SectionHShift=\skip53
)
(/usr/share/texmf-dist/tex/latex/algorithms/algorithm.sty
Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating enviro
nment
(/usr/share/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count118
\float@exts=\toks26
\float@box=\box38
\@float@everytoks=\toks27
\@floatcapt=\box39
)
\@float@every@algorithm=\toks28
\c@algorithm=\count119
)
(/usr/share/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
Package: algpseudocode
(/usr/share/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
Package: algorithmicx 2005/04/27 v1.2 Algorithmicx
Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style
\c@ALG@line=\count120
\c@ALG@rem=\count121
\c@ALG@nested=\count122
\ALG@tlm=\skip54
\ALG@thistlm=\skip55
\c@ALG@Lnr=\count123
\c@ALG@blocknr=\count124
\c@ALG@storecount=\count125
\c@ALG@tmpcounter=\count126
\ALG@tmplength=\skip56
)
Document Style - pseudocode environments for use with the `algorithmicx' style
) (/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty
Package: amsthm 2017/10/31 v2.20.4
\thm@style=\toks29
\thm@bodyfont=\toks30
\thm@headfont=\toks31
\thm@notefont=\toks32
\thm@headpunct=\toks33
\thm@preskip=\skip57
\thm@postskip=\skip58
\thm@headsep=\skip59
\dth@everypar=\toks34
)
\c@definition=\count127
(/usr/share/texmf-dist/tex/latex/listings/listings.sty
\lst@mode=\count128
\lst@gtempboxa=\box40
\lst@token=\toks35
\lst@length=\count129
\lst@currlwidth=\dimen124
\lst@column=\count130
\lst@pos=\count131
\lst@lostspace=\dimen125
\lst@width=\dimen126
\lst@newlines=\count132
\lst@lineno=\count133
\lst@maxwidth=\dimen127
(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty
File: lstmisc.sty 2019/02/27 1.8b (Carsten Heinz)
\c@lstnumber=\count134
\lst@skipnumbers=\count135
\lst@framebox=\box41
)
(/usr/share/texmf-dist/tex/latex/listings/listings.cfg
File: listings.cfg 2019/02/27 1.8b listings configuration
))
Package: listings 2019/02/27 1.8b (Carsten Heinz)
(/usr/share/texmf-dist/tex/latex/graphics/color.sty
Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package color Info: Driver file: pdftex.def on input line 147.
) (./tesi.aux)
\openout1 = `tesi.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 35.
LaTeX Font Info: Try loading font information for TS1+cmr on input line 35.
(/usr/share/texmf-dist/tex/latex/base/ts1cmr.fd
File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
)
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count136
\scratchdimen=\dimen128
\scratchbox=\box42
\nofMPsegments=\count137
\nofMParguments=\count138
\everyMPshowfont=\toks36
\MPscratchCnt=\count139
\MPscratchDim=\dimen129
\MPnumerator=\count140
\makeMPintoPDFobject=\count141
\everyMPtoPDFconversion=\toks37
) (/usr/share/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf
(/usr/share/texmf-dist/tex/latex/oberdiek/grfext.sty
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO)
)
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
38.
Package grfext Info: Graphics extension search list:
(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE
G,.JBIG2,.JB2,.eps]
(grfext) \AppendGraphicsExtensions on input line 456.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
\AtBeginShipoutBox=\box43
Package hyperref Info: Link coloring OFF on input line 35.
(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty
Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section
(/usr/share/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO)
)
\c@section@level=\count142
)
LaTeX Info: Redefining \ref on input line 35.
LaTeX Info: Redefining \pageref on input line 35.
LaTeX Info: Redefining \nameref on input line 35.
(./tesi.out)
(./tesi.out)
\@outlinefile=\write3
\openout3 = `tesi.out'.
\c@lstlisting=\count143
LaTeX Font Info: Try loading font information for U+msa on input line 38.
(/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Try loading font information for U+msb on input line 38.
(/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
) [1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
Underfull \hbox (badness 10000) in paragraph at lines 102--115
[]
[2] [3] [4] [5] [6] [7] [8] (./tesi.bbl [9] [10] [11])
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 462.
[12]
Package atveryend Info: Empty hook `AfterLastShipout' on input line 462.
(./tesi.aux)
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 462.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 462.
Package rerunfilecheck Info: File `tesi.out' has not changed.
(rerunfilecheck) Checksum: 29320EA055B849F5FC1E6487CC46E9EB;593.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 462.
)
Here is how much of TeX's memory you used:
9120 strings out of 494553
128213 string characters out of 6177841
215243 words of memory out of 5000000
12566 multiletter control sequences out of 15000+600000
25828 words of font info for 67 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
36i,6n,32p,285b,435s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/usr/share/t
exmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/share/texmf-dist/font
s/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texmf-dist/fonts/type1/public
/amsfonts/cm/cmmi6.pfb></usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cm
mi8.pfb></usr/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/s
hare/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texmf-dist/
fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texmf-dist/fonts/type1/pu
blic/amsfonts/cm/cmsy8.pfb></usr/share/texmf-dist/fonts/type1/public/amsfonts/s
ymbols/msam10.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfbi1095.p
fb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1000.pfb></usr/share/
texmf-dist/fonts/type1/public/cm-super/sfbx1095.pfb></usr/share/texmf-dist/font
s/type1/public/cm-super/sfbx1200.pfb></usr/share/texmf-dist/fonts/type1/public/
cm-super/sfbx1440.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfcc10
95.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm0800.pfb></usr/sh
are/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb></usr/share/texmf-dist/
fonts/type1/public/cm-super/sfrm1095.pfb></usr/share/texmf-dist/fonts/type1/pub
lic/cm-super/sfrm1200.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sf
rm1728.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfti0800.pfb></us
r/share/texmf-dist/fonts/type1/public/cm-super/sfti1095.pfb>
Output written on tesi.pdf (12 pages, 349379 bytes).
PDF statistics:
263 PDF objects out of 1000 (max. 8388607)
225 compressed objects within 3 object streams
59 named destinations out of 1000 (max. 500000)
73 words of extra memory for PDF output out of 10000 (max. 10000000)

467
tesi/galla/tesi.org Normal file
View file

@ -0,0 +1,467 @@
#+TITLE: An automata-based implementation of a symbolic CTL* model checker
#+AUTHOR: Francesco Galla'
#+EMAIL: galla@di.unito.it
#+DATE:
#+LANGUAGE: en
#+LaTeX_CLASS: article
#+LaTeX_HEADER: \usepackage[utf8]{inputenc}
#+LaTeX_HEADER: \usepackage{algorithm}
#+LaTeX_HEADER: \usepackage{algpseudocode}
#+LaTeX_HEADER: \usepackage{amsmath,amssymb,amsthm}
#+Latex_HEADER: \newtheorem{definition}{Definition}
#+LaTeX_HEADER: \usepackage{graphicx}
#+LaTeX_HEADER: \usepackage{listings}
#+LaTeX_HEADER: \usepackage{color}
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+OPTIONS: H:2 toc:nil \n:nil @:t ::t |:t ^:{} _:{} *:t TeX:t LaTeX:t
#+STARTUP: showall
\begin{abstract}
This dissertation presents the implementation of a symbolic CTL* model
checking algorithm based on multi-valued decision diagrams (MDDs).
Given a Petri Net model and a CTL* proposition, the algorithm is capable
of identifying LTL sub-formulae, translate them to Büchi automata and
compute the synchronized product of each LTL formula with the model.
MDDs are used to encode the Petri Net and such composition, provably
lowering both system memory and time required to manipulate its graph
of reachable states with respect to explicit model checking tecniques.
By combining the sets of satisfying states for each LTL sub-formula
according to the temporal quantifiers preceding them, the algorithm is
capable of producing the boolean satisfaction result of the CTL* formula
and a counterexample or witness run describing such outcome.
Timed test runs executed againts a large set of models and specifications of
LTL, CTL and CTL* temporal logics show competitive performance results
with respect to other tools which process CTL* by translating each
formula to $\mu$-calculus. This algorithm has been implemented as one
of the free and open source programs composing the GreatSPN framework
for formal verification of systems.
\end{abstract}
# Model checking is a formal verification technique intended to analyze
# properties of system designs. Model checking is based upon a formal
# model describing a system and a specification provided using a
# temporal logic formula such as LTL, CTL or CTL*.
# The algorithmic analysis of the Kripke structure representing the
# composition of the model and the specification requires the
# manipulation of the graph of its reachable states, which can be
# arbitrarely large in size depending on model characteristics and
# formula provided. Frequently, explicit enumeration of reachable states
# of a complex model requires a large amount of memory and time.
# Tecniques based on symbolic representation of such reachability graphs
# exploit the abstractions provided by decision diagrams, provably
# allowing for a sensible reduction in time and memory consumption while
# ensuring equivalent results with respect to explicit tecniques. CTL*
# is a temporal logic defined as a superset of Linear Temporal Logic
# (LTL) and Computational Tree Logic (CTL). CTL* is motivated by the
# incomparable expressiveness of LTL and CTL, which historically caused
# a proliferation of model checking tools geared towards the former or
# the latter logic, each one presenting its own limitations. The
# theoretical literature formalizing symbolic CTL* model checking
# algorithms describes two different approaches. One exploits the
# translation of CTL* formulae to $\mu$-calculus and is currently used
# by all model checking tools we were able to find and inspect. The
# other identifies LTL sub-formulae contained into a given CTL*
# proposition, obtains the sets of states satisfying such formulae using
# a LTL model checkers and combines them according to the temporal
# quantifier preceding each sub-formula to obtain a satisfaction result
# and a counter-example or witness run on the given model. This
# dissertation describes the implementation of a symbolic CTL* model
# checker which uses such LTL-based tecnique at its core. Competitive
# performance results were obtained by testing this algorithm against
# other research tools which use the $\mu$-calculus tecnique. This
# algorithm has been implemented as one of the programs composing the
# GreatSPN framework for formal verification of systems based on Petri Nets.
* Introduction
** Model Checking
Model checking is a formal verification technique intended to analyze properties
of system designs. Given a formal model and a specification, the objective of
model checking is to decide whether the behavior of the model satisfies the
specification or not. The model is usually represented as a Kripke structure or
by a high-level formalism that can be transformed into a Kripke structure.
Examples of these formalisms are Petri Nets and Process algebra.
The specification is provided using a temporal logic expression, that is, a
formula that expresses a temporal and logical statement. Temporal logics are
modal logics geared towards the description of the temporal ordering of events.
It is important to clarify that these logics do not consider precise timing
requirements of activities or events, but reason about their
/abstract temporal order/. For this reason, they are particularly useful when
applied to concurrent systems in which all components proceed in a
lock-step fashion over a discrete time domain. The system behavior is assumed to
be observable at integral time points and each time point identifies a snapshot
of all variables of the system, called /state/.
Two brands of temporal logics have been proposed over the years for specifying
the properties of reactive systems. Linear Temporal Logic \cite{Pnueli77} is
based on /linear time/, therefore considering every moment in time as having a
unique possible future. Computational Tree Logic \cite{ClarkeE81} is defined
upon /branching time/: it pictures the structure of time as a tree,
allowing each moment in time to split into different possible futures.
From now on we will refer to these two logics using their well-known acronyms
LTL and CTL respectively.
# IMAGE: ltl vs ctl
The difference between LTL and CTL is rooted in their satisfaction relations,
which are conceptually different. LTL is said to be path-based, since a
system /S/ satisfies a LTL formula \phi if for all initial paths of /S/,
paths starting in an intial state $s_{\textit{0}}$ satisfy \phi.
Conversely, CTL is said to be state-based, since a system /S/ satisfies
a CTL formula \phi if and only if \phi holds in all initial states of /S/.
Furthermore, the expressiveness of LTL and CTL temporal logics is incomparable
\cite{Lamport80}. Conversely, CTL is particularly useful to express the
/possibility/ of existence of a specific path of execution of a model, that
is, the occurrence of an event happening on one branch but not necessarily all
of them. This concept cannot be expressed using a formalism based on linear time
such as LTL, which describes executions of a system, not the way those
executions are organized in a branching tree. On the contrary, CTL cannot
express situations in which the same behavior may occur on distinct branches at
distinct times, while the ability of LTL to describe individual paths is
more convenient in this case. In practice, the LTL formula *FG*\phi is not
expressible in CTL, while the formula *AFAG*\phi is not expressible in LTL.
Given the shortcomings of both these temporal logics, a superset of LTL and CTL
called CTL* \cite{EmersonH86} has been introduced. \\
** A brief history of LTL model checking
Model checking LTL properties comes down to checking language emptyness of the
syncronized product between the Kripke structure representing the model and a
formalism which can represent a LTL formula while being translatable to a
Kripke structure, namely a Büchi automaton. This /automata-theoretic approach/
\cite{Vardi95} treats the synchronized product as a transition system
\cite{Keller76} whose state graph can be analyzed using tecniques
classified in two main categories:
- /Explicit/ methods process the state graph of the synchronized product using
graph traversal algorithms.
- /Symbolic/ methods represent the state graph using /decision diagrams/ and
usually apply fixed point algorithms to the set of states to find the strongly
connected components (SCCs) of the transition system.
Explicit methods are based on graph traversal algorithms but are often limited
by the complexity of the LTL model checking problem, which is constrained by the
size of the state space of the model, the size of the underlying automaton used
to represent the formula and the combined size of the two Kripke structures in
a transition system. More specifically, the model checking problem for LTL is
known to be PSPACE-complete \cite{Sistlac85}.
Historically, the first LTL model checkers were explicit: a notable example is
SPIN \cite{Holzmann97}, which takes advantage of an optimized version of Tarjan
DFS algorithm for finding strongly connected components in a graph,
called /Nested Depth First Search/ \cite{HolzmannPy96}.
In practice, model checkers applied to complex, real-world sistems have to
face the /state space explosion/ problem: the exponential growth in
the number of variables of the state graph dimension. Given that, in general,
a system with /n/ variables over a domain of /k/ possible values requires
at least $n^{\textit{k}}$ states in the reachability set, it is
understandable how even a simple model might necessitate a large reachability
graph. Furthermore, dealing with real-valued variables, which have infinite
possible assignments, results in a reachability graph with infinitely many
states.
This problem has encouraged the development of various tecniques which have
proven to be successful in mitigating the state explosion. Explicit model
checkers have introduced /on-the-fly/ state-space construction
to avoid storing the whole state graph. The most basic /on-the-fly/ algorithm
\cite{FernandezMJJ92} stores states which have already been visited in memory
and is therefore able to check for cycles in the reachability graph while
generating it through DFS. SPIN uses /on-the-fly/ state graph construction
combined with /partial order reduction/ \cite{Peled96}, a tecnique which reduces
the size of the reachability graph by exploiting commutativity of concurrently
executed transitions which result in the same state.
** The origin of symbolic model checking
Efforts towards state space minimization have been particularly successful in
developing clever representation of the state graph. /Symbolic/ model checking
represent the system model and the LTL formula using set of states and set
of transitions. These sets can be represented as solutions to
logical equations, using decision diagrams to represent this
state space implicitly.
Since syntactically small equations can represent large set of states,
this tecnique ultimately avoids building the state graph explicitly,
thus saving space in memory. Above all, Ordered Binary Decision Diagrams (OBDDs)
provide a canonical form for boolean formulae which can be substantially more
compact than conjunctive or disjuntive normal form and efficient algorithms have
been implemented for manipulating them. McMillan was the first to introduce
the use of OBDDs to represent the state space of a model, developing a CTL
model checking tool called SMV \cite{SymbMC}.
Symbolic model checking is considered to be one of the biggest breakthrough in
the history of model checking for its impact on the state explosion problem
\cite{Clarke08}.
Symbolic model checking was initially applied to CTL because of the
significantly lower complexity of the model checking problem with
respect to LTL: CTL model checking is known to be P-Complete and its
time complexity is bilinear in the size of the model and of the
formula \cite{ClarkeES86}. After the introduction of SMV, further research work
increased the capabilities of decision diagrams. By introducing
Multi-valued decision diagrams (MDDs) , tools were able to represent
integral and real-valued functions, thus enhancing the applications of
symbolic strategies to formal verification. In recent years, the
LTSmin tool \cite{KantLMPBD15} developed by the University of Twente
employs the SYLVAN multi-core MDDs library \cite{DijkP17} to speed up
symbolic analysis algorithms for CTL model checking. A different
solution was adopted by an extended version of SMV, NuSMV
\cite{CimattiCGGPRST02}, which mantained the specification language of
McMillan's tool while improving it by introducing LTL model checking
and
Sat-based Bounded model checking \cite{BiereCCZ99}, which exploits propositional
satisfiability without using BDDs to represent the state graph.
This approach was chosen because working with decision diagrams does not
always guarantee an improvement over explicit model checking
tecniques due to the often time-consuming procedure of selecting a variable
ordering for all variables in the system, which is a known NP-complete problem
\cite{BolligW96}.
Until the present day, our GreatSPN framework used multi-valued, multi-terminal
decision diagrams (MTMDDs) provided by the Meddly library \cite{BabarM10} to
perform CTL model checking on Petri Nets \cite{BabarBDM10}. Meddly is possibly
the only open-source library to implement MTMDDs, Edge-valued MDDs (EVMDDs)
while providing state-of-the-art algorithms to manipulate them.
To determine the optimal variable ordering for the MDDs used to represet the
state graph, GreatSPN uses a set of algorithms based on different heuristics
which are run during the state space generation procedure \cite{AmparoreDBGM17}.
As we are going to discuss later in this dissertation, GreatSPN is now capable
of CTL* model checking by reducing symbolic LTL model checking to CTL model
checking with fairness constraints, as demonstrated in a notorious article
\cite{ClarkeGH97} by Clarke et al.
* Background
** Linear Temporal Logic
LTL is a propositional temporal logic with linear time model, meaning that it
considers a single realized future behavior of a system, that is, a single
path in a Kripke structure.
#+ATTR_LATEX: :environment definition
#+BEGIN_definition
/Syntax of LTL/. The formal syntax of LTL is given by the following grammar in
Backus-Naur form (BNF), where /a/ \in /AP/ is an atomic proposition.
#+BEGIN_center
/\phi ::= true | a | \not\phi | \phi \wedge \phi | *X*\phi | \phi *U* \phi/
#+END_center
#+END_definition
Using boolean connectors such as \not and \wedge allows LTL to be treated as
a propositional logic. Other boolean connectives such as disjunction \vee,
implication \rightarrow, equivalence \leftrightarrow and the exclusive or (xor)
operator \oplus can be derived as for any other propositional logic.
This LTL grammar is defined using two basic temporal modalities: *X* (next) and
*U* (until). Using those, we can derive two essential temporal modalities *F*
(eventually) and *G* (always), as follows:
#+BEGIN_center
*F*\phi = /true/\textbf{U}\phi \\
*G*\phi = \not\textbf{F}\not\phi
#+END_CENTER
We now present a list of the temporal modalities which will be used at a later
time in this dissertation.
- *G*\phi: "always" (now and forever in the future \phi is true)
- *F*\phi: "eventually" (eventually in the future \phi is true)
- *X*\phi: "next" (in the next time step \phi is true)
- \psi\textbf{U}\phi: "until" (\psi is true until \phi is true)
By combining the aforementioned temporal operators we obtain other, more complex
modalities. A typical example is the specification which requires a property to
be true /infinitely often/, *GF*\phi.
\paragraph{LTL Semantics}
LTL semantics is defined for /infinite words/ \sigma over the alphabet
2\textsuperscript{AP}. The satisfiability rules are shown below:
- \(\sigma \vDash true\)
- \(\sigma \vDash a\) iff \(a \in A_{0}\)
- \(\sigma \vDash \phi_{1} \wedge \phi_{2}\) iff \(\sigma \vDash \phi_{1}\) and \(\sigma \vDash \phi_{2}\)
- \(\sigma \vDash \neg\phi\) iff \(\neg (\sigma \vDash \phi)\)
- \(\sigma \vDash \textbf{X}\phi\) iff \(\sigma[1...] \vDash \phi\)
- \(\sigma \vDash \phi_{1}\textbf{U}\phi_{2}\) iff \(\exists j \geq 0, \sigma[j...] \vDash \phi_{2}\) and \(\sigma[i...] \vDash \phi_{1}\) for all \(0 \leq i < j\)
A LTL formula \phi is said to be /valid/ with regard
to a Kripke structure /M/ if it holds for all paths of /M/. It is /satisfiable/
if it holds for some path in /M/.
** CTL*
We briefly introduced CTL* while dealing with the shortcomings of LTL and CTL.
CTL* is a branching temporal logic which extends CTL following a proposal by
Emerson and Halpern. Being based on the concept of branching time, CTL* is able
to represent the possibility of existence of a determinate behavior in a tree of
execution, using CTL path quantifiers *E* (for some path) and *A* (for all
paths) to specify whether the required behavior must be verified for some
execution of our system or all possible ones.
CTL* allows path quantifiers to be arbitrarely nested with linear temporal
operators *G*, *F*, *X* and *U*. In contrast, CTL only supports linear
temporal operators if they are immediately preceded by a path quantifier.
In a similar fashion as CTL, the syntax of CTL* distinguishes between
/state/ and /path/ formulae. CTL* path formulae are defined as LTL formulae,
whith the only difference that here state formulae can be used as atoms.
#+BEGIN_definition
/Syntax of CTL*/. The formal syntax of /CTL*/ is made of state formulae \Phi and
path formulae \phi. The syntax of /CTL*/ state formulae \Phi is defined over the
set /AP/ of atomic propositions:
#+BEGIN_center
/\Phi ::= true | a | \not\phi | \phi \wedge \phi | *E*\phi/
#+END_center
The syntax of CTL* path formulae \phi is given by the following grammar, where
\Phi is a state formula:
#+BEGIN_center
/\phi ::= \Phi | \not\phi | \phi \wedge \phi | *X*\phi | \phi *U* \phi/
#+END_center
#+END_definition
As previously seen for LTL, the syntax of CTL* can be treated as any
propositional logic, therefore all boolean connectives can be derived from
\not and \wedge. The missing temporal modalities *F* and *G* descend from
*X* and *U* as it was the case for LTL, while the path quantifier *A* can be
obtained from the following equivalence:
#+BEGIN_center
*A*\phi = \not\textbf{E}\not\phi
#+END_CENTER
\paragraph{CTL* Semantics}
Let a \in /AP/ be an atomic proposition, $TS = (S, Act, \rightarrow, I, AP, L)$
be a transition system without terminal states, state /s/ \in /S/, \Phi and \Psi
be CTL* state formulae and \phi, \phi\textsubscript{1} and \phi\textsubscript{2}
be CTL* path formulae.
\paragraph{State formulae: semantics}
- \(s \vDash a\) iff \(a \in \textit{L(s)}\)
- \(s \vDash \Phi \wedge \Psi\) iff \(s \vDash \Phi\) and \(s \vDash \Psi\)
- \(s \vDash \neg\Phi\) iff \(\neg (s \vDash \Phi)\)
- \(s \vDash \textbf{E}\phi\) iff \(\sigma \vDash \phi\) for some \(\sigma \in \textit{Paths(s)}\)
\paragraph{Path formulae: semantics}
- \(\sigma \vDash \Phi\) iff \(s_{0} \vDash \Phi\)
- \(\sigma \vDash \phi_{1} \wedge \phi_{2}\) iff \(\sigma \vDash \phi_{1}\) and \(\sigma \vDash \phi_{2}\)
- \(\sigma \vDash \neg\phi\) iff \(\neg (\sigma \vDash \phi)\)
- \(\sigma \vDash \textbf{X}\phi\) iff \(\sigma[1...] \vDash \phi\)
- \(\sigma \vDash \phi_{1}\textbf{U}\phi_{2}\) iff \(\exists j \geq 0, \sigma[j...] \vDash \phi_{2}\) and \(\sigma[i...] \vDash \phi_{1}\) for all \(0 \leq i < j\)
** Decision Diagrams
Decision diagrams are directed, acyclic graphs used to represent functions over
variables with finitely many possible assignments. They were originally
studied by Bryant \cite{Bryant86} as a representation of boolean functions
in the form of Binary Decision Diagrams (BDDs).
We focus on a generalization of BDDs called Multi-value Decision Diagrams (MDDs)
\cite{MDD}, whose variable domain can be arbitrarely large and which can be
used to represent functions of integral and real-valued variables.
#+BEGIN_definition
/Multi-valued Decision Diagram/. A multi-valued desicion diagram, or MDD, is an
acyclic graph in which each node represents a function over variables with
finitely many possible assignments, of the form:
#+BEGIN_center
$f : S_{K} \times ... \times S_{1} \rightarrow \{ 0, \ldots, m - 1 \}$
#+END_center
Each one of the sets $S_{k}$ is considered to be finite on an
arbitrarely large domain. We can write:
#+BEGIN_center
$S_{k} = \{ 0, 1, \ldots, n_{k} - 1 \}$
#+END_center
#+END_definition
An MDD is composed of two types of nodes: /terminal/ nodes and /non-terminal/
nodes.
- Terminal nodes are labeled with values from the set $\{0,1,\ldots,m-1\}$,
representing the constant function:
#+BEGIN_center
$g (x_{K},\ldots,x_{1}) = a$
#+END_center
- Non-terminal nodes are labeled with one of the function variables
$x_{k}$ and contain $n_{k}$ arcs to other nodes.
A non terminal node labeled with $x\textsubscript{k}$ has an outgoing arc
corresponding to value $v$ which goes to a node representing the function:
#+BEGIN_center
$f_{x_{k}=v}(x_{K},\ldots,x_{1}) \equiv f(x_{K},\ldots,x_{k+1},v,x_{k-1},\ldots,x_{1})$
#+END_center
\paragraph{Reduced ordered MDDs}
In the contest of model checking, MDDs are useful to encode the state space
of a model as a boolean, integral or real-valued function.
To fit this purpose, MDDs must be in /canonical/ form, meaning that
for any given function and variable ordering, there must be exactly /one/
representation of that function as MDD. For this to be true, we have to impose
two constraints on MDDs: that they are /ordered/ and /reduced/ (ROMDDs).
#+BEGIN_definition
/Ordered MDDs/. An MDD is ordered if all paths through the MDD visit
non-terminal nodes accortding to the same variable ordering.
#+END_definition
#+BEGIN_definition
/Reduced Ordered MDDs/. A reduced, ordered MDD is an ordered MDD that contains
no duplicate nodes and no redundant nodes.
- Two nodes are *redundant* if all of its outgoing arcs point to the same node.
- Two terminal nodes are *duplicates* if they have the same label, while two
non-terminal nodes are duplicates if they have the same variable label and
the same outgoing arcs for each value.
#+END_definition
# ESEMPI MDD, GraphViz plot di RS (modello semplice, pochi stati)
** Automata over infinite words
We've described how Linear Temporal Logic provides a language to describe the
temporal order of a series of events. When applied to formal verification,
these sequences of events can be interpreted as computations of the program.
A computation is a potentially infinite sequence of program states: each state
is described by a finite set of atomic propositions, which will be referred to
as a nonempty /alphabet/. Therefore a computation can be treated as an
infinite word over the alphabet of truth assignments to the atomic propositions
of a given alphabet.
This reasoning suggests that a LTL specification can be thought of as a
description of a /language/ over some alphabet. This language is made of
infinite /words/, which represent program computations. We can exploit this
equivalence of computations and words to connect linear temporal logic to
automata theory applied on infinite words. As we are going to show, automata
over infinite words depict a suitable formalism to represent LTL specifications.
More precisely, given any propositional temporal formula, one can construct a
/finite automaton/ over infinite words that accepts precisely the computations
satisfied by the formula \cite{VardiW94}. This chapter will present an
introduction to automata theory and describe how LTL model checking employs a
particular class of automata over infinite words, called /Büchi automata/.
# CTL* model checking
# * Emerson-Lei & alternatives
\bibliographystyle{/usr/share/texmf-dist/bibtex/bst/base/acm}
\bibliography{tesi}

9
tesi/galla/tesi.out Normal file
View file

@ -0,0 +1,9 @@
\BOOKMARK [1][-]{section.1}{Introduction}{}% 1
\BOOKMARK [2][-]{subsection.1.1}{Model Checking}{section.1}% 2
\BOOKMARK [2][-]{subsection.1.2}{A brief history of LTL model checking}{section.1}% 3
\BOOKMARK [2][-]{subsection.1.3}{The origin of symbolic model checking}{section.1}% 4
\BOOKMARK [1][-]{section.2}{Background}{}% 5
\BOOKMARK [2][-]{subsection.2.1}{Linear Temporal Logic}{section.2}% 6
\BOOKMARK [2][-]{subsection.2.2}{CTL*}{section.2}% 7
\BOOKMARK [2][-]{subsection.2.3}{Decision Diagrams}{section.2}% 8
\BOOKMARK [2][-]{subsection.2.4}{Automata over infinite words}{section.2}% 9

BIN
tesi/galla/tesi.pdf Normal file

Binary file not shown.

462
tesi/galla/tesi.tex Normal file
View file

@ -0,0 +1,462 @@
% Created 2020-02-13 Thu 18:00
% Intended LaTeX compiler: pdflatex
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{grffile}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath,amssymb,amsthm}
\newtheorem{definition}{Definition}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{color}
\author{Francesco Galla'}
\date{}
\title{An automata-based implementation of a symbolic CTL* model checker}
\hypersetup{
pdfauthor={Francesco Galla'},
pdftitle={An automata-based implementation of a symbolic CTL* model checker},
pdfkeywords={},
pdfsubject={},
pdfcreator={Emacs 26.3 (Org mode 9.1.9)},
pdflang={English}}
\begin{document}
\maketitle
\begin{abstract}
This dissertation presents the implementation of a symbolic CTL* model
checking algorithm based on multi-valued decision diagrams (MDDs).
Given a Petri Net model and a CTL* proposition, the algorithm is capable
of identifying LTL sub-formulae, translate them to Büchi automata and
compute the synchronized product of each LTL formula with the model.
MDDs are used to encode the Petri Net and such composition, provably
lowering both system memory and time required to manipulate its graph
of reachable states with respect to explicit model checking tecniques.
By combining the sets of satisfying states for each LTL sub-formula
according to the temporal quantifiers preceding them, the algorithm is
capable of producing the boolean satisfaction result of the CTL* formula
and a counterexample or witness run describing such outcome.
Timed test runs executed againts a large set of models and specifications of
LTL, CTL and CTL* temporal logics show competitive performance results
with respect to other tools which process CTL* by translating each
formula to $\mu$-calculus. This algorithm has been implemented as one
of the free and open source programs composing the GreatSPN framework
for formal verification of systems.
\end{abstract}
\section{Introduction}
\label{sec:org0edf2f0}
\subsection{Model Checking}
\label{sec:orge90340a}
Model checking is a formal verification technique intended to analyze properties
of system designs. Given a formal model and a specification, the objective of
model checking is to decide whether the behavior of the model satisfies the
specification or not. The model is usually represented as a Kripke structure or
by a high-level formalism that can be transformed into a Kripke structure.
Examples of these formalisms are Petri Nets and Process algebra.
The specification is provided using a temporal logic expression, that is, a
formula that expresses a temporal and logical statement. Temporal logics are
modal logics geared towards the description of the temporal ordering of events.
It is important to clarify that these logics do not consider precise timing
requirements of activities or events, but reason about their
\emph{abstract temporal order}. For this reason, they are particularly useful when
applied to concurrent systems in which all components proceed in a
lock-step fashion over a discrete time domain. The system behavior is assumed to
be observable at integral time points and each time point identifies a snapshot
of all variables of the system, called \emph{state}.
Two brands of temporal logics have been proposed over the years for specifying
the properties of reactive systems. Linear Temporal Logic \cite{Pnueli77} is
based on \emph{linear time}, therefore considering every moment in time as having a
unique possible future. Computational Tree Logic \cite{ClarkeE81} is defined
upon \emph{branching time}: it pictures the structure of time as a tree,
allowing each moment in time to split into different possible futures.
From now on we will refer to these two logics using their well-known acronyms
LTL and CTL respectively.
The difference between LTL and CTL is rooted in their satisfaction relations,
which are conceptually different. LTL is said to be path-based, since a
system \emph{S} satisfies a LTL formula \(\phi\) if for all initial paths of \emph{S},
paths starting in an intial state \(s_{\textit{0}}\) satisfy \(\phi\).
Conversely, CTL is said to be state-based, since a system \emph{S} satisfies
a CTL formula \(\phi\) if and only if \(\phi\) holds in all initial states of \emph{S}.
Furthermore, the expressiveness of LTL and CTL temporal logics is incomparable
\cite{Lamport80}. Conversely, CTL is particularly useful to express the
\emph{possibility} of existence of a specific path of execution of a model, that
is, the occurrence of an event happening on one branch but not necessarily all
of them. This concept cannot be expressed using a formalism based on linear time
such as LTL, which describes executions of a system, not the way those
executions are organized in a branching tree. On the contrary, CTL cannot
express situations in which the same behavior may occur on distinct branches at
distinct times, while the ability of LTL to describe individual paths is
more convenient in this case. In practice, the LTL formula \textbf{FG}\(\phi\) is not
expressible in CTL, while the formula \textbf{AFAG}\(\phi\) is not expressible in LTL.
Given the shortcomings of both these temporal logics, a superset of LTL and CTL
called CTL* \cite{EmersonH86} has been introduced. \\
\subsection{A brief history of LTL model checking}
\label{sec:orgd1d295c}
Model checking LTL properties comes down to checking language emptyness of the
syncronized product between the Kripke structure representing the model and a
formalism which can represent a LTL formula while being translatable to a
Kripke structure, namely a Büchi automaton. This \emph{automata-theoretic approach}
\cite{Vardi95} treats the synchronized product as a transition system
\cite{Keller76} whose state graph can be analyzed using tecniques
classified in two main categories:
\begin{itemize}
\item \emph{Explicit} methods process the state graph of the synchronized product using
graph traversal algorithms.
\item \emph{Symbolic} methods represent the state graph using \emph{decision diagrams} and
usually apply fixed point algorithms to the set of states to find the strongly
connected components (SCCs) of the transition system.
\end{itemize}
Explicit methods are based on graph traversal algorithms but are often limited
by the complexity of the LTL model checking problem, which is constrained by the
size of the state space of the model, the size of the underlying automaton used
to represent the formula and the combined size of the two Kripke structures in
a transition system. More specifically, the model checking problem for LTL is
known to be PSPACE-complete \cite{Sistlac85}.
Historically, the first LTL model checkers were explicit: a notable example is
SPIN \cite{Holzmann97}, which takes advantage of an optimized version of Tarjan
DFS algorithm for finding strongly connected components in a graph,
called \emph{Nested Depth First Search} \cite{HolzmannPy96}.
In practice, model checkers applied to complex, real-world sistems have to
face the \emph{state space explosion} problem: the exponential growth in
the number of variables of the state graph dimension. Given that, in general,
a system with \emph{n} variables over a domain of \emph{k} possible values requires
at least \(n^{\textit{k}}\) states in the reachability set, it is
understandable how even a simple model might necessitate a large reachability
graph. Furthermore, dealing with real-valued variables, which have infinite
possible assignments, results in a reachability graph with infinitely many
states.
This problem has encouraged the development of various tecniques which have
proven to be successful in mitigating the state explosion. Explicit model
checkers have introduced \emph{on-the-fly} state-space construction
to avoid storing the whole state graph. The most basic \emph{on-the-fly} algorithm
\cite{FernandezMJJ92} stores states which have already been visited in memory
and is therefore able to check for cycles in the reachability graph while
generating it through DFS. SPIN uses \emph{on-the-fly} state graph construction
combined with \emph{partial order reduction} \cite{Peled96}, a tecnique which reduces
the size of the reachability graph by exploiting commutativity of concurrently
executed transitions which result in the same state.
\subsection{The origin of symbolic model checking}
\label{sec:orgd26054c}
Efforts towards state space minimization have been particularly successful in
developing clever representation of the state graph. \emph{Symbolic} model checking
represent the system model and the LTL formula using set of states and set
of transitions. These sets can be represented as solutions to
logical equations, using decision diagrams to represent this
state space implicitly.
Since syntactically small equations can represent large set of states,
this tecnique ultimately avoids building the state graph explicitly,
thus saving space in memory. Above all, Ordered Binary Decision Diagrams (OBDDs)
provide a canonical form for boolean formulae which can be substantially more
compact than conjunctive or disjuntive normal form and efficient algorithms have
been implemented for manipulating them. McMillan was the first to introduce
the use of OBDDs to represent the state space of a model, developing a CTL
model checking tool called SMV \cite{SymbMC}.
Symbolic model checking is considered to be one of the biggest breakthrough in
the history of model checking for its impact on the state explosion problem
\cite{Clarke08}.
Symbolic model checking was initially applied to CTL because of the
significantly lower complexity of the model checking problem with
respect to LTL: CTL model checking is known to be P-Complete and its
time complexity is bilinear in the size of the model and of the
formula \cite{ClarkeES86}. After the introduction of SMV, further research work
increased the capabilities of decision diagrams. By introducing
Multi-valued decision diagrams (MDDs) , tools were able to represent
integral and real-valued functions, thus enhancing the applications of
symbolic strategies to formal verification. In recent years, the
LTSmin tool \cite{KantLMPBD15} developed by the University of Twente
employs the SYLVAN multi-core MDDs library \cite{DijkP17} to speed up
symbolic analysis algorithms for CTL model checking. A different
solution was adopted by an extended version of SMV, NuSMV
\cite{CimattiCGGPRST02}, which mantained the specification language of
McMillan's tool while improving it by introducing LTL model checking
and
Sat-based Bounded model checking \cite{BiereCCZ99}, which exploits propositional
satisfiability without using BDDs to represent the state graph.
This approach was chosen because working with decision diagrams does not
always guarantee an improvement over explicit model checking
tecniques due to the often time-consuming procedure of selecting a variable
ordering for all variables in the system, which is a known NP-complete problem
\cite{BolligW96}.
Until the present day, our GreatSPN framework used multi-valued, multi-terminal
decision diagrams (MTMDDs) provided by the Meddly library \cite{BabarM10} to
perform CTL model checking on Petri Nets \cite{BabarBDM10}. Meddly is possibly
the only open-source library to implement MTMDDs, Edge-valued MDDs (EVMDDs)
while providing state-of-the-art algorithms to manipulate them.
To determine the optimal variable ordering for the MDDs used to represet the
state graph, GreatSPN uses a set of algorithms based on different heuristics
which are run during the state space generation procedure \cite{AmparoreDBGM17}.
As we are going to discuss later in this dissertation, GreatSPN is now capable
of CTL* model checking by reducing symbolic LTL model checking to CTL model
checking with fairness constraints, as demonstrated in a notorious article
\cite{ClarkeGH97} by Clarke et al.
\section{Background}
\label{sec:org194bb81}
\subsection{Linear Temporal Logic}
\label{sec:org93349b6}
LTL is a propositional temporal logic with linear time model, meaning that it
considers a single realized future behavior of a system, that is, a single
path in a Kripke structure.
\begin{definition}
\emph{Syntax of LTL}. The formal syntax of LTL is given by the following grammar in
Backus-Naur form (BNF), where \emph{a} \(\in\) \emph{AP} is an atomic proposition.
\begin{center}
\emph{\(\phi\) ::= true | a | \textlnot{}\(\phi\) | \(\phi\) \(\wedge\) \(\phi\) | \textbf{X}\(\phi\) | \(\phi\) \textbf{U} \(\phi\)}
\end{center}
\end{definition}
Using boolean connectors such as \textlnot{} and \(\wedge\) allows LTL to be treated as
a propositional logic. Other boolean connectives such as disjunction \(\vee\),
implication \(\rightarrow\), equivalence \(\leftrightarrow\) and the exclusive or (xor)
operator \(\oplus\) can be derived as for any other propositional logic.
This LTL grammar is defined using two basic temporal modalities: \textbf{X} (next) and
\textbf{U} (until). Using those, we can derive two essential temporal modalities \textbf{F}
(eventually) and \textbf{G} (always), as follows:
\begin{center}
\textbf{F}\(\phi\) = \emph{true}\textbf{U}\(\phi\) \\
\textbf{G}\(\phi\) = \textlnot{}\textbf{F}\textlnot{}\(\phi\)
\end{center}
We now present a list of the temporal modalities which will be used at a later
time in this dissertation.
\begin{itemize}
\item \textbf{G}\(\phi\): "always" (now and forever in the future \(\phi\) is true)
\item \textbf{F}\(\phi\): "eventually" (eventually in the future \(\phi\) is true)
\item \textbf{X}\(\phi\): "next" (in the next time step \(\phi\) is true)
\item \(\psi\)\textbf{U}\(\phi\): "until" (\(\psi\) is true until \(\phi\) is true)
\end{itemize}
By combining the aforementioned temporal operators we obtain other, more complex
modalities. A typical example is the specification which requires a property to
be true \emph{infinitely often}, \textbf{GF}\(\phi\).
\paragraph{LTL Semantics}
LTL semantics is defined for \emph{infinite words} \(\sigma\) over the alphabet
2\textsuperscript{AP}. The satisfiability rules are shown below:
\begin{itemize}
\item \(\sigma \vDash true\)
\item \(\sigma \vDash a\) iff \(a \in A_{0}\)
\item \(\sigma \vDash \phi_{1} \wedge \phi_{2}\) iff \(\sigma \vDash \phi_{1}\) and \(\sigma \vDash \phi_{2}\)
\item \(\sigma \vDash \neg\phi\) iff \(\neg (\sigma \vDash \phi)\)
\item \(\sigma \vDash \textbf{X}\phi\) iff \(\sigma[1...] \vDash \phi\)
\item \(\sigma \vDash \phi_{1}\textbf{U}\phi_{2}\) iff \(\exists j \geq 0, \sigma[j...] \vDash \phi_{2}\) and \(\sigma[i...] \vDash \phi_{1}\) for all \(0 \leq i < j\)
\end{itemize}
A LTL formula \(\phi\) is said to be \emph{valid} with regard
to a Kripke structure \emph{M} if it holds for all paths of \emph{M}. It is \emph{satisfiable}
if it holds for some path in \emph{M}.
\subsection{CTL*}
\label{sec:orgad39744}
We briefly introduced CTL* while dealing with the shortcomings of LTL and CTL.
CTL* is a branching temporal logic which extends CTL following a proposal by
Emerson and Halpern. Being based on the concept of branching time, CTL* is able
to represent the possibility of existence of a determinate behavior in a tree of
execution, using CTL path quantifiers \textbf{E} (for some path) and \textbf{A} (for all
paths) to specify whether the required behavior must be verified for some
execution of our system or all possible ones.
CTL* allows path quantifiers to be arbitrarely nested with linear temporal
operators \textbf{G}, \textbf{F}, \textbf{X} and \textbf{U}. In contrast, CTL only supports linear
temporal operators if they are immediately preceded by a path quantifier.
In a similar fashion as CTL, the syntax of CTL* distinguishes between
\emph{state} and \emph{path} formulae. CTL* path formulae are defined as LTL formulae,
whith the only difference that here state formulae can be used as atoms.
\begin{definition}
\emph{Syntax of CTL*}. The formal syntax of \emph{CTL*} is made of state formulae \(\Phi\) and
path formulae \(\phi\). The syntax of \emph{CTL*} state formulae \(\Phi\) is defined over the
set \emph{AP} of atomic propositions:
\begin{center}
\emph{\(\Phi\) ::= true | a | \textlnot{}\(\phi\) | \(\phi\) \(\wedge\) \(\phi\) | \textbf{E}\(\phi\)}
\end{center}
The syntax of CTL* path formulae \(\phi\) is given by the following grammar, where
\(\Phi\) is a state formula:
\begin{center}
\emph{\(\phi\) ::= \(\Phi\) | \textlnot{}\(\phi\) | \(\phi\) \(\wedge\) \(\phi\) | \textbf{X}\(\phi\) | \(\phi\) \textbf{U} \(\phi\)}
\end{center}
\end{definition}
As previously seen for LTL, the syntax of CTL* can be treated as any
propositional logic, therefore all boolean connectives can be derived from
\textlnot{} and \(\wedge\). The missing temporal modalities \textbf{F} and \textbf{G} descend from
\textbf{X} and \textbf{U} as it was the case for LTL, while the path quantifier \textbf{A} can be
obtained from the following equivalence:
\begin{center}
\textbf{A}\(\phi\) = \textlnot{}\textbf{E}\textlnot{}\(\phi\)
\end{center}
\paragraph{CTL* Semantics}
Let a \(\in\) \emph{AP} be an atomic proposition, \(TS = (S, Act, \rightarrow, I, AP, L)\)
be a transition system without terminal states, state \emph{s} \(\in\) \emph{S}, \(\Phi\) and \(\Psi\)
be CTL* state formulae and \(\phi\), \(\phi\)\textsubscript{1} and \(\phi\)\textsubscript{2}
be CTL* path formulae.
\paragraph{State formulae: semantics}
\begin{itemize}
\item \(s \vDash a\) iff \(a \in \textit{L(s)}\)
\item \(s \vDash \Phi \wedge \Psi\) iff \(s \vDash \Phi\) and \(s \vDash \Psi\)
\item \(s \vDash \neg\Phi\) iff \(\neg (s \vDash \Phi)\)
\item \(s \vDash \textbf{E}\phi\) iff \(\sigma \vDash \phi\) for some \(\sigma \in \textit{Paths(s)}\)
\end{itemize}
\paragraph{Path formulae: semantics}
\begin{itemize}
\item \(\sigma \vDash \Phi\) iff \(s_{0} \vDash \Phi\)
\item \(\sigma \vDash \phi_{1} \wedge \phi_{2}\) iff \(\sigma \vDash \phi_{1}\) and \(\sigma \vDash \phi_{2}\)
\item \(\sigma \vDash \neg\phi\) iff \(\neg (\sigma \vDash \phi)\)
\item \(\sigma \vDash \textbf{X}\phi\) iff \(\sigma[1...] \vDash \phi\)
\item \(\sigma \vDash \phi_{1}\textbf{U}\phi_{2}\) iff \(\exists j \geq 0, \sigma[j...] \vDash \phi_{2}\) and \(\sigma[i...] \vDash \phi_{1}\) for all \(0 \leq i < j\)
\end{itemize}
\subsection{Decision Diagrams}
\label{sec:orgb1ebae6}
Decision diagrams are directed, acyclic graphs used to represent functions over
variables with finitely many possible assignments. They were originally
studied by Bryant \cite{Bryant86} as a representation of boolean functions
in the form of Binary Decision Diagrams (BDDs).
We focus on a generalization of BDDs called Multi-value Decision Diagrams (MDDs)
\cite{MDD}, whose variable domain can be arbitrarely large and which can be
used to represent functions of integral and real-valued variables.
\begin{definition}
\emph{Multi-valued Decision Diagram}. A multi-valued desicion diagram, or MDD, is an
acyclic graph in which each node represents a function over variables with
finitely many possible assignments, of the form:
\begin{center}
\(f : S_{K} \times ... \times S_{1} \rightarrow \{ 0, \ldots, m - 1 \}\)
\end{center}
Each one of the sets \(S_{k}\) is considered to be finite on an
arbitrarely large domain. We can write:
\begin{center}
\(S_{k} = \{ 0, 1, \ldots, n_{k} - 1 \}\)
\end{center}
\end{definition}
An MDD is composed of two types of nodes: \emph{terminal} nodes and \emph{non-terminal}
nodes.
\begin{itemize}
\item Terminal nodes are labeled with values from the set \(\{0,1,\ldots,m-1\}\),
representing the constant function:
\end{itemize}
\begin{center}
\(g (x_{K},\ldots,x_{1}) = a\)
\end{center}
\begin{itemize}
\item Non-terminal nodes are labeled with one of the function variables
\(x_{k}\) and contain \(n_{k}\) arcs to other nodes.
\end{itemize}
A non terminal node labeled with \(x\textsubscript{k}\) has an outgoing arc
corresponding to value \(v\) which goes to a node representing the function:
\begin{center}
\(f_{x_{k}=v}(x_{K},\ldots,x_{1}) \equiv f(x_{K},\ldots,x_{k+1},v,x_{k-1},\ldots,x_{1})\)
\end{center}
\paragraph{Reduced ordered MDDs}
In the contest of model checking, MDDs are useful to encode the state space
of a model as a boolean, integral or real-valued function.
To fit this purpose, MDDs must be in \emph{canonical} form, meaning that
for any given function and variable ordering, there must be exactly \emph{one}
representation of that function as MDD. For this to be true, we have to impose
two constraints on MDDs: that they are \emph{ordered} and \emph{reduced} (ROMDDs).
\begin{definition}
\emph{Ordered MDDs}. An MDD is ordered if all paths through the MDD visit
non-terminal nodes accortding to the same variable ordering.
\end{definition}
\begin{definition}
\emph{Reduced Ordered MDDs}. A reduced, ordered MDD is an ordered MDD that contains
no duplicate nodes and no redundant nodes.
\begin{itemize}
\item Two nodes are \textbf{redundant} if all of its outgoing arcs point to the same node.
\item Two terminal nodes are \textbf{duplicates} if they have the same label, while two
non-terminal nodes are duplicates if they have the same variable label and
the same outgoing arcs for each value.
\end{itemize}
\end{definition}
\subsection{Automata over infinite words}
\label{sec:orgeaf1a4d}
We've described how Linear Temporal Logic provides a language to describe the
temporal order of a series of events. When applied to formal verification,
these sequences of events can be interpreted as computations of the program.
A computation is a potentially infinite sequence of program states: each state
is described by a finite set of atomic propositions, which will be referred to
as a nonempty \emph{alphabet}. Therefore a computation can be treated as an
infinite word over the alphabet of truth assignments to the atomic propositions
of a given alphabet.
This reasoning suggests that a LTL specification can be thought of as a
description of a \emph{language} over some alphabet. This language is made of
infinite \emph{words}, which represent program computations. We can exploit this
equivalence of computations and words to connect linear temporal logic to
automata theory applied on infinite words. As we are going to show, automata
over infinite words depict a suitable formalism to represent LTL specifications.
More precisely, given any propositional temporal formula, one can construct a
\emph{finite automaton} over infinite words that accepts precisely the computations
satisfied by the formula \cite{VardiW94}. This chapter will present an
introduction to automata theory and describe how LTL model checking employs a
particular class of automata over infinite words, called \emph{Büchi automata}.
\bibliographystyle{/usr/share/texmf-dist/bibtex/bst/base/acm}
\bibliography{tesi}
\end{document}

598
tesi/galla/wrapfig.sty Normal file
View file

@ -0,0 +1,598 @@
% W R A P F I G . S T Y ver 3.6 (Jan 31, 2003)
%
% Copyright (C) 1991-2003 by Donald Arseneau <asnd@triumf.ca>
% This software is released under the terms of the LaTeX Project
% public license.
%
% Environments "wrapfigure" and "wraptable" place a figure or table
% at the side of the page and wrap text around it.
%
% \begin{wrapfigure}[12]{r}[34pt]{5cm} <figure> \end{wrapfigure}
% -- - ---- ---
% [number of narrow lines] {placement} [overhang] {width of figure}
%
% Placement is one of r, l, i, o, R, L, I, O, for right, left,
% inside, outside, (here / FLOAT).
% The figure sticks into the margin by `overhang', if given, or by the
% length \wrapoverhang, which is normally zero.
% The number of wrapped text lines is normally calculated from the height
% of the figure, but may be specified manually ("12" above).
%
% Environments similar to "wrapfigure" and "wraptable" may be easily added,
% or invoked by "\begin{wrapfloat}{float_name}"
%
% More detailed instructions are given below, following the definitions.
% Please direct any problem reports to asnd@triumf.ca
%%%%% ----- Begin definitions ----- %%%%%
\@ifundefined{c@WF@wrappedlines}{}{\endinput}
\newdimen\wrapoverhang \wrapoverhang\z@
\newdimen\WF@size
\newcount\c@WF@wrappedlines % used globally
\newbox\WF@box
\newtoks\WF@everypar
\newif\ifWF@float
\let\@@parshape\parshape
\let\WF@@everypar\everypar
\def\wrapfloat#1{\def\@captype{#1}\@ifnextchar[\WF@wr{\WF@wr[]}}
\def\wrapfigure{\wrapfloat{figure}}
\def\wraptable{\wrapfloat{table}}
\def\WF@wr[#1]#2{% first two args: #1=num lines, #2=placement
\xdef\WF@wfname{wrap\@captype\space}%
\ifvoid\WF@box\else \WFclear \WF@collision \fi
\xdef\WF@place{\string`\@car#2r\@nil}%
\ifnum\lccode\WF@place=\WF@place \global\WF@floatfalse
\else \global\WF@floattrue \fi
\ifx\parshape\WF@fudgeparshape \ifWF@float\else\WF@collision\fi \else
\ifx\par\@@par \ifnum\@@parshape>\z@\WF@conflict\fi \else \WF@conflict\fi
\fi \gdef\WF@wli{#1}%
\@ifnextchar[\WF@rapt{\WF@rapt[\wrapoverhang]}}
\def\WF@rapt[#1]#2{% final two args: #1 = overhang, #2 = width,
\gdef\WF@ovh{#1}% hold overhang for later, when \width is known
\global\setbox\WF@box\vtop\bgroup \setlength\hsize{#2}%
\ifdim\hsize>\z@ \@parboxrestore \else
\setbox\z@\hbox\bgroup \let\wf@@caption\caption \let\caption\wf@caption
\ignorespaces \fi}
\def\wf@caption{\relax
\ifdim\hsize>\z@ \let\caption\wf@@caption \else
\unskip \egroup \hsize\wd\z@ \@parboxrestore \box\z@ \fi \caption}
\def\endwrapfloat{%
\ifdim\hsize>\z@ \par\hrule\@width\hsize\@height\z@ % force width
\else \unskip \egroup \box\z@ \fi % or end hbox
\egroup % end the \vtop; width is known so now is "later"
\WF@floatstyhook % support float.sty
\def\width{\wd\WF@box}\setlength\wrapoverhang{\WF@ovh}%
\xdef\WF@ovh{\the\wrapoverhang}% save until wrapping
\ifdim\ht\WF@box>\topskip \ht\WF@box\z@ \fi % too much height, set flag.
\ifdim\ht\WF@box<.5\p@ % too tall (starts with \vbox) or too short
\global\setbox\WF@box\vtop{\vskip-1.4ex\unvbox\WF@box}\fi
\global\WF@size\dp\WF@box % box is guaranteed to have little height.
\global\advance\WF@size1.5\baselineskip \global\advance\WF@size\tw@\intextsep
\aftergroup\WF@startfloating % even when not really floating!
\ifWF@float\else \ifhmode
{\unskip \parfillskip\z@skip \par \vskip-\parskip}\aftergroup\noindent
\fi\fi \global\@ignoretrue}
\let\endwrapfigure\endwrapfloat
\let\endwraptable\endwrapfloat
% Subvert \everypar to float fig and do wrapping. Also for non-float.
\def\WF@startfloating{%
\WF@everypar\expandafter{\the\everypar}\let\everypar\WF@everypar
\WF@@everypar{\ifvoid\WF@box\else\WF@floathand\fi \the\everypar
\WF@wraphand
}}
\def\WF@floathand{%
\ifx\parshape\WF@fudgeparshape \WF@fltmes\else
\ifx\par\@@par\ifnum\@@parshape=\z@\ifdim\hangindent=\z@
\setbox\z@\lastbox \begingroup
\@@par \WF@@everypar{}\WF@putfigmaybe
\endgroup % start wrapping
\ifvoid\z@\else\box\z@\fi % replace indentation
\else\WF@fltmes\fi\else\WF@fltmes\fi\else\WF@fltmes\fi\fi}
% Put fig here if it fits or if it can't float
\def\WF@putfigmaybe{%
\ifinner
\vskip-\parskip \global\WF@floatfalse
\let\pagetotal\maxdimen % kludge flag for "not top of page"
\else % outer page
\@tempdima\pagedepth % save page depth
{\advance\parskip\@tempdima\vskip-\parskip}% back up to baseline
\penalty\interlinepenalty % update pg. parameters
\@tempdimb\pagegoal \advance\@tempdimb-\pagetotal % room left on page
\ifdim\@tempdimb<\z@ % \WF@info{Page overfull already;}%
\global\WF@floatfalse
\ifdim-\@tempdimb>\pageshrink \else \pagebreak \fi
\else
\ifdim\WF@size>\@tempdimb
% \WF@info{Size \the\WF@size\space does not fit in \the\@tempdimb}%
\ifWF@float \dimen@.5\baselineskip \else \dimen@ 2\baselineskip\fi
\ifdim\pagestretch>\dimen@ \dimen@\pagestretch \fi
\ifdim\pagefilstretch>\z@ \dimen@\@tempdimb \fi
\ifdim\pagefillstretch>\z@ \dimen@\@tempdimb \fi
\advance\dimen@.5\baselineskip
\ifdim\dimen@>\@tempdimb % \WF@info{Page nearly full; can stretch}%
\global\WF@floatfalse \pagebreak
\fi
\else % \WF@info{Fits in \the\@tempdimb;}%
\global\WF@floatfalse
\fi\fi
\vskip\@tempdima\relax % (return erased page depth)
\fi
\noindent
\ifWF@float
\WF@fltmes
\else % putting here;
\WF@info{Put \WF@wfname here:}%
{\ifodd\if@twoside\c@page\else\@ne\fi % assign l/r to i/o placement
\lccode`i`l\lccode`o`r\else \lccode`i`r\lccode`o`l\fi
\xdef\WF@place{\the\lccode\lccode\WF@place}}% twice to get only l or r
\hbox to\z@{% llap or rlap depending on {l} or {r}; calc effective width
\@tempdima\wd\WF@box \@tempdimb\WF@ovh
\advance\@tempdima-\@tempdimb \advance\@tempdima\columnsep
\@tempdimb\hsize \advance\@tempdimb-\@tempdima
\xdef\WF@adjlw{\the\@tempdima}%
\ifnum `l=\WF@place % fig on left
\hss % figure overlaps space to the left
\def\@tempa{\kern\columnsep}% position to left of the gap
\else % fig on right
\@tempdima\z@ % no left indentation
\kern\@tempdimb \kern\columnsep
\def\@tempa{\hss}% figure overlaps space to the right
\fi
\ifdim\@tempdimb<\hsize
\xdef\WF@wrapil{\the\@tempdima \the\@tempdimb}% indentation and length
\xdef\WF@adjtlm{\the\@tempdima}%
\else
\xdef\WF@wrapil{\z@ \the\hsize}%
\xdef\WF@adjlw{\z@}\xdef\WF@adjtlm{\z@}%
\fi
\ifdim\pagetotal=\z@ % \WF@info{Put \WF@wfname at top of p.\thepage}%
\global\advance\WF@size-\intextsep
\else % \WF@info{Putting \WF@wfname in middle of page}%
\setbox\WF@box\hbox{\lower\intextsep\box\WF@box}%
\fi \dp\WF@box\z@ \box\WF@box \@tempa
}% end \hbox to 0pt
\aftergroup\WF@startwrapping % after the \endgroup which immediately follows
\fi}
\def\WF@startwrapping{%
\ifx\WF@wli\@empty
{\advance\WF@size1.1\baselineskip
\divide\WF@size\baselineskip \global\c@WF@wrappedlines\WF@size}%
\else
\setcounter{WF@wrappedlines}{\WF@wli}\global\advance\c@WF@wrappedlines\@ne
\fi
\ifnum\c@WF@wrappedlines>\@ne
\let\parshape\WF@fudgeparshape \let\WF@pspars\@empty \let\WF@@par\par
\def\@setpar##1{\def\WF@@par{##1}}\def\par{\@par}\let\@par\WF@mypar
\xdef\WF@restoretol{\tolerance\the\tolerance}\tolerance9999
\advance\linewidth-\WF@adjlw \advance\@totalleftmargin\WF@adjtlm
\fi}
\def\WF@wraphand{%
\ifnum\c@WF@wrappedlines<\tw@ \WF@finale
\else \begingroup % Create \parshape command:
\@tempcnta\@ne \let\WF@wrapil\relax \gdef\WF@ps{}%
\@whilenum \@tempcnta<\c@WF@wrappedlines\do{% repeated indentation, length
\xdef\WF@ps{\WF@ps\WF@wrapil}\advance\@tempcnta\@ne
}\endgroup
\ifx\WF@pspars\@empty
\@@parshape\c@WF@wrappedlines \WF@ps \WF@noil
\else % use external `parshape' values to modify my parshape
\WF@modps
\fi\fi}
\def\WF@mypar{\relax
\WF@@par % what the rest of LaTeX expects \par to be (usually \@@par)
\ifnum\@@parshape=\z@ \let\WF@pspars\@empty \fi % reset `parshape'
\global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@
\ifnum\c@WF@wrappedlines<\tw@ \WF@finale \fi}
\def\WF@modps{\begingroup
\afterassignment\@tempdimb \@tempdima\WF@pspars % a=ind, b=wid
\advance\@tempdima-\WF@adjtlm \advance\@tempdimb\WF@adjlw
% \afterassignment\dimen@\advance\@tempdima\WF@wrapil
% \advance\@tempdimb\dimen@ \advance\@tempdimb-\hsize
\let\WF@wrapil\WF@pspars%{\the\@tempdima \the\@tempdimb}%
\edef\@tempb{\@@parshape\c@WF@wrappedlines \WF@ps \the\@tempdima \the\@tempdimb}%
\expandafter\endgroup\@tempb}
\let\@@setpar\@setpar
\def\WF@noil{\z@ \hsize}
\let\WF@pspars\@empty
\def\WF@fudgeparshape{\relax \ifnum\c@WF@wrappedlines<\tw@ \WF@finale
\else \afterassignment\WF@fudgeparshapee \fam \fi}
\def\WF@fudgeparshapee{\ifnum\fam=\@ne \expandafter \WF@parshapeee \else
\WF@conflict \@@parshape\fam \fi}
\def\WF@parshapeee#1#2{\begingroup\delimitershortfall#1%
\nulldelimiterspace#2%\advance\nulldelimiterspace\WF@adjlw
\edef\@tempa{\def\noexpand\WF@pspars{%
\the\delimitershortfall \the\nulldelimiterspace}}%
\expandafter\endgroup\@tempa \WF@wraphand}
\def\WF@finale{\ifx\parshape\WF@fudgeparshape
\WF@restoretol \let\@setpar\@@setpar \let\par\WF@@par
\advance\linewidth\WF@adjlw \advance\@totalleftmargin-\WF@adjtlm
\WF@info{Finish wrapping text}%
\ifx\par\@@par \def\@par{\let\par\@@par\par}\else \let\@par\WF@@par \fi
\let\parshape\@@parshape
\parshape\ifx\WF@pspars\@empty \z@ \else \@ne \WF@pspars\fi \fi
\ifvoid\WF@box \ifx\everypar\WF@everypar
\let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
\fi\fi}
\newcommand{\WFclear}{\par
\ifvoid\WF@box\else \vskip\bigskipamount \box\WF@box
\let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
\fi \global\c@WF@wrappedlines\z@ \WF@finale}
\begingroup
\toks0={\let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
\let\parshape\@@parshape \let\@setpar\@@setpar }
\toks1=\expandafter{\@arrayparboxrestore}
\toks2=\expandafter{\clearpage}
\edef\@tempa{\def\noexpand\@arrayparboxrestore{\the\toks0 \the\toks1}%
\def\noexpand\clearpage{\noexpand\protect\noexpand\WFclear \the\toks2}}
\expandafter
\endgroup\@tempa
\@ifundefined{@capwidth}{\let\@capwidth\hsize}{}% Pamper RevTeX's Stupidity
\def\WF@conflict{\WF@warning
{\WF@wfname used inside a conflicting environment}}
\def\WF@collision{\WF@warning{Collision between wrapping environments}}
\def\WF@fltmes{\ifWF@float \WF@info{\WF@wfname floats}%
\else \WF@warning{Stationary \WF@wfname forced to float}\fi}
\let\WF@warning\@warning
\let\WF@info\@gobble
% Support float.sty: float styles and \newfloat. Make \newfloat{foo}
% define the `wrapfoo' environment. Support \newfloat from memoir.cls
% and \newfloatlist from ccaption.sty.
%
\let\WF@floatstyhook\relax
\@ifundefined{newfloat}{}{% There is a \newfloat command
%
\@ifundefined{restylefloat}{
% \newfloat comes from somewhere besides float.sty
\@ifclassloaded{memoir}{
\toks@=\expandafter\expandafter\expandafter
{\csname\string\newfloat\endcsname [{#1}]{#2}{#3}{#4}%
\newenvironment{wrap#2}{\wrapfloat{#2}}{\endwrapfloat}%
}
\edef\@tempa{\def\expandafter\noexpand\csname\string\newfloat\endcsname
[##1]##2##3##4{\the\toks@}}
\@tempa
}% end memoir support
{}% Other origins of \newfloat here??
}{
% float.sty handler. Ooops: Two versions for different versions
% Changing \float@restyle (or \restylefloat) changes \newfloat too.
\@ifundefined{float@restyle}{% older float.sty
\toks@=\expandafter{\restylefloat{#1}% (env may or may not be defined)
\@namedef{wrap#1}{\def\@captype{#1}\@nameuse{fst@#1}%
\def\WF@floatstyhook{\let\@currbox\WF@box \columnwidth\wd\WF@box
\global\setbox\WF@box\float@makebox}%
\@ifnextchar[\WF@wr{\WF@wr[]}}%
\expandafter\let\csname endwrap#1\endcsname \endwrapfigure
}\edef\@tempa{\def\noexpand\restylefloat##1{\the\toks@}}
}{% newer float.sty: use \float@restyle, and \float@makebox takes width arg
\toks@=\expandafter{\float@restyle{#1}% (env may or may not be defined)
\@namedef{wrap#1}{\def\@captype{#1}\@nameuse{fst@#1}%
\def\WF@floatstyhook{\let\@currbox\WF@box
\global\setbox\WF@box\float@makebox{\wd\WF@box}}%
\@ifnextchar[\WF@wr{\WF@wr[]}}%
\expandafter\let\csname endwrap#1\endcsname \endwrapfigure
}\edef\@tempa{\def\noexpand\float@restyle##1{\the\toks@}}
}
\@tempa % perform redefinitions
%
}% End float.sty handler
}% End redefinitions of \newfloat
% Support ccaption.sty
\@ifundefined{\string\newfloatlist}{}{
\toks@=\expandafter\expandafter\expandafter
{\csname\string\newfloatlist\endcsname [{#1}]{#2}{#3}{#4}{#5}%
\@namedef{wrap#2}{\wrapfloat{#2}}%
\expandafter\let\csname endwrap#2\endcsname \endwrapfloat
}
\edef\@tempa{\def\expandafter\noexpand\csname\string\newfloatlist\endcsname
[##1]##2##3##4##5{\the\toks@}}
\@tempa
}
% Process package options.
\@ifundefined{DeclareOption}{\endinput}{}
\def\WF@warning{\PackageWarning{wrapfig}}
\ProvidesPackage{wrapfig}[2003/01/31 \space v 3.6]
\DeclareOption{verbose}{\def\WF@info{\PackageInfo{wrapfig}}}
\ProcessOptions
\AtEndDocument{\WFclear}
\endinput
%%%%% ----- End definitions ----- %%%%%
%%%%% ----- Begin Instructions ----- %%%%%
W R A P F I G . S T Y \ \ ver 3.6 \ \ (Jan 31, 2003)
Copyright (C) 1991-2003 by Donald Arseneau (asnd@triumf.ca)
Wrapfig.sty provides the environments "wrapfigure" and "wraptable" for
typesetting a narrow float at the edge of the text, and making the text
wrap around it. The "wrapfigure" and "wraptable" environments interact
properly with the "\caption" command to produce proper numbering, but
they are not regular floats like "figure" and "table", so (beware!) they
may be printed out of sequence with the regular floats. There are four
parameters for "\begin{wrapfigure}", two optional and two required, plus
the text of the figure, with a caption perhaps:
\begin{wrapfigure}[12]{r}[34pt]{5cm} <figure> \end{wrapfigure}
== = ==== ===
[number of narrow lines] {placement} [overhang] {width}
Some idiosyncrasies:
- You must not specify a wrapfigure in any type of list environment or
or immediately before or immediately after one. It is OK to follow
a list if there is a blank line ("\par") in between.
- If you put a wrapfigure in a parbox or a minipage, or any other type
of grouping, the text wrapping should end before the group does.
- It does work in two-column format, but are your figures that small?
- It may be out of sequence with regular floats.
- The hlines that may be printed above and below floats are ignored;
you must insert them manually if desired.
- "\linewidth" is now adjusted within the wrapped text, but since it
can only be set for whole paragraphs at a time, it will persist with
the wrong value after the wrapping, until the paragraph is finished.
New wrapping environments may be added when new float types are defined
(using memoir.cls, float.sty, or ccaption.sty). Any wrapping environment,
"wrapfigure", "wraptable", or something else may be invoked using the
"wrapfloat" environment, as in "\begin{wrapfloat}{figure}{O}{5cm}".
To use float.sty properly, load package "float" before "wrapfig",
and declare any new float types after loading both. Likewise for
ccaption.sty and "\newfloatlist" and memoir.cls and its "\newfloat".
\section{Placement and Floating}
Parameter "#2" (required) is the figure placement code, but the valid
codes are different from regular figures. They come in pairs: an
uppercase version which allows the figure to float, and a lowercase
version that puts the figure ``exactly here''.
r R - the right side of the text
l L - the left side of the text
i I - the inside edge--near the binding (if "[twoside]" document)
o O - the outside edge--far from the binding
You should specify one code only, not a list. The figure or table must
be on one side or the other; it cannot be in the middle with text on
both sides. The "i" and "o" options refer to the inside and outside of
the whole page, not individual columns.
The ability to float is somewhat restricted, and you will get best results
by giving exact manual placement, but floating is more convenient while
revising the document. Any changes to the formatting can ruin your manual
positioning so you should adjust the placement just before printing a
final copy. Here are some tips for good placement:
- The environment should be placed so as to not run over a page break.
- The environment must not be placed in special places like lists.
- For esthetic reasons, only plain text should wrap around the figure.
Section titles and big equations look bad; lists are bad if the figure
is on the left. (All these function properly, they just don't look
very good.) Small equations look fine.
- It is convenient to begin the environment between paragraphs, but if
you want placement in the middle of a paragraph, you must put the
environment between two words where there is a natural line break.
When floating, \LaTeX\ tries to apply these rules. More specifically,
a floated wrapping environment will only begin...
- at the beginning of a paragraph,
- when there is enough room on the page, or it is possible to go on
the next page,
- if the `paragraph' is not in a section title or a list,
- if the paragraph is not wrapping around another figure,
- in the main text (not in a minipage etc.)
It is possible that a non-floating wrapfigure will be forced to float
when an earlier one is still being processed. A warning will be written
in that case. You can have more information about the floating process
written to the log file by specifying "\usepackage[verbose]{wrapfig}".
If there is a lot of flexibility on a page, a floating wrapfigure may
be placed badly; you must turn to manual placement. A rare problem is
that floats and footnotes specified within the wrapping text can also
cause poor placement and bad formatting.
\section {Sizing and optional overhang}
Parameter "#4" (the second required parameter) is the width of the figure
or table. Given the way that \LaTeX\ puts just about everything into boxes
with the current line-width, the width parameter will take precedence over
whatever natural width the figure has. In particular, the caption is always
typeset with the specified width. If the figure is wider than the space
allotted, you will get an ``overfull box'' warning.
However, if you specify a width of *zero* ("0pt"), the actual width of
the figure will determine the wrapping width. A following "\caption"
should have the same width as the figure, but it might fail badly; it
is safer to specify a width when you use a caption.
\LaTeX\ will wrap surrounding text around the figure, leaving a gap of
"\intextsep" at the top and bottom, and "\columsep" at the side, by
producing a series of shortened text lines beside the figure. The
indentation (shortening) of the text is the figure width plus "\columnsep"
minus overhang (if any; see below).
\LaTeX\ calculates the number of short lines needed based on the height
of the figure and the length "\intextsep". You can override this guess
by giving the first optional argument (parameter "#1") specifying the
number of shortened lines (counting each displayed equation as 3 lines).
This is particularly useful when the surrounding text contains extra
vertical spacing that is not accounted for automatically.
The second optional parameter ("#3") tells how much the figure should
hang out into the margin. The default overhang is given by the length
"\wrapoverhang", which is "0pt" normally but can be changed using
"\setlength". For example, to have all wrapfigures use the space
reserved for marginal notes,
\setlength{\wrapoverhang}{\marginparwidth}
\addtolength{\wrapoverhang}{\marginparsep}
When you do specify the overhang explicitly for a particular figure, you
can use a special unit called "\width" meaning the width of the figure.
For example, "[0.5\width]" makes the center of the figure sit on the
edge of the text, and "[\width]" puts the figure entirely in the margin
(and the adjacent text is indented by just "\columnsep"). This "\width"
is the actual width of the wrapfigure, which may be greater than the
declared width.
\section{Some Random Implementation Notes}
Unfortunately, \LaTeX's system of setting "\everypar" and "\par" is
unable to coexist peacefully with a wrapping environment, so I was
forced to subvert the "\@setpar" mechanism and "\everypar". ("\everypar"
is already subverted once by NFSS.)
When checking the room left on the page, remember that if there is less
than "\baselineskip" the new paragraph will begin on the next page, even
if there is no page stretch. If non-floating, I force a bad page break
rather than have the figure hang into the bottom margin.
Here are notes on various variables and some macros; what info they
store and how they are used.
\WF@wli - number-of-wrapped-lines parameter, saved for start of wrapping.
Set globally by "\WF@wr" (set empty if no optional parameter given).
The floating mechanism ignores this and uses the real size.
\WF@ovh - margin overhang set globally by "\WF@rapt", saved until placing
figure (but not reset). Actually, the setting is very tricky so that
the expected values are used when a figure floats. First, the expression
is saved without evaluation by "\WF@rapt" ("\begin{wrapfigure}") because
"\width" is still unknown. Soon after that, "\endwrapfigure" executes
"\WF@ovh" to evaluate the overhang and save the result (so that changes
to "\wrapoverhang" while this figure is floating won't affect this
figure). Finally, it is used by "\WF@putfigmaybe" when printing the fig.
\WF@place - a macro that is used as a number, giving the placement code.
It might start out as "`I" and later be converted to "114" (r).
\WF@box - tested for void at "\begin{wrapfigure}", to avoid collisions,
by "\everypar" to do floating, and by "\WF@finale" before resetting
"\everypar". Voided globally when used by "\WF@putfigmaybe" (or by
"\WF@wr" if an old figure must be dumped prematurely).
\par - test if it is "\@@par" by "\begin{wrapfigure}" and "\WF@floathand"
to float past special environments. It is set to "\@par" ("\WF@mypar")
by "\WF@startwrapping", and restored by an end-group (bad!) or by
"\WF@finale" (good). It is protected from change by redefining
"\@setpar".
\parshape - let to "\WF@fudgeparshape" by "\WF@startwrapping", so lists
will continue wrapping; "\@@parshape" preserves the real "\parshape"
command, and it is restored by "\WF@finale" or "\@parboxrestore".
"\WF@floathand" and "\WF@wr" test if old wrapping is still in progress
with "\ifx\parshape\WF@fudgeparshape". The value of "\@@parshape" is
also tested to float past lists and other wrapping environments.
\hangindent - tested to float past section titles etc.
\c@WF@wrappedlines - the number of shortened lines + 1; set globally by
"\WF@startwrapping" and decremented by "\par" ("\WF@mypar"). It is > 1
only when wrapping is incomplete. "\WF@wraphand", "\WF@fudgeparshape",
and "\WF@mypar" test the number for calling "\WF@finale". It may get
stuck at some high value if "\par" is restored by an end-group, (and
wrapping is terminated prematurely) so it is unwise to use this as a
test for wrapping-complete.
\pagetotal - one of many parameters used to compute floating. When
putting a wrapfigure in a parbox, I assign "\let\pagetotal\maxdimen"
(locally!) to signal not-top-of-page and no floating.
\WF@pspars - the "\parshape" parameters as LaTeX sets them for lists
("\WF@fudgeparshape"); when wrapping I test it and use it to modify my
own real params for the paragraph. They are also used when "\parshape"
is restored after wrapping.
\WF@finale - is performed by "\par" when wrapping should end. However,
that might happen inside a group (a list especially), so the subverted
versions of "\par", "\parshape" etc. will be reinstated when the group
ends. Thus, they must themselves test "\c@WF@wrappedlines" < 2 to see
when wrapping is over, and if so, they should just do "\WF@finale" again.
These are the tests to see if a floating wrapfigure will fit at a particular
spot. These tests are performed at the beginning of every paragraph after
the figure, except in lists etc. ("\pagegoal" - "\pagetotal" is the room
left on the page.)
>
room_left := \pagegoal - \pagetotal
if room_left < 0 then page overfull already: put figure (on next page)
else
if figure_size > room_left then does not fit
if max(min_stretch, \pagestretch) + extra > room_left
then page can stretch until full: put figure (at top of next page)
fi
else figure fits: put figure
fi fi
<
Even if a wrapfigure is not floating, it will go through the same logic
to generate a "\pagebreak", and maybe an underfull page, when the current
page can stretch until full. The "min_stretch" depends on whether it is
floating or not: ".5\baselineskip" (floating) "2\baselineskip" (not). The
"extra" is ".5\baselineskip" in either case. These values can be adjusted.
There are some other `magic numbers' for floating that aren't really so
special, but you must change them together if you change them at all.
To make floating wrapfigures float less and fit on pages more frequently,
but not change the number of wrapped lines, decrease the "1.5" in
"\global\advance\WF@size1.5\baselineskip" and increase the "1.1" in
"\advance\WF@size1.1\baselineskip" by the same amount (and vice versa).
To make more (or fewer) wrapped lines for the same size figure, without
changing the floating, change "1.1" in "\advance\WF@size1.1\baselineskip"
unilaterally.
%%%%% ----- End Instructions ----- %%%%%
Test file integrity: ASCII 32-57, 58-126: !"#$%&'()*+,-./0123456789
:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

24
tesi/prova.aux Normal file
View file

@ -0,0 +1,24 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\@writefile{toc}{\contentsline {section}{\numberline {1}{\bfseries \sffamily TODO} Scaletta [1/2]}{1}{section.1}\protected@file@percent }
\newlabel{sec:org5a6f376}{{1}{1}{{\bfseries \sffamily TODO} Scaletta [1/2]}{section.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2}Introduction}{1}{section.2}\protected@file@percent }
\newlabel{sec:orgef00ecd}{{2}{1}{Introduction}{section.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}{\bfseries \sffamily TODO} OCaml}{1}{subsection.2.1}\protected@file@percent }
\newlabel{sec:org5659ec2}{{2.1}{1}{{\bfseries \sffamily TODO} OCaml}{subsection.2.1}{}}

0
tesi/prova.bbl Normal file
View file

48
tesi/prova.blg Normal file
View file

@ -0,0 +1,48 @@
This is BibTeX, Version 0.99d (TeX Live 2019 Gentoo Linux)
Capacity: max_strings=100000, hash_size=100000, hash_prime=85009
The top-level auxiliary file: prova.aux
I found no \citation commands---while reading file prova.aux
I found no \bibdata command---while reading file prova.aux
I found no \bibstyle command---while reading file prova.aux
You've used 0 entries,
0 wiz_defined-function locations,
83 strings with 484 characters,
and the built_in function-call counts, 0 in all, are:
= -- 0
> -- 0
< -- 0
+ -- 0
- -- 0
* -- 0
:= -- 0
add.period$ -- 0
call.type$ -- 0
change.case$ -- 0
chr.to.int$ -- 0
cite$ -- 0
duplicate$ -- 0
empty$ -- 0
format.name$ -- 0
if$ -- 0
int.to.chr$ -- 0
int.to.str$ -- 0
missing$ -- 0
newline$ -- 0
num.names$ -- 0
pop$ -- 0
preamble$ -- 0
purify$ -- 0
quote$ -- 0
skip$ -- 0
stack$ -- 0
substring$ -- 0
swap$ -- 0
text.length$ -- 0
text.prefix$ -- 0
top$ -- 0
type$ -- 0
warning$ -- 0
while$ -- 0
width$ -- 0
write$ -- 0
(There were 3 error messages)

694
tesi/prova.log Normal file
View file

@ -0,0 +1,694 @@
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019 Gentoo Linux) (preloaded format=pdflatex 2020.2.15) 17 FEB 2020 17:30
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**prova.tex
(./prova.tex
LaTeX2e <2018-12-01>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size11.clo
File: size11.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
)
\c@part=\count80
\c@section=\count81
\c@subsection=\count82
\c@subsubsection=\count83
\c@paragraph=\count84
\c@subparagraph=\count85
\c@figure=\count86
\c@table=\count87
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
)
(/usr/share/texmf-dist/tex/latex/base/inputenc.sty
Package: inputenc 2018/08/11 v1.3c Input encoding file
\inpenc@prehook=\toks14
\inpenc@posthook=\toks15
)
(/usr/share/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2018/08/11 v2.0j Standard LaTeX package
(/usr/share/texmf-dist/tex/latex/base/t1enc.def
File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file
LaTeX Font Info: Redeclaring font encoding T1 on input line 48.
))
(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
\KV@toks@=\toks16
)
(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
(/usr/share/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
)
Package graphics Info: Driver file: pdftex.def on input line 99.
(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def
File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
))
\Gin@req@height=\dimen103
\Gin@req@width=\dimen104
)
(/usr/share/texmf-dist/tex/latex/oberdiek/grffile.sty
Package: grffile 2017/06/30 v1.18 Extended file name support for graphics (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty
Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch
)
(/usr/share/texmf-dist/tex/generic/ifxetex/ifxetex.sty
Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
)
(/usr/share/texmf-dist/tex/latex/oberdiek/kvoptions.sty
Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
)
(/usr/share/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/infwarerr.sty
Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
)
(/usr/share/texmf-dist/tex/generic/oberdiek/etexcmds.sty
Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty
Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
Package ifluatex Info: LuaTeX not detected.
))))
(/usr/share/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO
)
Package pdftexcmds Info: LuaTeX not detected.
Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found.
)
Package grffile Info: Option `multidot' is set to `true'.
Package grffile Info: Option `extendedchars' is set to `false'.
Package grffile Info: Option `space' is set to `true'.
Package grffile Info: \Gin@ii of package `graphicx' fixed on input line 494.
)
(/usr/share/texmf-dist/tex/latex/tools/longtable.sty
Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC)+ FMi change
\LTleft=\skip43
\LTright=\skip44
\LTpre=\skip45
\LTpost=\skip46
\LTchunksize=\count88
\LTcapwidth=\dimen105
\LT@head=\box27
\LT@firsthead=\box28
\LT@foot=\box29
\LT@lastfoot=\box30
\LT@cols=\count89
\LT@rows=\count90
\c@LT@tables=\count91
\c@LT@chunks=\count92
\LT@p@ftn=\toks17
)
(/usr/share/texmf-dist/tex/latex/wrapfig/wrapfig.sty
\wrapoverhang=\dimen106
\WF@size=\dimen107
\c@WF@wrappedlines=\count93
\WF@box=\box31
\WF@everypar=\toks18
Package: wrapfig 2003/01/31 v 3.6
)
(/usr/share/texmf-dist/tex/latex/graphics/rotating.sty
Package: rotating 2016/08/11 v2.16d rotated objects in LaTeX
(/usr/share/texmf-dist/tex/latex/base/ifthen.sty
Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
)
\c@r@tfl@t=\count94
\rotFPtop=\skip47
\rotFPbot=\skip48
\rot@float@box=\box32
\rot@mess@toks=\toks19
)
(/usr/share/texmf-dist/tex/generic/ulem/ulem.sty
\UL@box=\box33
\UL@hyphenbox=\box34
\UL@skip=\skip49
\UL@hook=\toks20
\UL@height=\dimen108
\UL@pe=\count95
\UL@pixel=\dimen109
\ULC@box=\box35
Package: ulem 2012/05/18
\ULdepth=\dimen110
)
(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2018/12/01 v2.17b AMS math features
\@mathmargin=\skip50
For additional information on amsmath, use the `?' option.
(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2000/06/29 v2.01 AMS text
(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks21
\ex@=\dimen111
))
(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen112
)
(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 2016/03/08 v2.02 operator names
)
\inf@bad=\count96
LaTeX Info: Redefining \frac on input line 223.
\uproot@=\count97
\leftroot@=\count98
LaTeX Info: Redefining \overline on input line 385.
\classnum@=\count99
\DOTSCASE@=\count100
LaTeX Info: Redefining \ldots on input line 482.
LaTeX Info: Redefining \dots on input line 485.
LaTeX Info: Redefining \cdots on input line 606.
\Mathstrutbox@=\box36
\strutbox@=\box37
\big@size=\dimen113
LaTeX Font Info: Redeclaring font encoding OML on input line 729.
LaTeX Font Info: Redeclaring font encoding OMS on input line 730.
\macc@depth=\count101
\c@MaxMatrixCols=\count102
\dotsspace@=\muskip10
\c@parentequation=\count103
\dspbrk@lvl=\count104
\tag@help=\toks22
\row@=\count105
\column@=\count106
\maxfields@=\count107
\andhelp@=\toks23
\eqnshift@=\dimen114
\alignsep@=\dimen115
\tagshift@=\dimen116
\tagwidth@=\dimen117
\totwidth@=\dimen118
\lineht@=\dimen119
\@envbody=\toks24
\multlinegap=\skip51
\multlinetaggap=\skip52
\mathdisplay@stack=\toks25
LaTeX Info: Redefining \[ on input line 2844.
LaTeX Info: Redefining \] on input line 2845.
)
(/usr/share/texmf-dist/tex/latex/base/textcomp.sty
Package: textcomp 2018/08/11 v2.0j Standard LaTeX package
Package textcomp Info: Sub-encoding information:
(textcomp) 5 = only ISO-Adobe without \textcurrency
(textcomp) 4 = 5 + \texteuro
(textcomp) 3 = 4 + \textohm
(textcomp) 2 = 3 + \textestimated + \textcurrency
(textcomp) 1 = TS1 - \textcircled - \t
(textcomp) 0 = TS1 (full)
(textcomp) Font families with sub-encoding setting implement
(textcomp) only a restricted character set as indicated.
(textcomp) Family '?' is the default used for unknown fonts.
(textcomp) See the documentation for details.
Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79.
(/usr/share/texmf-dist/tex/latex/base/ts1enc.def
File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
Now handling font encoding TS1 ...
... processing UTF-8 mapping file for font encoding TS1
(/usr/share/texmf-dist/tex/latex/base/ts1enc.dfu
File: ts1enc.dfu 2018/10/05 v1.2f UTF-8 support for inputenc
defining Unicode char U+00A2 (decimal 162)
defining Unicode char U+00A3 (decimal 163)
defining Unicode char U+00A4 (decimal 164)
defining Unicode char U+00A5 (decimal 165)
defining Unicode char U+00A6 (decimal 166)
defining Unicode char U+00A7 (decimal 167)
defining Unicode char U+00A8 (decimal 168)
defining Unicode char U+00A9 (decimal 169)
defining Unicode char U+00AA (decimal 170)
defining Unicode char U+00AC (decimal 172)
defining Unicode char U+00AE (decimal 174)
defining Unicode char U+00AF (decimal 175)
defining Unicode char U+00B0 (decimal 176)
defining Unicode char U+00B1 (decimal 177)
defining Unicode char U+00B2 (decimal 178)
defining Unicode char U+00B3 (decimal 179)
defining Unicode char U+00B4 (decimal 180)
defining Unicode char U+00B5 (decimal 181)
defining Unicode char U+00B6 (decimal 182)
defining Unicode char U+00B7 (decimal 183)
defining Unicode char U+00B9 (decimal 185)
defining Unicode char U+00BA (decimal 186)
defining Unicode char U+00BC (decimal 188)
defining Unicode char U+00BD (decimal 189)
defining Unicode char U+00BE (decimal 190)
defining Unicode char U+00D7 (decimal 215)
defining Unicode char U+00F7 (decimal 247)
defining Unicode char U+0192 (decimal 402)
defining Unicode char U+02C7 (decimal 711)
defining Unicode char U+02D8 (decimal 728)
defining Unicode char U+02DD (decimal 733)
defining Unicode char U+0E3F (decimal 3647)
defining Unicode char U+2016 (decimal 8214)
defining Unicode char U+2020 (decimal 8224)
defining Unicode char U+2021 (decimal 8225)
defining Unicode char U+2022 (decimal 8226)
defining Unicode char U+2030 (decimal 8240)
defining Unicode char U+2031 (decimal 8241)
defining Unicode char U+203B (decimal 8251)
defining Unicode char U+203D (decimal 8253)
defining Unicode char U+2044 (decimal 8260)
defining Unicode char U+204E (decimal 8270)
defining Unicode char U+2052 (decimal 8274)
defining Unicode char U+20A1 (decimal 8353)
defining Unicode char U+20A4 (decimal 8356)
defining Unicode char U+20A6 (decimal 8358)
defining Unicode char U+20A9 (decimal 8361)
defining Unicode char U+20AB (decimal 8363)
defining Unicode char U+20AC (decimal 8364)
defining Unicode char U+20B1 (decimal 8369)
defining Unicode char U+2103 (decimal 8451)
defining Unicode char U+2116 (decimal 8470)
defining Unicode char U+2117 (decimal 8471)
defining Unicode char U+211E (decimal 8478)
defining Unicode char U+2120 (decimal 8480)
defining Unicode char U+2122 (decimal 8482)
defining Unicode char U+2126 (decimal 8486)
defining Unicode char U+2127 (decimal 8487)
defining Unicode char U+212E (decimal 8494)
defining Unicode char U+2190 (decimal 8592)
defining Unicode char U+2191 (decimal 8593)
defining Unicode char U+2192 (decimal 8594)
defining Unicode char U+2193 (decimal 8595)
defining Unicode char U+2329 (decimal 9001)
defining Unicode char U+232A (decimal 9002)
defining Unicode char U+2422 (decimal 9250)
defining Unicode char U+25E6 (decimal 9702)
defining Unicode char U+25EF (decimal 9711)
defining Unicode char U+266A (decimal 9834)
defining Unicode char U+FEFF (decimal 65279)
))
LaTeX Info: Redefining \oldstylenums on input line 334.
Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349.
Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350.
Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351.
Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352.
Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353.
Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354.
Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355.
Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356.
Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357.
Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358.
Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359.
Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360.
Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361.
Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362.
Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363.
Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364.
Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365.
Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366.
Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367.
Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368.
Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369.
Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370.
Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371.
Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372.
Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373.
Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374.
Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375.
Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376.
Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377.
Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378.
Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379.
Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380.
Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381.
Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382.
Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383.
Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384.
Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385.
Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386.
Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387.
Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388.
Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389.
Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390.
Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391.
Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392.
Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393.
Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394.
Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395.
Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396.
Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397.
Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398.
Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399.
Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400.
Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401.
Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402.
Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403.
Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404.
Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405.
Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406.
Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407.
Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408.
Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409.
)
(/usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols
(/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\symAMSa=\mathgroup4
\symAMSb=\mathgroup5
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106.
))
(/usr/share/texmf-dist/tex/latex/capt-of/capt-of.sty
Package: capt-of 2009/12/29 v0.2 standard captions outside of floats
)
(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty
Package: hyperref 2018/11/30 v6.88e Hypertext links for LaTeX
(/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO)
(/usr/share/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO)
Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO)
Package hobsub Info: Skipping package `infwarerr' (already loaded).
Package hobsub Info: Skipping package `ltxcmds' (already loaded).
Package hobsub Info: Skipping package `ifluatex' (already loaded).
Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO)
Package ifvtex Info: VTeX not detected.
Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO)
Package hobsub Info: Skipping package `ifpdf' (already loaded).
Package hobsub Info: Skipping package `etexcmds' (already loaded).
Package hobsub Info: Skipping package `kvsetkeys' (already loaded).
Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO)
Package hobsub Info: Skipping package `pdftexcmds' (already loaded).
Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO)
Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO
)
Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO)
Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO)
)
Package hobsub Info: Skipping package `hobsub' (already loaded).
Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO)
Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO)
Package: xcolor-patch 2016/05/16 xcolor patch
Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO)
Package atveryend Info: \enddocument detected (standard20110627).
Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO)
Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO)
Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO)
)
(/usr/share/texmf-dist/tex/latex/oberdiek/auxhook.sty
Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO)
)
\@linkdim=\dimen120
\Hy@linkcounter=\count108
\Hy@pagecounter=\count109
(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def
File: pd1enc.def 2018/11/30 v6.88e Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
)
\Hy@SavedSpaceFactor=\count110
(/usr/share/texmf-dist/tex/latex/latexconfig/hyperref.cfg
File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
)
Package hyperref Info: Hyper figures OFF on input line 4519.
Package hyperref Info: Link nesting OFF on input line 4524.
Package hyperref Info: Hyper index ON on input line 4527.
Package hyperref Info: Plain pages OFF on input line 4534.
Package hyperref Info: Backreferencing OFF on input line 4539.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4772.
\c@Hy@tempcnt=\count111
(/usr/share/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip11
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
)
LaTeX Info: Redefining \url on input line 5125.
\XeTeXLinkMargin=\dimen121
\Fld@menulength=\count112
\Field@Width=\dimen122
\Fld@charsize=\dimen123
Package hyperref Info: Hyper figures OFF on input line 6380.
Package hyperref Info: Link nesting OFF on input line 6385.
Package hyperref Info: Hyper index ON on input line 6388.
Package hyperref Info: backreferencing OFF on input line 6395.
Package hyperref Info: Link coloring OFF on input line 6400.
Package hyperref Info: Link coloring with OCG OFF on input line 6405.
Package hyperref Info: PDF/A mode OFF on input line 6410.
LaTeX Info: Redefining \ref on input line 6450.
LaTeX Info: Redefining \pageref on input line 6454.
\Hy@abspage=\count113
\c@Item=\count114
\c@Hfootnote=\count115
)
Package hyperref Info: Driver (autodetected): hpdftex.
(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def
File: hpdftex.def 2018/11/30 v6.88e Hyperref driver for pdfTeX
\Fld@listcount=\count116
\c@bookmark@seq@number=\count117
(/usr/share/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
82.
)
\Hy@SectionHShift=\skip53
)
(/usr/share/texmf-dist/tex/latex/algorithms/algorithm.sty
Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating enviro
nment
(/usr/share/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count118
\float@exts=\toks26
\float@box=\box38
\@float@everytoks=\toks27
\@floatcapt=\box39
)
\@float@every@algorithm=\toks28
\c@algorithm=\count119
)
(/usr/share/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty
Package: algpseudocode
(/usr/share/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty
Package: algorithmicx 2005/04/27 v1.2 Algorithmicx
Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style
\c@ALG@line=\count120
\c@ALG@rem=\count121
\c@ALG@nested=\count122
\ALG@tlm=\skip54
\ALG@thistlm=\skip55
\c@ALG@Lnr=\count123
\c@ALG@blocknr=\count124
\c@ALG@storecount=\count125
\c@ALG@tmpcounter=\count126
\ALG@tmplength=\skip56
)
Document Style - pseudocode environments for use with the `algorithmicx' style
) (/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty
Package: amsthm 2017/10/31 v2.20.4
\thm@style=\toks29
\thm@bodyfont=\toks30
\thm@headfont=\toks31
\thm@notefont=\toks32
\thm@headpunct=\toks33
\thm@preskip=\skip57
\thm@postskip=\skip58
\thm@headsep=\skip59
\dth@everypar=\toks34
)
\c@definition=\count127
(/usr/share/texmf-dist/tex/latex/listings/listings.sty
\lst@mode=\count128
\lst@gtempboxa=\box40
\lst@token=\toks35
\lst@length=\count129
\lst@currlwidth=\dimen124
\lst@column=\count130
\lst@pos=\count131
\lst@lostspace=\dimen125
\lst@width=\dimen126
\lst@newlines=\count132
\lst@lineno=\count133
\lst@maxwidth=\dimen127
(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty
File: lstmisc.sty 2019/02/27 1.8b (Carsten Heinz)
\c@lstnumber=\count134
\lst@skipnumbers=\count135
\lst@framebox=\box41
)
(/usr/share/texmf-dist/tex/latex/listings/listings.cfg
File: listings.cfg 2019/02/27 1.8b listings configuration
))
Package: listings 2019/02/27 1.8b (Carsten Heinz)
(/usr/share/texmf-dist/tex/latex/graphics/color.sty
Package: color 2016/07/10 v1.1e Standard LaTeX Color (DPC)
(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg
File: color.cfg 2016/01/02 v1.6 sample color configuration
)
Package color Info: Driver file: pdftex.def on input line 147.
)
No file prova.aux.
\openout1 = `prova.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 35.
LaTeX Font Info: Try loading font information for TS1+cmr on input line 35.
(/usr/share/texmf-dist/tex/latex/base/ts1cmr.fd
File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
)
LaTeX Font Info: ... okay on input line 35.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 35.
LaTeX Font Info: ... okay on input line 35.
(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count136
\scratchdimen=\dimen128
\scratchbox=\box42
\nofMPsegments=\count137
\nofMParguments=\count138
\everyMPshowfont=\toks36
\MPscratchCnt=\count139
\MPscratchDim=\dimen129
\MPnumerator=\count140
\makeMPintoPDFobject=\count141
\everyMPtoPDFconversion=\toks37
) (/usr/share/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf
(/usr/share/texmf-dist/tex/latex/oberdiek/grfext.sty
Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO)
)
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
38.
Package grfext Info: Graphics extension search list:
(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE
G,.JBIG2,.JB2,.eps]
(grfext) \AppendGraphicsExtensions on input line 456.
(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
e
))
\AtBeginShipoutBox=\box43
Package hyperref Info: Link coloring OFF on input line 35.
(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty
Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section
(/usr/share/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO)
)
\c@section@level=\count142
)
LaTeX Info: Redefining \ref on input line 35.
LaTeX Info: Redefining \pageref on input line 35.
LaTeX Info: Redefining \nameref on input line 35.
\@outlinefile=\write3
\openout3 = `prova.out'.
\c@lstlisting=\count143
LaTeX Font Info: Try loading font information for U+msa on input line 38.
(/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Try loading font information for U+msb on input line 38.
(/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
LaTeX Font Info: Try loading font information for T1+cmss on input line 38.
(/usr/share/texmf-dist/tex/latex/base/t1cmss.fd
File: t1cmss.fd 2014/09/29 v2.5h Standard LaTeX font definitions
) [1
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 98.
[2]
Package atveryend Info: Empty hook `AfterLastShipout' on input line 98.
(./prova.aux)
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 98.
Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 98.
Package rerunfilecheck Warning: File `prova.out' has changed.
(rerunfilecheck) Rerun to get outlines right
(rerunfilecheck) or use package `bookmark'.
Package rerunfilecheck Info: Checksums for `prova.out':
(rerunfilecheck) Before: <no file>
(rerunfilecheck) After: 7405D30B8D200DFB9FDA8AFBCA5DCCFE;160.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 98.
)
Here is how much of TeX's memory you used:
9008 strings out of 494553
127405 string characters out of 6177841
211891 words of memory out of 5000000
12522 multiletter control sequences out of 15000+600000
18671 words of font info for 51 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
36i,6n,32p,286b,345s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/usr/share/t
exmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc}</usr/share/texmf-dist/font
s/type1/public/amsfonts/symbols/msam10.pfb></usr/share/texmf-dist/fonts/type1/p
ublic/cm-super/sfbx1000.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/
sfbx1200.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1440.pfb></
usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb></usr/share/texmf
-dist/fonts/type1/public/cm-super/sfrm1095.pfb></usr/share/texmf-dist/fonts/typ
e1/public/cm-super/sfrm1200.pfb></usr/share/texmf-dist/fonts/type1/public/cm-su
per/sfrm1728.pfb></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx1200.pf
b></usr/share/texmf-dist/fonts/type1/public/cm-super/sfsx1440.pfb></usr/share/t
exmf-dist/fonts/type1/public/cm-super/sfti1095.pfb>
Output written on prova.pdf (2 pages, 133009 bytes).
PDF statistics:
68 PDF objects out of 1000 (max. 8388607)
52 compressed objects within 1 object stream
6 named destinations out of 1000 (max. 500000)
1 words of extra memory for PDF output out of 10000 (max. 10000000)

70
tesi/prova.org Normal file
View file

@ -0,0 +1,70 @@
* TODO Scaletta [1/2]
- [X] Abstract
- [ ] Introduction [0%]
- [ ] Ocaml
- [ ] Pattern matching
- [ ] Translation Verification
- [ ] Symbolic execution
#+TITLE: Translation Verification of the OCaml pattern matching compiler
#+AUTHOR: Francesco Mecca
#+EMAIL: me@francescomecca.eu
#+DATE:
#+LANGUAGE: en
#+LaTeX_CLASS: article
#+LaTeX_HEADER: \usepackage[utf8]{inputenc}
#+LaTeX_HEADER: \usepackage{algorithm}
#+LaTeX_HEADER: \usepackage{algpseudocode}
#+LaTeX_HEADER: \usepackage{amsmath,amssymb,amsthm}
#+Latex_HEADER: \newtheorem{definition}{Definition}
#+LaTeX_HEADER: \usepackage{graphicx}
#+LaTeX_HEADER: \usepackage{listings}
#+LaTeX_HEADER: \usepackage{color}
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+OPTIONS: H:2 toc:nil \n:nil @:t ::t |:t ^:{} _:{} *:t TeX:t LaTeX:t
#+STARTUP: showall
\begin{abstract}
This dissertation presents an algorithm for the translation validation of the OCaml
pattern matching compiler. Given the source representation of the target program and the
target program compiled in untyped lambda form, the algoritmhm is capable of modelling
the source program in terms of symbolic constraints on it's branches and apply symbolic
execution on the untyped lambda representation in order to validate wheter the compilation
produced a valid result.
In this context a valid result means that for every input in the domain of the source
program the untyped lambda translation produces the same output as the source program.
The input of the program is modelled in terms of symbolic constraints closely related to
the runtime representation of OCaml objects and the output consists of OCaml code
blackboxes that are not evaluated in the context of the verification.
\end{abstract}
* Introduction
** TODO OCaml
Objective Caml (OCaml) is a dialect of the ML (Meta-Language) family of programming
languages.
OCaml shares many features with other dialects of ML, such as SML and Caml Light,
The main features of ML languages are the use of the Hindley-Milner type system that
provides with respect to static type systems of traditional imperative and/or object
oriented language such as C, C++ and Java many advantages such as:
- Parametric polymorphism: in certain scenarios a function can accept more than one
type for the input parameters. For example a function that computes the lenght of a
list doesn't need to inspect the type of the elements of the list and for this reason
a List.length function can accept list of integers, list of strings and in general
list of any type. Such languages offer polymorphic functions through subtyping at
runtime only, while other languages such as C++ offer polymorphism through compile
time templates and function overloading.
With the Hindley-Milner type system each well typed function can have more than one
type but always has a unique best type, called the /principal type/.
For example the principal type of the List.length function is "For any /a/, function from
list of /a/ to /int/" and /a/ is called the /type parameter/.
- Strong typing: Languages such as C and C++ allow the programmer to operate on data
without considering its type, mainly through pointers. Other languages such as C#
and Go allow type erasure so at runtime the type of the data can't be queried.
In the case of programming languages using an Hindley-Milner type system the
programmer is not allowed to operate on data by ignoring or promoting its type.
- Type Inference: the principal type of a well formed term can be inferred without any
annotation or declaration.

3
tesi/prova.out Normal file
View file

@ -0,0 +1,3 @@
\BOOKMARK [1][-]{section.1}{TODO Scaletta [1/2]}{}% 1
\BOOKMARK [1][-]{section.2}{Introduction}{}% 2
\BOOKMARK [2][-]{subsection.2.1}{TODO OCaml}{section.2}% 3

BIN
tesi/prova.pdf Normal file

Binary file not shown.

98
tesi/prova.tex Normal file
View file

@ -0,0 +1,98 @@
% Created 2020-02-17 Mon 17:30
% Intended LaTeX compiler: pdflatex
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{grffile}
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath,amssymb,amsthm}
\newtheorem{definition}{Definition}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{color}
\author{Francesco Mecca}
\date{}
\title{Translation Verification of the OCaml pattern matching compiler}
\hypersetup{
pdfauthor={Francesco Mecca},
pdftitle={Translation Verification of the OCaml pattern matching compiler},
pdfkeywords={},
pdfsubject={},
pdfcreator={Emacs 26.3 (Org mode 9.1.9)},
pdflang={English}}
\begin{document}
\maketitle
\section{{\bfseries\sffamily TODO} Scaletta [1/2]}
\label{sec:org5a6f376}
\begin{itemize}
\item[{$\boxtimes$}] Abstract
\item[{$\square$}] Introduction [0\%]
\begin{itemize}
\item[{$\square$}] Ocaml
\item[{$\square$}] Pattern matching
\item[{$\square$}] Translation Verification
\item[{$\square$}] Symbolic execution
\end{itemize}
\end{itemize}
\begin{abstract}
This dissertation presents an algorithm for the translation validation of the OCaml
pattern matching compiler. Given the source representation of the target program and the
target program compiled in untyped lambda form, the algoritmhm is capable of modelling
the source program in terms of symbolic constraints on it's branches and apply symbolic
execution on the untyped lambda representation in order to validate wheter the compilation
produced a valid result.
In this context a valid result means that for every input in the domain of the source
program the untyped lambda translation produces the same output as the source program.
The input of the program is modelled in terms of symbolic constraints closely related to
the runtime representation of OCaml objects and the output consists of OCaml code
blackboxes that are not evaluated in the context of the verification.
\end{abstract}
\section{Introduction}
\label{sec:orgef00ecd}
\subsection{{\bfseries\sffamily TODO} OCaml}
\label{sec:org5659ec2}
Objective Caml (OCaml) is a dialect of the ML (Meta-Language) family of programming
languages.
OCaml shares many features with other dialects of ML, such as SML and Caml Light,
The main features of ML languages are the use of the Hindley-Milner type system that
provides with respect to static type systems of traditional imperative and/or object
oriented language such as C, C++ and Java many advantages such as:
\begin{itemize}
\item Parametric polymorphism: in certain scenarios a function can accept more than one
type for the input parameters. For example a function that computes the lenght of a
list doesn't need to inspect the type of the elements of the list and for this reason
a List.length function can accept list of integers, list of strings and in general
list of any type. Such languages offer polymorphic functions through subtyping at
runtime only, while other languages such as C++ offer polymorphism through compile
time templates and function overloading.
With the Hindley-Milner type system each well typed function can have more than one
type but always has a unique best type, called the \emph{principal type}.
For example the principal type of the List.length function is "For any \emph{a}, function from
list of \emph{a} to \emph{int}" and \emph{a} is called the \emph{type parameter}.
\item Strong typing: Languages such as C and C++ allow the programmer to operate on data
without considering its type, mainly through pointers. Other languages such as C\#
and Go allow type erasure so at runtime the type of the data can't be queried.
In the case of programming languages using an Hindley-Milner type system the
programmer is not allowed to operate on data by ignoring or promoting its type.
\item Type Inference: the principal type of a well formed term can be inferred without any
annotation or declaration.
\end{itemize}
\end{document}

Binary file not shown.

Binary file not shown.

4
tesi/referenze/altre Normal file
View file

@ -0,0 +1,4 @@
https://link.springer.com/chapter/10.1007/978-3-540-88194-0_15
https://dl.acm.org/doi/abs/10.1145/1159876.1159881
https://dl.acm.org/doi/abs/10.1145/1292535.1292548
https://dl.acm.org/doi/abs/10.1145/3009837.3009842

96375
tesi/referenze/ocaml_book.pdf Normal file

File diff suppressed because it is too large Load diff

BIN
tesi/referenze/p1371r1.pdf Normal file

Binary file not shown.

21
tesi/texput.log Normal file
View file

@ -0,0 +1,21 @@
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019 Gentoo Linux) (preloaded format=pdflatex 2020.2.15) 17 FEB 2020 16:31
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**tesi.tex
! Emergency stop.
<*> tesi.tex
End of file on the terminal!
Here is how much of TeX's memory you used:
3 strings out of 494553
112 string characters out of 6177841
52201 words of memory out of 5000000
3775 multiletter control sequences out of 15000+600000
3640 words of font info for 14 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
0i,0n,0p,11b,6s stack positions out of 5000i,500n,10000p,200000b,80000s
! ==> Fatal error occurred, no output PDF file produced!