From 4a784531c2aa6c0ff7e9639d9c13f49fea883301 Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Tue, 14 Apr 2026 14:30:38 -0700 Subject: [PATCH] lab14: impl small step semantics --- lab14/typed-semantics.pdf | Bin 34552 -> 48454 bytes lab14/typed-semantics.typ | 125 ++++++++++++++++++++------------------ 2 files changed, 66 insertions(+), 59 deletions(-) diff --git a/lab14/typed-semantics.pdf b/lab14/typed-semantics.pdf index 1a6206cf4029215d76c31baca1c0ebaf87fae995..0af14b415cef19a1f0f5c1adad965f556283cc15 100644 GIT binary patch literal 48454 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 e' +#let sstep(e, ee) = $#e -> #ee$ // Rule name label in small-caps #let rel(name) = text(size: 0.9em, smallcaps[\[#name\]]) -// Big-step rule: fraction with name on the left +// Small-step rule: fraction with name on the left // premises (content), conclusion (content) -#let bsrule(name, premises, conclusion) = { +#let ssrule(name, premises, conclusion) = { grid( columns: (auto, auto), column-gutter: 1em, align: (right + horizon, left + horizon), - rel(name), math.equation(block: true, numbering: none, math.frac(premises, conclusion)), + rel(name), + box(stroke: 0.5pt, inset: 4pt, math.equation( + block: true, + numbering: none, + // if premises != "" { + math.frac(premises, conclusion), + // } else { conclusion }, + )), ) v(0.4em) } -// Definition head: "e ::= ..." with label -#let mydefhead(lhs, label) = { - grid( - columns: (auto, auto), - column-gutter: 1fr, - [#lhs], emph(label), - ) -} +== Operational Semantics Rules -// Definition case: indented alternative with description -#let mydefcase(alt, desc) = { - grid( - columns: (2em, auto, auto), - column-gutter: 1fr, - [], [#alt], [#desc], - ) -} +#v(0.6em) +#ssrule("E-Succ-Ctx", $#sstep[$e$][$e'$]$, $#sstep[#suc[$e$]][#suc[$e'$]]$) +#ssrule("E-Succ", "", $#sstep[#suc[$i$]][$i + 1$]$) -// ----- Figure 2: big-step semantics ------------------------- +#ssrule("E-Pred-Ctx", $#sstep[$e$][$e'$]$, $#sstep[#prd[$e$]][#prd[$e'$]]$) +#ssrule("E-Pred", "", $#sstep[#prd[$i$]][$i - 1$]$) -#figure( - box(width: 85%, inset: (left: 1em))[ - #set align(left) - #text(weight: "bold")[Evaluation Rules:#h(1em)]#box(stroke: 0.5pt, inset: 4pt, $#bstep[$e$][$#lval[$v$][$ell$]$]$) +#ssrule("E-IsZero-Ctx", $#sstep[$e$][$e'$]$, $#sstep[#iszero[$e$]][#iszero[$e'$]]$) +#ssrule("E-IsZero-Zero", "", $#sstep[#iszero[0]][true]$) +#ssrule("E-IsZero-NonZero", $i != 0$, $#sstep[#iszero[#suc[$i$]]][false]$) - #v(0.6em) +#ssrule("E-If-Ctx", $#sstep[$e_1$][$e'_1$]$, $#sstep[#ife[$e_1$][$e_2$][$e_3$]][#ife[$e'_1$][$e_2$][$e_3$]]$) +#ssrule("E-If-True", "", $#sstep[#ife[true][$e_2$][$e_3$]][$e_2$]$) +#ssrule("E-If-False", "", $#sstep[#ife[false][$e_2$][$e_3$]][$e_3$]$) - #bsrule("B-Value", "", $#bstep[$v$][$#lval[$v$][$#lL$]$]$) +#ssrule("E-Concat-Ctx1", $#sstep[$e_1$][$e'_1$]$, $#sstep[#concat[$e_1$][$e_2$]][#concat[$e'_1$][$e_2$]]$) +#ssrule("E-Concat-Ctx2", $#sstep[$e_2$][$e'_2$]$, $#sstep[#concat[$s_1$][$e_2$]][#concat[$s_1$][$e'_2$]]$) +#ssrule("E-Concat", $s_3 = s_1 + s_2$, $#sstep[#concat[$s_1$][$s_2$]][$s_3$]$) - #bsrule("B-Secret", $#bstep[$e$][$#lval[$v$][$ell$]$]$, $#bstep[#sec[$e$]][$#lval[$v$][$#lH$]$]$) +#ssrule("E-IsEmptyStr-Ctx", $#sstep[$e$][$e'$]$, $#sstep[#isemptystr[$e$]][#isemptystr[$e'$]]$) +#ssrule("E-IsEmptyStr-Empty", "", $#sstep[#isemptystr[`""`]][true]$) +#ssrule("E-IsEmptyStr-NonEmpty", [$s !=$ `""`], $#sstep[#isemptystr[$s$]][false]$) - #bsrule( - "B-IfTrue", - $#bstep[$e_1$][$#lval[$#tr$][$ell_1$]$] #h(2em) #bstep[$e_2$][$#lval[$v$][$ell_2$]$]$, - $#bstep[#ife[$e_1$][$e_2$][$e_3$]][$#lval[$v$][$ell_1 #ljoin ell_2$]$]$, - ) +#ssrule("E-StrLen-Ctx", $#sstep[$e$][$e'$]$, $#sstep[#strlen[$e$]][#strlen[$e'$]]$) +#ssrule("E-StrLen-Zero", "", $#sstep[#strlen[`""`]][0]$) +#ssrule("E-StrLen-NonZero", [c is a single char, $s = c + s'$], $#sstep[#strlen[$s$]][#suc[#strlen[$s'$]]]$) - #bsrule( - "B-IfFalse", - $#bstep[$e_1$][$#lval[$#fl$][$ell_1$]$] #h(2em) #bstep[$e_3$][$#lval[$v$][$ell_3$]$]$, - $#bstep[#ife[$e_1$][$e_2$][$e_3$]][$#lval[$v$][$ell_1 #ljoin ell_3$]$]$, - ) +== Typing Rules - #bsrule("B-Succ", $#bstep[$e$][$#lval[$i$][$ell$]$]$, $#bstep[#suc[$e$]][$#lval[$i + 1$][$ell$]$]$) - - #bsrule("B-Pred", $#bstep[$e$][$#lval[$i$][$ell$]$]$, $#bstep[#prd[$e$]][$#lval[$i - 1$][$ell$]$]$) - ], - caption: [Big-step semantics for BoolInt\* with information flow], -) +#v(0.6em)