[spectec] IL semantics: be sufficiently eager to not drop failures (#2169)
diff --git a/spectec/doc/semantics/il/5-reduction.spectec b/spectec/doc/semantics/il/5-reduction.spectec
index 6f4c87e..41707f7 100644
--- a/spectec/doc/semantics/il/5-reduction.spectec
+++ b/spectec/doc/semantics/il/5-reduction.spectec
@@ -288,11 +288,11 @@
S |- LIFT (OPT (e)) ~> LIST e
rule Step_exp/SEL-tup:
- S |- SEL (TUP e*) n ~> e_n
- -- if e_n = e*[n]
+ S |- SEL (TUP val*) n ~> val_n
+ -- if val_n = val*[n]
rule Step_exp/LEN-list:
- S |- LEN (LIST e^n) ~> NAT n
+ S |- LEN (LIST val^n) ~> NAT n
rule Step_exp/MEM-true:
S |- MEM val_1 (LIST val_2*) ~> BOOL true
@@ -341,10 +341,10 @@
-- Step_exp: S |- ACC e p ~> OPT eps
rule Step_exp/ACC-IDX-inb:
- S |- ACC e (IDX p (NAT n)) ~> e'_n
- -- Step_exp: S |- ACC e p ~> LIST e'*
- -- if n < |e'*|
- -- if e'_n = e'*[n]
+ S |- ACC e (IDX p (NAT n)) ~> val'_n
+ -- Step_exp: S |- ACC e p ~> LIST val'*
+ -- if n < |val'*|
+ -- if val'_n = val'*[n]
rule Step_exp/ACC-IDX-oob:
S |- ACC e (IDX p (NAT n)) ~> eps
@@ -352,10 +352,10 @@
-- if n >= |e'*|
rule Step_exp/ACC-SLICE-inb:
- S |- ACC e (SLICE p (NAT n) (NAT m)) ~> LIST e''*
- -- Step_exp: S |- ACC e p ~> LIST e'*
- -- if $(n + m) <= |e'*|
- -- if e''* = e'*[n : m]
+ S |- ACC e (SLICE p (NAT n) (NAT m)) ~> LIST val''*
+ -- Step_exp: S |- ACC e p ~> LIST val'*
+ -- if $(n + m) <= |val'*|
+ -- if val''* = val'*[n : m]
rule Step_exp/ACC-SLICE-oob:
S |- ACC e (SLICE p (NAT n) (NAT m)) ~> eps
@@ -363,10 +363,10 @@
-- if $(n + m) > |e'*|
rule Step_exp/ACC-DOT:
- S |- ACC e (DOT p a) ~> e'_n
- -- Step_exp: S |- ACC e p ~> STR t (a' `= e' `- $trueqpr)*
+ S |- ACC e (DOT p a) ~> val'_n
+ -- Step_exp: S |- ACC e p ~> STR t (a' `= val' `- $trueqpr)*
-- if a'*[n] = a
- -- if e'*[n] = e'_n
+ -- if val'*[n] = val'_n
rule Step_exp/ACC-PROJ-good:
S |- ACC e (PROJ p mixop) ~> e'
@@ -379,20 +379,20 @@
rule Step_exp/UPD-ROOT:
- S |- UPD e_1 ROOT e_2 ~> e_2
+ S |- UPD val_1 ROOT e_2 ~> e_2
rule Step_exp/UPD-THE-some:
S |- UPD e_1 (THE p) e_2 ~> UPD e_1 p (OPT e_2)
- -- Step_exp: S |- ACC e_1 p ~> OPT e'
+ -- Step_exp: S |- ACC e_1 p ~> OPT val'
rule Step_exp/UPD-THE-none:
S |- UPD e_1 (THE p) e_2 ~> eps
-- Step_exp: S |- ACC e_1 p ~> eps
rule Step_exp/UPD-IDX-inb:
- S |- UPD e_1 (IDX p (NAT n)) e_2 ~> UPD e_1 p (LIST e'*[[n] = e_2])
- -- Step_exp: S |- ACC e_1 p ~> LIST e'*
- -- if n < |e'*|
+ S |- UPD e_1 (IDX p (NAT n)) e_2 ~> UPD e_1 p (LIST val'*[[n] = e_2])
+ -- Step_exp: S |- ACC e_1 p ~> LIST val'*
+ -- if n < |val'*|
rule Step_exp/UPD-IDX-outb:
S |- UPD e_1 (IDX p (NAT n)) e_2 ~> eps
@@ -400,9 +400,9 @@
-- if n >= |e'*|
rule Step_exp/UPD-SLICE-inb:
- S |- UPD e_1 (SLICE p (NAT n) (NAT m)) (LIST e_2*) ~> UPD e_1 p (LIST e'*[[n : m] = e_2*])
- -- Step_exp: S |- ACC e_1 p ~> LIST e'*
- -- if $(n + m) <= |e'*|
+ S |- UPD e_1 (SLICE p (NAT n) (NAT m)) (LIST e_2*) ~> UPD e_1 p (LIST val'*[[n : m] = e_2*])
+ -- Step_exp: S |- ACC e_1 p ~> LIST val'*
+ -- if $(n + m) <= |val'*|
rule Step_exp/UPD-SLICE-oob:
S |- UPD e_1 (SLICE p (NAT n) (NAT m)) (LIST e_2*) ~> eps
@@ -410,14 +410,14 @@
-- if $(n + m) > |e'*|
rule Step_exp/UPD-DOT:
- S |- UPD e_1 (DOT p a) e_2 ~> UPD e_1 p (STR t (a' `= e' `- $trueqpr)*[[n] = (a `= e_2 `- eps)])
- -- Step_exp: S |- ACC e_1 p ~> STR t (a' `= e' `- $trueqpr)*
+ S |- UPD e_1 (DOT p a) e_2 ~> UPD e_1 p (STR t (a' `= val' `- $trueqpr)*[[n] = (a `= e_2 `- eps)])
+ -- Step_exp: S |- ACC e_1 p ~> STR t (a' `= val' `- $trueqpr)*
-- if a'*[n] = a
;; Note: premises reset on result for recheck
rule Step_exp/UPD-PROJ-good:
S |- UPD e_1 (PROJ p mixop) e_2 ~> UPD e_1 p (INJ t mixop e_2 `- eps)
- -- Step_exp: S |- ACC e_1 p ~> INJ t mixop e' `- $trueqpr
+ -- Step_exp: S |- ACC e_1 p ~> INJ t mixop val' `- $trueqpr
;; Note: premises reset on result to trigger recheck
rule Step_exp/UPD-PROJ-bad: