semantics-1: typst pt. 2

This commit is contained in:
2026-02-12 14:56:17 -08:00
parent 79b1f9a381
commit 18e2d0d0c6
2 changed files with 895 additions and 901 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -12,8 +12,8 @@
// Language keywords rendered in monospace // Language keywords rendered in monospace
#let kw(body) = text(font: "DejaVu Sans Mono", size: 0.85em, body) #let kw(body) = text(font: "DejaVu Sans Mono", size: 0.85em, body)
#let tr = kw[true] #let tr = kw[true]
#let fl = kw[false] #let fl = kw[false]
#let ife(e1, e2, e3) = [#kw[if] #e1 #kw[then] #e2 #kw[else] #e3] #let ife(e1, e2, e3) = [#kw[if] #e1 #kw[then] #e2 #kw[else] #e3]
#let suc(e) = [#kw[succ] #e] #let suc(e) = [#kw[succ] #e]
#let prd(e) = [#kw[pred] #e] #let prd(e) = [#kw[pred] #e]
@@ -28,13 +28,10 @@
// premises (content), conclusion (content) // premises (content), conclusion (content)
#let bsrule(name, premises, conclusion) = { #let bsrule(name, premises, conclusion) = {
grid( grid(
columns: (auto, 1fr), columns: (auto, auto),
column-gutter: 1em, column-gutter: 1em,
align: (right + horizon, left + horizon), align: (right + horizon, left + horizon),
rel(name), rel(name), math.equation(block: true, numbering: none, math.frac(premises, conclusion)),
math.equation(block: true, numbering: none,
math.frac(premises, conclusion)
),
) )
v(0.4em) v(0.4em)
} }
@@ -42,16 +39,17 @@
// Definition head: "e ::= ..." with label // Definition head: "e ::= ..." with label
#let mydefhead(lhs, label) = { #let mydefhead(lhs, label) = {
grid( grid(
columns: (1fr, auto), columns: (auto, auto),
[#lhs], column-gutter: 1fr,
emph(label), [#lhs], emph(label),
) )
} }
// Definition case: indented alternative with description // Definition case: indented alternative with description
#let mydefcase(alt, desc) = { #let mydefcase(alt, desc) = {
grid( grid(
columns: (2em, 1fr, auto), columns: (2em, auto, auto),
column-gutter: 1fr,
[], [#alt], [#desc], [], [#alt], [#desc],
) )
} }
@@ -96,7 +94,7 @@ expressions always will.)
// ----- Figure 1: language definition ------------------------ // ----- Figure 1: language definition ------------------------
#figure( #figure(
block(inset: (left: 2em))[ box(width: 80%, inset: (left: 2em))[
#set align(left) #set align(left)
#mydefhead[$e ::=$ #h(6em)][Expressions] #mydefhead[$e ::=$ #h(6em)][Expressions]
#mydefcase(tr, [true value]) #mydefcase(tr, [true value])
@@ -138,36 +136,21 @@ The above line should be read as "the expression $e$ evaluates to the value $v$"
// ----- Figure 2: big-step semantics ------------------------- // ----- Figure 2: big-step semantics -------------------------
#figure( #figure(
block(inset: (left: 1em))[ box(width: 80%, inset: (left: 1em))[
#set align(left) #set align(left)
#text(weight: "bold")[Evaluation Rules:#h(1em)]#box(stroke: 0.5pt, inset: 4pt, $#bstep[$e$][$v$]$) #text(weight: "bold")[Evaluation Rules:#h(1em)]#box(stroke: 0.5pt, inset: 4pt, $#bstep[$e$][$v$]$)
#v(0.6em) #v(0.6em)
#bsrule("B-Value", #bsrule("B-Value", $emptyset$, $#bstep[$v$][$v$]$)
$emptyset$,
$#bstep[$v$][$v$]$,
)
#bsrule("B-IfTrue", #bsrule("B-IfTrue", $#bstep[$e_1$][$#tr$] #h(2em) #bstep[$e_2$][$v$]$, $#bstep[#ife[$e_1$][$e_2$][$e_3$]][$v$]$)
$#bstep[$e_1$][$#tr$] #h(2em) #bstep[$e_2$][$v$]$,
$#bstep[#ife[$e_1$][$e_2$][$e_3$]][$v$]$,
)
#bsrule("B-IfFalse", #bsrule("B-IfFalse", $#bstep[$e_1$][$#fl$] #h(2em) #bstep[$e_3$][$v$]$, $#bstep[#ife[$e_1$][$e_2$][$e_3$]][$v$]$)
$#bstep[$e_1$][$#fl$] #h(2em) #bstep[$e_3$][$v$]$,
$#bstep[#ife[$e_1$][$e_2$][$e_3$]][$v$]$,
)
#bsrule("B-Succ", #bsrule("B-Succ", $#bstep[$e$][$i$]$, $#bstep[#suc[$e$]][$i + 1$]$)
$#bstep[$e$][$i$]$,
$#bstep[#suc[$e$]][$i + 1$]$,
)
#bsrule("B-Pred", #bsrule("B-Pred", $#bstep[$e$][$i$]$, $#bstep[#prd[$e$]][$i - 1$]$)
$#bstep[$e$][$i$]$,
$#bstep[#prd[$e$]][$i - 1$]$,
)
], ],
caption: [Big-step semantics for BoolInt\*], caption: [Big-step semantics for BoolInt\*],
) <fig:bigstep> ) <fig:bigstep>