aboutsummaryrefslogtreecommitdiffstats
path: root/lib/world.mli
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-07-11 23:39:40 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-07-11 23:39:40 -0300
commit726f3dfb116ec9265041e642000612831633fe3c (patch)
treecac0e9e4e967e2f78163d1429213b69ff959e60b /lib/world.mli
parent5d967951eb0b08c36ee59f70d7f4cca37b0ca72b (diff)
downloadSOL-726f3dfb116ec9265041e642000612831633fe3c.tar.gz
SOL-726f3dfb116ec9265041e642000612831633fe3c.zip
mutual recursion admitted under lexicographic measures
Diffstat (limited to '')
-rw-r--r--lib/world.mli12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/world.mli b/lib/world.mli
index 51ee078..14f82d3 100644
--- a/lib/world.mli
+++ b/lib/world.mli
@@ -29,11 +29,13 @@ type rule = {
rule_name : string;
head : Pattern.t Label.Map.t;
body : expr;
- witness : Label.t option;
- (** For a recursive rule, the label whose argument strictly
- decreases. The VM requires it ground before unfolding,
- which is what turns the admission proof into runtime
- termination. [None] on non-recursive rules. *)
+ witness : Label.t list;
+ (** For a recursive rule, the lexicographic measure of its
+ call-graph component: at some position the recursive
+ argument strictly decreases, all earlier positions staying
+ equal. The VM requires every position ground before
+ unfolding, which is what turns the admission proof into
+ runtime termination. Empty on non-recursive rules. *)
}
(** The primitive host-checked domains. *)