summaryrefslogtreecommitdiff
path: root/cleansmurf-proofs.tex
diff options
context:
space:
mode:
Diffstat (limited to 'cleansmurf-proofs.tex')
-rw-r--r--cleansmurf-proofs.tex43
1 files changed, 35 insertions, 8 deletions
diff --git a/cleansmurf-proofs.tex b/cleansmurf-proofs.tex
index 47e5945..c7b073c 100644
--- a/cleansmurf-proofs.tex
+++ b/cleansmurf-proofs.tex
@@ -14,7 +14,8 @@ Een uitbreiding op \emph{CleanSmurf} implementeert een simplistische bewijshulp
die in sommige gevallen met variabelen overweg kan. Op dit moment is het een
\emph{proof of concept}. Sommige delen zijn nog niet geïmplementeerd. Wel is
het al bruikbaar in bepaalde gevallen, zoals we in \autoref{sec:analyse} zullen
-zien.
+zien. De bewijshulp is te vinden in de \texttt{prover} branch van
+\emph{CleanSmurf}~\cite{cleansmurf}.
De oplossing hiervoor is complex. Waar hierboven de stack werd gemodelleerd met
een lijst van Strings, zal dit nu niet meer voldoende zijn: we moeten
@@ -40,15 +41,21 @@ Vervolgens vervangen we \CI{String} door \CI{Expr} in de definities van
Dit heeft gevolgen voor de \CI{step}-functie en zijn hulpfuncties. Waar we
eerst \CI{head} op een \CI{String} toepasten, doen we dat nu op een \CI{Expr}.
-Deze functie moeten we dus herschrijven naar:
+Deze functie moeten we dus herschrijven naar de onderstaande code. Soortgelijke
+aanpassingen moeten we maken voor andere functies.
-\lstinputlisting[firstline=272,lastline=275]{CleanSmurfProver/Smurf.icl}
+\lstinputlisting[firstline=272,lastline=277]{CleanSmurfProver/Smurf.icl}
-Op deze manier kunnen we de head van een variabele nemen. Er wordt in dit geval
-niet gecontroleerd of die variabele niet leeg is. Het is aan de gebruiker van
-de bewijshulp dit na te gaan. Soortgelijke aanpassingen moeten we maken voor
-andere functies.
+Op deze manier kunnen we de head van een variabele nemen. Dit wordt, volgens
+het laatste alternatief, opgeslagen als \CI{EHead (Var ..)}. Er wordt in dit
+geval niet gecontroleerd of die variabele niet leeg is. Het is aan de gebruiker
+van de bewijshulp dit na te gaan. In het bijzonder kunnen er dingen fout gaan
+voor expressies als \CI{ECat (Var "s") (Lit "xyz")}: nemen we hier de head van,
+dan zal dit worden opgeslagen als \CI{EHead (Var "s")}, terwijl dit \CI{Lit
+"x"} zou moeten zijn als \CI{s} leeg is. Dit zijn dingen waar uiteindelijk wel
+op te controleren valt, maar nog niet volledig geïmplementeerd zijn.
+\medskip
Helaas werkt de oude functie om een boom te maken, \CI{tree}, niet meer na deze
veranderingen: op een gegeven moment zal \CI{step} moeten weten wat de inhoud
van een bewijsvariabele is.
@@ -56,4 +63,24 @@ van een bewijsvariabele is.
Om dit op te lossen introduceren we \emph{bewijshints}. Dit zijn transities
waarvan we de bewijshulp vertellen dat hij mag aannemen dat die bestaan. De
\CI{prover}, de bewijshulp-variant van \CI{tree}, zal bomen slechts maken tot
-het punt dat zo'n bewijshint gevonden wordt.
+het punt dat zo'n bewijshint gevonden wordt. Het type van \CI{prover} is
+hetzelfde als dat van \CI{tree}, behalve dat een extra argument is toegevoegd
+voor de bewijshints:
+
+\lstinputlisting[firstline=72,lastline=73]{CleanSmurfProver/Smurf.dcl}
+
+Het eerste argument is een functie die voor een argument \CI{(pgm,i,st)} een
+\CI{Just (i',o,st')} oplevert dan en slechts dan als de bewijshulp mag aannemen
+dat er een afleidingsboom bestaat voor de transitie
+$\trans\pgm\ip\st{\ip'}\op{\st'}$. Willen we geen bewijshints meegeven, dan
+kunnen we hier simpelweg \CI{(\\_ -> Nothing)} voor invullen. De oude \CI{tree}
+is dus te herdefiniëren als:
+
+\lstinputlisting[firstline=74,lastline=74]{CleanSmurfProver/Smurf.dcl}
+
+De bewijshulp kan afleidingsbomen in \TeX{} genereren. Hiervoor wordt
+\texttt{prooftree.sty}~\cite{prooftree} gebruikt. Door een probleem in dit
+package, dat niet herzien is sinds 1996, kan bij grote bomen \TeX{}'s
+\emph{grouping limit} worden overschreven. Dit kan verholpen worden door
+LuaLaTeX te gebruiken. Alle bomen in \autoref{sec:app:trees} zijn op deze
+manier gegenereerd.