User manual: first version

This commit is contained in:
Gwenal Delaval 2012-06-14 23:07:40 +02:00
parent 502c5e446f
commit d36e988fb9
34 changed files with 47458 additions and 0 deletions

112
manual/Makefile Normal file
View file

@ -0,0 +1,112 @@
# -*- Makefile -*-
# LaTeX Makefile for dvi, ps, and pdf file creation.
# By Jeffrey Humpherys
# Written April 05, 2004
# Revised January 13, 2005
# Revised 2006
# Thanks Bjorn and Boris
LATEX=latex -src-specials
BIBTEX=bibtex
PDFLATEX=pdflatex
DVIPS=dvips -sPAPERSIZE=a4
PS2PDF=ps2pdf -sPAPERSIZE=a4
INTERMEDIATE_FILES=aux,log,bbl,blg,dvi,toc,lof,log,lot,out,cb,nav,snm,vrb
MAIN = $(shell grep -l documentclass ./*.tex)
SOURCES = $(wildcard ./*.tex)
FIGURES = $(wildcard ./figures/*.fig)
ANIMS = $(wildcard ./anim/*.anim)
TEXANIMS = $(patsubst %.anim,%.tex,$(ANIMS))
EPSFIGURES = $(patsubst %.fig,%.eps,$(FIGURES))
PDFFIGURES = $(patsubst %.fig,%.pdf,$(FIGURES))
PSORPDF=pdf
-include config
DVIS = $(patsubst %.tex,%.dvi,$(MAIN))
PDFS = $(patsubst %.tex,%.pdf,$(MAIN))
PSS = $(patsubst %.tex,%.ps,$(MAIN))
ifeq ($(PSORPDF),pdf)
PSORPDFFIGURES=$(PDFFIGURES)
else
PSORPDFFIGURES=$(EPSFIGURES)
endif
ifeq ($(PSORPDF),pdf)
all: pdf
else
all: dvi
endif
dvi: $(DVIS)
pdf: $(PDFS)
ps: $(PSS)
figures: $(PSORPDFFIGURES)
anim: $(TEXANIMS)
%.dvi: %.tex $(SOURCES) $(EPSFIGURES) $(TEXANIMS)
$(LATEX) $*
@while ( grep "Rerun to get cross-references" \
$*.log > /dev/null ); do \
echo '** Re-running LaTeX **'; \
$(LATEX) $*; \
done
ifeq ($(PSORPDF),pdf)
$(PDFS) : $(SOURCES) $(PDFFIGURES) $(TEXANIMS)
$(PDFLATEX) $(patsubst %.pdf,%.tex,$@)
@if ( grep "\\bibdata" $(patsubst %.pdf,%.aux,$@) > /dev/null ); then \
$(BIBTEX) $(patsubst %.pdf,%,$@); \
fi
@while ( grep "Rerun to get cross-references" \
$(patsubst %.pdf,%.log,$@) > /dev/null ); do \
echo '** Re-running LaTeX **'; \
$(PDFLATEX) $(patsubst %.pdf,%.tex,$@); \
done
else
%.pdf : %.ps
$(PS2PDF) $*.ps
endif
%.bbl: %.tex %.aux
$(BIBTEX) $*
%.aux: %.tex
$(LATEX) $*
%.ps : %.dvi
$(DVIPS) $*.dvi -o $*.ps
%.tex : %.anim %.fig
figanim $<
%.eps %.tex: %.fig
fig2dev -L pstex $*.fig > $*.eps
fig2dev -L pstex_t -F -p $* $*.fig > $*.tex
%.tex : %.fig
fig2dev -L $(PSORPDF)tex_t -F -p $* $*.fig > $*.tex
%.pdf %.tex: %.fig
fig2dev -L pdftex $*.fig > $*.pdf
fig2dev -L pdftex_t -F -p $* $*.fig > $*.tex
clean:
rm -f ./*.aux ./*.log ./*.bbl ./*.blg ./*.dvi ./*.toc ./*.lof ./*.log ./*.lot ./*.out ./*.cb ./*.nav ./*.snm ./*.vrb
rm -f ./*.tex~
figclean:
rm -f ./figures/*.{tex,eps,pdf,bak}
animclean:
rm -f ./anim/*.{tex,eps,pdf,bak}
bigclean: figclean animclean clean
rm -f $(PDFS) $(PSS)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,147 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-clés)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[node distance=3cm,auto,initial text=,initial where=left,pos=0.5]
\draw node[state,initial,label={above:$y=\False$}] (A) {A};
\draw node[state,label={below:$y=\True$}] (C) [below of=A] {C};
\draw node[draw,rounded corners,anchor=west] (B)
[right of=A,anchor=north west] {
\begin{varwidth}{\textwidth}
\begin{tikzpicture}
\matrix (m) [matrix of nodes] {
\begin{tikzpicture}
\begin{scope}[node distance=2cm,auto,initial text=,initial
where=left,pos=0.5]
\draw node[state,initial,label={right:$y_1 =\False$}] (Idle) {Idle};
\draw node[state,label={right:$y_1=\True$}] (Active) [below of=Idle]
{Act};
\path[->] (Idle) edge [bend left] node {$c$} (Active)
(Active) edge [bend left] node {$c$} (Idle);
\end{scope}
\end{tikzpicture}
&
\begin{tikzpicture}
\begin{scope}[node distance=2cm,auto,initial text=,initial where=left,pos=0.5]
\draw node[state,initial,label={right:$y_2 =\False$}] (Idle) {Idle};
\draw node[state,label={right:$y_2=\True$}] (Active) [below of=Idle]
{Act};
\path[->] (Idle) edge [bend left] node {$d$} (Active) (Active) edge
[bend left] node {$d$} (Idle);
\end{scope}
\end{tikzpicture}
\\[5mm]
\node {$y = y_1\land y_2$};\\
};
\draw [dashed] (m-1-1.north east) -- (m-1-1.south east);
\draw [dashed] (m-1-1.south west) -- (m-1-2.south east);
\end{tikzpicture}
\end{varwidth}
};
\path[->] (A) edge [bend left] node {$c$} (B)
(B.west) edge [bend left] node {$c\land d$} (C)
(C) edge [bend left] node {$d$} (A);
\end{tikzpicture}
\end{document}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,968 @@
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
%%Title: node-contract.dvi
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 595 842
%%DocumentFonts: CMMI10 CMR10 CMR7 CMMI7 t1xbtt
%%DocumentPaperSizes: a4
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips node-contract.dvi -o
%DVIPSParameters: dpi=600
%DVIPSSource: TeX output 2008.12.23:0957
%%BeginProcSet: tex.pro 0 0
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
(LaserWriter 16/600)]{A length product length le{A length product exch 0
exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: texps.pro 0 0
%!
TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
end
%%EndProcSet
%%BeginProcSet: special.pro 0 0
%!
TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
{userdict/md get type/dicttype eq{userdict begin md length 10 add md
maxlength ge{/md md dup length 20 add dict copy def}if end md begin
/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
save N userdict maxlength dict begin/magscale true def normalscale
currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
savematrix setmatrix}N end
%%EndProcSet
%%BeginProcSet: color.pro 0 0
%!
TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
%%EndProcSet
TeXDict begin @defspecial
/DvipsToPDF { 72.27 mul Resolution div } def /PDFToDvips { 72.27 div
Resolution mul } def /HyperBorder { 1 PDFToDvips } def /H.V {pdf@hoff
pdf@voff null} def /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def
/H.S { currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF
/pdf@hoff exch def HyperBorder sub /pdf@llx exch def } def /H.L { 2
sub dup /HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint
HyperBaseDvips sub /pdf@ury exch def /pdf@urx exch def } def /H.A {
H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt
sub sub /pdf@voff exch def } def /H.R { currentpoint HyperBorder sub
/pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch
pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def } def systemdict
/pdfmark known not {userdict /pdfmark systemdict /cleartomark get put}
if
/pgfH{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade
{pgfA} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind
def
/pgfV{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade
{pgfA} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind
def} bind def
/pgfA{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add
def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div
2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14
index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4
-1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1
roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def
/pgfR1{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch
def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfR}
def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx
sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind
def
/pgfR2{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor
fill pop}bind def
/pgfR{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add
def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy
pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx
8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index
pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff
div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6
index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index
sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index
3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath
stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index
add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy
pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch
pop }bind def
/pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind
def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto
neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save
pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag
div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind
def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint
/pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial
pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta}
{0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind
def /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse
/.pgfsetfillopacityalpha{/pgffoa exch def /pgffill{gsave pgffoa .setopacityalpha
fill 1 .setopacityalpha newpath fill grestore}bind def /pgfeofill{gsave
pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore}bind
def}bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave
pgfsoa .setopacityalpha stroke grestore}bind def}bind def /pgffoa 1
def /pgfsoa 1 def end
/pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto
-3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind
def
/pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1
setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75
0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto
pgfstr grestore} bind def
/pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0
5.00005 lineto pgfstr grestore} bind def
/pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto
0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr
grestore} bind def
/pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto
1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore}
bind def
/pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto
0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def
/pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003
0.0 moveto 3.00003 1.665 1.665 3.00003 0.0 3.00003 curveto -1.665 3.00003
-3.00003 1.665 -3.00003 0.0 curveto -3.00003 -1.665 -1.665 -3.00003
0.0 -3.00003 curveto 1.665 -3.00003 3.00003 -1.665 3.00003 0.0 curveto
closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore
newpath grestore} bind def
/pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005
3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath
gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore}
bind def
@fedspecial end
%%BeginFont: t1xbtt
%!PS-AdobeFont-1.0: t1xbtt 3.0
%%CreationDate: 12/14/2000 at 12:00 PM
%%VMusage: 1024 27998
20 dict begin
/FontInfo 16 dict dup begin
/version (3.0) readonly def
/FullName (t1xbtt) readonly def
/FamilyName (t1xbtt) readonly def
/Weight (Medium) readonly def
/ItalicAngle 0 def
/isFixedPitch true def
/UnderlinePosition -100 def
/UnderlineThickness 50 def
/Notice (Version 3.0, GPL) readonly def
/em 1000 def
/ascent 800 def
/descent 200 def
end readonly def
/FontName /t1xbtt def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 97 /a put
dup 101 /e put
dup 103 /g put
dup 104 /h put
dup 105 /i put
dup 109 /m put
dup 110 /n put
dup 114 /r put
dup 115 /s put
dup 116 /t put
dup 117 /u put
dup 119 /w put
readonly def
/PaintType 0 def
/FontType 1 def
/StrokeWidth 0 def
/FontMatrix[0.001 0 0 0.001 0 0]readonly def
/FontBBox{-28 -213 1516 882}readonly def
currentdict end
currentfile eexec
D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0
7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81
DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91
511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6
1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD
02843723FD4914EA94CF5C86363ACA5D85BC6F2DC07E1913DE009E806C3EE8F3
FEC9E1C1A320C2124B06F5E41354C077F75C6EB18C1C637209CD429CF0A07147
4C4B3FB0D260C42F8BB83C7DB6A92ABCBC206C45E91E10AF52EEAB7427C2EEAF
00FE4361755860C83861E922F3F9B396CDDD72DCE20CAFF85B4DFC108C6E8C25
982D9DC24E0F00B2D9BF6BE30CF2CD3892B25A4449FE2E0A7E033EE6142D8652
C1E7A5D3B68F9ECB208F609A8B7C86E8AF1B60AB9C346C38846FFBDC552E7341
291E70E890C82591691295993A650184E182741E01DA169E64B4EBB55702E06F
089049ADFD0C4F35A59C3CB2AD1DD25291A3B2B8BD16BFDB519091D2CAD96662
E2DDD3332CFAA7FEFF2FC0C8E26DF69D38ABA34B49948B32FCC1005488C1662B
1A98BCF63020A275CFCA8611C69B85AFBF6167D6A3BE36D568914C6B2ED8E6DF
63A016E4B176ED42146154259263EE0F606C3ADDEA43343301E12304CDD678E4
F19D9BAD10E071D9F7F959365EE625AC55453D22D02BB2A5A27271C054422504
5A6DCBDC95B52E577A2C78FCA613979E564E716CFB2AFE24EB580E55BD31B793
E40676D096325222891C44E70040CE6085ED76FDD2ECFC22F3D5905A6984D312
333B878F1E0CD594A45EE8834CECFB7841DD42F14DC9532DC0FBC8F5DEE99606
2358125BE880721E4058DF14DF97F32561E05C6C3AB1528FE248DAD3DDD994A8
8A9FDCE9AC14792B354E24728BC4BD73EBB653F5D544D279A780A7C613F54CC2
4D464159AE8D8B94A08A299F2E584989FFD867E03AEEE73227AEB5CED09772C6
77DE2763F4D72E6587AA7280D1E505CC215FFC60D942E9951546544F0F8D2ADC
49CFE5BFA7D0390B252816C74625A20A44ACBE3DB67F661E0251CD15D27DB989
29185ABBDCA4D8762C05DAACA252FFDFD28D79857C4A0FE02347BECCEE2ABBF0
BE0F43AC5BB76593F95307F18AD352330DA02CC2305901A45CDDC07A6321CDBD
4BA0BA7CCD8A4B6786DBD28436D018C9537EBD753A2D3EC984282ED87DDC98FA
6F8D9D098182DC77880F74F8D417CD7A3F3A676D408A68517182256FEA86C772
65746E871C8EDB45DF6C45D3B7AC4D77D586A4676692E9FC77E5ACF41EED6BFF
0D9062DFCE7668550F638866DBC557AD44900C7425CA1EEAAF3AC21ECC91264E
9BE838467239782A9D9C954B5FE2374B31804E4902F58E85065E23BCB2890D36
48B43E06CDEB23D0183AD709472F315E510B7B1BE62A5F62D37FC4D4B4C56E14
EFF98BFAB1C43FE9757C055DBD573B814F934858190B3A3FC739F816B3227B9E
443DF6407B364DEDDCC7C7F6E1044466082F36119E6CD6C6DB1395EBC809F8EE
88A10DB2E3102753E2659A40EFD008364D0B00FCC13638FA5C0EF9ADDF824A97
5635014A93120F4CF2AED045170681789253020FA57734DA5180596ECB8D97F8
3F05145BECCEF61C86244849088F5E3DC34F461F1B4FFF5F2A68F42F02F8A6CF
CDE86343EC97505B5223159A745D23109C808CC12244A2F4AD9225FA6FD43BB3
F3740DD98E2AD199AF9060AA47BE511F284C61B72DEED557BE7CF7E7909365B2
94118B25C4A6730EAD5572FDAABC33E2C1BADDCBCB691E81C28840514DA19F47
DAAA080A3D72AFA4D63B3C3DFC9703517D7BA5F1A2C058513DC5FE4017DDB09D
1C7404FCA0C0D6EB24C2E985EEB76F9319A7E570594BD4F85CB21468169D44C4
EFE745398515EACB1D5248ABD169E0FDB9A55FF38EE513DA0C22D7607EFD5B77
EC6D1D9E8DAC52F2AC1BDD749849CE7BAF54A7FE6DD526852437813E58C26AEA
A8A4EB359754A876A478052189F857190BEE3AB7F0B7103A1D6B4E6F479DA0E6
FA7D7E26E0FE365BDF7655C699F7D05CB53347F4402FC05A97EDEB2DE779AC87
B536F42F7367ECD4995500FB0F8F7BFCBFD8844B1DE4782E48116F4775AC9049
665614914483BE13D6604A0692BBD9E8195EC130D92FA2ACD6CE6EFFA49E1B52
B1151DE5755FB983BC066B18D401924563706AB5BE46DD40BABB52CF9105B208
859B03FCEDCC76509FF3113304F3CFCEE8EADA3787CFE7765513B2CF28DD1A31
D50F41EC10D31A3BB294DCBDC3886C2B9412ADD01A23A8A92D04583D36FB26C0
82B5CCE8BA414106AD5CBBB9E76C14F9A531279C98B02D3BFFD91CFF09641A7E
31942C305A3242E4B73B097E537079880D6F80980EEE1BB4059E8D9454FAF961
786F91DD4CB2DE9C2107B60E8BF0E45FE00933038F1B5C3DA9B4C722977DC831
B9640F03E0C6CC30C23A9EEBC4FD60E7CA0EE7E324A5A180BD5AF54D5142BB9F
06C180C6EC1D7D8A2AB3065A8461EA5C2019F34140C0CAF44D9B6EC6C3F27E47
E6740FB04939DCEE6F4C528DAC39F6193C3039196238C78894D411CE923913BA
0BDE1F79498CE858E8F49E9922E466BD89006E54E2FAB228EA3CCADA20AC814E
123EADFCEF131C50BCE424159AE41505CACEFD51EB881C248171BFB80FCFDC21
214BAB83FC86ABE8E98D03274A115B7221EC18B9724732043C0BBCF0F29E17DC
85AB0A8853561882BA87A9E091DB2837B690CEF53814F08B4EFEC323BD339F2E
FC4D21EE77C082FF180BF8AB18E1EB329CF82D92E79BDB467A5ED196992E14BA
C35C32B29DA38CB576A05BA1C1DF3045AE63444B05C3A81BAFF4EE8BBA5D362E
8D660A8AD7BBDAA2A35EB13F51EB0B07E67BD6189B3A5B04F23396C3A9116433
ECDEE775014CA247F326F91676299DA2A22F81B328C9FB4FD2ED6D62856BDB16
FF0F95926D0559086B1F4A0F6D0985E4529357A93AB1E987A4D52D10ACFC1718
47E18BCA34710C0179F7BD292145
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndFont
%%BeginFont: CMMI7
%!PS-AdobeFont-1.1: CMMI7 1.100
%%CreationDate: 1996 Jul 23 07:53:53
% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
11 dict begin
/FontInfo 7 dict dup begin
/version (1.100) readonly def
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
/FullName (CMMI7) readonly def
/FamilyName (Computer Modern) readonly def
/Weight (Medium) readonly def
/ItalicAngle -14.04 def
/isFixedPitch false def
end readonly def
/FontName /CMMI7 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 65 /A put
dup 71 /G put
dup 110 /n put
readonly def
/FontBBox{0 -250 1171 750}readonly def
currentdict end
currentfile eexec
D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
889787CDC7AA8BEF7021B3C18A0A61A68CCEA80153A2C2E1CE6D07654730000C
57F4C7817D2A97E68C34052C48BF17B00076F0F21EABE8B9A4E90FF00CD12C86
CF6614154C57E889AF21AB96E24C8B3F890BC647CA2F9EF6E4E3B999106CE83E
3EE7BF9638B31FFBD14576A43154CC0DD3EB4D64B505C9576ED8B190E55112C6
1C931FF7F8529F41CBAAA4E2DB390BEF7F932ECB404D872321446C64508FF03A
692E3B45539E8C8D263021F6EC63F0AD6BF1B09988AC68F66B934E7B4D37B181
A6B4771B115C4D7989F352191703D1B73978E9821513D84E27F4052B3FABE75D
2B40E20E728F7D70C48AFE50DE550AB4E9172DF68E66793B8DF00354839C274D
DFB204205E42E9BEF65140A9777EE7857E3A85067F127F12BD58008ABDEC10DC
A81BF9F22D56299EF237BCAF0DC6BE6BE476500939A755E36EAF82CAC0DB00F3
485186EE04F0123EF2C7141B815113E2DCD9C630A6C7A2EBF64CAA7B8BE65947
B69687EA97ED303695B498E0029ABC8467DD829E18589086110C2A0B41A1C4CD
E65904BE79EB10DB9C2E79B5A797C013EC41371E2AC4EE89AFE2C3ED2AFFF7AC
DEB4823EFC3EB6BAD695E3B6A97FF0F2CAF82DA3016BB9645D2807D44D684203
791505C8919A6B79405424917E3CD895694B8355C32E03CD3B55C97502377A03
AD897FA1B03DEDB6C05299F55D6B2510B7457B7BB3BED95AE154B5BC64BA7442
F7A0E5E17544892D19A85ABDCC5888E2AD391F08BFD48BCFAF2354BADDC445CE
DAF860891DDF0B77C7E28612DB1B0EC23A86352849A264F6A98FB6DE667383A3
4B4899473BA7F2DC6B55AEE696401ECCA45B4D5975FF17328184FC5CF150AD26
5B4795EAB1D05F57DC73CC2C0B37749B2EE4A95C2CD2E6DE2F3AD0E2ABFA333E
961678DA49F631FE1251BBB3BE90566E32AC57A6A09DF6DFE9AAA9B086922994
AABD758D6ECCFF4FB6368B4D0AC53EDBEBA32086A7718D3CE70257243947B112
1961A66B8CA8553086688D955795F7180992655CBAFDF238D9C72F286CB4EB09
08D4A7DEA198C541E6613A4ED82EB41FAA4B253F2323C4C61A4D1FB114F0F5AE
FDD01DC0C0E081DB9E69552506CBC16A773B8D621434B754C1DDC4DA14C5C2F1
CC3A21941B6BBC159E6F7EC23E279507A5BF71534244A06FA1E7246231B98298
2F3DD23E738DBEC11AEE38651B423CF6A4
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndFont
%%BeginFont: CMR7
%!PS-AdobeFont-1.1: CMR7 1.0
%%CreationDate: 1991 Aug 20 16:39:21
% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
11 dict begin
/FontInfo 7 dict dup begin
/version (1.0) readonly def
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
/FullName (CMR7) readonly def
/FamilyName (Computer Modern) readonly def
/Weight (Medium) readonly def
/ItalicAngle 0 def
/isFixedPitch false def
end readonly def
/FontName /CMR7 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 49 /one put
readonly def
/FontBBox{-27 -250 1122 750}readonly def
currentdict end
currentfile eexec
D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F
0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB
7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1
0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4
1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4DE3E3F6222F
7A252B780C86447859579C68E52691E144F836C1C62F19A12EFB710343D33262
1F7955FE5C37074CE5F9C7ABF1A241078519A4D7913A0AD861E0E357B50FB730
E757C0D26390E6028FAC61EB0E9414716AC8406A6E35DC70A7C1AA524804FC8E
985CC3604A2BE0A8235CC895B2B33CB7EE85FE4F2CD817BAC3D27ADD295D0A0E
BC0E8D849952BCA7325DC261A785CD2305BC377AC61AC5E5B2CD3164CFF033CB
5436B8000673A4D763ED26273130702447C75A774C7799FB8C3E54A2E34D1710
CF7883A9B05285C7DF30F314455A4428A5369D92C0348D45BF4AEC5E16611D16
1E5EF015900F4DF63A58DC233BEE88417B204DBD110AACD1DE3D750F9C
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndFont
%%BeginFont: CMR10
%!PS-AdobeFont-1.1: CMR10 1.00B
%%CreationDate: 1992 Feb 19 19:54:52
% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
11 dict begin
/FontInfo 7 dict dup begin
/version (1.00B) readonly def
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
/FullName (CMR10) readonly def
/FamilyName (Computer Modern) readonly def
/Weight (Medium) readonly def
/ItalicAngle 0 def
/isFixedPitch false def
end readonly def
/FontName /CMR10 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 40 /parenleft put
dup 41 /parenright put
dup 61 /equal put
readonly def
/FontBBox{-251 -250 1009 969}readonly def
currentdict end
currentfile eexec
D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3C8578EF9A20A0E06E
4F7ADDAF0E7D1E182D115BF1AD931977325AD391E72E2B13CC108E3726C11099
E2000623188AAAC9F3E233EB253BDD8B0A4759A66A113E066238B0086AC1B634
5ABFF90E4B5ED3FA69C22541981B2BFC9710AEF6B50A8BB53431C7B4D380D721
639E005D6B4688EE16BFF48443E7C9E5FB5BC5883E271CB03428955D5B6A6C01
F9D9F44C93F0C94D9D0728D2B98C558E20C6DF38DA980247CC7320494E0ADE56
B2F1936E624CA50F8DD14C4674BD8164D73715D01E4845C4D0F9B44DFF396A3C
73954C42DB561C79655F0ACFB39BDEF99E91B69C462AE7D188A88871FC02E84F
B64D11F20453799F19073DAFCDA6BE29A327CA3A1B7B475033E246866AD6A5C9
CE63E677E66AE9EE18E12C91BF75ED357C599C9A3444E1595FBF981120D00727
B85DCAD9DE4BA1211A167D9AD853DC4CE60691A761FEEC7306D80D36CCA55E80
26D1B1AC2FB42CFA5B30DA798C0A830C69BB2C71F7428375D75CD6C9AA1D742B
8A2BBB915E4CCDB69681C7726D78EF2C675DFCE211C6ED0F44B35EFBA9DAE2DC
765D21E1164E195825B688B71A9296EA8873B321A64BD8B7B3BB06EED710B183
D7B5A4469FC3CC45267DE00F267774DCE23A74A4C6F977C8C0EBD9B312AED9AA
3EB9CE2B8132FE3B8CC114169B93FF4FE2EDB053FA42B50206FAF075F15BE61D
870FB5A524F6DDA969F66479A695CA828FA647E7135007C38E73408787A2BC36
FE411C5D5F976192C0C01CBAC5FB2B6057C83F8897740D4C6C7E349829FE59DD
AAE29A018EFB4B9ECE79BF134721FFEB19581802B6444839CFCF6E0193E1AB10
0CCA4D53B084BA6C124B588B922565ABA2C79876D2FE23C6B3EEDD6589CB5BCF
5B454AECC151734F626650083CC3962090AFA6E10FD7120C46E2642CFA19
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndFont
%%BeginFont: CMMI10
%!PS-AdobeFont-1.1: CMMI10 1.100
%%CreationDate: 1996 Jul 23 07:53:57
% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
11 dict begin
/FontInfo 7 dict dup begin
/version (1.100) readonly def
/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
/FullName (CMMI10) readonly def
/FamilyName (Computer Modern) readonly def
/Weight (Medium) readonly def
/ItalicAngle -14.04 def
/isFixedPitch false def
end readonly def
/FontName /CMMI10 def
/PaintType 0 def
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
/Encoding 256 array
0 1 255 {1 index exch /.notdef put} for
dup 58 /period put
dup 59 /comma put
dup 99 /c put
dup 101 /e put
dup 102 /f put
dup 120 /x put
dup 121 /y put
readonly def
/FontBBox{-32 -250 1048 750}readonly def
currentdict end
currentfile eexec
D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
956017667C419C4021DA92976C7550A196C257FC2124E6F6653FAEA9ECD781C6
793D55009809849DCD349D18C46B7072E96A292E937463E1671EFEF393030EF2
3127AEE8F957106A8BAE6B4C2B8779DF8696E89827FE9B259B0DFF68CC6E69FC
79E59581CCFF1C6888227C58AB77070D16BCCB082108F0B19C1A212F69FB9D2B
723C0E2FBB76D3D722CD5699473E25CE8E77558614157EF67DD4951837D3D18E
6FC510C2E95C238B8E003EFFB8323FFE35181958AFC060D23E365EF74E5622C7
21582D0142399F46C786E6F008CED61262AD5BD5B42A2D64DA6953D8C93F9A96
280757E58B3F12918386DFADADABEE281D31618FD7A6B09EDEF1811575B45563
17CAFD76ABF50A5456F6FF3FD62DF994C484CC2CB19566C1178334575E9063CD
FB7DB158C2EF492801924F54935B9CE774ECD0D20E4FEC1565D4E346F374D29C
BD70E02027F1B8866A972628313AC0D676A5C7F206176C8AF4024EAD2F7EB361
629CC0D2CB9D31311047B2C1890B583BF0D813E2D3FBBB3D44C74BE0AC4A5FA8
CE5418A3680E839E79A1BC70F876345D74C48B232147B1C5C2B2647A234B8482
E42C1670FA26FA976403CAE76D99C1E06831EE83693A48D56DE133A5E3D2B7EC
5C167A9743DCABAE3547FD845844F3A047449F8C998E431CC47551BB0D643F02
52B5D0EA3D69934FA539A4E475B8BBE6ECC9B5151604ADAEB437ABB0F6EB291D
B27FAA6378E2787375A5B70CDC3A1678BF499813126837ABDD85CD61AB25F4B4
5A1A5BFFE3CAC49C9E5DD5A263AE8B32BD580D7F828497E6F2C74ECC8521F05B
7BD359682C1ABF6C6AFAF0733902FEB5D110F3A8B1691F5DBEFC892890F613F3
7AADA3FBADC497786133BB1D93679984604B233A073663A902BA5445F7308392
0F2A75B20CC9EF85EE5B6AB54C70494DB72687342A97426537E63A4676944679
B647AED9050C89C37CDAB35270A0E949F5081751833AEA86891A0D13B599AD60
0CB97558A3E9DAC4CA75E06FE5B3249C7A4CED1017FA3C4D6E44E8242D49E520
E04C33111CF7B9358A9A4C58BA36CE8824C0B45D02BB3323166CD8A8D6911A47
C11A74CFD83E0ED73FAF69433A5ACB7394131DF79468D7876C5C905773FEB935
367E68F074F3B0BA6F74F160DFC74B6425A78B6F6FD5F5657CC886E1ECA484E1
54F59EAD47F87B77F42C931A9959241511BFF891A879ADDB30C8E8D1F39F0437
CD5A5E240AFBA4711A57A7D0814228DC27506E91F3C62C49CB2EF99B9035E402
8C9C6030305709B834B4F25E519565F3E6075ACBAD9720F059BBDCC6578EE4FE
CA2ED94A9A2BC4BAD69E7FED2DD3E13B0E279D55A2E171077A08B0AA64E999FF
D0CCFB4AE9BDB80576A82B224A900107DB6ED29FE2CCA9560F2098D639CAD174
D0BD53FB5A8374AAE0AAF1936FCE5B9D692DFE2D34F0C600A2F3DBCD2B1E19D2
A42D8F0581234F0174680B6CA105AD267C65F7A7BD60735EF05F215F62D39FF6
2E8193A07014E5F2B5CAB84352C462414EB12A1EBD47D747CBA4B615B58A0560
06448FB3D4F514557A0A8BFDAB9B30559921043300D1383FFF1267BFAAA5B30B
50C4FE6BF9B599D77624E22AC5D7435CCE5DB5DC083E423438BB41C9AC52A609
9D631B0382B2B1E93A7B55EB79E87D51FD3F3E4A89B9351B39323C65309FD03B
BCF9138E544A7A0D88032191D5D03C17A81B0D3C9212F9D5CD1AF9FC7873B2CA
FCD9CE788030E99580FC96A983BCED606971C0C434BF97D6E47650DE14AE49E5
523F3603D3A32F628CA5371EF2786EFD869F9628DBC635A190DD374D5592A2E0
A2D0FD8634D5F4CD508196A708
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
cleartomark
%%EndFont
TeXDict begin 39158280 55380996 1000 600 600 (node-contract.dvi)
@start /Fa 136[44 1[44 44 44 44 3[44 44 3[44 44 44 1[44
3[44 97[{}12 83.022 /t1xbtt rf /Fb 145[41 38[52 5[50
65[{}3 58.1154 /CMMI7 rf /Fc 206[33 49[{}1 58.1154 /CMR7
rf /Fd 194[65 19[32 32 40[{}3 83.022 /CMR10 rf /Fe 134[41
47 17[41 39 1[36 39[23 23 58[{}7 83.022 /CMMI10 rf end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4
end
%%EndSetup
%%Page: 1 1
TeXDict begin 1 0 bop 0 0 a
SDict begin /product where{pop product(Distiller)search{pop pop pop
version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto
closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show
grestore}if}{pop}ifelse}{pop}ifelse}if end
0 0 a 0 0 a
SDict begin [ /Title () /Subject () /Creator (LaTeX with hyperref package)
/Author () /Producer (dvips + Distiller) /Keywords () /DOCINFO pdfmark
end
0 0 a 0 TeXcolorgray
144 34 a
SDict begin H.S end
144 34 a 0 TeXcolorgray 0 TeXcolorgray 144 34
a
SDict begin H.R end
144 34 a 144 34 a
SDict begin [ /View [/XYZ H.V] /Dest (page.1) cvn H.B /DEST pdfmark
end
144 34 a Black 0 TeXcolorgray 144
242 a
SDict begin [ /Page 1 /View [ /Fit ] /PageMode /UseOutlines /DOCVIEW
pdfmark end
144 242 a 144 242 a
SDict begin [ {Catalog} << >> /PUT pdfmark end
144 242 a 144 242 a
SDict begin H.S end
144 242
a 144 242 a
SDict begin 12 H.A end
144 242 a 144 242 a
SDict begin [ /View [/XYZ H.V] /Dest (Doc-Start) cvn H.B /DEST pdfmark
end
144 242 a 798 313 a
798
313 a 798 313 a
pgfo
save
0 setgray
0.3985 pgfw
save
save
/pgfsc{0 setgray}def
save
/pgfsc{0 setgray}def
16.6039 126.59315 -63.29657 -8.30194 pgfe
gsave pgfsc pgfstr grestore newpath
restore
save
[1.0 0.0 0.0 1.0 -59.97601 -2.49069 ] concat
pgfs
0 setgray
798 313 a Fe(f)9 b Fd(\()p Fe(x)927 325
y Fc(1)964 313 y Fe(;)14 b(:)g(:)g(:)g(;)g(x)1196 325
y Fb(n)1241 313 y Fd(\))24 b(=)e(\()p Fe(y)1457 325 y
Fc(1)1495 313 y Fe(;)14 b(:)g(:)g(:)f(;)h(y)1720 325
y Fb(n)1765 313 y Fd(\))798 313 y
pgfr
restore
restore
save
/pgfsc{0 setgray}def
save
restore
save
/pgfsc{0 setgray}def
74.42967 147.14554 -63.29657 -82.73163 pgfe
-63.29657 -21.82733 moveto
83.84895 -21.82733 lineto
-63.29657 -38.82974 moveto
83.84895 -38.82974 lineto
gsave pgfsc pgfstr grestore newpath
restore
save
[1.0 0.0 0.0 1.0 -12.63988 -16.81311 ] concat
pgfs
0 setgray
798 313 a Fa(assume)25
b Fe(e)1126 325 y Fb(A)798 313 y
pgfr
restore
save
[1.0 0.0 0.0 1.0 -58.59467 -32.81923 ] concat
pgfs
0 setgray
798 313 a Fa(guarantee)f
Fe(e)1257 325 y Fb(G)1340 313 y Fa(with)i Fd(\()p Fe(c)1610
325 y Fc(1)1648 313 y Fe(;)14 b(:)g(:)g(:)f(;)h(c)1868
325 y Fb(n)1913 313 y Fd(\))798 313 y
pgfr
restore
save
[1.0 0.0 0.0 1.0 -59.77675 -63.27138 ] concat
pgfs
0 setgray
839 216 a Fe(y)880
228 y Fc(1)940 216 y Fd(=)23 b Fe(f)1069 228 y Fc(1)1106
216 y Fd(\()p Fe(x)1185 228 y Fc(1)1223 216 y Fe(;)14
b(:)g(:)g(:)f(;)h(x)1454 228 y Fb(n)1500 216 y Fe(;)g(c)1573
228 y Fc(1)1610 216 y Fe(;)g(:)g(:)g(:)g(;)g(c)1831 228
y Fb(n)1876 216 y Fd(\))839 316 y Fe(:)g(:)g(:)839 416
y(y)880 428 y Fb(n)948 416 y Fd(=)23 b Fe(f)1077 428
y Fb(n)1122 416 y Fd(\()p Fe(x)1201 428 y Fc(1)1239 416
y Fe(;)14 b(:)g(:)g(:)f(;)h(x)1470 428 y Fb(n)1516 416
y Fe(;)g(c)1589 428 y Fc(1)1626 416 y Fe(;)g(:)g(:)g(:)f(;)h(c)1846
428 y Fb(n)1891 416 y Fd(\))798 313 y
pgfr
restore
save
[1.0 0.0 0.0 1.0 -59.77675 -63.27138 ] concat
pgfs
798 313 a
pgfr
restore
restore
restore
newpath
restore
pgfc
0 TeXcolorgray
0 TeXcolorgray eop end
%%Trailer
userdict /end-hook known{end-hook}if
%%EOF

View file

@ -0,0 +1,124 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-clés)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{contlsnode}{$f(\ton{x}{,}) = (\ton{y}{,})$}
$\Assume e_A$
\nodepart{second}
$\Guarantee e_G \With (\ton{c}{,})$
\nodepart{third}
\begin{varwidth}{\textwidth}
\[
\begin{array}{l}
y_1 = f_1(\ton{x}{,},\ton{c}{,})\\
\ldots\\
y_n = f_n(\ton{x}{,},\ton{c}{,})\\
\end{array}
\]
\end{varwidth}
\end{contlsnode}
\end{tikzpicture}
\end{document}

View file

@ -0,0 +1,486 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: figures/pds-subcomponents.fig
%%Creator: fig2dev Version 3.2 Patchlevel 5a
%%CreationDate: Thu Jun 14 23:05:54 2012
%%BoundingBox: 0 0 130 130
%Magnification: 1.0000
%%EndComments
%%BeginProlog
/MyAppDict 100 dict dup begin def
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
currentpoint % nw nh px py str cx cy
2 index oldshow % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proc char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
MyAppDict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% right45
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 20 20 true [ 20 0 0 -20 0 20 ]
{<0040100080200100400200800401000802001004
0020080040100080200000401000802001004002
0080040100080200100400200800401000802000>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P5 exch def
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
/pageheader {
save
newpath 0 130 moveto 0 0 lineto 130 0 lineto 130 130 lineto closepath clip newpath
0.8 114.1 translate
1 -1 scale
$F2psBegin
10 setmiterlimit
0 slj 0 slc
0.06299 0.06299 sc
} bind def
/pagefooter {
$F2psEnd
restore
} bind def
%%EndProlog
pageheader
%
% Fig objects follow
%
%
% here starts figure with depth 50
% Polyline
0 slj
0 slc
7.500 slw
n 0 0 m 2025 0 l 2025 1800 l 0 1800 l
cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P5 [16 0 0 -16 0.00 0.00] PATmp PATsp ef gr PATusp gs col0 s gr
% here ends figure;
%
% here starts figure with depth 45
% Polyline
0 slj
0 slc
7.500 slw
n 0 -225 m 225 -225 l 225 0 l 0 0 l
cp gs col-1 s gr
% Polyline
0.000 slw
n 765 720 m 675 810 l 1170 1035 l 1260 945 l 810 765 l
cp gs col7 1.00 shd ef gr
% Polyline
n 135 1485 m 360 1485 l 360 1710 l 135 1710 l
cp gs col7 1.00 shd ef gr
% here ends figure;
%
% here starts figure with depth 40
% Polyline
0 slj
0 slc
7.500 slw
n 225 225 m 675 225 l 675 675 l 225 675 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
n 1350 1125 m 1800 1125 l 1800 1575 l 1350 1575 l
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
15.000 slw
[30] 0 sd
n 810 810 m
1215 990 l gs col7 1.00 shd ef gr gs col0 s gr [] 0 sd
% here ends figure;
pagefooter
showpage
%%Trailer
end
%EOF

View file

@ -0,0 +1,29 @@
#FIG 3.2 Produced by xfig version 3.2.5
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 -90 -225 270 0
2 2 0 1 -1 7 45 -1 -1 3.000 0 0 -1 0 0 5
0 -225 225 -225 225 0 0 0 0 -225
4 1 -1 40 -1 0 12 0.0000 6 180 330 90 -45 $S$\001
-6
2 2 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 5
225 225 675 225 675 675 225 675 225 225
2 2 0 1 0 7 40 -1 20 0.000 0 0 -1 0 0 5
1350 1125 1800 1125 1800 1575 1350 1575 1350 1125
2 3 0 0 -1 7 45 -1 20 1.500 0 0 -1 0 0 6
765 720 675 810 1170 1035 1260 945 810 765 765 720
2 1 1 2 0 7 40 -1 20 2.000 0 0 -1 0 0 2
810 810 1215 990
2 2 0 1 0 7 50 -1 45 0.000 0 0 -1 0 0 5
0 0 2025 0 2025 1800 0 1800 0 0
2 2 0 0 -1 7 45 -1 20 0.000 0 0 -1 0 0 5
135 1485 360 1485 360 1710 135 1710 135 1485
4 1 -1 35 -1 0 12 0.0000 6 210 540 450 540 $S_1$\001
4 1 -1 35 -1 0 12 0.0000 6 210 540 1575 1440 $S_n$\001
4 1 -1 40 -1 0 12 0.0000 6 180 375 225 1665 $S'$\001

Binary file not shown.

View file

@ -0,0 +1,16 @@
\begin{picture}(0,0)%
\includegraphics{figures/pds-subcomponents}%
\end{picture}%
\setlength{\unitlength}{4144sp}%
%
\begingroup\makeatletter\ifx\SetFigFont\undefined%
\gdef\SetFigFont#1#2{%
\fontsize{#1}{#2pt}%
\selectfont}%
\fi\endgroup%
\begin{picture}(2049,2049)(-11,-973)
\put( 91,884){\makebox(0,0)[b]{\smash{{\SetFigFont{12}{14.4}$S$}}}}
\put(226,-826){\makebox(0,0)[b]{\smash{{\SetFigFont{12}{14.4}$S'$}}}}
\put(451,299){\makebox(0,0)[b]{\smash{{\SetFigFont{12}{14.4}$S_1$}}}}
\put(1576,-601){\makebox(0,0)[b]{\smash{{\SetFigFont{12}{14.4}$S_n$}}}}
\end{picture}%

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,120 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-cles)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{lsnode}{$f(c,d) = y$}
\begin{scope}[node distance=3cm,auto,initial text=,initial where=left,pos=0.5]
\draw node[state,initial,label={above:$y=\False$}] (A) {A};
\draw node[state,label={below left:$y=\True$}] (C) [below of=A] {C};
\draw node[state,label={right:$y=g(c,d)$}] (B) [right of=C] {B};
\path[->] (A) edge [bend left] node {$c$} (B)
(B) edge [bend left] node {$c\land d$} (C)
(C) edge [bend left] node {$d$} (A);
\end{scope}
\end{lsnode}
\end{tikzpicture}
\end{document}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,121 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-cles)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
% \begin{lsnode}{$g(a,b) = y$}
% \g{a}{b}{y}
% \end{lsnode}
\begin{lsnode}{$g(a,b) = y$}
\matrix (m) [matrix of nodes] {
\node{$y_1 = h(a,c)$};\\
\node{$y_2 = h(b,d)$};\\
\node{$y = y_1\land y_2$};\\
};
\draw [dashed] (m-1-1.south west) -- (m-1-1.south east);
\draw [dashed] (m-2-1.south west) -- (m-2-1.south east);
\end{lsnode}
\end{tikzpicture}
\end{document}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,118 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-cles)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{lsnode}{$h(a,b) = y$}
\begin{scope}[node distance=2cm,auto,initial text=,initial where=left]
\draw node[state,initial,label={right:$y=\False$}] (Idle) {Idle};
\draw node[state,label={right:$y=\True$}] (Active) [below of=Idle] {Act};
\path[->] (Idle) edge [bend left] node {$a\land b$} (Active)
(Active) edge [bend left] node {$a$} (Idle);
\end{scope}
\end{lsnode}
\end{tikzpicture}
\end{document}

6291
manual/figures/struct-pg.eps Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

4147
manual/figures/struct-pg.ps Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,173 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
\usepackage{lmodern}
\usepackage{varwidth}
\usepackage{tikz}
%\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes}
\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-cles)
\renewcommand{\ttdefault}{txtt}
% Figures tikz
\tikzstyle{hierarchical state} =
[rectangle,
round corners,
draw=black]
\tikzstyle{ls node} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{file} =
[rectangle,
sharp corners,
draw=black]
\tikzstyle{tool} =
[rectangle,
rounded corners,
draw=black]
\newenvironment{lsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,
anchor=north west,
yshift=\pgflinewidth]
\bgroup
\begin{varwidth}{0.9\textwidth}
\centering
\begin{tikzpicture}[%
node distance=8mm,
pin distance=8mm,
label distance=2mm,
inner sep=1mm,
anchor=center,
pos=0.5,
#1]% optional parameter(s)
}{%
\end{tikzpicture}
\end{varwidth}
\egroup;
}
\newenvironment{contlsnode}[2][]{
\node[% title
ls node
% fill=blue!90!black,
] (title) {#2};% title text
\node at (title.south west) [%
ls node,rectangle split, rectangle split parts=3,
anchor=north west,text badly ragged,
yshift=\pgflinewidth]
\bgroup
% \begin{varwidth}{0.9\textwidth}
% \centering
% \begin{tikzpicture}[%
% node distance=8mm,
% pin distance=8mm,
% label distance=-0.5mm,
% inner sep=1mm,
% anchor=center,
% pos=0.5,
% #1]% optional parameter(s)
}{%
% \end{tikzpicture}
% \end{varwidth}
\egroup;
}
\pagestyle{empty}
\begin{document}
\centering
\begin{tikzpicture}
\begin{lsnode}{$h(a,b) = y$}
\begin{scope}[node distance=2cm,auto,initial text=,initial where=left]
\draw node[state,initial,label={right:$y=\False$}] (Idle) {Idle};
\draw node[state,label={right:$y=\True$}] (Active) [below of=Idle] {Act};
\path[->] (Idle) edge [bend left] node {$a\land b$} (Active)
(Active) edge [bend left] node {$a$} (Idle);
\end{scope}
\end{lsnode}
\end{tikzpicture}
\medskip
\newsavebox{\boite}
\begin{lrbox}{\boite}
\begin{varwidth}{\textwidth}
\begin{tikzpicture}
\matrix (m) [matrix of nodes] {
\node{$y_1 = h(a,c)$};\\
\node{$y_2 = h(b,d)$};\\
\node{$y = y_1\land y_2$};\\
};
\draw [dashed] (m-1-1.south west) -- (m-1-1.south east);
\draw [dashed] (m-2-1.south west) -- (m-2-1.south east);
\end{tikzpicture}
\end{varwidth}
\end{lrbox}
% $\Assume \True$
% \nodepart{second}
% $\Enforce (\Not y) \With (c,d)$
% \nodepart{third}
% \usebox{\boite}
\begin{tikzpicture}
% \begin{lsnode}{$g(a,b) = y$}
% \g{a}{b}{y}
% \end{lsnode}
\begin{lsnode}{$g(a,b) = y$}
\matrix (m) [matrix of nodes] {
\node{$y_1 = h(a,c)$};\\
\node{$y_2 = h(b,d)$};\\
\node{$y = y_1\land y_2$};\\
};
\draw [dashed] (m-1-1.south west) -- (m-1-1.south east);
\draw [dashed] (m-2-1.south west) -- (m-2-1.south east);
\end{lsnode}
\end{tikzpicture}
\medskip
\begin{tikzpicture}
\begin{lsnode}{$f(c,d) = y$}
\begin{scope}[node distance=3cm,auto,initial text=,initial where=left,pos=0.5]
\draw node[state,initial,label={above:$y=\False$}] (A) {A};
\draw node[state,label={below left:$y=\True$}] (C) [below of=A] {C};
\draw node[state,label={right:$y=g(c,d)$}] (B) [right of=C] {B};
\path[->] (A) edge [bend left] node {$c$} (B)
(B) edge [bend left] node {$c\land d$} (C)
(C) edge [bend left] node {$d$} (A);
\end{scope}
\end{lsnode}
\end{tikzpicture}
\end{document}

BIN
manual/heptagon-manual.pdf Normal file

Binary file not shown.

827
manual/heptagon-manual.tex Normal file
View file

@ -0,0 +1,827 @@
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
%\usepackage[francais]{babel}
%\usepackage{subfigure}
%\usepackage{fancyvrb}
%\usepackage{fancyhdr}
\usepackage[hypertex,ps2pdf]{hyperref}
\usepackage{array}
\usepackage{xcolor}
%\usepackage{comment}
%\usepackage{lmodern}
\usepackage{varwidth}
%\usepackage{tikz}
%\usetikzlibrary{arrows}
%\usetikzlibrary{automata}
%\usetikzlibrary{matrix}
%\usetikzlibrary{shapes}
%\usetikzlibrary{positioning}
\usepackage{macros}
% fontes tt avec gras (mots-clés)
\renewcommand{\ttdefault}{txtt}
\lstset{
language=Heptagon,% numbers=left, numberstyle=\small,
basicstyle=\normalsize\ttfamily,captionpos=b,
frame={tb}, rulesep=1pt, columns=fullflexible,
xleftmargin=1cm, xrightmargin=1cm,
mathescape=true
}
\title{Heptagon/BZR manual}
\author{}
%\date{}
\begin{document}
\maketitle
\section{Introduction and tutorial}
\label{sec:intro}
\subsection{Heptagon: short presentation}
\label{sec:hept-short-pres}
Heptagon is a synchronous dataflow language, with a syntax allowing the
expression of control structures (e.g., switch or mode automata).
A typical Heptagon program will take as input a sequence of values, and will
output a sequence of values. Then, variables (inputs, outputs or locals) as well
as constants are actually variable or constant \emph{streams}. The usual
operators (e.g., arithmetic or Boolean operators) are applied pointwise on these
sequences of values.
For example, the Heptagon program below is composed of one node \texttt{plus},
performing the pointwise sum of its two integer inputs:
\begin{lstlisting}
node plus(x:int,y:int) returns (z:int)
let
z = x + y;
tel
\end{lstlisting}
\texttt{x} and \texttt{y} are the inputs of the node \texttt{plus}; \texttt{z}
is the output. \texttt{x}, \texttt{y} and \texttt{z} are of type \texttt{int},
denoting integer \emph{streams}. \texttt{z} is defined by the equation
\lstinline|z = x + y|.
An execution of the node \texttt{plus} can then be:
\[
\begin{streams}{5}
x & 1 & 2 & 3 & 4 & \ldots\\\hline
y & 1 & 2 & 1 & 2 & \ldots\\\hline
\mathtt{plus}(x,y) & 2 & 4 & 4 & 6 & \ldots\\
\end{streams}
\]
\subsection{Compilation}
\label{sec:compilation}
The Heptagon compiler is named \texttt{heptc}. Its list of options is available by
:
\begin{alltt}
> heptc -help
\end{alltt}
Every options described below are cumulable.
Assuming that the program to compile is in a file named \texttt{example.ept},
then one can compile it by typing :
\begin{alltt}
> heptc example.ept
\end{alltt}
However, such compilation will only perform standard analysis (such as typing,
causality, scheduling) and output intermediate object code, but not any final or
executable code.
The Heptagon compiler can thus generate code in some general languages, in order
to obtain either a standalone executable, or a linkable library. The target
language must then be given by the \texttt{-target} option:
\begin{alltt}
> heptc -target <language> example.ept
\end{alltt}
Where \texttt{<language>} is the name of the target language. For now, available
languages are C (\texttt{c} option) and Java (\texttt{java} option).
\subsection{Generated code}
\label{sec:generated-code}
The generic generated code consists, for each node, of two imperative functions:
\begin{itemize}
\item one ``reset'' function, used to reset the internal memory of the node;
\item one ``step'' function, taking as input the nodes inputs, and whose call
performs one step of the node, updates the memory, and outputs the nodes
outputs.
\end{itemize}
A standard way to execute Heptagon program is to compile the generated files
together with a main program of the following scheme :
\begin{alltt}
call the \textit{reset} function
for each instant
get the \textit{inputs} values
\textit{outputs} \(\leftarrow\) \textit{step(inputs)}
do something with \textit{outputs} values
\end{alltt}
Appendix~\ref{sec:app-generated-code} give specific technical details for each target language.
\subsection{Simulation}
\label{sec:simulation}
A graphical simulator is available: \texttt{hepts}. It allows the user to simulate
one node by providing a graphical window, where simulation steps can be
performed by providing inputs of the simulated node.
This simulator tool interacts with an executable, typically issued of Heptagon
programs compilation, and which await on the standard input the list of the
simulated node's inputs, and prints its outputs on the standard output. Such
executable, for the simulation of the node \texttt{f}, can be obtained by the
\texttt{-s <node>} option:
\begin{alltt}
> heptc -target c -s f example.ept
\end{alltt}
We can then directly compile the generated C program (whose main function stand
in the \texttt{\_main.c} file):
\begin{alltt}
> cd example_c
> gcc -Wall -c example.c
> gcc -Wall -c _main.c
> gcc -o f_sim _main.o example.o # \text{executable creation}
\end{alltt}
This executable \texttt{f\_sim} can then be used with the graphical simulator
\texttt{hepts}, which takes as argument:
\begin{itemize}
\item The name of the module (capitalized name of the program without the
\texttt{.ept} extension),
\item the name of the simulated node,
\item the path to the executable \texttt{f\_sim}.
\end{itemize}
\begin{alltt}
> hepts -mod Example -node f -exec example_c/f_sim
\end{alltt}
\section{Syntax and informal semantics}
\label{sec:synt-infor-sem}
Heptagon programs are synchronous Moore machines, with parallel and hierarchical
composition. The states of such machines define dataflow equations. The
Figure~\ref{fig:mixed-state-dataflow-example} gives an example of such program.
\begin{figure}[htbp]
\centering
\includegraphics{figures/mixed-state-df}
\caption{Mixed state and dataflow example}
\label{fig:mixed-state-dataflow-example}
\end{figure}
\subsection{Nodes}
\label{sec:nodes}
Heptagon programs are structured in \emph{nodes}: a program is a sequence of
nodes. A node is a subprogram with a name $f$, inputs $\ton{x}{,}$, outputs
$\ton[1][p]{y}{,}$, local variables $\ton[1][q]{z}{,}$ and declarations
$D$. $y_i$ and $z_i$ variables are to be defined in $D$, using operations
between values of $x_j$, $y_j$, $z_j$. Figure~\ref{fig:syntax-nodes} gives the
syntax of node definitions, together with a graphical syntax used in this
manuel\footnote{declaration of local variables are mandatory for the compiler in
the textual syntax, however we will sometimes omit it in the graphical syntax
for the sake of brevity}. The declaration of one variable comes with its type
($t_i$, $t'_i$ and $t''_i$ being the type of respectively $x_i$, $y_i$ and
$z_i$).
\begin{figure}[htb]
\centering
% \begin{varwidth}{\linewidth}
\[
\begin{array}{|c|c}
\cline{1-1}
f(x_1:t_1,\ldots,x_n:t_n) = y_1:t'_1,\ldots,y_p:t'_p & \\\hline
\multicolumn{2}{|c|}{}\\
\multicolumn{2}{|c|}{D}\\
\multicolumn{2}{|c|}{}\\\hline
\end{array}
\]
% \end{varwidth}\hspace{1cm}
% \begin{varwidth}{\linewidth}
\begin{lstlisting}
node f(x$_1$:t$_1$;$\ldots$;x$_n$:t$_n$) returns (y$_1$:t$'_1$,$\ldots$,y$_p$:t$'_p$)
var z$_1$:t$''_1$,$\ldots$,z$_q$:t$''_q$;
let
D
tel
\end{lstlisting}
% \end{varwidth}
\caption{Graphical and textual syntax of node definition}
\label{fig:syntax-nodes}
\end{figure}
The program of the Figure~\ref{fig:mixed-state-dataflow-example} can thus be
structured as the semantically equivalent program of the
Figure~\ref{fig:struct-prog-example}. The Figure~\ref{fig:textual-syntax} gives
the textual syntax of this program.
\begin{figure}[htbp]
\centering
\includegraphics{figures/struct-pg}
\caption{Structured program example}
\label{fig:struct-prog-example}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{lstlisting}
node h(a:bool) returns (y:bool)
let
automaton
state Idle
do y = false
until a then Active
state Active
do y = true
until a then Idle
end
tel
node g (a,b:bool) returns (y:bool)
var y1,y2 : bool;
let
y = y1 & y2;
y1 = h(a);
y2 = h(b);
tel
node f (c,d:bool) returns (y:bool)
let
automaton
state A
do y = false
until c then B
state B
do y = g(c,d)
until c & d then C
state C
do y = true
until d then A
end
tel
\end{lstlisting}
\caption{Textual syntax}
\label{fig:textual-syntax}
\end{figure}
Heptagon allows to distinguish, by mean of clocks and control structures (switch,
automata), for declarations and expressions, the discrete instants of
activation, when the declarations and expressions are computed and progress
toward further states, and other instants when neither computation nor
progression are performed.
\subsection{Expressions}
\label{sec:expressions}
\subsubsection{Values and combinatorial operations}
\label{sec:variables-constants}
Heptagon is a dataflow language, i.e., every value, variable or constant, is
actually a stream of value. The usual operators (e.g., arithmetic or Boolean
operators) are applied pointwise on these sequences of values, as combinatorial
operations (as opposed to \emph{sequential} operations, taking into account the
current \emph{state} of the program: see delays in Section~\ref{sec:delays}).
Thus, \texttt{x} denotes the stream $x_1.x_2.\ldots$, and \lstinline|x + y| is
the stream defined by $($\lstinline|x + y|$)_i=x_i+y_i$.
\[
\begin{streams}{5}
\mathtt{x} & x_1 & x_2 & x_3 & x_4 & \ldots\\\hline
\mathtt{y} & y_1 & y_2 & y_3 & y_4 & \ldots\\\hline
\mathtt{x + y} & x_1+y_1 & x_2+y_2 & x_3+y_3 & x_4+y_4 & \ldots\\
\end{streams}
\]
\subsubsection{Delays}
\label{sec:delays}
Delays are the way to introduce some state in a Heptagon program.
\begin{itemize}
\item \lstinline|pre x| gives the value of \texttt{x} at the preceding
instant. The value at the first instant is undefined.
\item \lstinline|x -> y| takes the value of \texttt{x} at the first instant,
and then the value of \texttt{y};
\item \lstinline|x fby y| is equivalent to \lstinline|x -> pre y|.
\end{itemize}
\[
\begin{streams}{3}
\text{\lstinline|x|} & x_1 & x_2 & x_3 \\
\hline
\text{\lstinline|y|} & y_1 & y_2 & y_3 \\
\hline
\text{\lstinline|pre x|} & \perp & x_1 & x_2 \\
\hline
\text{\lstinline|x -> y|} & x_1 & y_2 & y_3 \\
\hline
\text{\lstinline|x fby y|} & x_1 & y_1 & y_2 \\
\end{streams}
\]
\subsection{Declarations}
\label{sec:declarations}
A declaration $D$ can be either :
\begin{itemize}
\item an equation $x = e$, defining variable $x$ by the expression $e$ at each
activation instants ;
\item a node application $(\tonp{y}{,}) = f(\ton{e}{,})$, defining variables
$\tonp{y}{,}$ by application of the node $f$ with values $\ton{e}{,}$ at each
activation instants ;
\item parallel declarations of $D_1$ and $D_2$, noted graphically $D_1\vdots
D_2$ and textually $D_1\Pv D_2$. Variables defined in $D_1$ and $D_2$ must be
exclusive. The activation of this parallel declaration activate both $D_1$ and
$D_2$, which are both computed and both progress ;
\item a switch control structure ;
\item an automaton.
\end{itemize}
\subsubsection{Switch control structures}
\label{sec:switch-contr-struct}
The \texttt{switch} control structure allows to controls which equations are
evaluated:
\begin{lstlisting}
type modes = Up | Down
node two(m:modes;v:int) returns (o:int)
var last x:int = 0;
let
o = x;
switch m
| Up do x = last x + v
| Down do x = last x - v
end
tel
\end{lstlisting}
The \texttt{last} keyword defines a memory which is shared by the different
modes. Thus, \lstinline|last x| is the value of the variable \texttt{x} in the
previous instant, whichever was the activated mode.
\subsubsection{Automata}
\label{sec:automata}
An automaton is a set of states (one of which being the initial one), and
transitions between these states, triggered by Boolean expressions. A
declaration is associated to each state. The set of variables defined by the
automaton is the union, not necessarily disjoint (variables can have different
definitions in different states, and can be partially defined : in this case,
when the variable is not defined in an active state, the previous value of this
variable is taken.
At each automaton activation instant, one and only one state of this automaton
is active (the initial one at the first activation instant). The declaration
associated to this active state is itself activated and progress in this
activation instant.
\paragraph{Example}
\label{sec:example}
The following example gives the node \texttt{updown}. This node is defined by an
automaton composed of two states:
\begin{itemize}
\item the state \texttt{Up} gives to \texttt{x} its previous value augmented of 1
\item the state \texttt{Down} gives to \texttt{x} its previous value diminued of 1
\end{itemize}
This automaton comprises two transitions:
\begin{itemize}
\item it goes from \texttt{Up} (the initial state) to \texttt{Down} when
\texttt{x} becomes greater or equal than 10;
\item it goes from \texttt{Down} to \texttt{Up} when \texttt{x} becomes less or
equal 0.
\end{itemize}
\begin{lstlisting}
node updown() returns (y:int)
var last x:int = 0;
let
y = x;
automaton
state Up
do x = last x + 1
until x >= 10 then Down
state Down
do x = last x - 1
until x <= 0 then Up
end
tel
\end{lstlisting}
\[
\begin{streams}{14}
\text{current state} & Up & Up & Up & Up & Up & Up & Up & Up & Up & Up & Down & Down & Down & \ldots\\\hline
\mathtt{y} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 9 & 8 & 7 & \ldots\\\hline
\end{streams}
\]
Expressions on outgoing transitions of this active state are
evaluated, so as to compute the next active state : these are weak
transitions. Transitions are evaluated in declaration order, in the textual
syntax. If no transition can be triggered, then the current state is the next
active state.
\section{BZR: Contracts for controller synthesis}
\label{sec:extens-with-contr}
Contracts are an extension of the Heptagon language, so as to allow to perform
discrete controller synthesis on Heptagon programs. The extended language is
named BZR.
We associate to each node a \emph{contract}, which is a program associated with
two outputs :
\begin{itemize}
\item an output $e_A$ representing the environment model ;
\item an invariance objective $e_G$ ;
\item a set $\set{\ton{c}{,}}$ of controllable variables used for ensuring this objective.
\end{itemize}
This contract means that the node will be controlled, i.e., that values will be
given to $\ton{c}{,}$ such that, given any input trace yielding $e_A$, the
output trace will yield the true value for $e_G$.
\begin{center}
\includegraphics{figures/node-contract}
\end{center}
In the textual syntax, the contracts are noted :
\begin{lstlisting}
node f(x$_1$:t$_1$;$\ldots$;x$_n$:t$_n$) returns (y$_1$:t$'_1$;$\ldots$;y$_p$:t$'_p$)
contract
var $\ldots$
let
$\ldots$
tel
assume $e_A$
enforce $e_G$
with (c$_1$:t$''_1$;$\ldots$;c$_q$:t$''_n$)
var $\ldots$
let
y$_1$ = f$_1$($\ton{\mathtt{x}}{,},\ton[1][q]{\mathtt{c}}{,}$);
$\vdots$
y$_p$ = f$_p$($\ton{\mathtt{x}}{,},\ton[1][q]{\mathtt{c}}{,}$);
tel
\end{lstlisting}
\section{BZR Running Example: Multi-task System}
\label{sec:multi-task-system}
\subsection{Delayable Tasks}
\label{sec:delayable-tasks}
We consider a multi-task system composed of $n$ delayable
tasks. Figure~\ref{fig:del-task} shows a delayable task. A delayable task takes
three inputs \texttt{r}, \texttt{c} and \texttt{e}: \texttt{r} is the task
launch request from the environment, \texttt{e} is the end request, and
\texttt{c} is meant to be a controllable input controlling whether, on request,
the task is actually launched (and therefore goes in the active state), or
delayed (and then forced by the controller to go in the waiting state by stating
the false value to \texttt{c}). This node outputs a unique boolean \texttt{act}
which is true when the task is in the active state.
\begin{figure}[htb]
\begin{lstlisting}
node delayable(r,c,e:bool) returns (act:bool)
let
automaton
state Idle
do act = false
until r & c then Active
| a & not c then Wait
state Wait
do act = false
until c then Active
state Active
do act = true
until e then Idle
end
tel
\end{lstlisting}
\caption{Delayable task}
\label{fig:del-task}
\end{figure}
The Figure~\ref{fig:n-del-task} shows then a node \texttt{ntasks} where $n$
delayable tasks have been put in parallel. The tasks are inlined so as to be
able to perform DSC on this node, taking into account the tasks' states. Until
now, the only interest of modularity is, from the programmer's point of view, to
be able to give once the delayable task code.
\begin{figure}[htb]
\begin{lstlisting}
node ntasks($\ton{\mathtt{r}}{,},\ton{\mathtt{e}}{,}$:bool)
returns ($\ton{\mathtt{a}}{,}$:bool)
contract
let
ca$_{1}$ = a$_{1}$ & (a$_{2}$ or $\ldots$ or a$_{n}$);
$\vdots$
ca$_{n-1}$ = a$_{n-1}$ & a$_{n}$;
tel
enforce not (ca$_{1}$ or \ldots or ca$_{n-1}$)
with ($\ton{\mathtt{c}}{,}$:bool)
let
a$_{1}$ = inlined delayable(r$_{1}$,c$_{1}$,e$_{1}$);
$\vdots$
a$_{n}$ = inlined delayable(r$_{n}$,c$_{n}$,e$_{n}$);
tel
\end{lstlisting}
\caption{\texttt{ntasks} node: $n$ delayable tasks in parallel}
\label{fig:n-del-task}
\end{figure}
This \texttt{ntasks} node is provided with a contract, stating that its
composing tasks are exclusive, i.e., that there are no two tasks in the active
state at the same instant. This contract is enforced with the help of the
controllable inputs $c_i$.
\subsection{Contract composition}
\label{sec:contract-composition}
We want know to reuse the \texttt{ntasks} node, in order to build modularly a
system composed of $2n$ tasks. The Figure~\ref{fig:2n-del-task} shows the
parallel composition of two \texttt{ntasks} nodes. We associate to this
composition a new contract, which role is to enforce the exclusivity of the $2n$
tasks.
\begin{figure}[htb]
\begin{lstlisting}
node main($\ton[1][2n]{\mathtt{r}}{,},\ton[1][2n]{\mathtt{e}}{,}$:bool)
returns ($\ton[1][2n]{\mathtt{a}}{,}$:bool)
contract
let
ca$_{1}$ = a$_{1}$ & (a$_{2}$ or $\ldots$ or a$_{2n}$);
$\vdots$
ca$_{2n-1}$ = a$_{2n-1}$ & a$_{2n}$;
tel
enforce not (ca$_{1}$ or $\ldots$ or ca$_{2n-1}$)
let
($\ton{\mathtt{a}}{,}$) = ntasks($\ton{\mathtt{r}}{,}$,$\ton{\mathtt{e}}{,}$);
($\ton[n+1][2n]{\mathtt{a}}{,}$) = ntasks($\ton[n+1][2n]{\mathtt{r}}{,}$,$\ton[n+1][2n]{\mathtt{e}}{,}$);
tel
\end{lstlisting}
\caption{Composition of two \texttt{ntasks} nodes}
\label{fig:2n-del-task}
\end{figure}
It is easy to see that the contract of \texttt{ntasks} is not precise enough to
be able to compose several of these nodes. Therefore, we need to refine this
contract by adding some way to externally control the activity of the tasks.
\subsection{Contract refinement}
\label{sec:contract-refinement}
We first add an input \texttt{c}, meant to be controllable. The refined contract
will enforce that:
\begin{enumerate}
\item the tasks are exclusive,
\item one task is active only at instants when the input \texttt{c} is
true. This property, appearing in the contract, allow a node instantiating
\texttt{ntasks} to forbid any activity of the $n$ tasks instantiated.
\end{enumerate}
The Figure~\ref{fig:n-del-task-2} contains this new \texttt{ntasks} node.
\begin{figure}[htb]
\begin{lstlisting}
node ntasks(c,$\ton{\mathtt{r}}{,}$,$\ton{\mathtt{e}}{,}$:bool) returns ($\ton{\mathtt{a}}{,}$:bool)
contract
let
ca$_{1}$ = a$_{1}$ & (a$_{2}$ or $\ldots$ or a$_{n}$);$\ldots$
ca$_{n-1}$ = a$_{n-1}$ & a$_{n}$;
one = a$_{1}$ or $\ldots$ or a$_{n}$;
tel
enforce not (ca$_{1}$ or $\ldots$ or ca$_{n-1}$) & (c or not one)
with ($\ton{\mathtt{c}}{,}$:bool)
let
a$_{1}$ = inlined delayable(r$_{1}$,c$_{1}$,e$_{1}$);
$\vdots$
a$_{n}$ = inlined delayable(r$_{n}$,c$_{n}$,e$_{n}$);
tel
\end{lstlisting}
\caption{First contract refinement for the \texttt{ntasks} node}
\label{fig:n-del-task-2}
\end{figure}
However, the controllability introduced here is know too strong. The synthesis
will succeed, but the computed controller, without knowing how \texttt{c} will
be instantiated, will actually block every tasks in their idle state. Indeed, if
the controller allows one task to go in its active state, the input \texttt{c}
can become false at the next instant, violating the property to enforce.
Thus, we propose to add an assumption to this contract: the input \texttt{c}
will not become false if a task was active an instant before. This new contract
is visible in Figure~\ref{fig:n-del-tasks-3}.
\begin{figure}[htb]
\centering
\begin{lstlisting}
node ntasks(c,$\ton{\mathtt{r}}{,}$,$\ton{\mathtt{e}}{,}$:bool) returns ($\ton{\mathtt{a}}{,}$:bool)
contract
let
ca$_{1}$ = a$_{1}$ & (a$_{2}$ or $\ldots$ or a$_{n}$);$\ldots$
ca$_{n-1}$ = a$_{n-1}$ & a$_{n}$;
one = a$_{1}$ or $\ldots$ or a$_{n}$;
pone = false fby one;
tel
assume (not pone or c)
enforce not (ca$_{1}$ or $\ldots$ or ca$_{n-1}$) & (c or not one)
with ($\ton{\mathtt{c}}{,}$)
let
a$_{1}$ = inlined delayable(r$_{1}$,c$_{1}$,e$_{1}$);
$\vdots$
a$_{n}$ = inlined delayable(r$_{n}$,c$_{n}$,e$_{n}$);
tel
\end{lstlisting}
\caption{Second contract refinement for the \texttt{ntasks} node}
\label{fig:n-del-tasks-3}
\end{figure}
We can then use this new \texttt{ntasks} version for the parallel composition,
by instantiating the \texttt{c} input by a controllable variable and its
negation. This composition can be found in Figure~\ref{fig:ntasks-compos}.
\begin{figure}[htb]
\centering
\begin{lstlisting}
node main($\ton[1][2n]{\mathtt{r}}{,}$,$\ton[1][2n]{\mathtt{e}}{,}$:bool) returns ($\ton[1][2n]{\mathtt{a}}{,}$:bool)
contract
let
ca$_{1}$ = a$_{1}$ & (a$_{2}$ or $\ldots$ or a$_{2n}$);
$\vdots$
ca$_{2n-1}$ = a$_{2n-1}$ & a$_{2n}$;
tel
enforce not (ca$_{1}$ or $\ldots$ or ca$_{2n-1}$)
with (c:bool)
let
($\ton{\mathtt{a}}{,}$) = ntasks(c,$\ton{\mathtt{r}}{,}$,$\ton{\mathtt{e}}{,}$);
($\ton[n+1][2n]{\mathtt{a}}{,}$) = ntasks(\Not c,$\ton[n+1][2n]{\mathtt{r}}{,}$,$\ton[n+1][2n]{\mathtt{e}}{,}$);
tel
\end{lstlisting}
\caption{Two \texttt{ntasks} parallel composition}
\label{fig:ntasks-compos}
\end{figure}
\appendix
\section{Generated code}
\label{sec:app-generated-code}
\subsection{C generated code}
\label{sec:c-generated-code}
C generated files from an Heptagon program \texttt{example.ept} are placed in a
directory named \texttt{example\_c}. This directory contains one file
\texttt{example.c}. For each node \texttt{f} of the source program, assuming
that \texttt{f} has inputs $(x_1:t_1,\ldots,x_n:t_n)$ and outputs
$(y_1:t'_1,\ldots,y_p:t'_p)$, $t_i$ and $t'_i$ being the data types of these
inputs and outputs, then the \texttt{example.c} file contains, for each node
\texttt{f}:
\begin{itemize}
\item A \texttt{Example\_\_f\_reset} function, with an argument \texttt{self} being a
memory structure instance:
\begin{lstlisting}[language=C]
void Example__f_reset(Example__f_mem* self);
\end{lstlisting}
\item A \texttt{Example\_\_f\_step} function, with as arguments the nodes inputs, a
structure \texttt{\_out} where the output will be put, and a memory structure
instance \texttt{self}:
\begin{lstlisting}[language=C]
void Example__f_step(t$_{1}$ x$_{1}$, ..., t$_{n}$ x$_{n}$,
Example__f_out* \_out,
Example__f_mem* self);
\end{lstlisting}
After the call of this function, the structure \texttt{\_out} contains the
outputs of the node:
\begin{lstlisting}[language=C]
typedef struct \{
t$'_1$ y$_{1}$;
...
t$'_p$ y$_{p}$;
\} Example__f_ans;
\end{lstlisting}
\end{itemize}
An example of main C code for the execution of this node would be then:
\begin{lstlisting}[language=C]
#include "example.h"
int main(int argc, char * argv[]) \{
Example__f_m mem;
t$_{1}$ x$_{1}$;
...
t$_{n}$ x$_{n}$;
Example__f_out ans;
/* initialize memory instance */
f_reset(&mem);
while(1) \{
/* read inputs */
scanf("...", &x$_{1}$, ..., &x$_{n}$);
/* perform step */
Example__f_step(x$_{1}$, ..., x$_{n}$, &ans, &mem);
/* write outputs */
printf("...", ans.y$_{1}$, ..., ans.y$_{p}$);
\}
\}
\end{lstlisting}
The above code is nearly what is produce for the simulator with the \texttt{-s}
option (see Section~\ref{sec:simulation}).
% \subsection{OCaml generated code}
% \label{sec:ocaml-generated-code}
% If the option \texttt{-target caml} is given, then the compiler generates OCaml
% code in a file named \texttt{example.ml}. Heptagon nodes are compiled into OCaml
% classes, where state variables are class properties, and the two functions
% ``reset'' and ``step'' are class methods. Thus, the class type of \texttt{f}
% would be:
% \begin{alltt}
% class f :
% object
% method reset : unit \(\rightarrow\) unit
% method step : t\ind{1} * ... * t\ind{n} \(\rightarrow\) (t\('\sb{1}\) * ... * t\('\sb{p}\))
% end
% \end{alltt}
\subsection{Java generated code}
\label{sec:java-generated-code}
Java generated files from an Heptagon program \texttt{example.ept} are placed in
a directory named \texttt{example\_java}. This directory contains one Java class
\texttt{f} (in the file \texttt{f.java}) for each node \texttt{f} of the source
program. Assuming that \texttt{f} has inputs $(x_1:t_1,\ldots,x_n:t_n)$ and
outputs $(y_1:t'_1,\ldots,y_p:t'_p)$, $t_i$ and $t'_i$ being the data types of
these inputs and outputs, then this \texttt{f} class implements the following
interface:
\begin{lstlisting}[language=Java]
public interface f {
public void reset();
public fAnswer step(t$_{1}$ x$_{1}$, ..., t$_{n}$ x$_{n}$);
}
\end{lstlisting}
The \texttt{fAnswer} class being a structure containing the outputs:
\begin{lstlisting}[language=Java]
public class fAnswer {
t$'\sb{1}$ y$_{1}$;
...
t$'\sb{p}$ y$_{p}$;
}
\end{lstlisting}
\end{document}

558
manual/macros.sty Normal file
View file

@ -0,0 +1,558 @@
\ProvidesPackage{macros}
\RequirePackage[T1]{fontenc}
\RequirePackage{xspace}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{amsthm}
\RequirePackage{graphicx}
\RequirePackage{ifthen}
%% lambdas-trucs
\newcommand{\lambdavar}[1]{\expandafter\newcommand\csname #1\endcsname{\lambda #1}}
\lambdavar{p}
\lambdavar{x}
\lambdavar{y}
\lambdavar{z}
\let\corrital=\/
\renewcommand{\/}{\ifmmode\forall\else\corrital\fi}
\newcommand{\va}{\ensuremath{\alpha}\xspace}
\newcommand{\vb}{\ensuremath{\beta}\xspace}
\newcommand{\vc}{\ensuremath{\gamma}\xspace}
\newcommand{\vd}{\ensuremath{\delta}\xspace}
\newcommand{\vh}{\ensuremath{\eta}\xspace}
%% langages
\newcommand{\langage}[2]{\providecommand{#1}{}\renewcommand{#1}{\textsc{#2}\xspace}}
\langage{\ls}{Lucid Synchrone}
\langage{\lustre}{Lustre}
\langage{\signal}{Signal}
\langage{\esterel}{Esterel}
\langage{\maestro}{Maestro}
\langage{\ocaml}{OCaml}
\langage{\caml}{Caml}
\langage{\nemo}{Nemo}
\langage{\Acute}{Acute}
\langage{\Oz}{Oz}
\langage{\heptagon}{Heptagon}
\langage{\decade}{Decade}
\RequirePackage{listings}
% Definition langage decade
\lstdefinelanguage{Heptagon}
{%
keywords={node,returns,let,tel,var,pre,fby,when,whenot,merge,if,then,else,or,not},%
morekeywords=[2]{automaton,state,until,unless,end,present,switch,inlined},%
morekeywords=[2]{contract,assume,enforce,with},%
otherkeywords={->,&,=},%
comment=[n]{(*}{*)},%
}[keywords,comments]
% \lstdefinelanguage[dist]{Decade}
% {%
% morekeywords={link,to},%
% }[keywords,comments]
%% règles d'inférence
\RequirePackage{mathpartir}
\renewcommand{\TirName}[1]{\textsc{(#1)}}
\renewcommand{\RefTirName}[1]{\textsc{(#1)}}
\newcommand{\rulename}[1]{\ifthenelse{\equal{#1}{}}{}{\textsc{#1}}}
\newcommand{\sepname}{\:}
\newcommand{\sepprem}{\;\;\;}
\newcommand{\axiom}[2][]{\rulename{#1}\quad#2}
\newcommand{\infsimple}[3][]{\rulename{#1}\sepname\frac{#2}{#3}}
\newcommand{\infsimplespec}[3][]{
\begin{array}{c}
{#2}\\
\multicolumn{1}{l}{\rulename{#1}}\\\hline
{#3}
\end{array}
}
\newcommand{\infdouble}[4][]{\rulename{#1}\sepname\frac{#2\sepprem#3}{#4}}
\newcommand{\infdoublecol}[4][]{\rulename{#1}\sepname\frac{\array{c}#2\\#3\endarray}{#4}}
\newcommand{\inftriple}[5][]{\rulename{#1}\sepname\frac{#2\sepprem#3\sepprem#4}{#5}}
\newcommand{\inftriplecol}[5][]{\rulename{#1}\sepname\frac{\array{c}#2\\#3\\#4\endarray}{#5}}
\newcommand{\infquadruple}[6][]{\rulename{#1}\sepname\frac{#2\sepprem#3\sepprem#4\sepprem#5}{#6}}
%% Grammaires
\newcommand{\ou}{\;|\;}
\newcommand{\fun}{\rightarrow}
%\newcommand{\ovfun}[1]{\xrightarrow{#1}}
\newcommand{\ovfun}[1]{{\;-\mskip-1.5\thinmuskip\langle{#1}\rangle\!\!\!\rightarrow\;}}
%% Typage --- général
\DeclareMathOperator{\FV}{FV}
\DeclareMathOperator{\FTV}{FTV}
\DeclareMathOperator{\FSV}{FSV}
\DeclareMathOperator{\FLV}{FLV}
\DeclareMathOperator{\FCV}{FCV}
\DeclareMathOperator{\gen}{gen}
\DeclareMathOperator{\genall}{genall}
%\DeclareMathOperator{\Var}{Var}
\DeclareMathOperator{\merge}{merge}
\newcommand{\mergeenv}{\uplus}
%% Types de données
\newcommand{\type}[3]{\ensuremath{#1\vdash#2:#3}}
%% Horloges
\newcommand{\horloge}[3]{\ensuremath{#1\vdash#2:#3}}
%% Types spaciaux
\newcommand{\soussite}{\ensuremath{\prec_\cR}}
\newcommand{\connecte}{\ensuremath{\mapsto_\cC}}
\DeclareMathOperator{\site}{site}
\DeclareMathOperator{\sites}{sites}
\DeclareMathOperator{\locations}{locations}
\DeclareMathOperator{\loc}{loc}
\DeclareMathOperator{\names}{names}
\DeclareMathOperator{\out}{out}
\DeclareMathOperator{\com}{com}
\DeclareMathOperator{\channels}{channels}
\DeclareMathOperator{\constraints}{constr}
\DeclareMathOperator{\op}{op}
\DeclareMathOperator{\ifte}{ifte}
\DeclareMathOperator{\fby}{fby}
\newcommand{\fcom}[4]{\ensuremath{#1\xrightarrow{#2\vartriangleright#3}#4}}
\newcommand{\OutputType}[3]{\ensuremath{\uparrow_{#1,#2}(#3)}}
\newcommand{\pere}[2]{\ensuremath{\uparrow_#1(#2)}}
\newcommand{\set}[1]{\ensuremath{\{#1\}}}
\newcommand{\defprogram}[2]{\ensuremath{\vdash#1:#2}}
\newcommand{\defhierarchy}[3]{\ensuremath{#1\vdash#2:#3}}
\newcommand{\defarch}[3]{\ensuremath{#1\vdash#2:#3}}
\newcommand{\spacetype}[4]{\ensuremath{#1\vdash#3:#4/#2}}
\renewcommand{\spacetype}[5]{\ensuremath{#1|#2\vdash#4:#5/#3}}
\newcommand{\spacetypetrans}[4]{\ensuremath{#1|#2\vdash#4/#3}}
\newcommand{\spacetypeimpl}[5]{\ensuremath{#1|#2\vdash_i#4:#5/#3}}
\newcommand{\spacetypechan}[6]{\ensuremath{#1|#2\vdash#5:#6/#3/#4}}
\newcommand{\subtype}[3]{\ensuremath{#1\vdash#2\prec#3}}
\newcommand{\projsubtype}[4]{\ensuremath{#1\vdash#2:#3\prec#4}}
\newcommand{\emptydecl}{\ensuremath{\emptyset}}
\newcommand{\slicing}[3]{\ensuremath{#1\stackrel{#2}{\longrightarrow}#3}}
%\newcommand{\projection}[4]{\ensuremath{#1|#2\stackrel{#3}{\Longrightarrow}#4}}
\newcommand{\projection}[3]{\ensuremath{#1\stackrel{#2}{\Longrightarrow}#3}}
\newcommand{\projspacetype}[7]{\ensuremath{\projection{\spacetype{#1}{#2}{#3}{#4}{#5}}{#6}{#7}}}
\newcommand{\projtrans}[6]{\ensuremath{\projection{\spacetypetrans{#1}{#2}{#3}{#4}}{#5}{#6}}}
\newcommand{\projectioncol}[3]{\ensuremath{
\begin{array}{c}
#1\\
\stackrel{#2}{\Longrightarrow}#3
\end{array}}}
\newcommand{\projtype}[4]{\ensuremath{#1\vdash#2\stackrel{#3}{\Longrightarrow}#4}}
\newcommand{\canal}[3]{\ensuremath{#1\stackrel{#2}{\leftrightarrow}#3}}
\newcommand{\channel}[3]{\ensuremath{#1\stackrel{#2}{\mapsto} #3}}
\newcommand{\vs}{\ensuremath{\delta}\xspace}
\newcommand{\comm}{\triangleright}
\newcommand{\graph}[2]{\ensuremath{\langle#1,#2\rangle}}
\newcommand{\abs}{\ensuremath{\bot}}
\newcommand{\cabs}{\ensuremath{[]}}
\newcommand{\subck}{\ensuremath{<:}}
%% Sémantique synchrone
\newcommand{\clock}[1]{\ensuremath{\langle#1\rangle}}
\newcommand{\I}{\mathbb{I}}
%\newcommand{\N}{\mathbb{N}}
% dist. values and environments
\newcommand{\dv}{\hat v}
\newcommand{\lv}{vl}
\newcommand{\R}{\hat R}
\let\paragraphe=\S
\renewcommand{\S}{\hat S}
\newcommand{\G}{\hat G}
\newcommand{\C}{\hat C}
\newcommand{\A}{\hat A}
\newcommand{\semop}[3]{\ensuremath{#1\xrightarrow{#2}#3}}
\newcommand{\semdist}[5]{\ensuremath{#1\stackrel{#2}{\Vdash}#3\xrightarrow{#4}#5}}
\newcommand{\semproj}[4]{\ensuremath{#1\vdash#2\xrightarrow{#3}#4}}
\newcommand{\semcent}[4]{\ensuremath{#1\vdash#2\xrightarrow{#3}#4}}
\newcommand{\semcentshort}[4]{\ensuremath{#1\!\vdash\!#2\!\stackrel{#3}{\rightarrow}\!#4}}
\newcommand{\semprog}[3]{\ensuremath{#1\vdash#2:#3}}
\newcommand{\semdistprog}[3]{\ensuremath{#1\Vdash#2:#3}}
\newcommand{\compvt}[3]{#1\in I_{H}(#3)}
\newcommand{\relval}[4]{\ensuremath{#1\preccurlyeq^{#2}_{#3}#4}}
%\newcommand{\reaceq}[1]{\stackrel{#1}{\cong}}
%\newcommand{\reaceq}[1]{\stackrel{#1}{\preccurlyeq}}
\newcommand{\reaceq}[1]{\preccurlyeq_{#1}}
\def\leadstofill@{\arrowfill@\relbar\relbar\leadsto}
\newcommand{\xleadsto}[2][]{\ext@arrow 0359\leadstofill@{#1}{#2}}
\newcommand{\simu}[4]{#1\xleadsto[#3]{#2}#4}
%% lettres calligraphiques
\newcommand{\shortcal}[1]{\expandafter\newcommand\csname c#1\endcsname{\ensuremath{\mathcal{#1}}}}
\shortcal{A}
\shortcal{B}
\shortcal{C}
\shortcal{D}
\shortcal{E}
\shortcal{F}
\shortcal{G}
\shortcal{H}
\shortcal{I}
\shortcal{J}
\shortcal{K}
\shortcal{L}
\shortcal{M}
\shortcal{N}
\shortcal{O}
\shortcal{P}
\shortcal{Q}
\shortcal{R}
\shortcal{S}
\shortcal{T}
\shortcal{U}
\shortcal{V}
\shortcal{W}
\shortcal{X}
\shortcal{Y}
\shortcal{Z}
%% mots-clés
\newcommand{\m@thspace}{%
\ifmmode\ \fi%
}
\newcommand{\textname}[1]{\texttt{#1}}
\newcommand{\name}[2]{%
\providecommand{#1}{}%
\renewcommand{#1}{\textname{#2}\xspace}%
}
\newcommand{\textkw}[1]{\texttt{\textbf{#1}}}
\newcommand{\kw}[2]{%
\providecommand{#1}{}%
\renewcommand{#1}{\textkw{#2}\xspace}%
}
\newcommand{\akeyword}[1]{\expandafter\kw\csname #1\endcsname{#1}}
\newcommand{\midkw}[2]{%
\providecommand{#1}{}%
\renewcommand{#1}{\m@thspace\textkw{#2}\m@thspace\xspace}%
}
\newcommand{\midkeyword}[1]{\expandafter\midkw\csname #1\endcsname{#1}}
\newcommand{\begkw}[2]{%
\providecommand{#1}{}%
\renewcommand{#1}{\textkw{#2}\m@thspace\xspace}%
}
\newcommand{\begkeyword}[1]{\expandafter\begkw\csname #1\endcsname{#1}}
\newcommand{\closekw}[2]{%
\providecommand{#1}{}%
\renewcommand{#1}{\m@thspace\textkw{#2}\xspace}%
}
\newcommand{\closekeyword}[1]{\expandafter\closekw\csname #1\endcsname{#1}}
\newcommand{\typeconst}[2]{\kw{#1}{#2}}
\newcommand{\binop}[2]{\midkw{#1}{#2}}
\newcommand{\unop}[2]{\begkw{#1}{#2}}
\newcommand{\funct}[2]{\begkw{#1}{#2}}
%% Mots-clés Lucid Synchrone
\begkw{\Assume}{assume}
\begkw{\Automaton}{automaton}
\midkw{\And}{and}
\midkw{\Band}{\&}
\begkw{\Clock}{clock}
\begkw{\Contract}{contract}
\begkw{\Do}{do}
\closekw{\Done}{done}
\midkw{\Else}{else}
\begkw{\Emit}{emit}
\closekw{\End}{end}
\begkw{\Enforce}{enforce}
\midkw{\Every}{every}
\binop{\Fby}{fby}
\binop{\Fleche}{->}
\unop{\Fst}{fst}
\kw{\False}{false}
\begkw{\Guarantee}{guarantee}
\begkw{\If}{if}
\midkw{\In}{in}
\begkw{\Inlined}{inlined}
\begkw{\Last}{last}
\begkw{\Let}{let}
\begkw{\Letnode}{node}
\begkw{\Match}{match}
\funct{\Merge}{merge}
%\kw{\merge}{merge}
\begkw{\Node}{node}
\begkw{\Not}{not}
\midkw{\On}{on}
\midkw{\Or}{or}
\unop{\Pre}{pre}
\begkw{\Present}{present}
\kw{\Pv}{;}
\begkw{\Rec}{rec}
\begkw{\Reset}{reset}
\midkw{\Returns}{returns}
\begkw{\Run}{run}
\begkw{\Sig}{sig}
\unop{\Snd}{snd}
\begkw{\State}{state}
\closekw{\Tel}{tel}
\midkw{\Then}{then}
\kw{\True}{true}
\midkw{\Until}{until}
\midkw{\Unless}{unless}
\midkw{\Var}{var}
\midkw{\When}{when}
\midkw{\Whenot}{whenot}
\midkw{\Where}{where}
\midkw{\With}{with}
\kw{\Tick}{tick}
\typeconst{\Float}{float}
\typeconst{\Int}{int}
\typeconst{\Unit}{unit}
\typeconst{\Bool}{bool}
\newcommand{\Nil}{\ensuremath{\mathit{nil}}}
%% Mots-clés répartition
\midkw{\At}{at}
\begkw{\Site}{site}
\begkw{\Loc}{loc}
\begkw{\Subsite}{subsite}
\begkw{\Subloc}{subloc}
\begkw{\Link}{link}
\midkw{\To}{to}
\begkw{\Out}{out}
\midkw{\Of}{of}
\begkw{\Port}{port}
\newcommand{\TAt}{\m@thspace\texttt{at}\m@thspace\xspace}
\DeclareMathOperator{\typecl}{clock}
\funct{\Send}{send}
\funct{\Receive}{receive}
\newcommand{\match}[4][c]{
\begin{array}[#1]{l}
\Match #2\With\\
|\ \True \rightarrow #3\\
|\ \False \rightarrow #4\\
\end{array}
}
\newcommand{\linematch}[3]{
\Match #1\With
|\ \True \rightarrow #2
\ |\ \False \rightarrow #3
}
%% Théorèmes, définitions, remarques...
\RequirePackage{amsmath}
\newtheorem{definition}{D\'efinition}
\newtheorem{remarque}{Remarque}
\newtheorem{theoreme}{Th\'eor\`eme}
\newtheorem{lemme}{Lemme}
\newtheorem{proposition}{Proposition}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}{Lemma}
\newcommand{\noeud}{n\oe ud\xspace}
\newcommand{\Noeud}{N\oe ud\xspace}
\newcommand{\noeuds}{n\oe uds\xspace}
\newcommand{\Noeuds}{N\oe uds\xspace}
%% Macros mathématiques
\providecommand{\tonfirst}{}
\newcommand{\ton}[1][1]{\renewcommand{\tonfirst}{#1}\tonbis}
\newcommand{\tonbis}[3][n]{\ensuremath{#2_{\tonfirst}#3\ldots#3#2_{#1}}}
\newcommand{\tonp}{\ton[1][p]}
\newcommand{\tonq}{\ton[1][q]}
\newcommand{\tontt}[1][1]{\renewcommand{\tonfirst}{#1}\tonttbis}
\newcommand{\tonttbis}[3][n]{\ensuremath{\mathtt{#2}_{\tonfirst}\mathtt{#3}\ldots\mathtt{#3}\mathtt{#2}_{#1}}}
\newcommand{\ind}[1]{\(\sb{#1}\)}
\DeclareMathOperator{\dom}{dom}
\DeclareMathOperator{\codom}{cod}
%\DeclareMathOperator{\inst}{inst}
\DeclareMathOperator{\head}{hd}
\DeclareMathOperator{\tail}{tl}
\DeclareMathOperator{\DCS}{DCS}
\DeclareMathOperator{\Triang}{Triang}
\DeclareMathOperator{\Traces}{Traces}
\newcommand{\B}{\mathbb{B}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Z}{\mathbb{Z}}
%\newcommand{\R}{\mathbb{R}}
%\newcommand{\C}{\mathbb{C}}
\newcommand{\seq}[1]{\ensuremath{\overline{#1}}}
\newcommand{\cphant}{\hat{c}}
%% Flots de données
\newenvironment{streams}[1]{%
\setlength{\arraycolsep}{0.3cm}
\array{|c|*{#1}{c}|}
\hline
}{%
\hline
\endarray
}
%% Macros usuelles
%\RequirePackage[outerbars]{changebar}
%\newenvironment{change}[1][]{\cbstart}{\cbend}
\newenvironment{change}[1][]{}{}
\newenvironment{amodifier}%
{\textcolor{red}\bgroup%
\hrule
\begin{center}
\`A MODIFIER ?
\end{center}
\hrule
}%
{\hrule\egroup}
\renewenvironment{amodifier}{}{}
%% Boîte-noeud code
\RequirePackage{alltt}
\newenvironment{code}{%
\renewcommand{\textkw}[1]{\textbf{##1}}
\@beginparpenalty 10000 %
\quote%
\alltt}{\endalltt%
\endquote
\vspace{3mm}
}
\newenvironment{figcode}{%
\renewcommand{\textkw}[1]{\textbf{##1}}
\@beginparpenalty 10000 %
\alltt}{\endalltt%
\vspace{1mm}
}
\newcommand{\marc}[1]{}
\RequirePackage{varwidth}
\newenvironment{showproj}
{
\par\noindent\medskip
\renewenvironment{code}
{\varwidth{\linewidth}\vspace*{0.5em}\alltt}
{\endalltt\endvarwidth}
\tabular{>{\centering}p{0.45\linewidth}||>{\centering}p{0.45\linewidth}}
\multicolumn{1}{c}{\texttt{A}} & \multicolumn{1}{c}{\texttt{B}} \\\hline
}
{\vspace{-3cm}\endtabular\medskip}
\newcommand{\minildots}{\ensuremath{\!...}}
\newbox\subfigbox % Create a box to hold the subfigure.
\newenvironment{subfloat}% % Create the new environment.
{\def\caption##1{\gdef\subcapsave{\relax##1}}%
\let\subcapsave=\@empty % Save the subcaption text.
\let\sf@oldlabel=\label
\def\label##1{\xdef\sublabsave{\noexpand\label{##1}}}%
\let\sublabsave\relax % Save the label key.
\setbox\subfigbox\hbox
\bgroup}% % Open the box...
{\egroup % ... close the box and call \subfigure.
\let\label=\sf@oldlabel
\subfigure[\subcapsave]{\sublabsave\box\subfigbox}}%
\newenvironment{flushedproof}{%
\proof%
\flushleft%
}{%
\endflushleft%
\endproof%
}
%% MiniLustre & contrats
\newcommand{\semml}[5]{\ensuremath{#1,#2\vdash#3\xrightarrow{#4}#5}}

421
manual/mathpartir.sty Normal file
View file

@ -0,0 +1,421 @@
% Mathpartir --- Math Paragraph for Typesetting Inference Rules
%
% Copyright (C) 2001, 2002, 2003, 2004, 2005 Didier Rémy
%
% Author : Didier Remy
% Version : 1.2.0
% Bug Reports : to author
% Web Site : http://pauillac.inria.fr/~remy/latex/
%
% Mathpartir is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2, or (at your option)
% any later version.
%
% Mathpartir is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details
% (http://pauillac.inria.fr/~remy/license/GPL).
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% File mathpartir.sty (LaTeX macros)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mathpartir}
[2005/12/20 version 1.2.0 Math Paragraph for Typesetting Inference Rules]
%%
%% Identification
%% Preliminary declarations
\RequirePackage {keyval}
%% Options
%% More declarations
%% PART I: Typesetting maths in paragraphe mode
\newdimen \mpr@tmpdim
% To ensure hevea \hva compatibility, \hva should expands to nothing
% in mathpar or in inferrule
\let \mpr@hva \empty
%% normal paragraph parametters, should rather be taken dynamically
\def \mpr@savepar {%
\edef \MathparNormalpar
{\noexpand \lineskiplimit \the\lineskiplimit
\noexpand \lineskip \the\lineskip}%
}
\def \mpr@rulelineskip {\lineskiplimit=0.3em\lineskip=0.2em plus 0.1em}
\def \mpr@lesslineskip {\lineskiplimit=0.6em\lineskip=0.5em plus 0.2em}
\def \mpr@lineskip {\lineskiplimit=1.2em\lineskip=1.2em plus 0.2em}
\let \MathparLineskip \mpr@lineskip
\def \mpr@paroptions {\MathparLineskip}
\let \mpr@prebindings \relax
\newskip \mpr@andskip \mpr@andskip 2em plus 0.5fil minus 0.5em
\def \mpr@goodbreakand
{\hskip -\mpr@andskip \penalty -1000\hskip \mpr@andskip}
\def \mpr@and {\hskip \mpr@andskip}
\def \mpr@andcr {\penalty 50\mpr@and}
\def \mpr@cr {\penalty -10000\mpr@and}
\def \mpr@eqno #1{\mpr@andcr #1\hskip 0em plus -1fil \penalty 10}
\def \mpr@bindings {%
\let \and \mpr@andcr
\let \par \mpr@andcr
\let \\\mpr@cr
\let \eqno \mpr@eqno
\let \hva \mpr@hva
}
\let \MathparBindings \mpr@bindings
% \@ifundefined {ignorespacesafterend}
% {\def \ignorespacesafterend {\aftergroup \ignorespaces}
\newenvironment{mathpar}[1][]
{$$\mpr@savepar \parskip 0em \hsize \linewidth \centering
\vbox \bgroup \mpr@prebindings \mpr@paroptions #1\ifmmode $\else
\noindent $\displaystyle\fi
\MathparBindings}
{\unskip \ifmmode $\fi\egroup $$\ignorespacesafterend}
% \def \math@mathpar #1{\setbox0 \hbox {$\displaystyle #1$}\ifnum
% \wd0 < \hsize $$\box0$$\else \bmathpar #1\emathpar \fi}
%%% HOV BOXES
\def \mathvbox@ #1{\hbox \bgroup \mpr@normallineskip
\vbox \bgroup \tabskip 0em \let \\ \cr
\halign \bgroup \hfil $##$\hfil\cr #1\crcr \egroup \egroup
\egroup}
\def \mathhvbox@ #1{\setbox0 \hbox {\let \\\qquad $#1$}\ifnum \wd0 < \hsize
\box0\else \mathvbox {#1}\fi}
%% Part II -- operations on lists
\newtoks \mpr@lista
\newtoks \mpr@listb
\long \def\mpr@cons #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter
{#2}\edef #2{\the \mpr@lista \the \mpr@listb}}
\long \def\mpr@snoc #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter
{#2}\edef #2{\the \mpr@listb\the\mpr@lista}}
\long \def \mpr@concat#1=#2\mpr@to#3{\mpr@lista \expandafter {#2}\mpr@listb
\expandafter {#3}\edef #1{\the \mpr@listb\the\mpr@lista}}
\def \mpr@head #1\mpr@to #2{\expandafter \mpr@head@ #1\mpr@head@ #1#2}
\long \def \mpr@head@ #1#2\mpr@head@ #3#4{\def #4{#1}\def#3{#2}}
\def \mpr@flatten #1\mpr@to #2{\expandafter \mpr@flatten@ #1\mpr@flatten@ #1#2}
\long \def \mpr@flatten@ \\#1\\#2\mpr@flatten@ #3#4{\def #4{#1}\def #3{\\#2}}
\def \mpr@makelist #1\mpr@to #2{\def \mpr@all {#1}%
\mpr@lista {\\}\mpr@listb \expandafter {\mpr@all}\edef \mpr@all {\the
\mpr@lista \the \mpr@listb \the \mpr@lista}\let #2\empty
\def \mpr@stripof ##1##2\mpr@stripend{\def \mpr@stripped{##2}}\loop
\mpr@flatten \mpr@all \mpr@to \mpr@one
\expandafter \mpr@snoc \mpr@one \mpr@to #2\expandafter \mpr@stripof
\mpr@all \mpr@stripend
\ifx \mpr@stripped \empty \let \mpr@isempty 0\else \let \mpr@isempty 1\fi
\ifx 1\mpr@isempty
\repeat
}
\def \mpr@rev #1\mpr@to #2{\let \mpr@tmp \empty
\def \\##1{\mpr@cons ##1\mpr@to \mpr@tmp}#1\let #2\mpr@tmp}
%% Part III -- Type inference rules
\newif \if@premisse
\newbox \mpr@hlist
\newbox \mpr@vlist
\newif \ifmpr@center \mpr@centertrue
\def \mpr@htovlist {%
\setbox \mpr@hlist
\hbox {\strut
\ifmpr@center \hskip -0.5\wd\mpr@hlist\fi
\unhbox \mpr@hlist}%
\setbox \mpr@vlist
\vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist
\else \unvbox \mpr@vlist \box \mpr@hlist
\fi}%
}
% OLD version
% \def \mpr@htovlist {%
% \setbox \mpr@hlist
% \hbox {\strut \hskip -0.5\wd\mpr@hlist \unhbox \mpr@hlist}%
% \setbox \mpr@vlist
% \vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist
% \else \unvbox \mpr@vlist \box \mpr@hlist
% \fi}%
% }
\def \mpr@item #1{$\displaystyle #1$}
\def \mpr@sep{2em}
\def \mpr@blank { }
\def \mpr@hovbox #1#2{\hbox
\bgroup
\ifx #1T\@premissetrue
\else \ifx #1B\@premissefalse
\else
\PackageError{mathpartir}
{Premisse orientation should either be T or B}
{Fatal error in Package}%
\fi \fi
\def \@test {#2}\ifx \@test \mpr@blank\else
\setbox \mpr@hlist \hbox {}%
\setbox \mpr@vlist \vbox {}%
\if@premisse \let \snoc \mpr@cons \else \let \snoc \mpr@snoc \fi
\let \@hvlist \empty \let \@rev \empty
\mpr@tmpdim 0em
\expandafter \mpr@makelist #2\mpr@to \mpr@flat
\if@premisse \mpr@rev \mpr@flat \mpr@to \@rev \else \let \@rev \mpr@flat \fi
\def \\##1{%
\def \@test {##1}\ifx \@test \empty
\mpr@htovlist
\mpr@tmpdim 0em %%% last bug fix not extensively checked
\else
\setbox0 \hbox{\mpr@item {##1}}\relax
\advance \mpr@tmpdim by \wd0
%\mpr@tmpdim 1.02\mpr@tmpdim
\ifnum \mpr@tmpdim < \hsize
\ifnum \wd\mpr@hlist > 0
\if@premisse
\setbox \mpr@hlist
\hbox {\unhbox0 \hskip \mpr@sep \unhbox \mpr@hlist}%
\else
\setbox \mpr@hlist
\hbox {\unhbox \mpr@hlist \hskip \mpr@sep \unhbox0}%
\fi
\else
\setbox \mpr@hlist \hbox {\unhbox0}%
\fi
\else
\ifnum \wd \mpr@hlist > 0
\mpr@htovlist
\mpr@tmpdim \wd0
\fi
\setbox \mpr@hlist \hbox {\unhbox0}%
\fi
\advance \mpr@tmpdim by \mpr@sep
\fi
}%
\@rev
\mpr@htovlist
\ifmpr@center \hskip \wd\mpr@vlist\fi \box \mpr@vlist
\fi
\egroup
}
%%% INFERENCE RULES
\@ifundefined{@@over}{%
\let\@@over\over % fallback if amsmath is not loaded
\let\@@overwithdelims\overwithdelims
\let\@@atop\atop \let\@@atopwithdelims\atopwithdelims
\let\@@above\above \let\@@abovewithdelims\abovewithdelims
}{}
%% The default
\def \mpr@@fraction #1#2{\hbox {\advance \hsize by -0.5em
$\displaystyle {#1\mpr@over #2}$}}
\let \mpr@fraction \mpr@@fraction
%% A generic solution to arrow
\def \mpr@make@fraction #1#2#3#4#5{\hbox {%
\def \mpr@tail{#1}%
\def \mpr@body{#2}%
\def \mpr@head{#3}%
\setbox1=\hbox{$#4$}\setbox2=\hbox{$#5$}%
\setbox3=\hbox{$\mkern -3mu\mpr@body\mkern -3mu$}%
\setbox3=\hbox{$\mkern -3mu \mpr@body\mkern -3mu$}%
\dimen0=\dp1\advance\dimen0 by \ht3\relax\dp1\dimen0\relax
\dimen0=\ht2\advance\dimen0 by \dp3\relax\ht2\dimen0\relax
\setbox0=\hbox {$\box1 \@@atop \box2$}%
\dimen0=\wd0\box0
\box0 \hskip -\dimen0\relax
\hbox to \dimen0 {$%
\mathrel{\mpr@tail}\joinrel
\xleaders\hbox{\copy3}\hfil\joinrel\mathrel{\mpr@head}%
$}}}
%% Old stuff should be removed in next version
\def \mpr@@reduce #1#2{\hbox
{$\lower 0.01pt \mpr@@fraction {#1}{#2}\mkern -15mu\rightarrow$}}
\def \mpr@@rewrite #1#2#3{\hbox
{$\lower 0.01pt \mpr@@fraction {#2}{#3}\mkern -8mu#1$}}
\def \mpr@infercenter #1{\vcenter {\mpr@hovbox{T}{#1}}}
\def \mpr@empty {}
\def \mpr@inferrule
{\bgroup
\ifnum \linewidth<\hsize \hsize \linewidth\fi
\mpr@rulelineskip
\let \and \qquad
\let \hva \mpr@hva
\let \@rulename \mpr@empty
\let \@rule@options \mpr@empty
\let \mpr@over \@@over
\mpr@inferrule@}
\newcommand {\mpr@inferrule@}[3][]
{\everymath={\displaystyle}%
\def \@test {#2}\ifx \empty \@test
\setbox0 \hbox {$\vcenter {\mpr@hovbox{B}{#3}}$}%
\else
\def \@test {#3}\ifx \empty \@test
\setbox0 \hbox {$\vcenter {\mpr@hovbox{T}{#2}}$}%
\else
\setbox0 \mpr@fraction {\mpr@hovbox{T}{#2}}{\mpr@hovbox{B}{#3}}%
\fi \fi
\def \@test {#1}\ifx \@test\empty \box0
\else \vbox
%%% Suggestion de Francois pour les etiquettes longues
%%% {\hbox to \wd0 {\RefTirName {#1}\hfil}\box0}\fi
{\hbox {\RefTirName {#1}}\box0}\fi
\egroup}
\def \mpr@vdotfil #1{\vbox to #1{\leaders \hbox{$\cdot$} \vfil}}
% They are two forms
% \inferrule [label]{[premisses}{conclusions}
% or
% \inferrule* [options]{[premisses}{conclusions}
%
% Premisses and conclusions are lists of elements separated by \\
% Each \\ produces a break, attempting horizontal breaks if possible,
% and vertical breaks if needed.
%
% An empty element obtained by \\\\ produces a vertical break in all cases.
%
% The former rule is aligned on the fraction bar.
% The optional label appears on top of the rule
% The second form to be used in a derivation tree is aligned on the last
% line of its conclusion
%
% The second form can be parameterized, using the key=val interface. The
% folloiwng keys are recognized:
%
% width set the width of the rule to val
% narrower set the width of the rule to val\hsize
% before execute val at the beginning/left
% lab put a label [Val] on top of the rule
% lskip add negative skip on the right
% left put a left label [Val]
% Left put a left label [Val], ignoring its width
% right put a right label [Val]
% Right put a right label [Val], ignoring its width
% leftskip skip negative space on the left-hand side
% rightskip skip negative space on the right-hand side
% vdots lift the rule by val and fill vertical space with dots
% after execute val at the end/right
%
% Note that most options must come in this order to avoid strange
% typesetting (in particular leftskip must preceed left and Left and
% rightskip must follow Right or right; vdots must come last
% or be only followed by rightskip.
%
%% Keys that make sence in all kinds of rules
\def \mprset #1{\setkeys{mprset}{#1}}
\define@key {mprset}{flushleft}[]{\mpr@centerfalse}
\define@key {mprset}{center}[]{\mpr@centertrue}
\define@key {mprset}{rewrite}[]{\let \mpr@fraction \mpr@@rewrite}
\define@key {mprset}{myfraction}[]{\let \mpr@fraction #1}
\define@key {mprset}{fraction}[]{\def \mpr@fraction {\mpr@make@fraction #1}}
\newbox \mpr@right
\define@key {mpr}{flushleft}[]{\mpr@centerfalse}
\define@key {mpr}{center}[]{\mpr@centertrue}
\define@key {mpr}{rewrite}[]{\let \mpr@fraction \mpr@@rewrite}
\define@key {mpr}{myfraction}[]{\let \mpr@fraction #1}
\define@key {mpr}{fraction}[]{\def \mpr@fraction {\mpr@make@fraction #1}}
\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax
\advance \hsize by -\wd0\box0}
\define@key {mpr}{width}{\hsize #1}
\define@key {mpr}{sep}{\def\mpr@sep{#1}}
\define@key {mpr}{before}{#1}
\define@key {mpr}{lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}}
\define@key {mpr}{Lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}}
\define@key {mpr}{narrower}{\hsize #1\hsize}
\define@key {mpr}{leftskip}{\hskip -#1}
\define@key {mpr}{reduce}[]{\let \mpr@fraction \mpr@@reduce}
\define@key {mpr}{rightskip}
{\setbox \mpr@right \hbox {\unhbox \mpr@right \hskip -#1}}
\define@key {mpr}{LEFT}{\setbox0 \hbox {$#1$}\relax
\advance \hsize by -\wd0\box0}
\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax
\advance \hsize by -\wd0\box0}
\define@key {mpr}{Left}{\llap{$\TirName {#1}\;$}}
\define@key {mpr}{right}
{\setbox0 \hbox {$\;\TirName {#1}$}\relax \advance \hsize by -\wd0
\setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}}
\define@key {mpr}{RIGHT}
{\setbox0 \hbox {$#1$}\relax \advance \hsize by -\wd0
\setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}}
\define@key {mpr}{Right}
{\setbox \mpr@right \hbox {\unhbox \mpr@right \rlap {$\;\TirName {#1}$}}}
\define@key {mpr}{vdots}{\def \mpr@vdots {\@@atop \mpr@vdotfil{#1}}}
\define@key {mpr}{after}{\edef \mpr@after {\mpr@after #1}}
\newdimen \rule@dimen
\newcommand \mpr@inferstar@ [3][]{\setbox0
\hbox {\let \mpr@rulename \mpr@empty \let \mpr@vdots \relax
\setbox \mpr@right \hbox{}%
$\setkeys{mpr}{#1}%
\ifx \mpr@rulename \mpr@empty \mpr@inferrule {#2}{#3}\else
\mpr@inferrule [{\mpr@rulename}]{#2}{#3}\fi
\box \mpr@right \mpr@vdots$}
\setbox1 \hbox {\strut}
\rule@dimen \dp0 \advance \rule@dimen by -\dp1
\raise \rule@dimen \box0}
\def \mpr@infer {\@ifnextchar *{\mpr@inferstar}{\mpr@inferrule}}
\newcommand \mpr@err@skipargs[3][]{}
\def \mpr@inferstar*{\ifmmode
\let \@do \mpr@inferstar@
\else
\let \@do \mpr@err@skipargs
\PackageError {mathpartir}
{\string\inferrule* can only be used in math mode}{}%
\fi \@do}
%%% Exports
% Envirnonment mathpar
\let \inferrule \mpr@infer
% make a short name \infer is not already defined
\@ifundefined {infer}{\let \infer \mpr@infer}{}
\def \TirNameStyle #1{\small \textsc{#1}}
\def \tir@name #1{\hbox {\small \TirNameStyle{#1}}}
\let \TirName \tir@name
\let \DefTirName \TirName
\let \RefTirName \TirName
%%% Other Exports
% \let \listcons \mpr@cons
% \let \listsnoc \mpr@snoc
% \let \listhead \mpr@head
% \let \listmake \mpr@makelist
\endinput

302
manual/varwidth.sty Normal file
View file

@ -0,0 +1,302 @@
% varwidth.sty v 0.9a Mar 2003 Donald Arseneau asnd@triumf.ca
%
% Copyright 2003 by Donald Arseneau (asnd@triumf.ca).
% This software is released under the terms of the LaTeX Project Public
% License (ftp://ctan.tug.org/tex-archive/macros/latex/base/lppl.txt).
% (Essentially: Free to use, copy, distribute (sell) and change, but, if
% changed, the name must be changed.)
%
% The varwidth environment is based on minipage, and takes the same
% parameters, but the specified width is just a maximum value -- the
% environment will be typeset with a narrower "natural" width if
% possible.
%
% In a varwidth environment, paragraph line-breaks are chosen
% according to the specified width, but each line is reset to
% match a narrower natural width, if there is one.
%
% The \narrowragged command works like \raggedright, but produces
% generally narrower lines in paragraphs, but more text in the last
% line (the lines have more-equal lengths).
%
% This version works fine, but there are still many questions about
% how it would work best. Should there be a version that avoids the
% usual minipage formatting style?
%
% Numbered equations are not handled well, especially with leqno.
% AMSmath environments have not been tried, and undoubtedly fail.
%
% To do: Extend v-list wrappers to handle all e-TeX primitives.
% (pdfTeX too?)
% Capture marks and floats, propagating them out of the box
% Support numbered equations, including ams math.
%
\ProvidesPackage{varwidth}[2003/03/10 ver 0.9a; \space
Variable-width minipages]
\newcommand\narrowragged{\rightskip \z@ plus .25\hsize
\@rightskip\rightskip \parfillskip\z@ plus .15\hsize
\sloppy }
\newbox\@vwid@box
% The varwidth environment is based on minipage, and takes the same
% parameters, but the specified width is only a limit -- a narrower
% natural width may be used. \varwidth uses \minipage.
\def\varwidth{\let\@minipagerestore\@vwid@setup \minipage}
% Many things may appear on vertical lists that can't be re-processed,
% so they have to be modified.
\def\@vwid@setup{%
% several things can't appear in vertical mode, so they may get
% a \vbox wrapped around them.
\let\@bsphack\@vwid@bsphack % \label and others
\let\mark\@gobble % Marks disappear in minipages anyway
\let\@special\@vwid@special % \color and others
\let\addtocontents\@vwid@addtocontents % \addcontentsline
% Shifted boxes (\parshape,\hangindent) will have their shifts
% indicated in a separate box.
\let\@hangfrom\@vwid@hangfrom % hanging indents
\let\list\@vwid@list
\let\endtrivlist\@vwid@endtrivlist
\postdisplaypenalty\@vwid@posteqp
\predisplaypenalty\@vwid@preeqp
\def\@eqnnum{\aftergroup\@vwid@afterva\@@vwid@eqnnum}%
\global\@vwid@roff\z@ \global\@vwid@loff\z@
% Begin an inner minipage-like vertical box (in \@tempboxa)
\let\@minipagerestore\@@vwid@minipagerestore \@minipagerestore
\setbox\@tempboxa\vbox\bgroup\begingroup
% Flag the top of the list
\penalty\@vwid@toppen
}
\let\@@vwid@minipagerestore\@minipagerestore
% At end of varwidth environment.
\def\endvarwidth{\par\@@par
% Handle minipage-style notes.
\ifvoid\@mpfootins\else
\vskip\skip\@mpfootins
\normalcolor
\@vwid@wrap\footnoterule
\unvbox\@mpfootins
\fi
\unskip
\endgroup\egroup % got my \@tempboxa
% {\showoutput\showbox\@tempboxa}%
% in a discarded box, sift through list measuring max width.
\begingroup\setbox\z@\vbox\bgroup
%\message{-------------------------------------------------------------}%
%\message{First pass; hsize=\the\hsize... }%{\tracingall\showlists}%%
\unvcopy\@tempboxa
\@tempdima-\maxdimen
\let\@vwid@resetb\@vwid@measure
\let\@vwid@append\relax
\sift@deathcycles\z@
\@vwid@sift
\xdef\@vwid@{\the\@tempdima}%
\egroup\endgroup
% Done measuring. Now empty \@tempboxa onto current vertical list
% which is the contents of a minipage environment
%\message{Got natural width \@vwid@. }%
\unvbox\@tempboxa
% If the natural width is narrower, then go back through the list
% reboxing and moving everything into \@vwid@box; then spill \@vwid@box
\ifdim\@vwid@<\hsize
\hsize\@vwid@
\setbox\@vwid@box\vbox{}%
\sift@deathcycles\z@
%\message{----------------------------------------------------------------}%
%\message{Second pass; hsize=\the\hsize... }%{\tracingall\showlists}%
\@vwid@sift
\unvbox\@vwid@box
\fi
% end the minipage environment
\endminipage}
%
% Here are definitions for sifting through the vertical list, either
% measuring things or reboxing them.
%
% Penalties used as signals to the vertical-list processor:
\mathchardef\@vwid@posteqp 17321 % Penalty below equations
\mathchardef\@vwid@preeqp 17322 % Penalty above equations
\mathchardef\@vwid@postnump 17323 % Penalty below numbered equations
\mathchardef\@vwid@toppen 17324 % Penalty marking top of vertical list
\mathchardef\@vwid@offsets 17325 % Penalty below special h-offsets box
\mathchardef\@vwid@postw 17326 % Penalty below a \vbox-wrapped object
\newcount\sift@deathcycles
\def\@vwid@sift{%
\skip@\lastskip\unskip
\dimen@\lastkern\unkern
\count@\lastpenalty\unpenalty
\setbox\z@\lastbox
%{\showoutput\showbox\z@}%
\ifvoid\z@ \advance\sift@deathcycles\@ne \else \sift@deathcycles\z@ \fi
\ifnum\sift@deathcycles>33
\let\@vwid@sift\relax
\PackageWarning{varwidth}{Failed to reprocess entire contents}%
\fi
%\message{\the\sift@deathcycles: skip \the\skip@; kern \the\dimen@; penalty \the\count@. }%
%\ifhbox\z@\setbox99\hbox to0pt{\unhcopy\z@}\fi % = message
\ifnum\count@=\@vwid@preeqp \@vwid@eqmodefalse\fi
%\ifnum\count@=\@vwid@preeqp \message{End equation mode. }\fi
\ifnum\count@=\@vwid@posteqp \@vwid@eqmodetrue\fi
%\ifnum\count@=\@vwid@posteqp\message{Begin equation mode. }\fi
%\if@vwid@eqmode {\showoutput\showbox\z@}\fi
\ifnum\count@=\@vwid@toppen % finished
\let\@vwid@sift\relax
\else\ifnum\count@=\@vwid@offsets
\@vwid@setoffsets
\else
\ifnum\count@=\@vwid@postw
\else
\@vwid@resetb % reset box \z@ or measure it
\fi
\@vwid@append
\fi\fi
\@vwid@sift}
\def\@vwid@setoffsets{%
\setbox\z@=\hbox{\unhbox\z@
\global\@vwid@roff\lastkern\unkern
\global\@vwid@loff\lastkern\unkern}%
%\message{Set offsets to \the\@vwid@loff, \the\@vwid@roff. }%
}
\def\@vwid@append{% Append contents of box \z@ and glue to \@vwid@box
\setbox\@vwid@box\vbox{%
\unvbox\z@
\ifdim\dimen@=\z@\else \kern\dimen@ \fi
\vskip\skip@
\unvbox\@vwid@box
}%{\tracingall\showbox\@vwid@box}%
}
% reset box \z@ to \hsize, applying shifts, and wrap in vbox
% Don't worry about numbered equations because we won't get
% here if there are any.
\def\@vwid@resetb{%
\setbox\z@\vbox\bgroup
\ifvoid\z@
\else
\ifvbox\z@
\box\z@
\else % \hbox
\@tempdima\hsize
\advance\@tempdima-\@vwid@roff
\advance\@tempdima-\@vwid@loff
\advance\@tempdima-\p@
\ifdim\wd\z@>\@tempdima % full-width line; rebox it
%\message{An ordinary line or alignment. }%
\hbox to\hsize
{\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}%
\else % an equation or direct \hbox
\if@vwid@eqmode % re-center unnumbered equations
%\message{A centered equation hsize=\the\hsize. }%
\hbox to\hsize
{\hskip\@vwid@loff\@plus1fil
\unhbox\z@ \hskip\@vwid@roff\@plus1fil}%
\else % plain narrow \hbox; leave it as-is
\box\z@
\fi\fi\fi\fi
\egroup}
\def\@vwid@measure{%
\ifvoid\z@
\else
% numbered equations not part of alignments can't be reset,
% so force retention of full width.
\ifnum\count@=\@vwid@postnump \ifdim\wd\z@<\linewidth
\ifdim\@tempdima<\linewidth \@tempdima\linewidth \fi
\fi\fi
\ifhbox\z@
\setbox\z@=\hbox
{\kern\@vwid@loff \unhbox\z@ \kern\@vwid@roff}%
\fi
\ifdim\wd\z@>\@tempdima \@tempdima\wd\z@ \fi
\fi}
\newdimen\@vwid@loff
\newdimen\@vwid@roff
\let\@@bsphack\@bsphack
\let\@@esphack\@esphack
\let\@@esphack\@Esphack
\def\@vwid@bsphack{\@@bsphack
\ifx\@vwid@wrap\@firstofone
\bgroup
\else
\ifvmode
\setbox\@vwid@box \vbox\bgroup \vbox\bgroup
\let\@vwid@wrap\@firstofone
\def\@esphack{\@vwid@esphack\@@esphack}%
\def\@Esphack{\@vwid@esphack\@@Esphack}%
\fi
\fi}
\def\@vwid@esphack{\egroup
\ifx\@vwid@wrap\@firstofone\else
\egroup % end outer box
\unvbox\@vwid@box % put inner box on list without lineskip
\penalty\@vwid@postw
\fi}
% \vbox Wrapper for misc vlist items
\long\def\@vwid@wrap{\relax
\ifvmode\expandafter\@vwid@dowrap \else \expandafter\@firstofone \fi}
\long\def\@vwid@dowrap#1{%
\setbox\@vwid@box \vbox{\vbox{\let\@vwid@wrap\@firstofone
#1}\penalty\@vwid@postw
}\unvbox\@vwid@box }
\let\@@vwid@special\special
\let\@@vwid@addtocontents\addtocontents
\let\@@vwid@list\list
\let\@@vwid@endtrivlist\endtrivlist
\let\@@vwid@eqnnum\@eqnnum
\long\def\@vwid@special#1{\@vwid@wrap{\@@vwid@special{#1}}}
\long\def\@vwid@addtocontents#1#2{\@vwid@wrap{\@@vwid@addtocontents{#1}{#2}}}
\long\def\@vwid@hangfrom#1{\par
\setbox\@tempboxa\hbox{{#1}}%
\setbox\@vwid@box \vbox{\hbox{\kern\z@ \kern\z@
}\penalty\@vwid@offsets}\unvbox\@vwid@box
\def\par{\relax\ifhmode\unskip\fi
\vadjust{\hbox{\kern\hangindent\kern\z@}\penalty\@vwid@offsets}%
\@restorepar\par}%
\hangindent \wd\@tempboxa\noindent\box\@tempboxa}
\def\@vwid@list{\@vwid@setlist\@@vwid@list}
\def\@vwid@endtrivlist{\@vwid@setlist\@@vwid@endtrivlist}
\def\@vwid@setlist{\relax\ifhmode \unskip\expandafter\vadjust\fi
{\setbox\@vwid@box \vbox{\hbox{%
\advance\hsize-\linewidth \advance\hsize-\@totalleftmargin
\kern\@totalleftmargin \kern\hsize}%
\penalty\@vwid@offsets}%
\unvbox\@vwid@box}}
\newif\if@vwid@eqmode
\def\@vwid@afterva{\vadjust{\penalty\@vwid@postnump}}
% Should I do this? ...
\@ifundefined{newcolumntype}{}{%
\@ifundefined{NC@rewrite@V}{
\newcolumntype{V}[1]{%
>{\begin{varwidth}[t]{#1}\narrowragged\let\\\tabularnewline}%
l%
<{\@finalstrut\@arstrutbox\end{varwidth}}}
}{}
}