From 506ea25b10a3da546c757fbb48571f6e283b43cf Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Sat, 16 May 2026 12:28:25 +0000 Subject: [PATCH 1/3] struct: lambda tags check fix in model --- model_with_structures/model.typ | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model_with_structures/model.typ b/model_with_structures/model.typ index 42d7b14..ba72acc 100644 --- a/model_with_structures/model.typ +++ b/model_with_structures/model.typ @@ -1385,7 +1385,7 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ rule( name: [ lambda check], - $mu ttags lambda space overline(s) :$, + $mu ttags lambda space overline(s) : lambda overline(t)$, ) )) #align(center, prooftree( From d684b8eeb9fbe28733acf5326ebfb6ef129f5335 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Sat, 16 May 2026 12:49:05 +0000 Subject: [PATCH 2/3] struct: progam eval rule in modal, fix func eval rule --- model_with_structures/model.typ | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/model_with_structures/model.typ b/model_with_structures/model.typ index ba72acc..e04cb98 100644 --- a/model_with_structures/model.typ +++ b/model_with_structures/model.typ @@ -1418,6 +1418,7 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ // TODO: FIXME: introduce global types and vals $types_0 = types_#[glob]$, $vals_0 = vals_#[glob]$, + $mu_0 = mu$, // NOTE: dashed arrow to fill context $cl types_0, vals_0, mu_0 cr @@ -1572,4 +1573,31 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ ) )) +=== Program Evaluation + +#let progeval = `prog eval` + +#align(center, prooftree( + vertical-spacing: 4pt, + rule( + name: [ program evaluation], + + // NOTE: expr type expected to ~ match t (maybe except some automaticc modifiers) + // expect well typed program + + $cl types_0, vals_0, mu_0 cr xarrowSquiggly(d_1)_init cl types_1, vals_1, mu_1 cr$, + $...$, + $cl types_(n - 1), vals_(n - 1), mu_(n - 1) cr xarrowSquiggly(d_n)_init cl types_n, vals_n, mu_n cr$, + + // TODO: FIXME: some easy way to pass to eval ?? + $types_#[glob] = types_n$, + $vals_#[glob] = vals_n$, + $mu_#[glob] = mu_n$, + + $cl types_n, vals_n, mu_n cr xarrow(s) cl types', vals', mu' cr$, + + $cl types_0, vals_0, mu_0 cr xarrowSquiggly(d_1 ... d_n s)_prog_eval cl types', vals', mu' cr$ + ) +)) + ] From 0c83218109f52de3fbcdd9ef6790b0b2a358f626 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Sat, 16 May 2026 16:20:46 +0000 Subject: [PATCH 3/3] struct: model: add substructure read / write --- model_with_structures/model.typ | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/model_with_structures/model.typ b/model_with_structures/model.typ index e04cb98..8d61739 100644 --- a/model_with_structures/model.typ +++ b/model_with_structures/model.typ @@ -758,7 +758,7 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ #align(center, prooftree( vertical-spacing: 4pt, rule( - name: [ modify final value], + name: [ modify final value: unit], $cl cdl v_m, v_r, v_w cdr, mu cr xarrowSquiggly(cl \# . \, a cr)_modify @@ -768,6 +768,32 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ #h(10pt) +#align(center, prooftree( + vertical-spacing: 4pt, + rule( + name: [ modify final value: ref], + + $cl mu[l], mu cr xarrowSquiggly(cl \# . \, a cr)_modify cl v', mu' cr$, + $cl rf l, mu cr xarrowSquiggly(cl \# . \, a cr)_modify cl rf l, mu'[l <- v'] cr$, + ) +)) + +#h(10pt) + +#align(center, prooftree( + vertical-spacing: 4pt, + rule( + name: [ modify final value: tuple], + + $cl v_1, mu_0 cr xarrowSquiggly(cl \# . \, a cr)_modify cl v'_1, mu_1, cr$, + $...$, + $cl v_n, mu_(n - 1) cr xarrowSquiggly(cl \# . \, a cr)_modify cl v'_n, mu_n, cr$, + $cl [v_1, ... v_n], mu cr xarrowSquiggly(cl \# . \, a cr)_modify cl [v'_1, ... v'_n], mu_n cr$, + ) +)) + +#h(10pt) + #align(center, prooftree( vertical-spacing: 4pt, rule( @@ -785,7 +811,7 @@ $s in stmt, f in X, x in X, a in X, p in path, pi in revpath$ rule( name: [ modify tuple value], - $cl v_i, mu cr xarrowSquiggly(cl p \, a cr)_modify cl v'_i, mu', cr$, + $cl v_i, mu cr xarrowSquiggly(cl pi \, a cr)_modify cl v'_i, mu', cr$, $cl [v_1, ... v_i, ... v_n], mu cr xarrowSquiggly(cl i.pi \, a cr)_modify cl [v_1, ... v'_i, ... v_n], mu' cr$, ) ))