tla-ts 0.0.3-dev.3cf2ad0 → 0.0.3-dev.4c8c06c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/transfer.cjs CHANGED
@@ -6,13 +6,13 @@
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
- const e={success:0,assumptionViolation:10,deadlock:11,safetyViolation:12,livenessViolation:13,assertViolation:14,specEvaluationFailure:75,safetyEvaluationFailure:76,livenessEvaluationFailure:77,specParseError:150,configParseError:151,error:255},t=/* @__PURE__ */ new WeakMap,n=/* @__PURE__ */ new WeakMap,r={isNextState:!1},i=e=>{r.isNextState=e},a=(e,n)=>(e instanceof Error&&!t.has(e)&&t.set(e,n),e),o=(e,t)=>{r.isNextState&&n.set(e,t)},s=e=>t.get(e)??n.get(e),c=t=>{try{let n=t();return n&&{addInitialState:(t,r)=>{try{n.addInitialState(t,r)}catch(t){throw a(t,e.error)}},addState:(t,r,i)=>{try{return n.addState(t,r,i)}catch(t){throw a(t,e.error)}},findViolation:()=>{try{return n.findViolation()}catch(t){throw a(t,e.error)}}}}catch(t){throw a(t,e.error)}};var l=class extends Error{constructor(e,t){super(e,{cause:t}),this.name=`TlaError`}},u=class extends l{failure;constructor(e,t,n){super(e,t),this.name=`TlaSyntaxError`,this.failure=n}},d=class extends l{constructor(e,t){super(e,t),this.name=`TlaConfigError`}},f=class extends l{constructor(e,t){super(e,t),this.name=`TlaEvaluationError`}},p=class extends f{constructor(t,n=e.error){super(t),this.name=`TlaEvaluationError`,o(this,n)}},m=class extends l{failure;exception;constructor(e,t={}){super(e),this.name=`TlaProofError`,this.failure=t.exception===void 0?t.failure??e:void 0,this.exception=t.exception??`Failure(${JSON.stringify(this.failure)})`}},h=class extends m{constructor(e=`Assert_failure`){super(`Oops, this seems to be a bug in TLAPM.`,{exception:e}),this.name=`TlaProofError`}},g=class extends l{constructor(e,t){super(e,t),this.name=`TlaUnsupportedError`}};const _=t=>s(t)??(t instanceof u?e.specParseError:t instanceof d?e.configParseError:t instanceof f?e.specEvaluationFailure:e.error),v=/* @__PURE__ */ new Set(/* @__PURE__ */ `ACTION.ACTIONS.ASSUME.ASSUMPTION.AXIOM.BY.CASE.CHOOSE.CONSTANT.CONSTANTS.COROLLARY.DEF.DEFINE.DEFS.DOMAIN.ELSE.ENABLED.EXCEPT.EXTENDS.HAVE.HIDE.IF.IN.INSTANCE.LAMBDA.LEMMA.LET.LOCAL.MODULE.NEW.OBVIOUS.OMITTED.ONLY.OTHER.PICK.PROOF.PROPOSITION.PROVE.QED.RECURSIVE.STATE.SUBSET.SUFFICES.TAKE.TEMPORAL.TEMPORALS.THEN.THEOREM.UNCHANGED.UNION.USE.VARIABLE.VARIABLES.WITH.WITNESS`.split(`.`)),y=/* @__PURE__ */ new Map([[`in`,`\\in`],[`notin`,`\\notin`],[`subseteq`,`\\subseteq`],[`subset`,`\\subset`],[`supseteq`,`\\supseteq`],[`supset`,`\\supset`],[`cup`,`\\cup`],[`union`,`\\cup`],[`cap`,`\\cap`],[`intersect`,`\\cap`],[`X`,`\\X`],[`times`,`\\X`],[`o`,`\\o`],[`circ`,`\\o`],[`div`,`\\div`],[`land`,`/\\`],[`lor`,`\\/`],[`lnot`,`~`],[`neg`,`~`],[`equiv`,`<=>`],[`leq`,`<=`],[`geq`,`>=`],[`A`,`\\A`],[`forall`,`\\A`],[`E`,`\\E`],[`exists`,`\\E`],[`AA`,`\\AA`],[`EE`,`\\EE`],[`cdot`,`\\cdot`],[`sqsubseteq`,`\\sqsubseteq`],[`sqsupseteq`,`\\sqsupseteq`],[`sqsubset`,`\\sqsubset`],[`sqsupset`,`\\sqsupset`],[`sqcap`,`\\sqcap`],[`sqcup`,`\\sqcup`],[`oplus`,`\\oplus`],[`ominus`,`\\ominus`],[`otimes`,`\\otimes`],[`oslash`,`\\oslash`],[`odot`,`\\odot`],[`uplus`,`\\uplus`],[`prec`,`\\prec`],[`preceq`,`\\preceq`],[`succ`,`\\succ`],[`succeq`,`\\succeq`],[`sim`,`\\sim`],[`simeq`,`\\simeq`],[`approx`,`\\approx`],[`cong`,`\\cong`],[`asymp`,`\\asymp`],[`doteq`,`\\doteq`],[`propto`,`\\propto`],[`wr`,`\\wr`],[`star`,`\\star`],[`bullet`,`\\bullet`],[`bigcirc`,`\\bigcirc`],[`ll`,`\\ll`],[`gg`,`\\gg`]]),b=/* @__PURE__ */ new Map([[`/=`,`#`],[`=<`,`<=`],[`(+)`,`\\oplus`],[`(-)`,`\\ominus`],[`(.)`,`\\odot`],[`(/)`,`\\oslash`],[`(\\X)`,`\\otimes`]]),ee=/* @__PURE__ */ `-+-> (\\X) <=> |-> ... ::= >>_ (+) (-) (.) (/) == => =< =| << <= <> <- >> >= /\\ \\/ /= [] ]_ |- |= || -> -| ~> .. :: := :> <: @@ ++ -- -. ** // ^^ ^+ ^* ^# %% ## && $$ ?? !! = < > / [ ] ( ) { } | - ~ . : @ , ' ! # % + * ^ & $ ?`.split(` `),x=/* @__PURE__ */ new Map([[`∧`,`/\\`],[`∨`,`\\/`],[`¬`,`~`],[`⇒`,`=>`],[`⟹`,`=>`],[`≡`,`<=>`],[`⇔`,`<=>`],[`∈`,`\\in`],[`∉`,`\\notin`],[`⊆`,`\\subseteq`],[`⊂`,`\\subset`],[`⊇`,`\\supseteq`],[`⊃`,`\\supset`],[`∪`,`\\cup`],[`∩`,`\\cap`],[`×`,`\\X`],[`∀`,`\\A`],[`∃`,`\\E`],[`≠`,`#`],[`≤`,`<=`],[`≥`,`>=`],[`↦`,`|->`],[`→`,`->`],[`⟨`,`<<`],[`⟩`,`>>`],[`□`,`[]`],[`◇`,`<>`],[`≜`,`==`],[`′`,`'`],[`∘`,`\\o`],[`⋅`,`\\cdot`]]),te=/^\\([bB][01]+|[oO][0-7]+|[hH][0-9a-fA-F]+)/,ne=/* @__PURE__ */ new Map([[`b`,2],[`o`,8],[`h`,16]]),re=e=>e.startsWith(`\\`)?parseInt(e.slice(2),ne.get(e[1].toLowerCase())):Number(e),S=/-{4,}[ \t]*MODULE\b/,ie=e=>/[A-Za-z0-9_]/.test(e),ae=(e,t)=>{let n=e[t];if(n===`\\`&&/[A-Za-z]/.test(e[t+1]??``)){let n=/^[A-Za-z]+/.exec(e.slice(t+1))?.[0]??``,r={value:n.length};for(;r.value>0&&!y.has(n.slice(0,r.value));)r.value--;let i=y.get(n.slice(0,r.value));return{text:i??`\\`,length:i===void 0?1:r.value+1}}let r=x.get(n);if(r)return{text:r,length:n.length};let i=ee.find(n=>e.startsWith(n,t));return i?{text:b.get(i)??i,length:i.length}:n===`\\`?{text:`\\`,length:1}:void 0},oe=e=>e!==void 0&&e>=`0`&&e<=`9`,C=(e,t,n)=>{let r={value:t};for(;r.value<e.length&&n(e[r.value]);)r.value++;return r.value},w=(e,t)=>{if(e[t]!==`<`)return 0;let n=e[t+1]===`+`||e[t+1]===`*`?t+2:C(e,t+1,oe);if(n===t+1||e[n]!==`>`)return 0;let r=C(e,n+1,ie),i=r===n+1&&(e[r]===`*`||e[r]===`-`);return C(e,i?r+1:r,e=>e===`.`)-t},T=(e,t)=>t===` `?e+8-e%8:e+1,se=e=>{let t=S.exec(e);if(!t)throw new u(`Expected a module header such as ---- MODULE Name ----`);let n=[],r=e.slice(0,t.index).split(`
10
- `),i={index:t.index,line:r.length,lineStart:t.index-r[r.length-1].length,moduleDepth:0},a={lineStart:-1,position:0,width:0},o=()=>{for((a.lineStart!==i.lineStart||a.position>i.index)&&(a.lineStart=i.lineStart,a.position=i.lineStart,a.width=0);a.position<i.index;a.position++)a.width=T(a.width,e[a.position]);return T(a.width,e[i.index])},s=(e,t,r)=>{let a=o();n.push({kind:e,text:t,line:i.line,column:a,endColumn:a+r-1}),i.index+=r},c=t=>{for(let n=0;n<t;n++)e[i.index]===`
11
- `&&(i.line++,i.lineStart=i.index+1),i.index++},l=t=>new u(`${t} at line ${i.line}, column ${o()}`,void 0,{reason:t,line:i.line,column:o(),isEnd:i.index>=e.length});for(;i.index<e.length;){let t=e[i.index];if(t===`
12
- `||t===` `||t===` `||t===`\r`){c(1);continue}if(e.startsWith(`\\*`,i.index)){let t=e.indexOf(`
13
- `,i.index);c((t===-1?e.length:t)-i.index);continue}if(e.startsWith(`(*`,i.index)){let t={value:0};do{if(i.index>=e.length)throw l(`Unterminated comment`);e.startsWith(`(*`,i.index)?(t.value++,c(2)):e.startsWith(`*)`,i.index)?(t.value--,c(2)):c(1)}while(t.value>0);continue}if(e.startsWith(`----`,i.index)){let t=C(e,i.index,e=>e===`-`)-i.index;e.slice(i.index+t).trimStart().startsWith(`MODULE`)&&i.moduleDepth++,s(`Separator`,`----`,t);continue}if(e.startsWith(`====`,i.index)){if(s(`ModuleEnd`,`====`,C(e,i.index,e=>e===`=`)-i.index),i.moduleDepth--,i.moduleDepth<=0)break;continue}if(t===`"`){let t=i.line,r=o(),a=[];for(c(1);e[i.index]!==`"`;){if(i.index>=e.length||e[i.index]===`
14
- `)throw l(`Unterminated string`);if(e[i.index]===`\\`){let t=e[i.index+1];a.push({n:`
15
- `,t:` `,r:`\r`,f:`\f`}[t]??t),c(2)}else a.push(e[i.index]),c(1)}c(1),n.push({kind:`String`,text:a.join(``),line:t,column:r,endColumn:o()-1});continue}let r=te.exec(e.slice(i.index,i.index+64));if(r){s(`Number`,r[0],r[0].length);continue}if(ie(t)){let t=e.slice(i.index,C(e,i.index,ie));if(/^\d+$/.test(t)){let n=/^\d+(\.\d+)?/.exec(e.slice(i.index))?.[0]??t;s(n.includes(`.`)?`Decimal`:`Number`,n,n.length);continue}if(t.startsWith(`WF_`)||t.startsWith(`SF_`)){s(`Keyword`,t.slice(0,3),3);continue}s(v.has(t)?`Keyword`:`Identifier`,t,t.length);continue}let a=w(e,i.index);if(a>0){s(`Step`,e.slice(i.index,i.index+a),a);continue}let u=ae(e,i.index);if(u)s(`Operator`,u.text,u.length);else throw l(`Unexpected character ${JSON.stringify(t)}`)}let d=o();return n.push({kind:`End`,text:``,line:i.line,column:d,endColumn:d}),n},E=/* @__PURE__ */ new Set([`CONSTANT`,`CONSTANTS`,`INIT`,`NEXT`,`SPECIFICATION`,`INVARIANT`,`INVARIANTS`,`PROPERTY`,`PROPERTIES`,`CONSTRAINT`,`CONSTRAINTS`,`ACTION_CONSTRAINT`,`ACTION_CONSTRAINTS`,`SYMMETRY`,`VIEW`,`CHECK_DEADLOCK`,`ALIAS`,`POSTCONDITION`,`POSTCONDITIONS`,`_POSSIBLE`,`_PERIODIC`,`_RL_REWARD`]),D=[`<-`,`<<`,`>>`,`=`,`{`,`}`,`,`,`[`,`]`,`(`,`)`],ce=e=>{let t=[],n={index:0,line:1};for(;n.index<e.length;){let r=e.slice(n.index),i=/^\s+/.exec(r)?.[0];if(i){n.line+=i.split(`
9
+ const e={success:0,assumptionViolation:10,deadlock:11,safetyViolation:12,livenessViolation:13,assertViolation:14,specEvaluationFailure:75,safetyEvaluationFailure:76,livenessEvaluationFailure:77,specParseError:150,configParseError:151,error:255},t=/* @__PURE__ */ new WeakMap,n=/* @__PURE__ */ new WeakMap,r={isNextState:!1},i=e=>{r.isNextState=e},a=(e,n)=>(e instanceof Error&&!t.has(e)&&t.set(e,n),e),o=(e,t)=>{r.isNextState&&n.set(e,t)},s=e=>t.get(e)??n.get(e),c=t=>{try{let n=t();return n&&{addInitialState:(t,r)=>{try{n.addInitialState(t,r)}catch(t){throw a(t,e.error)}},addState:(t,r,i)=>{try{return n.addState(t,r,i)}catch(t){throw a(t,e.error)}},findViolation:()=>{try{return n.findViolation()}catch(t){throw a(t,e.error)}}}}catch(t){throw a(t,e.error)}};var l=class extends Error{constructor(e,t){super(e,{cause:t}),this.name=`TlaError`}},u=class extends l{failure;constructor(e,t,n){super(e,t),this.name=`TlaSyntaxError`,this.failure=n}},d=class extends l{constructor(e,t){super(e,t),this.name=`TlaConfigError`}},f=class extends l{constructor(e,t){super(e,t),this.name=`TlaEvaluationError`}},p=class extends f{constructor(t,n=e.error){super(t),this.name=`TlaEvaluationError`,o(this,n)}},m=class extends l{failure;exception;constructor(e,t={}){super(e),this.name=`TlaProofError`,this.failure=t.exception===void 0?t.failure??e:void 0,this.exception=t.exception??`Failure(${JSON.stringify(this.failure)})`}},h=class extends m{constructor(e=`Assert_failure`){super(`Oops, this seems to be a bug in TLAPM.`,{exception:e}),this.name=`TlaProofError`}},g=class extends l{constructor(e,t){super(e,t),this.name=`TlaUnsupportedError`}};const _=t=>s(t)??(t instanceof u?e.specParseError:t instanceof d?e.configParseError:t instanceof f?e.specEvaluationFailure:e.error),v=/* @__PURE__ */ new Set(/* @__PURE__ */ `ACTION.ACTIONS.ASSUME.ASSUMPTION.AXIOM.BY.CASE.CHOOSE.CONSTANT.CONSTANTS.COROLLARY.DEF.DEFINE.DEFS.DOMAIN.ELSE.ENABLED.EXCEPT.EXTENDS.HAVE.HIDE.IF.IN.INSTANCE.LAMBDA.LEMMA.LET.LOCAL.MODULE.NEW.OBVIOUS.OMITTED.ONLY.OTHER.PICK.PROOF.PROPOSITION.PROVE.QED.RECURSIVE.STATE.SUBSET.SUFFICES.TAKE.TEMPORAL.TEMPORALS.THEN.THEOREM.UNCHANGED.UNION.USE.VARIABLE.VARIABLES.WITH.WITNESS`.split(`.`)),y=/* @__PURE__ */ new Map([[`in`,`\\in`],[`notin`,`\\notin`],[`subseteq`,`\\subseteq`],[`subset`,`\\subset`],[`supseteq`,`\\supseteq`],[`supset`,`\\supset`],[`cup`,`\\cup`],[`union`,`\\cup`],[`cap`,`\\cap`],[`intersect`,`\\cap`],[`X`,`\\X`],[`times`,`\\X`],[`o`,`\\o`],[`circ`,`\\o`],[`div`,`\\div`],[`land`,`/\\`],[`lor`,`\\/`],[`lnot`,`~`],[`neg`,`~`],[`equiv`,`<=>`],[`leq`,`<=`],[`geq`,`>=`],[`A`,`\\A`],[`forall`,`\\A`],[`E`,`\\E`],[`exists`,`\\E`],[`AA`,`\\AA`],[`EE`,`\\EE`],[`cdot`,`\\cdot`],[`sqsubseteq`,`\\sqsubseteq`],[`sqsupseteq`,`\\sqsupseteq`],[`sqsubset`,`\\sqsubset`],[`sqsupset`,`\\sqsupset`],[`sqcap`,`\\sqcap`],[`sqcup`,`\\sqcup`],[`oplus`,`\\oplus`],[`ominus`,`\\ominus`],[`otimes`,`\\otimes`],[`oslash`,`\\oslash`],[`odot`,`\\odot`],[`uplus`,`\\uplus`],[`prec`,`\\prec`],[`preceq`,`\\preceq`],[`succ`,`\\succ`],[`succeq`,`\\succeq`],[`sim`,`\\sim`],[`simeq`,`\\simeq`],[`approx`,`\\approx`],[`cong`,`\\cong`],[`asymp`,`\\asymp`],[`doteq`,`\\doteq`],[`propto`,`\\propto`],[`wr`,`\\wr`],[`star`,`\\star`],[`bullet`,`\\bullet`],[`bigcirc`,`\\bigcirc`],[`ll`,`\\ll`],[`gg`,`\\gg`]]),b=/* @__PURE__ */ new Map([[`/=`,`#`],[`=<`,`<=`],[`(+)`,`\\oplus`],[`(-)`,`\\ominus`],[`(.)`,`\\odot`],[`(/)`,`\\oslash`],[`(\\X)`,`\\otimes`]]),ee=/* @__PURE__ */ `-+-> (\\X) <=> |-> ... ::= >>_ (+) (-) (.) (/) == => =< =| << <= <> <- >> >= /\\ \\/ /= [] ]_ |- |= || -> -| ~> .. :: := :> <: @@ ++ -- -. ** // ^^ ^+ ^* ^# %% ## && $$ ?? !! = < > / [ ] ( ) { } | - ~ . : @ , ' ! # % + * ^ & $ ?`.split(` `),x=/* @__PURE__ */ new Map([[`∧`,`/\\`],[`∨`,`\\/`],[`¬`,`~`],[`⇒`,`=>`],[`⟹`,`=>`],[`≡`,`<=>`],[`⇔`,`<=>`],[`∈`,`\\in`],[`∉`,`\\notin`],[`⊆`,`\\subseteq`],[`⊂`,`\\subset`],[`⊇`,`\\supseteq`],[`⊃`,`\\supset`],[`∪`,`\\cup`],[`∩`,`\\cap`],[`×`,`\\X`],[`∀`,`\\A`],[`∃`,`\\E`],[`≠`,`#`],[`≤`,`<=`],[`≥`,`>=`],[`↦`,`|->`],[`→`,`->`],[`⟨`,`<<`],[`⟩`,`>>`],[`□`,`[]`],[`◇`,`<>`],[`≜`,`==`],[`′`,`'`],[`∘`,`\\o`],[`⋅`,`\\cdot`]]),te=/^\\([bB][01]+|[oO][0-7]+|[hH][0-9a-fA-F]+)/,ne=/* @__PURE__ */ new Map([[`b`,2],[`o`,8],[`h`,16]]),re=e=>e.startsWith(`\\`)?parseInt(e.slice(2),ne.get(e[1].toLowerCase())):Number(e),S=/-{4,}[ \t]*MODULE\b/,ie=e=>/[A-Za-z0-9_]/.test(e),ae=(e,t)=>{let n=e[t];if(n===`\\`&&/[A-Za-z]/.test(e[t+1]??``)){let n=/^[A-Za-z]+/.exec(e.slice(t+1))?.[0]??``,r={value:n.length};for(;r.value>0&&!y.has(n.slice(0,r.value));)r.value--;let i=y.get(n.slice(0,r.value));return{text:i??`\\`,length:i===void 0?1:r.value+1}}let r=x.get(n);if(r)return{text:r,length:n.length};let i=ee.find(n=>e.startsWith(n,t));return i?{text:b.get(i)??i,length:i.length}:n===`\\`?{text:`\\`,length:1}:void 0},oe=e=>e!==void 0&&e>=`0`&&e<=`9`,C=(e,t,n)=>{let r={value:t};for(;r.value<e.length&&n(e[r.value]);)r.value++;return r.value},w=(e,t)=>{if(e[t]!==`<`)return 0;let n=e[t+1]===`+`||e[t+1]===`*`?t+2:C(e,t+1,oe);if(n===t+1||e[n]!==`>`)return 0;let r=C(e,n+1,ie),i=r===n+1&&(e[r]===`*`||e[r]===`-`);return C(e,i?r+1:r,e=>e===`.`)-t},T=(e,t)=>t===` `?e+8-e%8:e+1,se=e=>{let t=S.exec(e);if(!t)throw new u(`Expected a module header such as ---- MODULE Name ----`);let n=[],r=/* @__PURE__ */ new Map,i=e.slice(0,t.index).split(`
10
+ `),a={index:t.index,line:i.length,lineStart:t.index-i[i.length-1].length,moduleDepth:0},o={lineStart:-1,position:0,width:0},s=()=>{for((o.lineStart!==a.lineStart||o.position>a.index)&&(o.lineStart=a.lineStart,o.position=a.lineStart,o.width=0);o.position<a.index;o.position++)o.width=T(o.width,e[o.position]);return T(o.width,e[a.index])},c=(e,t,r)=>{let i=s();n.push({kind:e,text:t,line:a.line,column:i,endColumn:i+r-1}),a.index+=r},l=t=>{for(let n=0;n<t;n++)e[a.index]===`
11
+ `&&(a.line++,a.lineStart=a.index+1),a.index++},d=t=>new u(`${t} at line ${a.line}, column ${s()}`,void 0,{reason:t,line:a.line,column:s(),isEnd:a.index>=e.length});for(;a.index<e.length;){let t=e[a.index];if(t===`
12
+ `||t===` `||t===` `||t===`\r`){l(1);continue}if(e.startsWith(`\\*`,a.index)){let t=e.indexOf(`
13
+ `,a.index);l((t===-1?e.length:t)-a.index);continue}if(e.startsWith(`(*`,a.index)){let t={value:0};do{if(a.index>=e.length)throw d(`Unterminated comment`);e.startsWith(`(*`,a.index)?(t.value++,l(2)):e.startsWith(`*)`,a.index)?(t.value--,l(2)):l(1)}while(t.value>0);continue}if(e.startsWith(`----`,a.index)){let t=C(e,a.index,e=>e===`-`)-a.index;e.slice(a.index+t).trimStart().startsWith(`MODULE`)&&a.moduleDepth++,c(`Separator`,`----`,t);continue}if(e.startsWith(`====`,a.index)){if(c(`ModuleEnd`,`====`,C(e,a.index,e=>e===`=`)-a.index),a.moduleDepth--,a.moduleDepth<=0)break;continue}if(t===`"`){let t=a.line,r=s(),i=[];for(l(1);e[a.index]!==`"`;){if(a.index>=e.length||e[a.index]===`
14
+ `)throw d(`Unterminated string`);if(e[a.index]===`\\`){let t=e[a.index+1];i.push({n:`
15
+ `,t:` `,r:`\r`,f:`\f`}[t]??t),l(2)}else i.push(e[a.index]),l(1)}l(1),n.push({kind:`String`,text:i.join(``),line:t,column:r,endColumn:s()-1});continue}let i=te.exec(e.slice(a.index,a.index+64));if(i){c(`Number`,i[0],i[0].length);continue}if(ie(t)){let t=e.slice(a.index,C(e,a.index,ie));if(/^\d+$/.test(t)){let n=/^\d+(\.\d+)?/.exec(e.slice(a.index))?.[0]??t;c(n.includes(`.`)?`Decimal`:`Number`,n,n.length);continue}if(t.startsWith(`WF_`)||t.startsWith(`SF_`)){c(`Keyword`,t.slice(0,3),3);continue}let n=r.get(t)??t;r.set(n,n),c(v.has(t)?`Keyword`:`Identifier`,n,t.length);continue}let o=w(e,a.index);if(o>0){c(`Step`,e.slice(a.index,a.index+o),o);continue}let u=ae(e,a.index);if(u)c(`Operator`,u.text,u.length);else throw d(`Unexpected character ${JSON.stringify(t)}`)}let f=s();return n.push({kind:`End`,text:``,line:a.line,column:f,endColumn:f}),n},E=/* @__PURE__ */ new Set([`CONSTANT`,`CONSTANTS`,`INIT`,`NEXT`,`SPECIFICATION`,`INVARIANT`,`INVARIANTS`,`PROPERTY`,`PROPERTIES`,`CONSTRAINT`,`CONSTRAINTS`,`ACTION_CONSTRAINT`,`ACTION_CONSTRAINTS`,`SYMMETRY`,`VIEW`,`CHECK_DEADLOCK`,`ALIAS`,`POSTCONDITION`,`POSTCONDITIONS`,`_POSSIBLE`,`_PERIODIC`,`_RL_REWARD`]),D=[`<-`,`<<`,`>>`,`=`,`{`,`}`,`,`,`[`,`]`,`(`,`)`],ce=e=>{let t=[],n={index:0,line:1};for(;n.index<e.length;){let r=e.slice(n.index),i=/^\s+/.exec(r)?.[0];if(i){n.line+=i.split(`
16
16
  `).length-1,n.index+=i.length;continue}if(r.startsWith(`\\*`)){let e=r.indexOf(`
17
17
  `);n.index+=e===-1?r.length:e;continue}if(r.startsWith(`(*`)){let e=r.indexOf(`*)`);if(e===-1)throw new d(`Unterminated comment at line ${n.line}`);n.line+=r.slice(0,e).split(`
18
18
  `).length-1,n.index+=e+2;continue}let a=/^\d+(?![A-Za-z_])/.exec(r)?.[0];if(a){t.push({kind:`Number`,text:a,line:n.line}),n.index+=a.length;continue}let o=/^[A-Za-z0-9_!]+/.exec(r)?.[0];if(o){t.push({kind:`Word`,text:o,line:n.line}),n.index+=o.length;continue}let s=/^"((?:[^"\\]|\\.)*)"/.exec(r);if(s){t.push({kind:`String`,text:s[1],line:n.line}),n.index+=s[0].length;continue}let c=D.find(e=>r.startsWith(e));if(c){t.push({kind:`Symbol`,text:c,line:n.line}),n.index+=c.length;continue}let l=ae(e,n.index);if(!l)throw new d(`Unexpected character ${JSON.stringify(r[0])} at line ${n.line}`);t.push({kind:`Word`,text:l.text,line:n.line}),n.index+=l.length}return t.push({kind:`End`,text:``,line:n.line}),t},O=e=>{let t=ce(e),n={index:0},r={init:void 0,next:void 0,specification:void 0,invariants:[],properties:[],constraints:[],actionConstraints:[],constants:[],substitutions:[],checkDeadlock:!0,symmetry:void 0,view:void 0,alias:void 0,postconditions:[],possible:[],periodic:void 0,rlReward:void 0},i={isSet:!1},a=()=>t[n.index],o=()=>t[n.index++],s=e=>e.kind===`Word`&&E.has(e.text),c=e=>{let t=o();if(t.text!==e)throw new d(`Expected ${JSON.stringify(e)} but found ${JSON.stringify(t.text)} at line ${t.line}`)},l=()=>{let e=o();if(e.kind!==`Word`||s(e))throw new d(`Expected a name but found ${JSON.stringify(e.text)} at line ${e.line}`);return e.text},u=()=>a().kind===`Word`&&!s(a()),f=()=>{let e=[];for(;u();)e.push(o().text);return e},p=(e,t)=>{if(r[e]!==void 0)throw new d(`The keyword ${t} appears twice`);r[e]=l()},m=()=>{let e=o();if(e.kind===`Number`)return{kind:`Number`,value:Number(e.text)};if(e.kind===`String`)return{kind:`String`,value:e.text};if(e.text===`TRUE`||e.text===`FALSE`)return{kind:`Boolean`,value:e.text===`TRUE`};if(e.text===`{`){let e=[];for(a().text!==`}`&&e.push(m());a().text===`,`;)o(),e.push(m());return c(`}`),{kind:`Set`,elements:e}}if(e.kind===`Word`&&!s(e))return{kind:`ModelValue`,name:e.text};throw new d(`Expected a value but found ${JSON.stringify(e.text)} at line ${e.line}`)},h=()=>{if(a().text!==`[`)return;o();let e=l();return c(`]`),e},g=()=>{for(;u();){let e=o().text;if(a().text===`(`){o();let t=[];for(;a().text!==`)`;)t.push(m()),a().text!==`)`&&c(`,`);o(),c(`=`);let n=h();r.constants.push({name:e,value:m(),args:t,...n&&{module:n}});continue}if(a().text===`<-`){o();let t=h();r.substitutions.push({name:e,target:l(),...t&&{module:t}});continue}c(`=`);let t=h();r.constants.push({name:e,value:m(),...t&&{module:t}})}};for(;a().kind!==`End`;){let e=o();switch(e.text){case`CONSTANT`:case`CONSTANTS`:g();break;case`INIT`:p(`init`,e.text);break;case`NEXT`:p(`next`,e.text);break;case`SPECIFICATION`:p(`specification`,e.text);break;case`SYMMETRY`:p(`symmetry`,e.text);break;case`VIEW`:p(`view`,e.text);break;case`INVARIANT`:case`INVARIANTS`:r.invariants.push(...f());break;case`PROPERTY`:case`PROPERTIES`:r.properties.push(...f());break;case`CONSTRAINT`:case`CONSTRAINTS`:r.constraints.push(...f());break;case`ACTION_CONSTRAINT`:case`ACTION_CONSTRAINTS`:r.actionConstraints.push(...f());break;case`ALIAS`:p(`alias`,e.text);break;case`POSTCONDITION`:case`POSTCONDITIONS`:r.postconditions.push(...f());break;case`_POSSIBLE`:r.possible.push(...f());break;case`_PERIODIC`:p(`periodic`,e.text);break;case`_RL_REWARD`:p(`rlReward`,e.text);break;case`CHECK_DEADLOCK`:{if(i.isSet)throw new d(`The keyword CHECK_DEADLOCK appears twice`);i.isSet=!0;let e=o().text;if(e!==`TRUE`&&e!==`FALSE`)throw new d(`CHECK_DEADLOCK expects TRUE or FALSE but found ${JSON.stringify(e)}`);r.checkDeadlock=e===`TRUE`;break}default:throw new d(`Unexpected ${JSON.stringify(e.text)} at line ${e.line}`)}}if(r.specification!==void 0&&(r.init!==void 0||r.next!==void 0))throw new d(`SPECIFICATION cannot be combined with INIT or NEXT`);return r},le={Set:{open:`{ `,close:` }`,pad:` `,separator:`,`,divider:``,dividerPad:``},Sequence:{open:`<< `,close:` >>`,pad:` `,separator:`,`,divider:``,dividerPad:``},Subset:{open:`SUBSET `,close:` `,pad:` `,separator:`,`,divider:``,dividerPad:``},Function:{open:`( `,close:` )`,pad:` `,separator:` @@`,divider:` :>`,dividerPad:` `},Record:{open:`[ `,close:` ]`,pad:` `,separator:`,`,divider:` |->`,dividerPad:` `}},ue=e=>{if(e===void 0)return!1;let t=e.charCodeAt(0);return t>=9&&t<=13||t>=28&&t<=32||t===5760||t>=8192&&t<=8202&&t!==8199||t===8232||t===8233||t===8287||t===12288},de=e=>e!==void 0&&/^\p{Nd}$/u.test(e),fe=e=>e!==void 0&&/^[\p{L}\p{Nd}]$/u.test(e),pe=e=>{let t=t=>{let n=C(e,t,ue);return e[n]===void 0?void 0:n},n=(n,r,i,a,o,s)=>{let c={kind:n,first:r,last:r,children:[]},l={index:t(i)};for(;l.index!==void 0&&e[l.index]!==a;){let n=o(l.index);if(!n)return;c.children.push(n);let r=t(n.last+1);if(r===void 0)return;let i=e.startsWith(s,r)?r+s.length:r;l.index=t(i)}if(l.index!==void 0)return c.last=l.index,c},r=(n,r)=>{let i=o(n);if(!i)return;let a=t(i.last+1);if(a===void 0||!e.startsWith(r,a))return;let s=t(a+r.length),c=s===void 0?void 0:o(s);if(c)return{kind:`Pair`,first:n,last:c.last,children:[i,c]}},i=t=>{let n=C(e,t,de);if(e.startsWith(`..`,n)&&de(e[n+2]))return{kind:`Constant`,first:t,last:C(e,n+2,de)-1,children:[]}},a=t=>{let n=e[t];if(n===`"`){let n=e.indexOf(`"`,t+1);return n===-1?void 0:{kind:`Constant`,first:t,last:n,children:[]}}let r=de(n)?i(t):void 0;if(r)return r;if(n===`-`)return t+1>=e.length?void 0:{kind:`Constant`,first:t,last:C(e,t+1,de)-1,children:[]};if(fe(n))return{kind:`Constant`,first:t,last:C(e,t,fe)-1,children:[]}},o=i=>{let s=t(i);if(s!==void 0)switch(e[s]){case`{`:return n(`Set`,s,s+1,`}`,o,`,`);case`<`:{let t=n(`Sequence`,s,s+2,`>`,o,`,`);return!t||t.last+1>=e.length?void 0:{...t,last:t.last+1}}case`[`:return n(`Record`,s,s+1,`]`,e=>r(e,`|->`),`,`);case`(`:return n(`Function`,s,s+1,`)`,e=>r(e,`:>`),`@@`);default:{if(!e.startsWith(`SUBSET`,s))return a(s);let n=t(s+6),r=n===void 0?void 0:o(n);return r?{kind:`Subset`,first:s,last:r.last,children:[r]}:void 0}}};return o(0)},me=e=>{let t=e.length===0?void 0:pe(e);if(!t||t.last<e.length-1)return e;let n=t=>e.slice(t.first,t.last+1),r=e=>e.last-e.first+1,i=(e,t,i,s)=>{if(r(e)<=t-i||e.kind===`Constant`)return n(e);if(e.kind===`Pair`)return;let c=le[e.kind],l=t-Math.max(c.open.length,c.pad.length),u=i+c.close.length,d=s+c.pad,f=e.kind===`Function`||e.kind===`Record`?o(e.children,l,u,d,c):a(e.children,l,u,d,c.separator);return f===void 0?void 0:c.open+f+c.close},a=(e,t,n,r,a)=>{let o=e.map((o,s)=>{let c=s===e.length-1,l=i(o,t,c?n:a.length,r);return l===void 0||c?l:`${l}${a}\n${r}`});return o.includes(void 0)?void 0:o.join(``)},o=(e,t,a,o,s)=>{let c=e.map((c,l)=>{let u=l===e.length-1,d=c.children[0],f=c.children[1],p=u?``:`${s.separator}\n${o}`,m=r(d)+s.divider.length+1+r(f);if(u?m<=t-a:m+s.separator.length<=t)return`${n(d)}${s.divider} ${n(f)}${p}`;let h=r(d)+s.divider.length<=t?n(d):i(d,t,a+s.divider.length,o),g=i(f,t-s.dividerPad.length,u?a:s.separator.length,o+s.dividerPad);return h===void 0||g===void 0?void 0:`${h}${s.divider}\n${o}${s.dividerPad}${g}${p}`});return c.includes(void 0)?void 0:c.join(``)};return i(t,80,0,``)??e},k=e=>typeof e==`object`&&e.kind!==`ModelValue`&&e.kind!==`Function`&&e.kind!==`LazyFunction`,A=e=>typeof e==`object`&&(e.kind===`Function`||e.kind===`LazyFunction`),j=e=>typeof e==`object`&&e.kind===`ModelValue`,he=e=>typeof e==`boolean`?`boolean`:typeof e==`number`?`integer`:typeof e==`string`?`string`:e.kind===`ModelValue`?`model value`:k(e)?`set`:`function`,ge=e=>{if(!Number.isInteger(e)||e>2147483647||e<-2147483648)throw new p(`Integer overflow: ${e} is outside TLC's 32-bit range`);return e},_e={isUsed:!1},ve=(e,t)=>(_e.isUsed=!0,e.writtenKeys=t,e),ye=e=>(e.writtenKeys??e.domain).map(t=>[t,e.range[Jt(e.domain,t)]]),be=(e,t,n)=>ve(ze(e,t),n),xe=e=>{if(!(typeof e!=`object`||e.kind!==`Function`&&e.kind!==`Set`)&&e.hash===0&&e.fingerprint===0){if(e.kind===`Set`)return e.elements.forEach(xe);e.writtenKeys=void 0,e.range.forEach(xe)}},Se=e=>e.every(e=>typeof e==`string`),Ce=(e,t)=>e.length>0&&t.length>0&&Se(e)!==Se(t),we=(e,t)=>{_e.isUsed&&(e.writtenKeys=void 0,t.writtenKeys=void 0);let n=e.domain,r=t.domain;if(n.length!==r.length)return Ce(n,r)?at(e,t):n.length-r.length;if(n!==r)for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}let i=e.range,a=t.range;if(i===a)return 0;for(let e=0;e<i.length;e++){let t=F(i[e],a[e]);if(t!==0)return t}return 0},M=(e,t)=>{let n=e.elements,r=t.elements;if(n.length!==r.length)return n.length-r.length;if(n===r)return 0;for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}return 0},Te=e=>j(e)?e.type:void 0,N=(e,t,n)=>{let r=Te(e),i=Te(t);if(r===void 0&&i===void 0)return;let a=n?`check equality of`:`compare`;if(j(e)&&j(t)){if(r===void 0||i===void 0||r===i)return;throw new f(`Attempted to ${a} the differently-typed model values ${H(e)} and ${H(t)}`)}throw r===void 0?new f(`Attempted to ${a} the typed model value ${H(t)} and the non-model value\n${H(e)}`):new f(`Attempted to ${a}${n?``:` the`} typed model value ${H(e)} and non-model value\n${H(t)}`)},Ee={ranks:Object.create(null),size:0},De=e=>{Ee.ranks=Object.create(null),Ee.size=0,Ie.clear();for(let t of e)Oe(t)},Oe=e=>(Ee.ranks[e]===void 0&&(Ee.ranks[e]=Ee.size++),e),ke=()=>Ee.size,Ae=e=>Ee.ranks[Oe(e)],je=(e,t)=>{if(e===t)return 0;let n=Ee.ranks,r=n[e],i=n[t];return r!==void 0&&i!==void 0?r-i:r===void 0?i===void 0&&e<t?-1:1:-1},P=e=>typeof e==`object`&&(e.kind===`InfiniteSet`||e.kind===`SequenceSet`),Me=(e,t)=>(P(e)||P(t))&&(typeof e!=`object`||e.kind!==`SequenceSet`||typeof t!=`object`||t.kind!==`SequenceSet`),Ne=(e,t,n)=>{if(!P(e))throw new f(`Attempted to ${n} the set ${H(L(e)?R(e):e,!0)} with the value:\n${H(t,!0)}`);if(!P(t))throw new f(`Attempted to compare overridden value ${H(e,!0)} with non-overridden value:\n${H(t,!0)}`);let r=e.kind===`InfiniteSet`?e.name:void 0,i=t.kind===`InfiniteSet`?t.name:void 0;if(r!==void 0&&r===i)return 0;if(r===`Nat`&&i===`Int`||r===`Int`&&i===`Nat`)return r===`Nat`?-1:1;throw new f(`Attempted to compare ${H(e,!0)} with the value\n${H(t,!0)}`)},Pe={kind:`InfiniteSet`,name:`Any`},Fe=e=>{throw new f(`Attempted to compare ANY with the value\n${H(e)}`)},F=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e===Pe?Fe(e):0;if(typeof e==`object`&&typeof t==`object`){let n=e.kind,r=t.kind;if(n===`Function`&&r===`Function`)return we(e,t);if(n===`Set`&&r===`Set`)return M(e,t);if(n===`Interval`&&r===`Interval`){let n=Math.max(0,e.high-e.low+1),r=Math.max(0,t.high-t.low+1);return n!==r||n===0?n-r:e.low-t.low}if(n===`ModelValue`&&r===`ModelValue`)return e.type!==void 0&&t.type!==void 0&&N(e,t,!1),e.rank-t.rank;if(n===`ModelValue`||r===`ModelValue`)return N(e,t,!1),n===`ModelValue`?-1:1;if(e===Pe||t===Pe)return Fe(e===Pe?t:e);if(k(e)&&k(t)&&Me(e,t))return Ne(e,t,`compare`);let i=k(e);if(i!==k(t))throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`);return i?M(R(e),R(t)):we(V(e),V(t))}if(typeof e==`number`&&typeof t==`number`)return e-t;if(typeof e==`string`&&typeof t==`string`)return je(e,t);if(typeof e==`boolean`&&typeof t==`boolean`)return e<t?-1:1;if(N(e,t,!1),j(e))return-1;if(j(t))return 1;throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`)},Ie=/* @__PURE__ */ new Map,Le=e=>{let t=Ie.get(e);if(t)return t;let n={kind:`ModelValue`,name:e,type:e.length>2&&e[1]===`_`?e[0]:void 0,rank:Ae(e)};return Ie.set(e,n),n},Re=e=>({kind:`Set`,elements:e,hash:0,fingerprint:0}),ze=(e,t)=>({kind:`Function`,domain:e,range:t,hash:0,fingerprint:0,writtenKeys:void 0}),Be=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e!==Pe||Fe(e);if(typeof e!=`object`||typeof t!=`object`)return typeof e!=typeof t&&((typeof e==`object`||typeof t==`object`)&&N(e,t,!0),F(e,t)===0);if((e.kind===`Set`||e.kind===`Function`)&&(t.kind===`Set`||t.kind===`Function`)&&e.hash!==0&&t.hash!==0&&e.hash!==t.hash)return!1;if(e.kind===`Function`&&t.kind===`Function`)return we(e,t)===0;if(e.kind===`Set`&&t.kind===`Set`)return M(e,t)===0;if(j(e)||j(t))return N(e,t,!0),j(e)&&j(t)&&e.name===t.name;if(e.kind===`Subset`&&t.kind===`Subset`)return Be(e.base,t.base);if(e.kind===`FunctionSet`&&t.kind===`FunctionSet`){let n=z(e.domain),r=z(t.domain);if(n||r)return n===r;let i=z(e.range),a=z(t.range);return i||a?i===a:Be(e.domain,t.domain)&&Be(e.range,t.range)}if(e.kind===`RecordSet`&&t.kind===`RecordSet`){if(z(e))return z(t);if(z(t))return!1;let n=e=>e.names.map((t,n)=>[t,e.sets[n]]).sort((e,t)=>e[0]<t[0]?-1:1),r=n(t);return e.names.length===t.names.length&&n(e).every((e,t)=>e[0]===r[t][0]&&Be(e[1],r[t][1]))}if(e.kind===`ProductSet`&&t.kind===`ProductSet`)return z(e)?z(t):!z(t)&&e.factors.length===t.factors.length&&e.factors.every((e,n)=>Be(e,t.factors[n]));let n=k(e)&&k(t)&&!(L(e)&&L(t));if(n&&Me(e,t))return Ne(e,t,`check equality of`)===0;if(n){if(!P(e)){let n=R(e);if(!P(t))return M(n,R(t))===0}return wn(e)===wn(t)}return F(e,t)===0},Ve=(e,t)=>e===t||e.length===t.length&&e.every((e,n)=>He(e,t[n])),He=(e,t)=>e===t?!0:typeof e!=`object`||typeof t!=`object`?!1:e.kind===`Set`&&t.kind===`Set`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.elements,t.elements):e.kind===`Function`&&t.kind===`Function`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.domain,t.domain)&&Ve(e.range,t.range):wn(e)===wn(t),Ue=e=>{let t=e.length===0?1:e[0];return typeof t==`number`&&e.every((e,n)=>e===t+n)?t:void 0},We=e=>{if(!A(e))return;let t=V(e);return{domain:t.domain,range:t.range,low:Ue(t.domain)}},Ge=e=>{if(!A(e))return;let t=V(e);return t.domain.every(e=>typeof e==`string`)?t:void 0},Ke=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to compare the typed model value ${H(e)} and the non-model value\n${H(t)}`);return 1},qe=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to check equality of the typed model value ${H(e)} and the non-model value\n${H(t)}`);return!1},Je=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)?e.rank-t.rank:-1;if(!j(t))throw new f(`Attempted to compare the typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to compare the differently-typed model values ${H(e)} and ${H(t)}`);return e.rank-t.rank},Ye=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)&&e.name===t.name;if(!j(t))throw new f(`Attempted to check equality of typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to check equality of the differently-typed model values ${H(e)} and ${H(t)}`);return e.name===t.name},Xe={number:{name:`integer`,other:`non-integer`,equality:`check equality of`},string:{name:`string`,other:`non-string`,equality:`check equality of`},boolean:{name:`boolean`,other:`non-boolean`,equality:`compare equality of`}},Ze=(e,t,n)=>{let r=Xe[typeof e==`number`?`number`:typeof e==`string`?`string`:`boolean`];return`Attempted to ${n?r.equality:`compare`} ${r.name} ${H(e)} with ${r.other}:\n${H(t)}`},Qe=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return Ke(n,t);throw new f(`Attempted to compare the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return e.range.length-r.range.length;let i=()=>$e(e.range,r.range);if(e.low!==void 0&&e.range.length===0)return 0;if(e.low!==void 0&&r.low!==void 0)return e.low===r.low?i():e.low-r.low;let a=e.low??r.low;if(a===void 0)return $e(e.domain,r.domain)||i();let o=e.low===void 0?e.domain:r.domain;for(let t=0;t<o.length;t++){let n=o[t];if(typeof n!=`number`)throw new f(`Attempted to compare integer with non-integer${e.low===void 0?``:`:`}\n${H(n)}.`);let r=e.low===void 0?n-(a+t):a+t-n;if(r!==0)return r}return i()},$e=(e,t)=>{for(let n=0;n<e.length;n++){let r=at(e[n],t[n]);if(r!==0)return r}return 0},et=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length-r.length||$e(n.range,r):Qe({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return Ke(t,e);throw new f(`Attempted to compare record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length-r.domain.length||$e(n.domain,r.domain)||$e(n.range,r.range)}return Qe({...n,low:Ue(n.domain)},e,t)},tt=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`),nt=(e,t)=>P(e)||P(t)||typeof t==`object`&&e.kind===t.kind&&(e.kind===`Interval`||e.kind===`Subset`||e.kind===`FunctionSet`||e.kind===`RecordSet`||e.kind===`ProductSet`),rt=(e,t)=>{let n=tt(t)?t:R(t);return{elements:R(e).elements,otherElements:R(n).elements}},it=(e,t)=>{if(nt(e,t))return F(e,t);if(!tt(e))return it(R(e),t);if(!k(t)){if(j(t))return Ke(t,e);throw new f(`Attempted to compare the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length-n.otherElements.length||$e(n.elements,n.otherElements)},at=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return F(e,t);if(j(t))return Ke(t,e);throw new f(Ze(e,t,!1))}return e.kind===`ModelValue`?Je(e,t):A(e)?et(e,t):it(e,t)},ot=(e,t)=>e.every((e,n)=>ut(e,t[n])),st=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return qe(n,t);throw new f(`Attempted to check equality of the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return!1;if(e.low!==void 0&&r.low!==void 0)return(e.range.length===0||e.low===r.low)&&ot(e.range,r.range);let i=e.low??r.low;return i===void 0?ot(e.domain,r.domain)&&ot(e.range,r.range):(e.low===void 0?e.domain:r.domain).every((e,t)=>{if(typeof e!=`number`)throw new f(`Attempted to compare an integer with non-integer:\n${H(e)}.`);return e===i+t})&&ot(e.range,r.range)},ct=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length===r.length&&ot(n.range,r):st({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length===r.domain.length&&ot(n.domain,r.domain)&&ot(n.range,r.range)}return st({...n,low:Ue(n.domain)},e,t)},lt=(e,t)=>{if(nt(e,t))return Be(e,t);if(!tt(e))return lt(R(e),t);if(!k(t)){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length===n.otherElements.length&&ot(n.elements,n.otherElements)},ut=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return e===t;if(j(t))return qe(t,e);throw new f(Ze(e,t,!0))}return e.kind===`ModelValue`?Ye(e,t):A(e)?ct(e,t):lt(e,t)},dt=e=>{let t=[];for(let n of e){let e={low:0,high:t.length,comparison:1};for(;e.low<e.high;){let r=e.low+(e.high-e.low>>1);if(e.comparison=at(n,t[r]),e.comparison===0)break;e.comparison<0?e.high=r:e.low=r+1}e.comparison!==0&&t.splice(e.low,0,n)}return t},ft=(e,t)=>t.some(t=>ut(t,e)),pt=(e,t)=>{try{return Be(e,t)}catch(n){if(!(n instanceof f))throw n;return ut(e,t)}},mt=e=>{for(let t=1;t<e.length;t++)if(F(e[t-1],e[t])>=0)return!1;return!0},ht=e=>{if(e.length<2||mt(e))return Re(e);let t=[...e].sort(F),n=[t[0]];for(let e=1;e<t.length;e++)F(n[n.length-1],t[e])!==0&&n.push(t[e]);return Re(n)},gt=e=>{try{return ht(e)}catch(t){if(!(t instanceof f))throw t;return{kind:`MixedSet`,elements:e}}},_t=Re([]),vt=(e,t)=>{if(e.elements.length===0||t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0||i.push(t)}return i.length===n.length?e:Re(i)},yt=(e,t)=>{let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0&&i.push(t)}return i.length===n.length?e:Re(i)},bt=(e,t)=>{if(e.elements.length===0)return t;if(t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=[],o=0,s=0;for(;o<n.length&&s<r.length;){let e=F(n[o],r[s]);e<0?i.push(n[o++]):e>0?(a.push(r[s]),i.push(r[s++])):(i.push(n[o++]),s++)}for(;o<n.length;)i.push(n[o++]);for(;s<r.length;)a.push(r[s]),i.push(r[s++]);if(a.length===0)return e;let c=Re(i);if(e.hash!==0){let t=e.hash;for(let e=0;e<a.length;e++)t=t+fn(a[e])|0;c.hash=t}if(e.fingerprint!==0){let t=e.fingerprint;for(let e=0;e<a.length;e++)t=t+yn(a[e])|0;c.fingerprint=t}return c},xt=e=>{let t=e.length<2?e:[...e].sort((e,t)=>F(e[0],t[0])),n=[],r=[];for(let e of t)n.length>0&&F(n[n.length-1],e[0])===0||(n.push(e[0]),r.push(e[1]));return ze(n,r)},St=e=>{let t=xt(e);return t.domain.length!==e.length||e.some(e=>typeof e[0]!=`string`)||e.every((e,n)=>e[0]===t.domain[n])?t:ve(t,e.map(e=>e[0]))},Ct=[],wt=[],Tt=/* @__PURE__ */ new WeakMap,Et=e=>{let t=Ct[e];if(t)return t;let n=Array.from({length:e},(e,t)=>t+1);return Ct[e]=n,n},Dt=e=>{if(Gt(e),e.low===1&&e.high>=1)return Et(e.high);let t=[];for(let n=e.low;n<=e.high;n++)t.push(n);return t},Ot=e=>e.length>0&&(e===Ct[e.length]||Tt.has(e)),kt=e=>{let t=R(e).elements;return Ot(t)&&(typeof e!=`object`||e.kind!==`Interval`)?[...t]:t},At=e=>{let t=wt[e];if(t)return t;let n={kind:`Interval`,low:1,high:e};return wt[e]=n,n},I=e=>ze(Et(e.length),e),jt=e=>xt(e),Mt=e=>k(e)&&!P(e),Nt=(e,t=!1)=>`UNION(${H(e.base,t)})`,Pt=e=>{if(!Mt(e.base))throw new f(`Attempted to enumerate the nonenumerable set:\n${Nt(e)}`);return R(e.base).elements},Ft=(e,t,n)=>{if(Mt(e))return e;throw new f(t===0?`Attempted to enumerate UNION(s), but some element of s is nonenumerable.`:`Attempted to enumerate the nonenumerable set:\n${H(e)}\nwhen enumerating:\n${Nt(n)}`)},L=e=>{if(typeof e!=`object`)return!1;switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:return!0;case`InfiniteSet`:case`SequenceSet`:return!1;case`Subset`:case`FilteredSet`:return L(e.base);case`FunctionSet`:return L(e.domain)&&L(e.range)||It(e.domain)===!0||It(e)===!0;case`RecordSet`:return e.sets.every(L)||It(e)===!0;case`ProductSet`:return e.factors.every(L)||It(e)===!0;case`Union`:return L(e.base)&&R(e.base).elements.every(L);case`SetOperation`:return e.operator===`\\cup`?L(e.left)&&L(e.right):e.operator===`\\cap`?L(e.left)||L(e.right):L(e.left);default:return!1}},It=e=>{if(typeof e==`object`)switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:return e.name===`Any`&&void 0;case`Subset`:case`SequenceSet`:return!1;case`FunctionSet`:{let t=It(e.domain);return t===void 0?void 0:!t&&It(e.range)}case`RecordSet`:case`ProductSet`:for(let t of e.kind===`RecordSet`?e.sets:e.factors){let e=It(t);if(e!==!1)return e}return!1;case`SetOperation`:case`FilteredSet`:case`Union`:return L(e)?R(e).elements.length===0:void 0;default:return}},Lt=e=>{let t=e.reduce((e,t)=>e*t.length,1),n=[],r=e.map(()=>0);for(let i=0;i<t;i++){n.push(e.map((e,t)=>e[r[t]]));for(let t=e.length-1;t>=0&&(r[t]++,!(r[t]<e[t].length));t--)r[t]=0}return n},Rt=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(e[n]<t-e.length+n){e[n]++;for(let t=n+1;t<e.length;t++)e[t]=e[t-1]+1;return!0}return!1},zt=e=>{let t=[];for(let n=0;n<=e.length;n++){let r=Array.from({length:n},(e,t)=>t);do t.push(Re(r.map(t=>e[t])));while(Rt(r,e.length))}return t},Bt=e=>{if(typeof e!=`object`)throw new f(`Expected a set but found ${H(e)}`);switch(e.kind){case`Set`:return e.elements;case`MixedSet`:return dt(e.elements);case`Interval`:{let t=Dt(e);return t!==Ct[t.length]&&Tt.set(t,e),t}case`Subset`:{P(e.base)&&Gt(e.base);let t=R(e.base).elements;if(t.length>30)throw new f(`SUBSET of a set with ${t.length} elements is too large to enumerate`);return zt(t)}case`FunctionSet`:{if(z(e))return[];if(P(e.domain))throw new f(`Attempted to enumerate a set of the form [D -> R],but the domain D:\n${H(e.domain)}\ncannot be enumerated.`);let t=kt(e.domain);if(t.length>0&&P(e.range))throw new f(`Attempted to enumerate a set of the form [D -> R],but the range R:\n${H(e.range)}\ncannot be enumerated.`);let n=t.length===0?[]:R(e.range).elements;return Lt(t.map(()=>n)).map(e=>ze(t,e))}case`RecordSet`:{if(z(e))return[];let t=e.sets.map((t,n)=>{if(P(t))throw new f(`Attempted to enumerate a set of the form [l1 : v1, ..., ln : vn],\nbut can't enumerate the value of the \`${e.names[n]}' field:\n${H(t)}`);return R(t).elements});return Lt(t).map(t=>jt(e.names.map((e,n)=>[e,t[n]])))}case`ProductSet`:{if(z(e))return[];let t=e.factors.map((e,t)=>{if(P(e))throw new f(`Attempted to enumerate a set of the form s1 \\X s2 ... \\X sn,\nbut can't enumerate s${t}:\n${H(e)}`);return R(e).elements});return Lt(t).map(I)}case`FilteredSet`:if(P(e.base))throw new f(`Attempted to enumerate { x \\in S : p(x) } when S:\n${H(e.base)}\nis not enumerable`);return R(e.base).elements.filter(e.test);case`Union`:{let t=Pt(e).flatMap((t,n)=>R(Ft(t,n,e)).elements);return R(gt(t)).elements}case`SetOperation`:{if(e.operator===`\\cup`&&(P(e.left)||P(e.right)))throw new f(`Attempted to enumerate S \\cup T when S:\n${H(e.left)}\nand T:\n${H(e.right)}\nare not both enumerable`);if(e.operator===`\\cap`&&P(e.left)&&P(e.right))throw new f(`Attempted to enumerate S \\cap T when neither S:\n${H(e.left)}\nnor T:\n${H(e.right)}\nis enumerable`);if(e.operator===`\\`&&P(e.left))throw new f(`Attempted to enumerate S \\ T when S:\n${H(e.left)}\nis not enumerable.`);if(e.operator===`\\cup`)return bt(R(e.left),R(e.right)).elements;let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return R(n).elements.filter(t=>B(t,r)===(e.operator===`\\cap`))}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to enumerate the non-enumerable set ${H(e)}`);default:throw new f(`Expected a set but found ${H(e)}`)}},Vt=/* @__PURE__ */ new WeakMap,R=e=>{if(typeof e==`object`&&e.kind===`Set`)return e;if(typeof e==`object`&&e.kind===`Interval`)return Re(Bt(e));let t=typeof e==`object`?Vt.get(e):void 0;if(t)return t;let n=Bt(e),r=typeof e==`object`&&(e.kind===`MixedSet`||e.kind===`Union`||e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`ProductSet`||e.kind===`FunctionSet`||e.kind===`Subset`)?Re(n):ht(n);return typeof e==`object`&&Vt.set(e,r),r},Ht=e=>{if(typeof e!=`object`||Vt.has(e))return R(e).elements;if(e.kind===`Union`)return Pt(e).flatMap((t,n)=>Ht(Ft(t,n,e)));if(e.kind===`FilteredSet`&&!P(e.base))return Ht(e.base).filter(e.test);if(e.kind!==`SetOperation`)return R(e).elements;if(e.operator===`\\cup`)return P(e.left)||P(e.right)?R(e).elements:[...Ht(e.left),...Ht(e.right)];let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return P(n)?R(e).elements:Ht(n).filter(t=>B(t,r)===(e.operator===`\\cap`))},z=e=>{if(typeof e!=`object`||!k(e))throw new f(`Shouldn't call isEmpty() on value ${H(e)}`);switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:if(e.name===`Any`)throw new f(`Shouldn't call isEmpty() on value ANY`);return!1;case`Subset`:case`SequenceSet`:return!1;case`ProductSet`:return e.factors.some(z);case`RecordSet`:return e.sets.some(z);case`FunctionSet`:return!z(e.domain)&&z(e.range);case`Union`:return Pt(e).every((t,n)=>z(Ft(t,n,e)));default:return R(e).elements.length===0}},Ut=(e,t)=>e.reduce((e,n)=>{let r=e*Gt(n);if(r>2147483647)throw new f(t());return r},1),Wt=e=>`Overflow when computing the number of elements in:\n${H(e)}`,Gt=e=>{if(typeof e!=`object`)return R(e).elements.length;switch(e.kind){case`Interval`:{let t=Math.max(0,e.high-e.low+1);if(t>2147483647)throw new f(`Size of interval value exceeds the maximum representable size (32bits): ${e.low}..${e.high}.`);return t}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to compute the number of elements in the overridden value ${H(e)}.`);case`Subset`:{let t=Gt(e.base);if(t>=31)throw new f(Wt(e));return 2**t}case`FunctionSet`:{if(z(e.domain))return 1;if(z(e.range))return 0;let t=Gt(e.range);if(t===1)return 1;let n=Gt(e.domain),r={value:1};for(let i=0;i<n;i++)if(r.value*=t,r.value>2147483647)throw new f(Wt(e));return r.value}case`RecordSet`:return z(e)?0:Ut(e.sets,()=>Wt(e));case`ProductSet`:return z(e)?0:Ut(e.factors,()=>`Overflow when computing the number of elements in ${H(e)}`);default:return R(e).elements.length}},Kt=e=>`Attempted to check if the set ${H(e)}is finite.`,qt=e=>{if(typeof e!=`object`||e.kind===`ModelValue`)throw new f(`Attempted to check if the ${he(e)} ${H(e)} is a finite set.`);switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:case`Function`:return!0;case`LazyFunction`:throw new f(`Attempted to check if the function:\n${H(e)}\nis a finite set.`);case`InfiniteSet`:return!1;case`SequenceSet`:return qt(e.base)&&z(e.base);case`Subset`:return qt(e.base);case`FunctionSet`:{let t=qt(e.domain);if(t&&z(e.domain))return!0;let n=qt(e.range);return n&&z(e.range)?!0:n&&(t||Gt(e.range)===1)}case`RecordSet`:case`ProductSet`:{let t=e.kind===`RecordSet`?e.sets:e.factors,n={isAllFinite:!0};for(let e of t)if(!qt(e))n.isAllFinite=!1;else if(z(e))return!0;return n.isAllFinite}case`Union`:if(!Mt(e.base))throw new f(`Attempted to check if the nonenumerable set:\n${Nt(e)}\nis a finite set.`);return R(e.base).elements.every(qt);case`SetOperation`:if(e.operator===`\\cup`)return qt(e.left)&&qt(e.right);if(e.operator===`\\cap`){if(!qt(e.left)&&!qt(e.right))throw new f(Kt(e));return!0}if(qt(e.left))return!0;if(!qt(e.right))throw new f(Kt(e));return!1;case`FilteredSet`:if(!qt(e.base))throw new f(`Attempted to check if expression of form {x \\in S : p(x)} is a finite set, but cannot check if S:\n${H(e.base)}\nis finite.`);return!0}},Jt=(e,t)=>{let n={low:0,high:e.length-1};for(;n.low<=n.high;){let r=n.low+n.high>>1,i=F(e[r],t);if(i===0)return r;i<0?n.low=r+1:n.high=r-1}return-1},Yt=e=>{if(typeof e!=`object`||!A(e))return;let t=V(e);return t.domain.every((e,t)=>e===t+1)?t.range:void 0},Xt=(e,t)=>`Attempted to check if the value ${H(e)} is an element of ${H(t)}`,Zt=(e,t)=>{let n=`Attempted to check if the value:\n${H(e)}\nis an element of the`;if(!A(t))return`${n} ${he(t)} ${H(t)}`;let r=t.kind===`Function`||L(t.domain)?V(t).domain:[];return r.length>0&&r.every(e=>typeof e==`string`)?`Attempted to check if element:\n${H(e)}\nis in the record:\n${H(t)}`:r.every((e,t)=>e===t+1)?`Attempted to check set membership in a tuple value.`:`${n} function ${H(t)}`},B=(e,t)=>{if(!k(t))throw new f(Zt(e,t));switch(t.kind){case`Set`:try{return Jt(t.elements,e)!==-1}catch(n){if(!(n instanceof f))throw n;return ft(e,t.elements)}case`MixedSet`:return ft(e,t.elements);case`Interval`:if(typeof e==`number`)return e>=t.low&&e<=t.high;if(t.low<=t.high&&!j(e))throw new f(`Attempted to check if the value:\n${H(e)}\nis in the integer interval ${H(t)}`);return!1;case`InfiniteSet`:if(t.name===`Any`)return!0;if(j(e))return!1;if(!(t.name===`STRING`?typeof e==`string`:typeof e==`number`))throw new f(`Attempted to check if the value:\n${H(e)}\nis an element of ${t.name}.`);return t.name!==`Nat`||typeof e==`number`&&e>=0;case`Subset`:if(!k(e))throw new f(Xt(e,t));return R(e).elements.every(e=>B(e,t.base));case`FunctionSet`:{if(!A(e)){if(j(e))return!1;throw new f(Xt(e,t))}let n=V(e),r=Ue(n.domain);return(r===void 0?pt(t.domain,Re(n.domain)):pt({kind:`Interval`,low:r,high:r+n.domain.length-1},t.domain))&&n.range.every(e=>B(e,t.range))}case`RecordSet`:{let n=A(e)?V(e):void 0;if(!n||!Se(n.domain)){if(j(e))return!1;throw new f(`Attempted to check if non-record\n${H(e)}\nis in the set of records:\n${H(t)}`)}return n.domain.length===t.names.length&&t.names.every((e,r)=>{let i=Jt(n.domain,e);return i!==-1&&B(n.range[i],t.sets[r])})}case`ProductSet`:{let n=A(e)?Yt(e):void 0;if(n===void 0){if(A(e)&&V(e).domain.every(e=>typeof e==`number`)||j(e))return!1;throw new f(`Attempted to check if non-tuple\n${H(e)}\nis in the set of tuples:\n${H(t)}`)}return n.length===t.factors.length&&n.every((e,n)=>B(e,t.factors[n]))}case`FilteredSet`:return B(e,t.base)&&t.test(e);case`Union`:if(!Mt(t.base))throw new f(`Attempted to check if:\n ${H(e)}\nis an element of the non-enumerable set:\n ${Nt(t)}`);return R(t.base).elements.some(t=>B(e,t));case`SetOperation`:return t.operator===`\\cup`?B(e,t.left)||B(e,t.right):B(e,t.left)&&B(e,t.right)===(t.operator===`\\cap`);case`SequenceSet`:{let n=Yt(e);if(n===void 0){if(j(e))return!1;throw new f(Xt(e,t))}return n.every(e=>B(e,t.base))}default:throw new f(Zt(e,t))}},Qt=(e,t,n)=>e===t?!0:typeof e!=`object`||typeof t!=`object`||typeof n!=`object`||e.kind!==`Function`||t.kind!==`Function`||n.kind!==`FunctionSet`||e.domain!==t.domain?B(e,n):e.range.every((e,r)=>Qt(e,t.range[r],n.range)),V=e=>{if(typeof e==`object`&&e.kind===`Function`)return e;if(typeof e==`object`&&e.kind===`LazyFunction`){L(e.domain)||Gt(e.domain);let t=kt(e.domain);return ze(t,t.map(t=>e.apply(t)))}throw new f(`Expected a function but found ${H(e)}`)},$t=/* @__PURE__ */ new WeakSet,en=e=>($t.add(e),e),tn=(e,t)=>typeof e==`object`&&$t.has(e)?`In applying the function\n${me(H(e))},\nthe first argument is:\n${me(H(t))}\nwhich is not in its domain.\n`:`Attempted to apply function ${H(e)} to ${H(t)}, which is not in its domain`,nn=(e,t)=>{let n=e[0];if(typeof t==`number`&&typeof n==`number`){let r=t-n;if(e[r]===t)return r}if(e.length<=8){for(let n=0;n<e.length;n++)if(e[n]===t)return n}return Jt(e,t)},rn=(e,t,n)=>{if(typeof e==`object`&&e.kind===`LazyFunction`){if(!B(t,e.domain))throw new f($t.has(e)?tn(e,t):`Attempted to apply a function to ${H(t)}, which is not in its domain`);return e.apply(t)}if(typeof e!=`object`||e.kind!==`Function`)throw new f(`Attempted to apply ${H(e)}, which is not a function`);let r=nn(e.domain,t);if(r===-1)throw new f(n?.(e)??tn(e,t));return e.range[r]},an=e=>Ot(e)?Tt.get(e)??At(e.length):void 0,on=e=>{if(typeof e==`object`&&e.kind===`LazyFunction`)return e.domain;let t=V(e).domain;return an(t)??Re(t)},sn=(e,t,n,r=!1)=>{if(typeof e==`object`&&e.kind===`LazyFunction`&&(r||!L(e.domain))){if(!B(t,e.domain))return e;let r=n(e.apply(t));return{kind:`LazyFunction`,domain:e.domain,apply:n=>pt(t,n)?r:e.apply(n),source:e.source}}let i=V(e),a=nn(i.domain,t);if(a===-1)return i;let o=[...i.range],s=i.range[a],c=n(s);o[a]=c;let l=ze(i.domain,o);if(l.writtenKeys=i.writtenKeys,i.hash!==0){let e=i.domain[a];l.hash=s===c?i.hash:i.hash-pn(e,s)+pn(e,c)|0}if(i.fingerprint!==0){let e=i.domain[a];l.fingerprint=s===c?i.fingerprint:i.fingerprint-bn(e,s)+bn(e,c)|0}return l},cn=/* @__PURE__ */ new WeakMap,ln=e=>{let t=Math.imul(e^e>>>16,2246822507),n=Math.imul(t^t>>>13,3266489909);return n^n>>>16},un=(e,t)=>Math.imul(e^t,16777619),dn=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return ln(t)},fn=e=>ln(hn(e)+2654435769|0),pn=(e,t)=>ln(Math.imul(hn(e),668265261)+hn(t)|0),mn=e=>{if(e.kind===`ModelValue`)return ln(un(dn(e.name),109));if(k(e)){if(!L(e))return dn(wn(e));let t=R(e).elements,n=1940243425;for(let e=0;e<t.length;e++)n=n+fn(t[e])|0;return n}let t=V(e),n=1725019383;for(let e=0;e<t.domain.length;e++)n=n+pn(t.domain[e],t.range[e])|0;return n},hn=e=>{if(typeof e==`number`)return ln(e^1540483477);if(typeof e==`boolean`)return e?729683222:682545830;if(typeof e==`string`)return dn(e);if(e.kind===`Set`||e.kind===`Function`)return e.hash===0&&(e.hash=mn(e)),e.hash;let t=cn.get(e);if(t!==void 0)return t;let n=mn(e);return cn.set(e,n),n},gn=/* @__PURE__ */ new WeakMap,_n=e=>{let t=Math.imul(e^e>>>15,739982445),n=Math.imul(t^t>>>12,695872825);return n^n>>>15},vn=e=>{let t=2538058380;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),1540483477);return _n(t)},yn=e=>_n(Sn(e)+2135587861|0),bn=(e,t)=>_n(Math.imul(Sn(e),374761393)+Sn(t)|0),xn=e=>{if(e.kind===`ModelValue`)return _n(vn(e.name)^60);if(k(e)){if(!L(e))return vn(wn(e));let t=R(e).elements,n=461845907;for(let e=0;e<t.length;e++)n=n+yn(t[e])|0;return n}let t=V(e),n=1291169091;for(let e=0;e<t.domain.length;e++)n=n+bn(t.domain[e],t.range[e])|0;return n},Sn=e=>{if(typeof e==`number`)return _n(e^1759714724);if(typeof e==`boolean`)return e?1000000007:521288629;if(typeof e==`string`)return vn(e);if(e.kind===`Set`||e.kind===`Function`)return e.fingerprint===0&&(e.fingerprint=xn(e)),e.fingerprint;let t=gn.get(e);if(t!==void 0)return t;let n=xn(e);return gn.set(e,n),n},Cn=/* @__PURE__ */ new WeakMap,wn=e=>{if(typeof e==`boolean`)return e?`T`:`F`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);let t=Cn.get(e);if(t!==void 0)return t;let n=Tn(e);return Cn.set(e,n),n},Tn=e=>{if(e.kind===`ModelValue`)return`@${e.name}`;if(e.kind===`InfiniteSet`)return`<${e.name}>`;if(e.kind===`SequenceSet`)return`<Seq ${wn(e.base)}>`;if(e.kind===`FilteredSet`&&!L(e))throw new f(`Attempted to compare the non-enumerable set ${H(e)} with another value`);if(k(e))return L(e)?`{${R(e).elements.map(wn).join(`,`)}}`:`<${e.kind} ${H(e)}>`;let t=V(e);return`(${t.domain.map((e,n)=>`${wn(e)}:${wn(t.range[n])}`).join(`,`)})`},En=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\n/g,`\\n`).replace(/\t/g,`\\t`)}"`,Dn=e=>e.reduce((e,t)=>e===0?0:e*Gt(t),1),On=e=>{if(e.kind===`Subset`)return Gt(e.base)<=6?R(e):void 0;if(e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`Union`)return R(e);if(e.kind===`FunctionSet`&&L(e.domain)&&Gt(e.domain)===0)return Re([ze([],[])]);let t=e.kind===`FunctionSet`?Gt(e.range)**Gt(e.domain):Dn(e.kind===`RecordSet`?e.sets:e.factors);return t===0?_t:t<=1999?R(e):void 0},kn=(e,t)=>{if(t)return On(e);if(L(e))try{return On(e)}catch(e){if(e instanceof f)return;throw e}},An=(e,t)=>{let n=e=>H(e,t);switch(e.kind){case`Subset`:return typeof e.base==`object`&&e.base.kind===`Interval`?`SUBSET (${n(e.base)})`:`SUBSET ${n(e.base)}`;case`FunctionSet`:return`[${n(e.domain)} -> ${n(e.range)}]`;case`RecordSet`:return`[${e.names.map((t,r)=>`${t}: ${n(e.sets[r])}`).join(`, `)}]`;case`ProductSet`:return`(${e.factors.map(n).join(` \\X `)})`;case`SetOperation`:return`${n(e.left)} ${e.operator} ${n(e.right)}`;case`FilteredSet`:return`{x \\in ${n(e.base)} : ...}`;case`Union`:return Nt(e,t)}},jn=e=>/^[\p{L}\p{Nd}_]*$/u.test(e)&&/\p{L}/u.test(e)&&(e.length<4||!/^[WS]F_/.test(e)),H=(e,t=!1,n=!1)=>{let r=e=>H(e,t,n);if(typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return En(e);switch(e.kind){case`ModelValue`:return e.name;case`Set`:return`{${e.elements.map(r).join(`, `)}}`;case`MixedSet`:return r(R(e));case`Interval`:return e.low<=e.high?`${e.low}..${e.high}`:`{}`;case`InfiniteSet`:return e.name===`Any`?`ANY`:e.name;case`Subset`:case`FunctionSet`:case`RecordSet`:case`ProductSet`:case`SetOperation`:case`FilteredSet`:case`Union`:{let n=kn(e,t);return n?r(n):An(e,t)}case`SequenceSet`:return`Seq(${r(e.base)})`;case`Function`:case`LazyFunction`:{if(e.kind===`LazyFunction`&&!L(e.domain)){let t=e.source;return t?`[${t.parameters.map(e=>`${e.name} \\in ${H(e.domain)}`).join(`, `)} |-> <expression ${t.body}>]`:`<function>`}let t=V(e);return t.domain.every((e,t)=>e===t+1)?`<<${t.range.map(r).join(`, `)}>>`:t.domain.every(e=>typeof e==`string`&&jn(e))?`[${(n||t.hash!==0||t.fingerprint!==0?t.domain.map((e,n)=>[e,t.range[n]]):ye(t)).map(e=>`${String(e[0])} |-> ${r(e[1])}`).join(`, `)}]`:`(${t.domain.map((e,n)=>`${r(e)} :> ${r(t.range[n])}`).join(` @@ `)})`}}},Mn=(e,t)=>{for(let n=0;n<e.length;n++)e[n]=t(e[n])},Nn=()=>{let e=/* @__PURE__ */ new Map,t=n=>{if(typeof n!=`object`||n.kind!==`Set`&&n.kind!==`Function`)return n;let r=hn(n),i=e.get(r);if(i!==void 0&&!Array.isArray(i)&&(i===n||He(i,n)))return i;if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(i[e]===n||He(i[e],n))return i[e]}return n.kind===`Set`?Mn(n.elements,t):(Mn(n.domain,t),Mn(n.range,t)),i===void 0?e.set(r,n):Array.isArray(i)?i.push(n):e.set(r,[i,n]),n};return e=>{for(let n=0;n<e.length;n++)e[n]=t(e[n]);return e}},Pn=/* @__PURE__ */ new Set(/* @__PURE__ */ `=,#,~,<=>,/\\,\\/,=>,\\in,\\notin,\\subseteq,\\cup,\\cap,\\,SUBSET,UNION,DOMAIN,+,-,*,^,\\div,%,..,Seq,IsFiniteSet,RandomElement`.split(`,`)),Fn=(e,t)=>Pn.has(e)?new f(t):new p(t),In=e=>typeof e==`object`&&e.kind===`Operator`,U=(e,t,n)=>{let r=e[t];if(r===void 0||In(r))throw Fn(n,`${n} expects a value as argument ${t+1}`);return r},Ln=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`number`)throw Fn(n,`${n} expects an integer but received ${H(r)}`);return r},Rn=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`boolean`)throw Fn(n,`${n} expects a boolean but received ${H(r)}`);return r},zn=(e,t,n)=>{let r=U(e,t,n);if(!k(r))throw Fn(n,`${n} expects a set but received ${H(r)}`);return r},Bn=(e,t,n)=>{let r=zn(e,t,n);if(!L(r))throw Fn(n,`${n} cannot enumerate the non-enumerable set ${H(r)}`);return r},Vn=(e,t,n)=>R(Bn(e,t,n)),Hn=(e,t,n)=>Vn(e,t,n).elements,Un=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw Fn(n,`${n} expects a sequence but received ${H(r)}`);return i},Wn=(e,t,n)=>{let r=U(e,t,n);if(!A(r))throw Fn(n,`${n} expects a function but received ${H(r)}`);return V(r)},Gn=(e,t,n)=>{let r=e[t];if(r===void 0||!In(r))throw Fn(n,`${n} expects an operator as argument ${t+1}`);return r},Kn=(e,t)=>({kind:`Builtin`,name:e,arity:0,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0}),W=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:t===1?e=>n([e]):void 0,evaluateBinary:t===2?(e,t)=>n([e,t]):void 0}),qn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0}),Jn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0,isStateLevel:!0}),Yn=(e,t)=>({kind:`Builtin`,name:e,arity:2,evaluate:n=>t(U(n,0,e),U(n,1,e)),evaluateUnary:void 0,evaluateBinary:t}),Xn=e=>e>2147483647||e<-2147483648,Zn=e=>new p(`Overflow when computing ${e}`),Qn={ModelValue:`ModelValue`,Set:`SetEnumValue`,Interval:`IntervalValue`,InfiniteSet:`UserValue`,SequenceSet:`UserValue`,Subset:`SubsetValue`,FunctionSet:`SetOfFcnsValue`,RecordSet:`SetOfRcdsValue`,ProductSet:`SetOfTuplesValue`,FilteredSet:`SetPredValue`,LazyFunction:`FcnLambdaValue`,Union:`UnionValue`,MixedSet:`SetEnumValue`},$n={"\\cup":`SetCupValue`,"\\cap":`SetCapValue`,"\\":`SetDiffValue`},er={BoolValue:`a Boolean value`,IntValue:`an integer`,StringValue:`a string`,RecordValue:`a record`,SetEnumValue:`a set of the form {e1, ... ,eN}`,SetPredValue:`a set of the form {x \\in S : expr}`,TupleValue:`a tuple`,FcnLambdaValue:`a function of the form [x \\in S |-> expr]`,FcnRcdValue:`a function of the form (d1 :> e1 @@ ... @@ dN :> eN)`,SetOfFcnsValue:`a set of the form [S -> T]`,SetOfRcdsValue:`a set of the form [d1 : S1, ... , dN : SN]`,SetOfTuplesValue:`a cartesian product`,SubsetValue:`a set of the form SUBSET S`,SetDiffValue:`a set of the form S \\ T`,SetCapValue:`a set of the form S \\cap T`,SetCupValue:`a set of the form S \\cup T`,ModelValue:`a model value`,UserValue:`a special set constant`,IntervalValue:`a set of the form i..j`,UnionValue:`a set of the form UNION S`},tr=e=>{if(typeof e==`number`)return`IntValue`;if(typeof e==`string`)return`StringValue`;if(typeof e==`boolean`)return`BoolValue`;if(e.kind===`SetOperation`)return $n[e.operator];if(e.kind!==`Function`)return Qn[e.kind];let t=e.domain;return t.every((e,t)=>e===t+1)?`TupleValue`:t.every(e=>typeof e==`string`)?`RecordValue`:`FcnRcdValue`},nr=e=>er[tr(e)],rr=(e,t)=>new f(`Attempted to apply the operator overridden by the Java method\n${e},\nbut it produced the following error:\n${t}`),ir=(e,t)=>{let n=n=>(...r)=>{try{return n(...r)}catch(n){throw n instanceof f&&(e.isLazy===!0||!(n instanceof p))?rr(t,n.message):n}};return{...e,evaluate:n(e.evaluate),evaluateUnary:e.evaluateUnary&&n(e.evaluateUnary),evaluateBinary:e.evaluateBinary&&n(e.evaluateBinary)}},ar=(e,t)=>{if(typeof e!=`number`)throw rr(t,`Cannot cast tlc2.value.impl.${tr(e)} to tlc2.value.impl.IntValue`);return e},or=(e,t,n)=>`public static tlc2.value.impl.${t} tlc2.module.Integers.${e}(${Array.from({length:n},()=>`tlc2.value.impl.IntValue`).join(`,`)})`,sr=(e,t,n)=>{let r=or(t,`IntValue`,2);return Yn(e,(t,i)=>{let a=ar(t,r),o=ar(i,r),s=n(a,o);if(Xn(s))throw Zn(`${a}${e}${o}`);return s})},cr=(e,t,n)=>{if(typeof e!=`number`)throw new p(`The ${t} argument of ${n} should be an integer, but instead it is:\n${H(e)}`);return e},lr=(e,t)=>Yn(e,(n,r)=>t(cr(n,`first`,e),cr(r,`second`,e))),ur=(e,t,n)=>({...Jn(e,t,n),isLazy:!0}),dr=(e,t,n)=>{let r=Gn(e,t,n);return()=>r.call([])},fr=/* @__PURE__ */ new Set([`Apply`,`And`,`Or`,`If`,`FunctionApplication`,`FieldAccess`,`Record`,`Tuple`,`SetEnumeration`,`Prime`,`Unchanged`,`Forall`,`Exists`]),pr=()=>({bool:qa,condition:(e,t)=>{if(typeof e!=`boolean`)throw Ia(t,e);return e},conjunct:(e,t,n)=>{if(typeof e!=`boolean`)throw La(t,n,e);return e},apply:rn,tuple:I,set:gt,record:ze,writtenRecord:be,equal:Be,enumerate:$a,unassigned:(e,t)=>{throw new f(`The variable ${e} is not assigned at ${q(t)}`)},primeOutsideAction:e=>{throw new f(`A primed expression appears outside an action at ${q(e)}`)},prime:e=>({environment:e.environment,scope:e.scope,state:e.next,next:void 0}),extend:(e,t,n)=>({environment:e.environment,scope:t.reduce((e,t,r)=>Wa(e,t,n[r]),e.scope),state:e.state,next:e.next})}),mr={value:void 0},hr=(e,t)=>(e.references.push(t),`reference${e.references.length-1}`),gr=e=>`local${e.counter++}`,_r=(e,t=/* @__PURE__ */ new Set)=>(e.kind===`Identifier`&&t.add(e.name),e.kind===`Apply`&&t.add(e.operator),Ja(e).forEach(e=>_r(e,t)),t),vr=(e,t,n)=>{let r=hr(e,Y(t,e.environment)),i=_r(t),a=[...n.locals].filter(([e])=>i.has(e));if(a.length===0)return`${r}(${n.context})`;let o=hr(e,a.map(([e])=>e));return`${r}(extend(${n.context}, ${o}, [${a.map(([,e])=>e).join(`, `)}]))`},yr=(e,t,n)=>{let r=t.kind===`Forall`,i=JSON.stringify(r?`the body of \\A`:`the body of \\E`),a=`quantifier${e.counter++}`,o=[...n.locals.values()],s={context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:new Map(n.locals)},c=t.bounds.map(()=>gr(e)),l=t.bounds.map((t,n)=>`const ${c[n]} = enumerate(${xr(e,t.set,s)}, ${hr(e,t.set)});`),u=t.bounds.map(t=>{let n=gr(e);return t.pattern.kind===`Name`&&s.locals.set(t.pattern.name,n),n}),d=`if (bool(${xr(e,t.body,s)}, ${i}) !== ${r}) return ${!r};`,f=u.reduce((t,n,r)=>{let i=gr(e);return`for (let ${i} = 0; ${i} < ${c[r]}.length; ${i}++) { const ${n} = ${c[r]}[${i}]; ${t} }`},d),p=o.map(e=>`, ${e}`).join(``);return e.helpers.push(`function ${a}(context, state, next${p}) { let primed; ${l.join(` `)} ${f} return ${r}; }`),`${a}(${n.context}, ${n.state}, ${n.isPrimed?`undefined`:n.next}${p})`},br=(e,t,n)=>{let r=t.args;if(t.operator===`=>`)return`(bool(${xr(e,r[0],n)}, "the left side of =>") ? bool(${xr(e,r[1],n)}, "the right side of =>") : true)`;if(J(t))return vr(e,t,n);let i=mo(t.operator,e.environment);if(i?.kind!==`Builtin`)return vr(e,t,n);if(i.name===`DOMAIN`)return`${hr(e,za(t))}(${xr(e,r[0],n)})`;if(i.name===`TLCEval`)return vr(e,t,n);if(i.name===`\\subseteq`&&r.length===2)return`${hr(e,Ba(t,i))}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`;let a=e.environment;if(i.evaluateUnary&&r.length===1&&rs(r[0],a))return`${hr(e,i.evaluateUnary)}(${xr(e,r[0],n)})`;let o=r.length===2&&rs(r[0],a)&&rs(r[1],a);return i.evaluateBinary&&o?`${hr(e,i.evaluateBinary)}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`:vr(e,t,n)},xr=(e,t,n)=>{let r=(t,r=n)=>xr(e,t,r);if(qo(t)&&Ho(t,e.environment))return vr(e,t,n);switch(t.kind){case`Number`:return Mo(t.value)?String(t.value):vr(e,t,n);case`String`:return JSON.stringify(t.value);case`Identifier`:{let r=n.locals.get(t.name);if(r)return r;if(J(t))return vr(e,t,n);let i=wo(t.name,e.environment);if(i?.kind===`Variable`){let r=JSON.stringify(t.name),a=hr(e,t);return`(${n.state}?.[${i.index}] ?? unassigned(${r}, ${a}))`}return i?.kind===`Value`?hr(e,i.value):vr(e,t,n)}case`Apply`:return br(e,t,n);case`And`:{let n=hr(e,t);return`(${t.operands.map((e,t)=>`conjunct(${r(e)}, ${n}, ${t})`).join(` && `)})`}case`Or`:return`(${t.operands.map(e=>`bool(${r(e)}, "a disjunct")`).join(` || `)})`;case`If`:return`(condition(${r(t.condition)}, ${hr(e,t)}) ? ${r(t.consequent)} : ${r(t.alternative)})`;case`FunctionApplication`:{_s(t.function);let e=r(t.function);return t.args.length===1?`apply(${e}, ${r(t.args[0])})`:`apply(${e}, tuple([${t.args.map(e=>r(e)).join(`, `)}]))`}case`FieldAccess`:return`apply(${r(t.record)}, ${JSON.stringify(t.field)}, ${hr(e,Ra(t))})`;case`Record`:{let i=[...t.fields].sort((e,t)=>F(e.name,t.name));if(i.some((e,t)=>t>0&&i[t-1].name===e.name))return vr(e,t,n);let a=hr(e,i.map(e=>e.name)),o=`[${i.map(e=>r(e.value)).join(`, `)}]`,s=t.fields.map(e=>e.name);return s.every((e,t)=>e===i[t].name)?`record(${a}, ${o})`:`writtenRecord(${a}, ${o}, ${hr(e,s)})`}case`Tuple`:return`tuple([${t.elements.map(e=>r(e)).join(`, `)}])`;case`SetEnumeration`:return`set([${t.elements.map(e=>r(e)).join(`, `)}])`;case`Prime`:{let i=hr(e,t);if(n.isPrimed)return`primeOutsideAction(${i})`;let a={context:`(primed ??= prime(${n.context}))`,state:n.next,next:`undefined`,isPrimed:!0,locals:n.locals};return`(${n.next} === undefined ? primeOutsideAction(${i}) : ${r(t.expression,a)})`}case`Unchanged`:return`equal(${r({kind:`Prime`,expression:t.expression,location:t.location})}, ${r(t.expression)})`;case`Forall`:case`Exists`:return t.bounds.every(e=>e.pattern.kind===`Name`)?yr(e,t,n):vr(e,t,n);default:return vr(e,t,n)}},Sr=(e,t)=>{if(!fr.has(e.kind))return;let n={environment:t,references:[],helpers:[],counter:0},r=xr(n,e,{context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:/* @__PURE__ */ new Map}),i=n.references.map((e,t)=>`reference${t}`),a=`${n.helpers.join(`
@@ -403,7 +403,7 @@ _CheckName(name) ==
403
403
  _PrintCounts == PrintT(_Counts)
404
404
  =============================================================================
405
405
  `]]),du=/* @__PURE__ */ new Map([[`FiniteSets`,/* @__PURE__ */ new Map([[`IsFiniteSet`,`public static tlc2.value.IBoolValue tlc2.module.FiniteSets.IsFiniteSet(tlc2.value.impl.Value)`],[`Cardinality`,`public static tlc2.value.impl.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.impl.Value)`]])],[`Sequences`,/* @__PURE__ */ new Map([[`Seq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Seq(tlc2.value.impl.Value)`],[`Len`,`public static tlc2.value.impl.IntValue tlc2.module.Sequences.Len(tlc2.value.impl.Value)`],[`Head`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Head(tlc2.value.impl.Value)`],[`Tail`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Tail(tlc2.value.impl.Value)`],[`Append`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Append(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`\\o`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Concat(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SubSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SubSeq(tlc2.value.impl.Value,tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SelectSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SelectSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`]])],[`TLC`,/* @__PURE__ */ new Map([[`Print`,`public static tlc2.value.impl.Value tlc2.module.TLC.Print(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`PrintT`,`public static tlc2.value.impl.Value tlc2.module.TLC.PrintT(tlc2.value.impl.Value)`],[`ToString`,`public static tlc2.value.impl.Value tlc2.module.TLC.ToString(tlc2.value.impl.Value)`],[`Assert`,`public static tlc2.value.impl.Value tlc2.module.TLC.Assert(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`:>`,`public static tlc2.value.impl.Value tlc2.module.TLC.MakeFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`@@`,`public static tlc2.value.impl.Value tlc2.module.TLC.CombineFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SortSeq`,`public static tlc2.value.impl.Value tlc2.module.TLC.SortSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`Permutations`,`public static tlc2.value.impl.Value tlc2.module.TLC.Permutations(tlc2.value.impl.Value)`],[`RandomElement`,`public static tlc2.value.impl.Value tlc2.module.TLC.RandomElement(tlc2.value.impl.Value)`],[`TLCEval`,`public static tlc2.value.impl.Value tlc2.module.TLCEval.tlcEval(tlc2.tool.impl.Tool,tla2sany.semantic.ExprOrOpArgNode[],tlc2.util.Context,tlc2.tool.TLCState,tlc2.tool.TLCState,int,tlc2.tool.coverage.CostModel)`]])]]),fu=(e,t)=>e.every(e=>B(e,t)),pu=ht([!1,!0]),mu=(e,t,n)=>{if(n-t===1)return e[t];let r=t+n>>1;return bt(mu(e,t,r),mu(e,r,n))},hu=[`\\cup`,`\\cap`,`\\`],gu=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`||e.kind===`Interval`),_u=e=>typeof e==`object`&&e.kind===`MixedSet`,vu=e=>e.kind===`Interval`?R(e).elements:e.elements,yu=(e,t,n)=>{let r=vu(t);if(e!==`\\cup`){let t=e===`\\cap`;return gt(r.filter(e=>B(e,n)===t))}if(r.length===0)return n;if(!gu(n))return{kind:`SetOperation`,operator:e,left:t,right:n};let i=R(n).elements.filter(e=>!B(e,t));return gt([...r,...i])},bu=[Kn(`TRUE`,!0),Kn(`FALSE`,!1),Kn(`BOOLEAN`,pu),Kn(`STRING`,{kind:`InfiniteSet`,name:`STRING`}),Yn(`=`,pt),Yn(`#`,(e,t)=>!pt(e,t)),W(`~`,1,e=>!Rn(e,0,`~`)),W(`<=>`,2,e=>Rn(e,0,`<=>`)===Rn(e,1,`<=>`)),W(`/\\`,2,e=>Rn(e,0,`/\\`)&&Rn(e,1,`/\\`)),W(`\\/`,2,e=>Rn(e,0,`\\/`)||Rn(e,1,`\\/`)),W(`=>`,2,e=>!Rn(e,0,`=>`)||Rn(e,1,`=>`)),W(`\\in`,2,e=>B(U(e,0,`\\in`),U(e,1,`\\in`))),W(`\\notin`,2,e=>!B(U(e,0,`\\notin`),U(e,1,`\\notin`))),W(`\\subseteq`,2,e=>{let t=zn(e,0,`\\subseteq`),n=zn(e,1,`\\subseteq`);return typeof t==`object`&&t.kind===`Subset`&&typeof n==`object`&&n.kind===`Subset`&&L(t.base)?fu(R(t.base).elements,n.base):fu(R(t).elements,n)}),...hu.map(e=>W(e,2,t=>{let n=zn(t,0,e),r=zn(t,1,e);return gu(n)&&gu(r)&&!_u(n)&&!_u(r)?e===`\\cup`&&z(n)?r:(e===`\\cup`?bt:e===`\\cap`?yt:vt)(R(n),R(r)):gu(n)?yu(e,n,r):e!==`\\`&&gu(r)?yu(e,r,n):{kind:`SetOperation`,operator:e,left:n,right:r}})),W(`SUBSET`,1,e=>({kind:`Subset`,base:zn(e,0,`SUBSET`)})),W(`UNION`,1,e=>{let t=zn(e,0,`UNION`),n=tt(t)?t.elements.filter(tt):[];if(!tt(t)||n.length!==t.elements.length)return{kind:`Union`,base:t};if(_u(t)||n.some(_u)){let e={kind:`MixedSet`,elements:[]};return n.forEach(t=>t.elements.forEach(t=>{B(t,e)||e.elements.push(t)})),gt(e.elements)}return n.length===0?_t:mu(n.map(R),0,n.length)}),W(`DOMAIN`,1,e=>{let t=U(e,0,`DOMAIN`);if(!A(t))throw new f(`DOMAIN expects a function but received ${H(t)}`);return on(t)})],xu=or(`DotDot`,`IntervalValue`,2),Su=or(`Neg`,`IntValue`,1),Cu=[Kn(`Nat`,{kind:`InfiniteSet`,name:`Nat`}),sr(`+`,`Plus`,(e,t)=>e+t),sr(`-`,`Minus`,(e,t)=>e-t),sr(`*`,`Times`,(e,t)=>e*t),sr(`^`,`Expt`,(e,t)=>{if(t<0)throw new p(`The second argument of ^ should be a natural number, but instead it is:\n${t}`);if(e===0&&t===0)throw new p(`0^0 is undefined.`);return e**t}),sr(`\\div`,`Divide`,(e,t)=>{if(t===0)throw new p(`The second argument of \\div is 0.`);let n=Math.floor(e/t);if(Xn(n))throw Zn(`${e} \\div ${t}`);return n}),sr(`%`,`Mod`,(e,t)=>{if(t<=0)throw new p(`The second argument of % should be a positive number, but instead it is:\n${t}`);return(e%t+t)%t}),lr(`<`,(e,t)=>e<t),lr(`>`,(e,t)=>e>t),lr(`<=`,(e,t)=>e<=t),lr(`>=`,(e,t)=>e>=t),W(`..`,2,e=>({kind:`Interval`,low:ar(U(e,0,`..`),xu),high:ar(U(e,1,`..`),xu)}))],wu=[Kn(`Int`,{kind:`InfiniteSet`,name:`Int`}),W(`-.`,1,e=>{let t=ar(U(e,0,`-`),Su);if(Xn(-t))throw Zn(`-${t}`);return-t})],Tu=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw new p(`${n}\n${H(r)}`);return i},Eu=(e,t,n)=>{let r=U(e,t,n);return typeof r==`string`?r:Tu(e,t,n)},Du=(e,t,n)=>typeof e==`string`?Oe(e.slice(t,n)):I(e.slice(t,n)),Ou=(e,t)=>`The ${e}argument of ${t} should be a sequence, but instead it is:`,ku=(e,t)=>`Evaluating an expression of the form ${e} when s is not a ${t}:`,Au=(e,t)=>{let n=du.get(e);return n?t.map(e=>{let t=n.get(e.name);return t?ir(e,t):e}):t},ju=Au(`Sequences`,[W(`Seq`,1,e=>({kind:`SequenceSet`,base:U(e,0,`Seq`)})),W(`Len`,1,e=>Eu(e,0,Ou(``,`Len`)).length),W(`\\o`,2,e=>{let t=Eu(e,0,ku(`s \\o t`,`sequence`));if(typeof t!=`string`){let n=Tu(e,1,ku(`t \\o s`,`sequence`));return I([...t,...n])}let n=U(e,1,`\\o`);if(typeof n!=`string`)throw new p(`${ku(`t \\o s`,`string`)}\n${H(n)}`);return Oe(t+n)}),W(`Append`,2,e=>I([...Tu(e,0,ku(`Append(s, v)`,`sequence`)),U(e,1,`Append`)])),W(`Head`,1,e=>{let t=Tu(e,0,Ou(``,`Head`));if(t.length===0)throw new p(`Attempted to apply Head to the empty sequence.`);return t[0]}),W(`Tail`,1,e=>{let t=Eu(e,0,Ou(``,`Tail`));if(t.length===0)throw new p(`Attempted to apply Tail to the empty sequence.`);return Du(t,1)}),W(`SubSeq`,3,e=>{let t=Eu(e,0,Ou(`first `,`SubSeq`)),n=Ln(e,1,`SubSeq`),r=Ln(e,2,`SubSeq`);if(n>r)return Du(t,0,0);let i=n<1?{position:`second`,value:n}:r>t.length?{position:`third`,value:r}:void 0;if(i)throw new p(`The ${i.position} argument of SubSeq must be in the domain of its first argument:\n${H(U(e,0,`SubSeq`))}\n, but instead it is\n${i.value}`);return Du(t,n-1,r)}),qn(`SelectSeq`,2,e=>{let t=Gn(e,1,`SelectSeq`);return I(Tu(e,0,Ou(`first `,`SelectSeq`)).filter(e=>{let n=t.call([e]);if(typeof n!=`boolean`)throw new p(`The second argument of SelectSeq should be a operator, but instead it is:\n${H(n)}`);return n}))})]),Mu=Au(`FiniteSets`,[W(`IsFiniteSet`,1,e=>{let t=U(e,0,`IsFiniteSet`);if(k(t))return qt(t);if(typeof t==`object`&&t.kind===`Function`)return!0;throw new f(typeof t==`object`&&t.kind===`LazyFunction`?`Attempted to check if the function:\n${H(t)}\nis a finite set.`:`Attempted to check if the ${he(t)} ${H(t)} is a finite set.`)}),W(`Cardinality`,1,e=>{let t=U(e,0,`Cardinality`);if(!k(t)||typeof t==`object`&&(t.kind===`InfiniteSet`||t.kind===`SequenceSet`))throw new p(`Attempted to compute cardinality of the value\n${H(t)}`);return Gt(t)})]),Nu=/* @__PURE__ */ new Map([[`Integers`,[`Naturals`]],[`Sequences`,[`Naturals`]],[`FiniteSets`,[`Naturals`,`Sequences`]],[`TLC`,[`Naturals`,`Sequences`,`FiniteSets`]],[`Randomization`,[`Naturals`,`FiniteSets`,`Sequences`]],[`_Possible`,[`TLC`,`TLCExt`,`Naturals`,`Sequences`,`FiniteSets`,`Integers`]],[`Json`,[`Sequences`,`FiniteSets`,`TLC`,`Naturals`]],[`Bags`,[`Naturals`]],[`TLCExt`,[`TLC`,`Integers`,`Naturals`,`Sequences`,`FiniteSets`]]]),Pu=(e,t,n,r)=>{switch(e){case`Naturals`:return{extends:[],operators:Cu};case`Integers`:return{extends:[`Naturals`],operators:wu};case`Sequences`:return{extends:[],operators:ju};case`FiniteSets`:return{extends:[],operators:Mu};case`TLC`:return{extends:[],operators:Au(`TLC`,iu(t,n))};case`Randomization`:return{extends:[],operators:Il(n)};case`_Possible`:return{extends:[],operators:Zl(t,n)};case`Json`:return{extends:[],operators:Al(r)};case`Bags`:return{extends:[],operators:ll};case`TLCExt`:return{extends:[],operators:Xl(t,n)};default:return}},Fu=`$subexpression`,Iu=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Lu=e=>e.filter((t,n)=>n===0||e[n-1].set!==t.set).map(e=>e.set),Ru=(e,t)=>typeof e==`number`?e>=1&&e<=t?e-1:-1:e===`<<`?t>0?0:-1:t===2?1:-1,zu=e=>{switch(e.kind){case`Apply`:return e.args;case`And`:case`Or`:return e.operands;case`If`:return[e.condition,e.consequent,e.alternative];case`Tuple`:case`SetEnumeration`:return e.elements;case`Record`:case`RecordSet`:return e.fields.map(e=>e.value);case`FunctionApplication`:return[e.function,e.args.length===1?e.args[0]:{kind:`Tuple`,elements:e.args,location:e.location}];case`FieldAccess`:return[e.record,{kind:`String`,value:e.field,location:e.location}];case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:return[e.expression];case`BoxAction`:case`AngleAction`:return[e.action,e.subscript];case`WeakFairness`:case`StrongFairness`:return[e.subscript,e.action];case`FunctionSet`:return[e.domain,e.range];case`Product`:return e.factors;case`Except`:return[e.function];default:return}},Bu=e=>{switch(e.kind){case`Forall`:case`Exists`:case`FunctionConstruction`:return{names:Pr(e.bounds),body:e.body,sets:Lu(e.bounds)};case`SetMap`:return{names:Pr(e.bounds),body:e.expression,sets:Lu(e.bounds)};case`SetFilter`:return{names:Nr(e.bound.pattern),body:e.predicate,sets:[e.bound.set]};case`Choose`:return{names:Nr(e.pattern),body:e.body,sets:e.set?[e.set]:[]};case`UnboundedQuantifier`:case`Lambda`:return{names:e.kind===`Lambda`?e.params:e.names,body:e.body,sets:[]};default:return}},Vu=(e,t,n)=>{if(e.kind===`Label`)return e.name===t?{label:e,lets:n}:void 0;if(e.kind===`Let`)return Vu(e.body,t,[...n,e.definitions]);if(e.kind!==`Lambda`)for(let r of Ja(e)){let e=Vu(r,t,n);if(e)return e}},Hu=(e,t,n)=>e.length===0&&n.length>0?n.splice(0,t):e,Uu=(e,t,n)=>t.reduceRight((e,t)=>({kind:`Let`,definitions:t,body:e,location:n}),e),Wu=(e,t)=>{let n=e.location,r=Uu(t,e.lets,n);if(e.params.length===0)return r;if(e.args.length===0){if(e.params.some(e=>e.arity>0))throw Iu(`Selected an operator with operator parameters as an argument`,n);return{kind:`Lambda`,params:e.params.map(e=>e.name),body:r,location:n}}if(e.args.length!==e.params.length)throw Iu(`The subexpression requires ${e.params.length} arguments but received ${e.args.length}`,n);return{kind:`Let`,definitions:[{kind:`Operator`,name:Fu,params:e.params,body:r,isLocal:!0,isRecursive:!1,location:n}],body:{kind:`Apply`,operator:Fu,args:e.args,location:n,resolution:Cr},location:n}},Gu=(e,t)=>{let n=t.location,r=e.kind===`Operator`?e.params.map((e,n)=>({name:`${e.name}$${t.params.length+n}`,arity:e.arity})):[],i=r.map(e=>({kind:`Identifier`,name:e.name,location:n,resolution:Cr})),a=i.length===0?{kind:`Identifier`,name:e.name,location:n,resolution:Cr}:{kind:`Apply`,operator:e.name,args:i,location:n,resolution:Cr};return Wu({...t,params:[...t.params,...r]},a)},Ku=(e,t,n,r)=>{let i={params:[],args:[],lets:[],location:n},a={index:0,current:void 0},o=i=>{let o=[],s=[];for(;a.index<e.length;){let c=e[a.index];if(c.kind!==`Name`)throw Iu(`Expected an operator name`,n);o.push(c.name),s.push(...c.args);let l=o.join(`!`),u=i?i.find(e=>gi(e)===l):t(l);if(u)return{definition:u,args:Hu(s,Or(u),r)};a.index++}throw Iu(`Unknown operator ${o.join(`!`)}`,n)},s=t=>{let r=o(t),s=r.definition,c=Or(s),l=a.index===e.length-1;if(r.args.length!==c&&r.args.length!==0)throw Iu(`The operator ${s.name} requires ${c} arguments`,n);if(l)return{definition:s,args:r.args};if(s.kind!==`Operator`)throw Iu(`Cannot select a subexpression of ${s.name}`,n);i.params.push(...s.params),i.args.push(...r.args),a.current=s.body,a.index++},c=()=>{for(;a.index<e.length;){let t=e[a.index];if(t.kind!==`Name`)return;let o=a.current&&Vu(a.current,t.name,[]);if(!o)throw Iu(`Cannot find label ${t.name}`,n);i.lets.push(...o.lets),i.params.push(...o.label.params.map(e=>({name:e,arity:0}))),i.args.push(...Hu(t.args,o.label.params.length,r)),a.current=o.label.body,a.index++}},l=t=>{let o=a.current;if(!o)throw Iu(`Subexpression selection failed`,n);if(t.kind===`Colon`)return;if(o.kind===`Label`){a.current=o.body,l(t);return}if(o.kind===`Let`){if(t.kind!==`Operand`||Ru(t.operand,1)!==0)throw Iu(`A LET/IN expression has only one operand`,n);i.lets.push(o.definitions),a.current=o.body;return}let s=Bu(o);if(s&&(t.kind===`Bound`||t.kind===`At`)){i.params.push(...s.names.map(e=>({name:e,arity:0}))),t.kind===`Bound`&&i.args.push(...Hu(t.args,s.names.length,r)),a.current=s.body;return}if(o.kind===`Case`&&t.kind===`Operand`){let r=[...o.arms,...o.other?[{condition:void 0,body:o.other}]:[]],i=r[Ru(t.operand,r.length)],s=e[a.index+1];if(!i||s?.kind!==`Operand`)throw Iu(`A subexpression of CASE must have the form !i!j`,n);a.index++;let c=Ru(s.operand,2),l=c===0?i.condition:c===1?i.body:void 0;if(!l)throw Iu(`Nonexistent CASE operand`,n);a.current=l;return}if(t.kind!==`Operand`)throw Iu(`Unexpected subexpression selector`,n);let c=s?s.sets:zu(o),u=c?.[Ru(t.operand,c.length)];if(!u)throw Iu(`Nonexistent operand specified by the selector`,n);a.current=u},u=s(void 0);if(u)return Gu(u.definition,{...i,args:u.args});for(c();a.index<e.length;){let t=e[a.index];if(t.kind===`Name`){for(;a.current?.kind===`Label`;)a.current=a.current.body;if(a.current?.kind!==`Let`)throw Iu(`A name selector here must be from a LET clause`,n);i.lets.push(a.current.definitions);let e=s(a.current.definitions);if(e)return Gu(e.definition,{...i,args:[...i.args,...e.args]});c()}else l(t),a.index++}if(!a.current)throw Iu(`Subexpression selection failed`,n);return Wu(i,a.current)},qu=(e,t)=>{if(!e.includes(`!`)||t(e))return;let n=e.split(`!`),r=n.findIndex((e,r)=>t(n.slice(0,r+1).join(`!`)));if(r!==-1)return[{kind:`Name`,name:n.slice(0,r+1).join(`!`),args:[]},...n.slice(r+1).map(e=>({kind:`Name`,name:e,args:[]}))]},Ju=e=>e.kind===`Subexpression`||e.kind===`Identifier`&&e.name.includes(`!`)||e.kind===`Apply`&&e.operator.includes(`!`)||Ja(e).some(Ju),Yu=(e,t)=>{if(!Ju(e))return e;if(e.kind===`Let`){let n=n=>e.definitions.find(e=>e.name===n)??t(n);return yi(e,e=>Yu(e,n))}let n=yi(e,e=>Yu(e,t));if(n.kind===`Subexpression`)return Ku(n.selectors,t,n.location,[]);let r=n.kind===`Identifier`?n.name:n.kind===`Apply`?n.operator:``,i=qu(r,t);if(!i)return n;let a=n.kind===`Apply`?[...n.args]:[],o=Ku(i,t,n.location,a);if(a.length>0)throw Iu(`Too many arguments for ${r}`,n.location);return o},Xu=e=>{let t=new Map(e.map(e=>[e.name,e]));return e=>t.get(e)},Zu=(e,t)=>{let n=Xu(t.definitions);return{...e,substitutions:e.substitutions.map(e=>({name:e.name,expression:Yu(e.expression,n)}))}},Qu=(e,t)=>{let n=Xu([...t,...e.definitions]);return e.definitions.some(e=>Ju(e.body))||e.assumptions.some(e=>Ju(e.expression))?{...e,definitions:e.definitions.map(e=>vi(e,e=>Yu(e,n))),assumptions:e.assumptions.map(e=>({...e,expression:Yu(e.expression,n)}))}:e},$u=new Map([[`Nat`,0,[],[],[]],[`+`,0,[0,0],[2,2],[1,1]],[`-`,0,[0,0],[2,2],[1,1]],[`*`,0,[0,0],[3,3],[0,0]],[`^`,0,[0,0],[2,2],[1,1]],[`<`,0,[0,0],[2,2],[1,1]],[`>`,0,[0,0],[2,2],[1,1]],[`<=`,0,[0,0],[2,2],[1,1]],[`>=`,0,[0,0],[2,2],[1,1]],[`%`,0,[0,0],[2,2],[1,1]],[`\\div`,0,[0,0],[2,2],[1,1]],[`..`,0,[0,0],[2,2],[1,1]],[`Int`,0,[],[],[]],[`-.`,0,[0],[2],[1]],[`Seq`,0,[0],[2],[1]],[`Len`,0,[0],[2],[1]],[`\\o`,0,[0,0],[2,2],[1,1]],[`Append`,0,[0,0],[2,2],[1,1]],[`Head`,0,[0],[2],[1]],[`Tail`,0,[0],[2],[1]],[`SubSeq`,0,[0,0,0],[2,2,2],[1,1,1]],[`SelectSeq`,0,[0,1],[2,2],[1,1],[],[`1,0,0`]],[`IsFiniteSet`,0,[0],[2],[1]],[`Cardinality`,0,[0],[2],[1]],[`IsABag`,0,[0],[2],[1]],[`BagToSet`,0,[0],[2],[1]],[`SetToBag`,0,[0],[3],[1]],[`BagIn`,0,[0,0],[2,2],[1,1]],[`EmptyBag`,0,[],[],[]],[`\\oplus`,0,[0,0],[2,2],[1,1]],[`\\ominus`,0,[0,0],[2,2],[1,1]],[`BagUnion`,0,[0],[2],[1]],[`\\sqsubseteq`,0,[0,0],[2,2],[1,1]],[`SubBag`,0,[0],[2],[1]],[`BagOfAll`,0,[1,0],[2,2],[1,1]],[`BagCardinality`,0,[0],[2],[1]],[`CopiesIn`,0,[0,0],[2,2],[1,1]],[`Print`,0,[0,0],[3,3],[0,1]],[`PrintT`,0,[0],[3],[0]],[`Assert`,0,[0,0],[2,3],[1,0]],[`JavaTime`,0,[],[],[]],[`TLCGet`,0,[0],[3],[0]],[`TLCSet`,0,[0,0],[3,3],[0,0]],[`:>`,0,[0,0],[2,3],[1,1]],[`@@`,0,[0,0],[2,2],[1,1]],[`Permutations`,0,[0],[2],[1]],[`SortSeq`,0,[0,2],[2,2],[1,1],[],[`1,0,0`,`1,0,1`]],[`RandomElement`,0,[0],[3],[1]],[`Any`,0,[],[],[]],[`ToString`,0,[0],[2],[1]],[`TLCEval`,0,[0],[3],[1]],[`AssertEq`,0,[0,0],[2,2],[1,1]],[`AssertError`,0,[0,0],[2,3],[1,0]],[`TLCGetOrDefault`,0,[0,0],[3,3],[0,0]],[`TLCGetAndSet`,0,[0,2,0,0],[3,3,3,3],[0,0,0,0],[],[`1,2,1`]],[`Trace`,0,[],[],[]],[`CounterExample`,0,[],[],[]],[`ToTrace`,0,[0],[3],[0]],[`TLCModelValue`,0,[0],[2],[1]],[`TLCDefer`,0,[0],[3],[0]],[`TLCNoOp`,0,[0],[3],[1]],[`PickSuccessor`,0,[0],[3],[1]],[`TLCCache`,0,[0,0],[3,3],[1,0]],[`TLCFP`,0,[0],[3],[0]],[`TLCEvalDefinition`,0,[0],[3],[0]],[`ToJson`,0,[0],[2],[1]],[`ToJsonArray`,0,[0],[2],[1]],[`ToJsonObject`,0,[0],[2],[1]],[`JsonSerialize`,0,[0,0],[3,3],[0,0]],[`JsonDeserialize`,0,[0],[3],[0]],[`ndJsonSerialize`,0,[0,0],[3,3],[0,0]],[`ndJsonDeserialize`,0,[0],[3],[0]],[`RandomSubset`,0,[0,0],[2,2],[1,1]],[`RandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]],[`TestRandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]]].map(e=>[e[0],{name:e[0],level:e[1],params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set,formals:e[2].map((e,t)=>({name:`$${t}`,arity:e})),maxLevels:e[3],weights:e[4],minMaxLevels:e[5]??[],conditions:new Set(e[6]),nonLeibniz:/* @__PURE__ */ new Set}])),ed=(e,t)=>`${e}${t}`,td=(e,t,n)=>`${e}${t}${n}`,nd=e=>{let t=e.split(`\0`);return{operator:t[0],index:Number(t[1]),param:t[2]}},rd=(e,t,n)=>`${e},${t},${n}`,id=(e=0)=>({level:e,params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set}),ad=(e,t,n)=>e.set(t,Math.min(n,e.get(t)??3)),od=(e,t,n)=>e.set(t,Math.max(n,e.get(t)??0)),sd=(e,t,n,r)=>({...id(t),name:e,formals:[],maxLevels:n,weights:r,minMaxLevels:[],conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set}),cd=(e,t)=>e.formals.length===0&&e.maxLevels.length>0?e.maxLevels[Math.min(t,e.maxLevels.length-1)]:e.maxLevels[t]??3,ld=(e,t)=>e.formals.length===0&&e.weights.length>0?e.weights[Math.min(t,e.weights.length-1)]:e.weights[t]??1,ud=new Map([[`=`,0,[2,2],[1,1]],[`#`,0,[2,2],[1,1]],[`\\in`,0,[2,2],[1,1]],[`\\notin`,0,[2,2],[1,1]],[`\\subseteq`,0,[2,2],[1,1]],[`\\cup`,0,[2,2],[1,1]],[`\\cap`,0,[2,2],[1,1]],[`\\`,0,[2,2],[1,1]],[`=>`,0,[3,3],[1,1]],[`<=>`,0,[3,3],[1,1]],[`/\\`,0,[3,3],[1,1]],[`\\/`,0,[3,3],[1,1]],[`~`,0,[3],[1]],[`SUBSET`,0,[2],[1]],[`UNION`,0,[2],[1]],[`DOMAIN`,0,[2],[1]],[`~>`,3,[3,3],[0,0]],[`-+->`,3,[3,3],[0,0]],[`\\cdot`,2,[2,2],[0,0]],[`TRUE`,0,[],[]],[`FALSE`,0,[],[]],[`BOOLEAN`,0,[],[]],[`STRING`,0,[],[]]].map(([e,t,n,r])=>[e,{...sd(e,t,[...n],[...r]),nonLeibniz:new Set(t>1?[0,1]:[])}])),dd=sd(`$Set`,0,[2],[1]),fd=sd(`$Junction`,0,[3],[1]),pd=sd(`$Choose`,0,[2],[1]),md=sd(`$Function`,0,[3],[1]),hd=sd(`$FcnApply`,0,[2,2],[1,1]),gd=sd(`$RcdSelect`,0,[2,0],[1,1]),_d=sd(`'`,2,[1],[0]),vd=sd(`ENABLED`,1,[2],[0]),yd=sd(`[]`,3,[3],[0]),bd=sd(`$SquareAct`,2,[2,1],[0,0]),xd=sd(`$WF`,3,[1,2],[0,0]),Sd=sd(`$TemporalExists`,3,[3],[0]),Cd=(e,t)=>t.length===0?e:new Map([...e,...t.map(e=>[e.name,{kind:`Formal`,arity:e.arity}])]),wd=e=>e.map(e=>({name:e,arity:0})),Td=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Ed=/* @__PURE__ */ new Set([`/\\`,`\\/`,`=>`,`<=>`]),Dd=e=>e.kind!==`Let`&&e.kind!==`Label`,Od=e=>{let t=/* @__PURE__ */ new Map,n=(t,n)=>{let r=n.get(t);if(r?.kind===`Formal`)return{kind:`Declared`,name:t,level:0,arity:r.arity};if(r?.kind===`Let`)return{kind:`Defined`,levels:_(r.definition,r.scope)};if(e.constants.has(t))return{kind:`Declared`,name:t,level:0,arity:0};if(e.variables.has(t))return{kind:`Declared`,name:t,level:1,arity:0};let i=e.getDefinition(t);if(i)return{kind:`Defined`,levels:_(i,/* @__PURE__ */ new Map)};let a=ud.get(t)??$u.get(t);return a?{kind:`Defined`,levels:a}:{kind:`Declared`,name:t,level:0,arity:0}},r=(e,t,n)=>{let r=id(Math.max(t,...n.map(e=>e.data.level)));return r.params.add(e),n.forEach((t,n)=>{t.data.params.forEach(t=>{r.params.add(t),r.argParams.add(td(e,n,t))}),t.data.constraints.forEach((e,t)=>ad(r.constraints,t,e)),od(r.argConstraints,ed(e,n),t.data.level),t.data.argConstraints.forEach((e,t)=>od(r.argConstraints,t,e)),t.data.argParams.forEach(e=>r.argParams.add(e))}),r},i=(e,t,n=[],r=[])=>{let i=e=>r.includes(e);if(t.forEach((t,n)=>{if(!(t.operator||t.declared)&&t.data.level>cd(e,n))throw new u(`Level error in applying operator ${e.name}: The level of argument ${n+1} exceeds the maximum level allowed by the operator.`)}),n.some(e=>e.level>2))throw new u(`Level error in applying operator ${e.name}: The level of the range for a bounded variable exceeds the maximum level allowed by the operator.`);let a=n=>{let r=e.formals.findIndex(e=>e.name===n);return r===-1?void 0:t[r]},o=(t,n,r)=>e.conditions.has(rd(t,n,r)),s=id(Math.max(e.level,...t.filter((t,n)=>ld(e,n)===1).map(e=>e.data.level),...n.map(e=>e.level)));return e.params.forEach(e=>s.params.add(e)),t.forEach((t,n)=>{ld(e,n)===1&&t.data.params.forEach(e=>s.params.add(e))}),n.forEach(e=>e.params.forEach(e=>s.params.add(e))),r.forEach(e=>s.params.delete(e)),e.constraints.forEach((e,t)=>ad(s.constraints,t,e)),t.forEach(e=>e.data.constraints.forEach((e,t)=>{i(t)||ad(s.constraints,t,e)})),n.forEach(e=>e.constraints.forEach((e,t)=>ad(s.constraints,t,e))),t.forEach((t,n)=>t.data.params.forEach(t=>{i(t)||ad(s.constraints,t,cd(e,n))})),t.forEach((e,n)=>{let r=e.operator;r&&t.forEach((e,t)=>r.formals.forEach((i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>ad(s.constraints,e,cd(r,a)))}))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator)?.operator;n&&ad(s.constraints,t.param,cd(n,t.index))}),[e.argConstraints,...t.map(e=>e.data.argConstraints),...n.map(e=>e.argConstraints)].forEach(e=>e.forEach((e,t)=>od(s.argConstraints,t,e))),t.forEach((n,r)=>{let i=n.declared;i&&(Array.from({length:i.arity},(t,n)=>od(s.argConstraints,ed(i.name,n),e.minMaxLevels[r]?.[n]??0)),t.forEach((e,t)=>Array.from({length:i.arity},(n,a)=>{o(r,t,a)&&od(s.argConstraints,ed(i.name,a),e.data.level)})))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);n&&od(s.argConstraints,ed(t.operator,t.index),n.data.level)}),t.forEach(e=>e.data.argParams.forEach(e=>{i(nd(e).param)||s.argParams.add(e)})),n.forEach(e=>e.argParams.forEach(e=>s.argParams.add(e))),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);if(n)n.declared&&s.argParams.add(td(n.declared.name,t.index,t.param));else{let n=a(t.param);if(!n){s.argParams.add(e);return}n.data.params.forEach(e=>s.argParams.add(td(t.operator,t.index,e)))}}),t.forEach((e,n)=>{let r=e.declared;r&&t.forEach((e,t)=>Array.from({length:r.arity},(i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>s.argParams.add(td(r.name,a,e)))}))}),s},a=(e,t)=>{if(e.kind===`Lambda`){let n=g(`LAMBDA`,wd(e.params),e.body,t);return{data:n,operator:n}}let r=e.kind===`OperatorReference`?e.operator:e.kind===`Identifier`?e.name:void 0;if(r!==void 0){let i=n(r,t);if(i.kind===`Defined`&&(i.levels.formals.length>0||e.kind===`OperatorReference`))return{data:i.levels,operator:i.levels};if(i.kind===`Declared`&&i.arity>0){let e=id();return e.params.add(r),{data:e,declared:{name:r,arity:i.arity}}}}return{data:m(e,t)}},o=(e,t)=>e.map(e=>a(e,t)),s=(e,t,n,r=[],a=[])=>{let s=Cd(n,wd(a));return i(e,o(t,s),r.map(e=>m(e,n)),a)},c=(e,t)=>e.kind===`Declared`?r(e.name,e.level,t):i(e.levels,t),l=(e,t)=>{let n=e.map(e=>e.data.level);if(n.includes(2)&&n.includes(3))throw Td(`Formula has both temporal formula and action as arguments`,t)},d=(e,t)=>{if((e.operator===`~>`||e.operator===`-+->`)&&t.some(e=>e.data.level===2))throw Td(`Action used where only temporal formula or state predicate allowed`,e.location);Ed.has(e.operator)&&l(t,e.location)},f=(e,t)=>{let n=e.expression,r=e.kind===`Always`?`BoxAction`:`AngleAction`;if(t===2&&Dd(n)&&n.kind!==r)throw Td(e.kind===`Always`?`[] followed by action not of form [A]_v`:`<> followed by action not of form <<A>>_v`,e.location)},p=(e,t)=>{let n=new Map(t);e.definitions.forEach(e=>n.set(e.name,{kind:`Let`,definition:e,scope:n}));let r=m(e.body,n),i={level:r.level,params:new Set(r.params),constraints:new Map(r.constraints),argConstraints:new Map(r.argConstraints),argParams:new Set(r.argParams)};return e.definitions.forEach(e=>{let t=_(e,n);t.constraints.forEach((e,t)=>ad(i.constraints,t,e)),t.argConstraints.forEach((e,t)=>od(i.argConstraints,t,e)),t.argParams.forEach(e=>i.argParams.add(e))}),i},m=(e,t)=>{switch(e.kind){case`Number`:case`Decimal`:case`String`:case`ExceptAt`:return id();case`Identifier`:return c(n(e.name,t),[]);case`Apply`:{let r=o(e.args,t);return d(e,r),c(n(e.operator,t),r)}case`OperatorReference`:case`Lambda`:return a(e,t).data;case`And`:case`Or`:{let n=o(e.operands,t);return l(n,e.location),i(fd,n)}case`Prime`:case`Unchanged`:return s(_d,[e.expression],t);case`Enabled`:return s(vd,[e.expression],t);case`Always`:case`Eventually`:{let n=a(e.expression,t);return f(e,n.data.level),i(yd,[n])}case`If`:return s(fd,[e.condition,e.consequent,e.alternative],t);case`Case`:return s(fd,[...e.arms.flatMap(e=>[e.condition,e.body]),...e.other?[e.other]:[]],t);case`Let`:return p(e,t);case`Forall`:case`Exists`:{let n=s(fd,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));if(n.level===3&&e.bounds.some(e=>m(e.set,t).level===2))throw Td(`Action-level bound of quantified temporal formula`,e.location);return n}case`UnboundedQuantifier`:return s(e.isTemporal?Sd:fd,[e.body],t,[],e.names);case`Choose`:return s(pd,[e.body],t,e.set?[e.set]:[],Nr(e.pattern));case`SetEnumeration`:case`Tuple`:case`FunctionSet`:case`Product`:return s(dd,e.kind===`FunctionSet`?[e.domain,e.range]:e.kind===`Product`?e.factors:e.elements,t);case`SetFilter`:return s(dd,[e.predicate],t,[e.bound.set],Nr(e.bound.pattern));case`SetMap`:return s(dd,[e.expression],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`FunctionConstruction`:return s(md,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`Record`:return s(md,e.fields.map(e=>e.value),t);case`RecordSet`:return s(dd,e.fields.map(e=>e.value),t);case`Except`:return s(dd,[e.function,...e.updates.flatMap(e=>[...e.path.flatMap(e=>e.kind===`Index`?e.args:[]),e.value])],t);case`FunctionApplication`:return i(hd,[a(e.function,t),e.args.length===1?a(e.args[0],t):{data:s(dd,e.args,t)}]);case`FieldAccess`:return i(gd,[a(e.record,t),{data:id()}]);case`BoxAction`:case`AngleAction`:return s(bd,[e.action,e.subscript],t);case`WeakFairness`:case`StrongFairness`:return s(xd,[e.subscript,e.action],t);case`Label`:return m(e.body,t);case`Subexpression`:return id()}},h=(e,t,r=!1,i=/* @__PURE__ */ new Set)=>{let a=(e,n=r,a=t)=>h(e,a,n,i),o=(e,o)=>{let s=n(e,t);s.kind===`Declared`?(r&&i.add(e),o.forEach(e=>a(e))):o.forEach((e,t)=>a(e,r||s.levels.nonLeibniz.has(t)))};switch(e.kind){case`Identifier`:return o(e.name,[]),i;case`Apply`:return o(e.operator,e.args),i;case`Lambda`:case`Let`:return i;case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:case`BoxAction`:case`AngleAction`:case`WeakFairness`:case`StrongFairness`:return Ja(e).forEach(e=>a(e,!0)),i;case`UnboundedQuantifier`:return a(e.body,r||e.isTemporal===!0,Cd(t,wd(e.names))),i;default:return yi(e,(e,n)=>(a(e,r,Cd(t,wd(n))),e)),i}},g=(e,t,n,r)=>{let i=Cd(r,t),a=m(n,i),o=e=>t.some(t=>t.name===e),s=h(n,i),c={...id(a.level),name:e,formals:t,nonLeibniz:new Set(t.flatMap((e,t)=>s.has(e.name)?[t]:[])),maxLevels:t.map(e=>Math.min(3,a.constraints.get(e.name)??3)),weights:t.map(e=>+!!a.params.has(e.name)),minMaxLevels:t.map(e=>Array.from({length:e.arity},(t,n)=>a.argConstraints.get(ed(e.name,n))??0)),conditions:new Set(t.flatMap((e,n)=>t.flatMap((t,r)=>Array.from({length:e.arity},(e,t)=>t).filter(n=>a.argParams.has(td(e.name,n,t.name))).map(e=>rd(n,r,e)))))};return a.params.forEach(e=>{o(e)||c.params.add(e)}),a.constraints.forEach((e,t)=>{o(t)||c.constraints.set(t,e)}),a.argConstraints.forEach((e,t)=>{o(nd(t).operator)||c.argConstraints.set(t,e)}),a.argParams.forEach(e=>{let t=nd(e);o(t.operator)&&o(t.param)||c.argParams.add(e)}),c},_=(e,n)=>{let r=t.get(e);if(r)return r;let i=e.kind===`Operator`?e.params:[];t.set(e,{...id(),name:e.name,formals:i,maxLevels:i.map(()=>3),weights:i.map(()=>0),minMaxLevels:i.map(()=>[]),conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set});let a=e.kind===`Function`?{kind:`FunctionConstruction`,bounds:e.bounds,body:e.body,location:e.location}:e.body,o=g(e.name,i,a,n);return t.set(e,o),o};return{analyze:m,analyzeDefinition:_,toOperand:a}},kd=(e,t,n)=>{let r=new Map(t);e.assumptions.forEach(e=>{e.kind===`NewSymbol`?(e.set&&n.analyze(e.set,r),r.set(e.name,{kind:`Formal`,arity:e.arity})):e.kind===`AssumeProve`?kd(e,r,n):n.analyze(e,r)}),n.analyze(e.conclusion,r)},Ad=(e,t)=>{let n=Od(t);e.definitions.filter(e=>!e.name.includes(`!`)).forEach(e=>n.analyzeDefinition(e,/* @__PURE__ */ new Map)),e.assumptions.forEach(e=>n.analyze(e.expression,/* @__PURE__ */ new Map)),e.theorems.forEach(e=>e.statement.kind===`AssumeProve`?kd(e.statement,/* @__PURE__ */ new Map,n):n.analyze(e.statement,/* @__PURE__ */ new Map))},jd=(e,t)=>e.maxLevels[t]??3,Md=(e,t)=>{let n=/* @__PURE__ */ new Map,r=e=>{let r=n.get(e);if(r)return r;let i=t(e),a=Od({constants:new Set(i.constants.map(e=>e.name)),variables:new Set(i.variables),getDefinition:i.getDefinition});return n.set(e,a),a},i=/* @__PURE__ */ new Map,a=e=>{let n=i.get(e);if(n)return n;let a=t(e),o=r(e),s=a.definitions.map(e=>o.analyzeDefinition(e,/* @__PURE__ */ new Map)),c={isConstant:a.variables.length===0&&s.every(e=>e.level===0),constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set};c.isConstant||a.constants.forEach(e=>ad(c.constraints,e.name,0));let l=(e,t)=>{e.constraints.forEach((e,t)=>ad(c.constraints,t,e)),e.argConstraints.forEach((e,t)=>od(c.argConstraints,t,e)),e.argParams.forEach(e=>{let n=nd(e);t(n.operator,n.param)&&c.argParams.add(e)})};return s.forEach(e=>l(e,(t,n)=>e.formals.every(e=>e.name!==t&&e.name!==n))),a.assumptions.forEach(e=>l(o.analyze(e,/* @__PURE__ */ new Map),()=>!0)),i.set(e,c),c},o=/* @__PURE__ */ new Set;if(e.forEach(e=>{let n=`at line ${e.location.line}, column ${e.location.column}`,i=e=>o.add(`${e} ${n}`),s=t(e.module),c=a(e.module),l=r(e.instancer),u=/* @__PURE__ */ new Map;e.lets.forEach(e=>u.set(e.name,{kind:`Let`,definition:e,scope:u}));let d=[...s.constants.map(e=>({...e,maximumLevel:0})),...s.variables.map(e=>({name:e,arity:0,maximumLevel:1}))].flatMap(t=>{let n=e.substitutions.get(t.name);if(!n)return[];if(t.arity===0){let e=l.analyze(n,u);return[{...t,level:e.level,operator:void 0,isLeibniz:!0}]}let r=l.toOperand(n,u);return[{...t,level:r.data.level,operator:r.operator,isLeibniz:r.operator===void 0||r.operator.nonLeibniz.size===0}]}),f=(t,n)=>`Level error in instantiating module '${e.module}': the level of the expression or operator substituted for '${t}' must be at most ${n}`;d.forEach(t=>{!c.isConstant&&t.level>t.maximumLevel&&i(f(t.name,t.maximumLevel)),t.isLeibniz||i(`Error in instantiating module '${e.module}': a non-Leibniz operator substituted for '${t.name}'`)}),d.forEach(t=>{let n=c.constraints.get(t.name);n!==void 0&&t.level>n&&i(f(t.name,n));let r=t.operator;r&&Array.from({length:t.arity},(n,a)=>{let o=c.argConstraints.get(ed(t.name,a));o!==void 0&&jd(r,a)<o&&i(`Level error in instantiating module '${e.module}': the level of the argument ${a+1} of the operator ${r.name} must be at least ${o}`)})}),c.argParams.forEach(t=>{let n=nd(t),r=d.find(e=>e.name===n.operator)?.operator,a=d.find(e=>e.name===n.param);if(!r||!a)return;let o=jd(r,n.index);a.level>o&&i(`Level error when instantiating module '${e.module}': the level of the argument ${n.index} of the operator ${n.operator}' must be at most ${o}`)})}),o.size>0)throw new u([...o].join(`
406
- `))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t),a=i!==e&&He(i,e)?e:i;return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,a),t.cacheSize++,a},Sp=(e,t)=>{let n=e.kind;if(n===`Set`){let n=yp(e.elements,t);return n?Re(n):e}if(n===`Function`||n===`LazyFunction`&&L(e.domain)){let n=V(e),r=vp(n.domain,t),i=vp(n.range,t)??n.range;return r?xt(r.map((e,t)=>[e,i[t]])):i===n.range?n:ze(n.domain,i)}if(n===`Interval`||!k(e)||!L(e))return e;let r=R(e),i=vp(r.elements,t);return i?ht(i):r},Cp=(e,t,n)=>{for(let r=t.length;r<e.length;r++)t.push(xp(e[r],n));return t},wp=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=r?r[a]:a,s=xp(e[o],n),c=F(s,t[o]);if(c>0)return;if(r||i.push(s),c<0)return r?e.map(e=>xp(e,n)):Cp(e,i,n)}},Tp=(e,t,n)=>t.reduce((t,r)=>wp(e,t,r,n)??t,e),Ep=[`LAMBDA`,`$$InAssume`,`nullODN`,`nullOpArg`,`nullLabelNode`],Dp=/* @__PURE__ */ new Set([`THEOREM`,`LEMMA`,`COROLLARY`,`PROPOSITION`]),Op=new Map(ou.flatMap(e=>e.map(t=>[t,e[0]]))),kp=e=>Op.get(e)??e,Ap=e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return t},jp=()=>{let e={buckets:Array.from({length:11},()=>[]),threshold:8},t=/* @__PURE__ */ new Set,n=[],r=(e,t)=>(Ap(e.name)&2147483647)%t,i=()=>{let t=e.buckets.length*2+1,n=Array.from({length:t},()=>[]);for(let i=e.buckets.length-1;i>=0;i--)for(let a of e.buckets[i])n[r(a,t)].unshift(a);e.buckets=n,e.threshold=Math.floor(t*.75)};return{put:a=>{t.has(a.key)||(n.length>=e.threshold&&i(),e.buckets[r(a,e.buckets.length)].unshift(a),t.add(a.key),n.push(a))},inserted:n,enumerate:()=>e.buckets.toReversed().flat()}},Mp=(e,t,n)=>({key:t===`module`?`module ${e}`:e,name:e,kind:t,isLocal:n}),Np=(e,t)=>{let n=e[t],r=e[t+1];if(n.text===`_`&&r.kind===`Operator`)return e[t+2]?.text===`_`?{name:kp(r.text),end:t+3}:{name:r.text,end:t+2};if(n.kind===`Operator`)return{name:n.text===`-`?`-.`:kp(n.text),end:t+2};if(r?.text!==`(`)return{name:n.text,end:t+1};let i=e.findIndex((e,n)=>n>t&&e.text===`)`);return{name:n.text,end:i+1}},Pp=(e,t)=>{let n=[];for(let r=t;;){let t=Np(e,r);if(n.push(t.name),e[t.end]?.text!==`,`)return n;r=t.end+1}},Fp=e=>({line:e.line,column:e.column}),Ip=(e,t,n)=>{let r=/* @__PURE__ */ new Set,i=(a,o)=>{let s={key:o,unit:t,extends:[],instances:[],inner:[],allExtends:r};for(let t=a+1;t<e.length;t++){let a=e[t];if(a.kind===`ModuleEnd`)return{references:s,end:t};if(a.kind===`Separator`&&e[t+1]?.text===`MODULE`){let r=e[t+2].text,a=i(t,`${o}/${r}`);n.set(r,a.references),s.inner.push(a.references),t=a.end}else if(a.text===`EXTENDS`){let n=Pp(e,t+1);s.extends.push(...n),n.forEach(e=>r.add(e))}else a.text===`INSTANCE`&&e[t+1]?.kind===`Identifier`&&s.instances.push(e[t+1].text)}return{references:s,end:e.length}};return i(0,t??``).references},Lp=(e,t)=>t!==void 0&&t.line===e.line&&t.column===e.column+e.text.length,Rp=e=>{let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.text===`<`&&Lp(r,e[n+1])&&/^(\d+|\*|\+)$/.test(e[n+1].text)&&e[n+2]?.text===`>`&&Lp(e[n+1],e[n+2])){n+=Lp(e[n+2],e[n+3])?3:2;continue}let i=r.text===`MODULE`&&e[n-1]?.kind===`Separator`;r.kind!==`String`&&!i&&t.push(r.text)}return t},zp=e=>{let t=/* @__PURE__ */ new Map,n=[];return e.forEach((r,i)=>{r.kind===`Separator`&&e[i+1]?.text===`MODULE`&&n.push({name:e[i+2].text,start:i});let a=r.kind===`ModuleEnd`?n.pop():void 0;a&&!t.has(a.name)&&t.set(a.name,{start:a.start,end:i+1})}),t},Bp=(e,t)=>e.find(e=>e.name===t)??e.map(e=>Bp(e.modules,t)).find(Boolean),Vp=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=i=>{let a=n.get(i??``);if(a)return a;let o=i===void 0?e:uu.get(i)??t?.(i)??rc(e,i),s=o===void 0?[]:se(o),c=zp(s),l=c.get(s[2]?.text??``)??{start:0,end:0},u={module:void 0},d={tokens:s,...l,getModule:()=>u.module??=ac(o??``)};return n.set(i??``,d),c.forEach((e,t)=>{e.start===l.start||r.has(t)||r.set(t,{tokens:s,...e,getModule:()=>Bp(d.getModule().modules,t)??d.getModule()})}),d};return i(void 0),e=>(e===void 0?void 0:r.get(e))??i(e)},Hp=(e,t)=>{let n=Vp(e,t),r=e=>{let t=e.tokens,n=e.getModule(),r=[],i=[],o=(e,n)=>{let i=Pp(t,e+1);r.push({location:Fp(t[e]),apply:e=>i.forEach(t=>e.put(Mp(t,n,!1)))})},s=new Set(n.definitions.filter(e=>e.isRecursive).map(e=>e.name)),c={value:0};t.slice(e.start,e.end).forEach((n,a)=>{let l=e.start+a,u=t[l];if(u.kind===`Separator`&&t[l+1]?.text===`MODULE`){if(c.value++,c.value===2){let e=t[l+2].text;r.push({location:Fp(u),apply:t=>t.put(Mp(e,`module`,!1))})}}else u.kind===`ModuleEnd`&&c.value--,c.value===1&&u.kind===`Keyword`&&((u.text===`CONSTANT`||u.text===`CONSTANTS`)&&o(l,`constant`),(u.text===`VARIABLE`||u.text===`VARIABLES`)&&o(l,`variable`),u.text===`RECURSIVE`&&Pp(t,l+1).every(e=>s.has(e))&&o(l,`definition`),Dp.has(u.text)&&t[l+1]?.kind===`Identifier`&&t[l+2]?.text===`==`&&(i.push(Fp(u)),r.push({location:Fp(u),apply:e=>e.put(Mp(t[l+1].text,`theorem`,!1))})))}),n.assumptions.forEach(e=>{i.push(e.location);let t=e.name;t!==void 0&&r.push({location:e.location,apply:e=>e.put(Mp(t,`theorem`,!1))})});let l=e=>i.some(t=>t.line===e.line&&t.column===e.column);return n.definitions.forEach(e=>{if(l(e.location))return;let t=kp(e.name);r.push({location:e.location,apply:n=>n.put(Mp(t,`definition`,e.isLocal))})}),n.instances.forEach(e=>{r.push({location:e.location,apply:t=>{let n=a(e.module).enumerate(),r=e.name===void 0?``:`${e.name}!`,i=n.filter(e=>e.kind===`definition`),o=n.filter(e=>e.kind===`theorem`);[...i,...o].forEach(n=>{n.isLocal||t.put(Mp(`${r}${n.name}`,n.kind,e.isLocal))}),e.name!==void 0&&t.put(Mp(e.name,`definition`,e.isLocal))}})}),r.sort((e,t)=>Dr(e.location,t.location)?-1:+!!Dr(t.location,e.location))},i=/* @__PURE__ */ new Map,a=e=>{let t=i.get(e??``);if(t)return t;let o=jp();i.set(e??``,o),au.toReversed().forEach(e=>o.put(Mp(e,`builtin`,!1)));let s=n(e);return s.getModule().extends.forEach(e=>a(e).inserted.forEach(e=>{e.isLocal||o.put(e)})),r(s).forEach(e=>e.apply(o)),o};return a(void 0).enumerate().filter(e=>e.kind===`variable`).map(e=>e.name).reverse()},Up=(e,t,n)=>{let r=Vp(e,n),i=/* @__PURE__ */ new Set,a=e=>{i.add(e)},o=e=>{e.kind===`ModelValue`&&a(e.name),e.kind===`String`&&a(e.value),e.kind===`Set`&&e.elements.forEach(o)};t.constants.forEach(e=>{e.args?.forEach(o),o(e.value)}),su.forEach(a);let s=e=>{let t=r(e);return t.tokens.slice(t.start,t.end)},c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,u=e=>{let t=l.get(e);if(t)return t;let n=Ip(s(e),e,c);return l.set(e,n),n},d=e=>c.get(e)??u(e),f=/* @__PURE__ */ new Set,p=(e,t)=>c.has(t)||f.has(`${e.key}>${t}`),m=(e,t,n)=>{let r=[...e.extends.map(d),...e.instances.filter(t=>p(e,t)).map(d),...e.inner];for(let e of r){let r=n(e,t);if(r)return r}},h=e=>{let t=(n,r)=>{if(r.has(n.key))return;r.add(n.key);let i=e(n).find(e=>!p(n,e));return i===void 0?m(n,r,t):[n,i]};return t},g=h(e=>e.extends),_=h(e=>e.instances),v=/* @__PURE__ */ new Set([void 0]),y=/* @__PURE__ */ new Map;Rp(s(void 0)).forEach((e,t)=>{t===3&&lu.forEach(a),a(e)});let b=u(void 0);for(;;){let e=g(b,/* @__PURE__ */ new Set)??_(b,/* @__PURE__ */ new Set);if(!e)break;let[t,n]=e;f.add(`${t.key}>${n}`),y.set(t.unit,[...y.get(t.unit)??[],n]),!v.has(n)&&(v.add(n),Rp(s(n)).forEach(a))}Ep.forEach(a);let ee=/* @__PURE__ */ new Set,x=e=>{if(ee.has(e))return;ee.add(e);let t=y.get(e)??[],n=u(e).allExtends;[...t.filter(e=>n.has(e)),...t.filter(e=>!n.has(e))].forEach(x),s(e).forEach(e=>{e.kind===`String`&&a(e.text)})};return x(void 0),cu.forEach(a),[...i]},Wp=(e,t)=>e*((t-e)/2**64),Gp=e=>e.includes(`.`)?e:`${e}.0`,Kp=e=>{let t=Math.abs(e);if(t>=.001&&t<1e7)return Gp(String(e));let[n,r]=e.toExponential().split(`e`);return`${Gp(n)}E${r.replace(`+`,``)}`},qp=e=>e!==void 0&&e>=`0`&&e<=`9`,Jp=e=>{if(e===0)return`0.0`;let t=Kp(e),n={next:0,digits:0,result:``};for(;t[n.next]===`0`;)n.next++;for(;qp(t[n.next]);)n.result+=t[n.next++],n.digits++;if(n.next===t.length)return n.result;if(t[n.next]!==`.`)return t;if(n.next++,n.digits>=2)for(;qp(t[n.next]);)n.next++;else{if(n.result+=`.`,n.digits===0)for(;t[n.next]===`0`;)n.result+=t[n.next++];for(;qp(t[n.next])&&n.digits<2;)n.result+=t[n.next++],n.digits++;for(qp(t[n.next])&&Number(t[n.next])>=5&&(n.result=Yp(n.result));qp(t[n.next]);)n.next++}return n.next>=t.length?n.result:t[n.next]===`E`?`${n.result}${t.slice(n.next)}`:t},Yp=e=>{let t=e.length-1;if(t<0)return`1`;let n=e[t],r=e.slice(0,t);return n===`.`?`${Yp(r)}.`:n===`9`?`${Yp(r)}0`:`${r}${Number(n)+1}`},Xp=e=>{let t={value:0};for(;10n**BigInt(t.value+1)<e*10n;)t.value++;let n=10n**BigInt(t.value+1),r=n/e,i=n%e*2n>=e;return Number(`${r+(i?1n:0n)}e-${t.value+1}`)},Zp=(e,t,n)=>{if(Wp(e,t)<1e-10)return;let r=n().sort();return r.reduce((e,t,n)=>{let i=r[n-1];return n>0&&i<0n==t<0n&&t-i<e?t-i:e},9223372036854775807n)},Qp=e=>{let t=e.reduce((e,t)=>e+t,0);if(t===0)return;let n=e.flatMap((e,t)=>e>0?[t]:[]),r=e.reduce((e,t,n)=>e+t*n,0),i=Math.floor(t*.95),a={count:0},o=n.find(t=>(a.count+=e[t],a.count>i));return`The average outdegree of the complete state graph is ${Math.round(r/t)} (minimum is ${n[0]}, the maximum ${n[n.length-1]} and the 95th percentile is ${o}).`},$p={line:0,column:0},em=`Failed to recover the initial state from its fingerprint.`,tm=`Failed to recover the next state from its fingerprint.`,nm=e=>({kind:`Identifier`,name:e,location:$p}),rm=/* @__PURE__ */ new Set([`name`,`property`]),im=(e,t,n)=>{let r=Ya(t,n);if(!r)throw new d(`The ${e} ${t} specified in the configuration file\nis not defined in the specification.`);if(r.kind===`Operator`&&r.params.length>0)throw new d(rm.has(e)?`TLC requires ${t} not to take any argument.`:`TLC requires ${e} not to take any argument, but one was given: ${t}`);return r},am=(e,t,n)=>{let r=im(e,t,n);if(Za(r,n))throw new d(`The ${e} ${t} cannot be a constant.`);return r},om=(e,t,n)=>{if(Za(t,n)&&t.body.kind!==`Number`&&t.body.kind!==`String`)try{return X(nm(e),Tm(n,void 0,void 0))}catch(e){if(e instanceof f)return;throw e}},sm=(e,t,n)=>{let r=im(e,t,n),i=om(t,r,n);if(i!==void 0&&i!==!0)throw new d(`The ${e} of ${t} is equal to ${H(i)}`);return i===void 0?r:void 0},cm=(e,t)=>{let n=Od({constants:new Set(t.constants.keys()),variables:new Set(t.variables),getDefinition:e=>Ya(e,t)});return e.flatMap(e=>{let r=sm(`invariant`,e,t);if(!r)return[];let i=n.analyzeDefinition(r,/* @__PURE__ */ new Map);if(i.level>=2)throw new d(`The invariant ${e} is not a state predicate (one with no primes or temporal operators).${i.params.size===0?``:`
406
+ `))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t),a=i!==e&&He(i,e)?e:i;return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,a),t.cacheSize++,a},Sp=(e,t)=>{let n=e.kind;if(n===`Set`){let n=yp(e.elements,t);return n?Re(n):e}if(n===`Function`||n===`LazyFunction`&&L(e.domain)){let n=V(e),r=vp(n.domain,t),i=vp(n.range,t)??n.range;if(r){let e=xt(r.map((e,t)=>[e,i[t]]));return e.domain.every((e,t)=>e===n.domain[t])?ze(n.domain,e.range):e}return i===n.range?n:ze(n.domain,i)}if(n===`Interval`||!k(e)||!L(e))return e;let r=R(e),i=vp(r.elements,t);return i?ht(i):r},Cp=(e,t,n)=>{for(let r=t.length;r<e.length;r++)t.push(xp(e[r],n));return t},wp=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=r?r[a]:a,s=xp(e[o],n),c=F(s,t[o]);if(c>0)return;if(r||i.push(s),c<0)return r?e.map(e=>xp(e,n)):Cp(e,i,n)}},Tp=(e,t,n)=>t.reduce((t,r)=>wp(e,t,r,n)??t,e),Ep=[`LAMBDA`,`$$InAssume`,`nullODN`,`nullOpArg`,`nullLabelNode`],Dp=/* @__PURE__ */ new Set([`THEOREM`,`LEMMA`,`COROLLARY`,`PROPOSITION`]),Op=new Map(ou.flatMap(e=>e.map(t=>[t,e[0]]))),kp=e=>Op.get(e)??e,Ap=e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return t},jp=()=>{let e={buckets:Array.from({length:11},()=>[]),threshold:8},t=/* @__PURE__ */ new Set,n=[],r=(e,t)=>(Ap(e.name)&2147483647)%t,i=()=>{let t=e.buckets.length*2+1,n=Array.from({length:t},()=>[]);for(let i=e.buckets.length-1;i>=0;i--)for(let a of e.buckets[i])n[r(a,t)].unshift(a);e.buckets=n,e.threshold=Math.floor(t*.75)};return{put:a=>{t.has(a.key)||(n.length>=e.threshold&&i(),e.buckets[r(a,e.buckets.length)].unshift(a),t.add(a.key),n.push(a))},inserted:n,enumerate:()=>e.buckets.toReversed().flat()}},Mp=(e,t,n)=>({key:t===`module`?`module ${e}`:e,name:e,kind:t,isLocal:n}),Np=(e,t)=>{let n=e[t],r=e[t+1];if(n.text===`_`&&r.kind===`Operator`)return e[t+2]?.text===`_`?{name:kp(r.text),end:t+3}:{name:r.text,end:t+2};if(n.kind===`Operator`)return{name:n.text===`-`?`-.`:kp(n.text),end:t+2};if(r?.text!==`(`)return{name:n.text,end:t+1};let i=e.findIndex((e,n)=>n>t&&e.text===`)`);return{name:n.text,end:i+1}},Pp=(e,t)=>{let n=[];for(let r=t;;){let t=Np(e,r);if(n.push(t.name),e[t.end]?.text!==`,`)return n;r=t.end+1}},Fp=e=>({line:e.line,column:e.column}),Ip=(e,t,n)=>{let r=/* @__PURE__ */ new Set,i=(a,o)=>{let s={key:o,unit:t,extends:[],instances:[],inner:[],allExtends:r};for(let t=a+1;t<e.length;t++){let a=e[t];if(a.kind===`ModuleEnd`)return{references:s,end:t};if(a.kind===`Separator`&&e[t+1]?.text===`MODULE`){let r=e[t+2].text,a=i(t,`${o}/${r}`);n.set(r,a.references),s.inner.push(a.references),t=a.end}else if(a.text===`EXTENDS`){let n=Pp(e,t+1);s.extends.push(...n),n.forEach(e=>r.add(e))}else a.text===`INSTANCE`&&e[t+1]?.kind===`Identifier`&&s.instances.push(e[t+1].text)}return{references:s,end:e.length}};return i(0,t??``).references},Lp=(e,t)=>t!==void 0&&t.line===e.line&&t.column===e.column+e.text.length,Rp=e=>{let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.text===`<`&&Lp(r,e[n+1])&&/^(\d+|\*|\+)$/.test(e[n+1].text)&&e[n+2]?.text===`>`&&Lp(e[n+1],e[n+2])){n+=Lp(e[n+2],e[n+3])?3:2;continue}let i=r.text===`MODULE`&&e[n-1]?.kind===`Separator`;r.kind!==`String`&&!i&&t.push(r.text)}return t},zp=e=>{let t=/* @__PURE__ */ new Map,n=[];return e.forEach((r,i)=>{r.kind===`Separator`&&e[i+1]?.text===`MODULE`&&n.push({name:e[i+2].text,start:i});let a=r.kind===`ModuleEnd`?n.pop():void 0;a&&!t.has(a.name)&&t.set(a.name,{start:a.start,end:i+1})}),t},Bp=(e,t)=>e.find(e=>e.name===t)??e.map(e=>Bp(e.modules,t)).find(Boolean),Vp=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=i=>{let a=n.get(i??``);if(a)return a;let o=i===void 0?e:uu.get(i)??t?.(i)??rc(e,i),s=o===void 0?[]:se(o),c=zp(s),l=c.get(s[2]?.text??``)??{start:0,end:0},u={module:void 0},d={tokens:s,...l,getModule:()=>u.module??=ac(o??``)};return n.set(i??``,d),c.forEach((e,t)=>{e.start===l.start||r.has(t)||r.set(t,{tokens:s,...e,getModule:()=>Bp(d.getModule().modules,t)??d.getModule()})}),d};return i(void 0),e=>(e===void 0?void 0:r.get(e))??i(e)},Hp=(e,t)=>{let n=Vp(e,t),r=e=>{let t=e.tokens,n=e.getModule(),r=[],i=[],o=(e,n)=>{let i=Pp(t,e+1);r.push({location:Fp(t[e]),apply:e=>i.forEach(t=>e.put(Mp(t,n,!1)))})},s=new Set(n.definitions.filter(e=>e.isRecursive).map(e=>e.name)),c={value:0};t.slice(e.start,e.end).forEach((n,a)=>{let l=e.start+a,u=t[l];if(u.kind===`Separator`&&t[l+1]?.text===`MODULE`){if(c.value++,c.value===2){let e=t[l+2].text;r.push({location:Fp(u),apply:t=>t.put(Mp(e,`module`,!1))})}}else u.kind===`ModuleEnd`&&c.value--,c.value===1&&u.kind===`Keyword`&&((u.text===`CONSTANT`||u.text===`CONSTANTS`)&&o(l,`constant`),(u.text===`VARIABLE`||u.text===`VARIABLES`)&&o(l,`variable`),u.text===`RECURSIVE`&&Pp(t,l+1).every(e=>s.has(e))&&o(l,`definition`),Dp.has(u.text)&&t[l+1]?.kind===`Identifier`&&t[l+2]?.text===`==`&&(i.push(Fp(u)),r.push({location:Fp(u),apply:e=>e.put(Mp(t[l+1].text,`theorem`,!1))})))}),n.assumptions.forEach(e=>{i.push(e.location);let t=e.name;t!==void 0&&r.push({location:e.location,apply:e=>e.put(Mp(t,`theorem`,!1))})});let l=e=>i.some(t=>t.line===e.line&&t.column===e.column);return n.definitions.forEach(e=>{if(l(e.location))return;let t=kp(e.name);r.push({location:e.location,apply:n=>n.put(Mp(t,`definition`,e.isLocal))})}),n.instances.forEach(e=>{r.push({location:e.location,apply:t=>{let n=a(e.module).enumerate(),r=e.name===void 0?``:`${e.name}!`,i=n.filter(e=>e.kind===`definition`),o=n.filter(e=>e.kind===`theorem`);[...i,...o].forEach(n=>{n.isLocal||t.put(Mp(`${r}${n.name}`,n.kind,e.isLocal))}),e.name!==void 0&&t.put(Mp(e.name,`definition`,e.isLocal))}})}),r.sort((e,t)=>Dr(e.location,t.location)?-1:+!!Dr(t.location,e.location))},i=/* @__PURE__ */ new Map,a=e=>{let t=i.get(e??``);if(t)return t;let o=jp();i.set(e??``,o),au.toReversed().forEach(e=>o.put(Mp(e,`builtin`,!1)));let s=n(e);return s.getModule().extends.forEach(e=>a(e).inserted.forEach(e=>{e.isLocal||o.put(e)})),r(s).forEach(e=>e.apply(o)),o};return a(void 0).enumerate().filter(e=>e.kind===`variable`).map(e=>e.name).reverse()},Up=(e,t,n)=>{let r=Vp(e,n),i=/* @__PURE__ */ new Set,a=e=>{i.add(e)},o=e=>{e.kind===`ModelValue`&&a(e.name),e.kind===`String`&&a(e.value),e.kind===`Set`&&e.elements.forEach(o)};t.constants.forEach(e=>{e.args?.forEach(o),o(e.value)}),su.forEach(a);let s=e=>{let t=r(e);return t.tokens.slice(t.start,t.end)},c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,u=e=>{let t=l.get(e);if(t)return t;let n=Ip(s(e),e,c);return l.set(e,n),n},d=e=>c.get(e)??u(e),f=/* @__PURE__ */ new Set,p=(e,t)=>c.has(t)||f.has(`${e.key}>${t}`),m=(e,t,n)=>{let r=[...e.extends.map(d),...e.instances.filter(t=>p(e,t)).map(d),...e.inner];for(let e of r){let r=n(e,t);if(r)return r}},h=e=>{let t=(n,r)=>{if(r.has(n.key))return;r.add(n.key);let i=e(n).find(e=>!p(n,e));return i===void 0?m(n,r,t):[n,i]};return t},g=h(e=>e.extends),_=h(e=>e.instances),v=/* @__PURE__ */ new Set([void 0]),y=/* @__PURE__ */ new Map;Rp(s(void 0)).forEach((e,t)=>{t===3&&lu.forEach(a),a(e)});let b=u(void 0);for(;;){let e=g(b,/* @__PURE__ */ new Set)??_(b,/* @__PURE__ */ new Set);if(!e)break;let[t,n]=e;f.add(`${t.key}>${n}`),y.set(t.unit,[...y.get(t.unit)??[],n]),!v.has(n)&&(v.add(n),Rp(s(n)).forEach(a))}Ep.forEach(a);let ee=/* @__PURE__ */ new Set,x=e=>{if(ee.has(e))return;ee.add(e);let t=y.get(e)??[],n=u(e).allExtends;[...t.filter(e=>n.has(e)),...t.filter(e=>!n.has(e))].forEach(x),s(e).forEach(e=>{e.kind===`String`&&a(e.text)})};return x(void 0),cu.forEach(a),[...i]},Wp=(e,t)=>e*((t-e)/2**64),Gp=e=>e.includes(`.`)?e:`${e}.0`,Kp=e=>{let t=Math.abs(e);if(t>=.001&&t<1e7)return Gp(String(e));let[n,r]=e.toExponential().split(`e`);return`${Gp(n)}E${r.replace(`+`,``)}`},qp=e=>e!==void 0&&e>=`0`&&e<=`9`,Jp=e=>{if(e===0)return`0.0`;let t=Kp(e),n={next:0,digits:0,result:``};for(;t[n.next]===`0`;)n.next++;for(;qp(t[n.next]);)n.result+=t[n.next++],n.digits++;if(n.next===t.length)return n.result;if(t[n.next]!==`.`)return t;if(n.next++,n.digits>=2)for(;qp(t[n.next]);)n.next++;else{if(n.result+=`.`,n.digits===0)for(;t[n.next]===`0`;)n.result+=t[n.next++];for(;qp(t[n.next])&&n.digits<2;)n.result+=t[n.next++],n.digits++;for(qp(t[n.next])&&Number(t[n.next])>=5&&(n.result=Yp(n.result));qp(t[n.next]);)n.next++}return n.next>=t.length?n.result:t[n.next]===`E`?`${n.result}${t.slice(n.next)}`:t},Yp=e=>{let t=e.length-1;if(t<0)return`1`;let n=e[t],r=e.slice(0,t);return n===`.`?`${Yp(r)}.`:n===`9`?`${Yp(r)}0`:`${r}${Number(n)+1}`},Xp=e=>{let t={value:0};for(;10n**BigInt(t.value+1)<e*10n;)t.value++;let n=10n**BigInt(t.value+1),r=n/e,i=n%e*2n>=e;return Number(`${r+(i?1n:0n)}e-${t.value+1}`)},Zp=(e,t,n)=>{if(Wp(e,t)<1e-10)return;let r=n().sort();return r.reduce((e,t,n)=>{let i=r[n-1];return n>0&&i<0n==t<0n&&t-i<e?t-i:e},9223372036854775807n)},Qp=e=>{let t=e.reduce((e,t)=>e+t,0);if(t===0)return;let n=e.flatMap((e,t)=>e>0?[t]:[]),r=e.reduce((e,t,n)=>e+t*n,0),i=Math.floor(t*.95),a={count:0},o=n.find(t=>(a.count+=e[t],a.count>i));return`The average outdegree of the complete state graph is ${Math.round(r/t)} (minimum is ${n[0]}, the maximum ${n[n.length-1]} and the 95th percentile is ${o}).`},$p={line:0,column:0},em=`Failed to recover the initial state from its fingerprint.`,tm=`Failed to recover the next state from its fingerprint.`,nm=e=>({kind:`Identifier`,name:e,location:$p}),rm=/* @__PURE__ */ new Set([`name`,`property`]),im=(e,t,n)=>{let r=Ya(t,n);if(!r)throw new d(`The ${e} ${t} specified in the configuration file\nis not defined in the specification.`);if(r.kind===`Operator`&&r.params.length>0)throw new d(rm.has(e)?`TLC requires ${t} not to take any argument.`:`TLC requires ${e} not to take any argument, but one was given: ${t}`);return r},am=(e,t,n)=>{let r=im(e,t,n);if(Za(r,n))throw new d(`The ${e} ${t} cannot be a constant.`);return r},om=(e,t,n)=>{if(Za(t,n)&&t.body.kind!==`Number`&&t.body.kind!==`String`)try{return X(nm(e),Tm(n,void 0,void 0))}catch(e){if(e instanceof f)return;throw e}},sm=(e,t,n)=>{let r=im(e,t,n),i=om(t,r,n);if(i!==void 0&&i!==!0)throw new d(`The ${e} of ${t} is equal to ${H(i)}`);return i===void 0?r:void 0},cm=(e,t)=>{let n=Od({constants:new Set(t.constants.keys()),variables:new Set(t.variables),getDefinition:e=>Ya(e,t)});return e.flatMap(e=>{let r=sm(`invariant`,e,t);if(!r)return[];let i=n.analyzeDefinition(r,/* @__PURE__ */ new Map);if(i.level>=2)throw new d(`The invariant ${e} is not a state predicate (one with no primes or temporal operators).${i.params.size===0?``:`
407
407
  Note that a bug can cause TLC to incorrectly report this error.
408
408
  If you believe your TLA+ or PlusCal specification to be correct,
409
409
  please check if this bug described in LevelNode.java starting at line 590ff affects you.`}`);return[{name:e,expression:nm(e),scope:void 0}]})},lm=(e,t)=>{if(!A(e))return;let n=V(e);if(!n.domain.every(e=>typeof e==`string`))return;let r=n.domain.map((e,t)=>[String(e),n.range[t]]);return Object.fromEntries(r.sort((e,n)=>t.indexOf(e[0])-t.indexOf(n[0])))},um=(e,t)=>{if(e.kind===`And`)return e.operands.flatMap(e=>um(e,t));if(e.kind===`Identifier`&&!t.constants.has(e.name)){let n=Ya(e.name,t);if(n?.kind===`Operator`&&n.params.length===0)return um(n.body,t)}return[e]},dm=(e,t,n)=>{let r=e.expression;if(r.kind!==`Identifier`||$(r,e.scope,t)>0)return!1;let i=X(r,Tm(t,void 0,void 0,e.scope));if(i===!1)throw new d(`The spec is trivially false because ${r.name} is false.`);if(i!==!0)throw new d(`The operator ${r.name}, which equals ${H(i)},\ncannot be used as a ${n}`);return!0},fm=(t,n)=>{if(t.specification===void 0){let e=(e,t)=>{if(e===void 0)return;let r=im(t,e,n).body,i=nm(e);if(r.kind!==`Number`&&r.kind!==`String`&&$(i,void 0,n)===0)throw new d(`The ${t} ${e} cannot be a constant.`);return i};return{init:e(t.init,`initial predicate`),next:e(t.next,`next state action`),scope:void 0,temporals:[]}}let r=[],i=[],o=[],s=im(`name`,t.specification,n),c=om(t.specification,s,n);if(c!==void 0)throw new d(`The value of ${t.specification} is equal to ${H(c)}`);if(kf(s.body,void 0,n,!1).forEach(s=>{let c=s.expression;if(dm(s,n,`spec`))return;if(c.kind===`UnboundedQuantifier`&&c.isTemporal)throw a(new d(`TLC does not support temporal existential, nor universal, quantification over state variables.`),e.error);if(c.kind===`Always`&&c.expression.kind===`BoxAction`){i.push({expression:c.expression.action,scope:s.scope});return}if(c.kind===`Always`&&$(c.expression,s.scope,n)<2)throw new d(`TLC cannot handle []P in the specification ${t.specification} when P is a state predicate`);let l=$(c,s.scope,n);if(l===3)o.push(s);else{if(l===2)throw new d(`TLC cannot handle the action-level conjunct of the specification ${t.specification}`);r.push(s)}}),i.length>1)throw new d(`The specification ${t.specification} must contain at most one [][Next]_vars`);let l=[...r,...i],u=e=>`$specification${e}`,f=l.reduce((e,t,n)=>t.scope===void 0?e:{name:u(n),binding:{kind:`Thunk`,expression:t.expression,scope:t.scope,state:void 0,next:void 0,cache:void 0},parent:e},void 0),p=(e,t)=>e.scope===void 0?e.expression:{kind:`Identifier`,name:u(t),location:e.expression.location,resolution:{kind:`Local`}};return{init:r.length===0?void 0:{kind:`And`,operands:r.map(p),location:$p},next:i.length===0?void 0:p(i[0],r.length),scope:f,temporals:o}},pm=(e,t)=>{let n={initialPredicates:[],invariants:[],actionProperties:[],liveness:[]};return e.properties.forEach(e=>{let r=sm(`property`,e,t);r&&kf(r.body,void 0,t,!0).forEach(r=>{let i=r.expression;if(dm(r,t,`property`))return;if(i.kind===`Always`&&i.expression.kind===`BoxAction`){n.actionProperties.push({name:e,box:i.expression,action:i.expression.action,subscript:i.expression.subscript,scope:r.scope});return}if(i.kind===`Always`&&$(i.expression,r.scope,t)<=1){n.invariants.push({name:e,expression:i.expression,scope:r.scope});return}let a=$(i,r.scope,t);if(a<2)n.initialPredicates.push({name:e,expression:i,scope:r.scope});else{if(a===2)throw new d(`The property ${e} is an action-level formula`);n.liveness.push({name:e,expression:i,scope:r.scope})}})}),n},mm=(e,t,n)=>t.flatMap(t=>sm(e,t,n)?[{name:t,expression:nm(t),scope:void 0}]:[]),hm=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`?n.bodyRange:void 0},gm=(e,t)=>e.map((n,r)=>{if(e.indexOf(n)!==r)throw new d(`_POSSIBLE lists ${n} more than once`);am(`possible`,n,t);let i=nm(n);if($(i,void 0,t)===3)throw new d(`The possible of ${n} is equal to a temporal formula; only state- and action-level predicates are supported`);return{name:n,expression:i,scope:void 0}}),_m=(e,t,n)=>{if(e.kind!==`Apply`||e.operator!==`\\in`||t?.length!==1)return;let r=e.args[0];if(!(r.kind!==`Identifier`||J(r)))return n.variableIndex.get(r.name)===t[0]?{variable:t[0],set:e.args[1]}:void 0},vm=(e,t)=>e.flatMap(e=>um(e.expression,t).map(n=>{let r=Ts(n,t);return{name:e.name,expression:n,scope:e.scope,variables:r,membership:_m(n,r,t)}})),ym=(e,t,n)=>{let r=e.variables;if(!n||!r)return!1;for(let e=0;e<r.length;e++)if(t[r[e]]!==n[r[e]])return!1;return!0},bm=/[\u0100-\uffff]/,xm=/* @__PURE__ */ new Set([`JsonDeserialize`,`ndJsonDeserialize`]),Sm=e=>e.kind===`String`?bm.test(e.value):e.kind===`Set`&&e.elements.some(Sm),Cm=e=>e.kind===`String`&&bm.test(e.value)||e.kind===`Apply`&&xm.has(e.operator)||Ja(e).some(Cm),wm=(e,t)=>e.constants.some(e=>Sm(e.value)||(e.args??[]).some(Sm))||[...t.definitions.values()].some(e=>Cm(e.body)||e.kind===`Function`&&e.bounds.some(e=>Cm(e.set))),Tm=(e,t,n,r)=>({environment:e,scope:r,state:t,next:n}),Em=(e,t,n)=>qa(X(e,t),n),Dm=(e,t,n=Om)=>{let r=X(e,t);if(typeof r!=`boolean`)throw new f(n(e,t.environment));return r},Om=(e,t)=>{let n=e.kind===`Identifier`?Ya(e.name,t):void 0,r=n?.kind===`Operator`?n.body:e,i=n?.kind===`Operator`?n.bodyRange:void 0;return`TLC expected a boolean value, but did not find one. ${r.kind===`Number`?r.text??String(r.value):i?Pa(i):Fa(r)}`},km=()=>{},Am=(e,t,n)=>e.forEach(e=>{let r=t.possibleCounts.get(e.name)??0,i=Em(e.expression,n,`_POSSIBLE ${e.name}`);t.possibleCounts.set(e.name,i?r+1:r)}),jm=(e,t,n)=>{try{return Em(e,Tm(t,void 0,void 0),n)?void 0:{message:void 0}}catch(e){if(e instanceof f)return{message:e.message};throw e}},Mm=(e,t)=>{for(let n of e.filter(e=>!e.isAxiom)){let e=jm(n.expression,t,`an assumption`);if(e)return{name:Fa(n.expression),trace:[],message:e.message}}},Nm=(t,n,r)=>{let i=cm(t.invariants,n),o=fm(t,n),s=pm(t,n),c=vm([...i,...s.invariants],n),l=c.length>0||s.actionProperties.length>0||s.liveness.length>0;if(o.init===void 0&&(l||s.initialPredicates.length>0||n.variables.length>0))throw new d(`The configuration file did not specify the initial state predicate.`);if(o.next===void 0&&l)throw new d(`The configuration file did not specify the next state predicate.`);let u=vm(mm(`constraint`,t.constraints,n),n),f=mm(`action constraint`,t.actionConstraints,n);t.rlReward!==void 0&&im(`rlreward`,t.rlReward,n),t.periodic!==void 0&&im(`periodic`,t.periodic,n);let p=gm(t.possible,n);if(n.variables.length===0)return;let m=t.symmetry===void 0?[]:_p(t.symmetry,n);t.view!==void 0&&im(`view function`,t.view,n);let h=t.view===void 0?void 0:{name:t.view,expression:nm(t.view),scope:void 0},g=s.actionProperties.map(e=>{let t={kind:`Unchanged`,expression:e.subscript,location:$p};return{...e,unchanged:t}}),_=e=>$(e.expression,void 0,n)>=2,v=p.filter(e=>!_(e)),y=p.filter(_),b=n.runtime,ee={indices:void 0},x=()=>{if(ee.indices)return ee.indices;let e=r(),t=t=>{let r=e.indexOf(n.variables[t]);return r===-1?n.variables.length:r};return ee.indices=n.variables.map((e,t)=>t).sort((e,n)=>t(e)-t(n)),ee.indices},te=m.length>0?x():void 0,ne=(e,t)=>X(e,Tm(n,t,void 0)),re=e=>{let t=x(),n=m.length===0?e:Tp(e,m,t);return Sc(h===void 0?t.map(e=>n[e]):[ne(h.expression,n)])},S=wm(t,n);b.getFingerprint=re;let ie=()=>{let e=p.find(e=>!b.possibleCounts.get(e.name));if(!e)return;let t=hm(e.name,n),r=t?` at ${Pa(t)}`:``;return{name:e.name,message:`The _POSSIBLE predicate ${e.name}${r} was never witnessed.\nOthers may be unwitnessed too; only witnessed predicates appear with a\nnon-zero count in the record printed above.\nSee https://explain.tlapl.us/possible-conditions for additional details.`,counts:me(H(Vc(b),!0))}};return{properties:s,spec:o,isSymmetric:m.length>0,getTlcOrder:x,getStoredFingerprints:(e,t)=>{if(h!==void 0||S)return BigInt64Array.from(e,re);let n=x(),r=Tc();return BigInt64Array.from(t,e=>r(n.map(t=>e[t])))},getFingerprintState:e=>{if(S)return[String(re(e))];let t=m.length===0?e:Tp(e,m,te);return h===void 0?t:[ne(h.expression,t)]},findViolatedInvariant:(t,r)=>c.find(i=>{if(ym(i,t,r))return!1;try{let e=Tm(n,t,void 0,i.scope),a=i.membership;return r&&a?!Qt(t[a.variable],r[a.variable],X(a.set,e)):!Dm(i.expression,e)}catch(t){throw r?Pm(a(t,e.safetyEvaluationFailure),`Evaluating invariant ${i.name} failed.`):t}}),satisfiesConstraints:(e,t)=>u.every(r=>ym(r,e,t)||Dm(r.expression,Tm(n,e,void 0))),findFailedInitialPredicate:e=>s.initialPredicates.find(t=>!Dm(t.expression,Tm(n,e,void 0,t.scope))),findViolatedActionProperty:(e,t)=>g.find(r=>{try{return!Dm(r.action,Tm(n,e,t,r.scope),()=>`Attempted to evaluate an expression of form [A]_e, but A was not a boolean.\n${Fa(r.box)}`)&&!Em(r.unchanged,Tm(n,e,t,r.scope),`a subscript`)}catch(e){throw Pm(e,`Evaluating action property ${r.name} failed.`)}}),satisfiesActionConstraints:(e,t)=>f.every(r=>Dm(r.expression,Tm(n,e,t),e=>`TLC threw an unexpected exception.\nThis was probably caused by an error in the spec or model.\nSee the User Output or TLC Console for clues to what happened.\nThe exception was a java.lang.RuntimeException\n: ${Om(e,n)}`)),trackStatePossible:v.length===0?km:e=>Am(v,b,Tm(n,e,void 0)),trackActionPossible:y.length===0?km:(e,t)=>Am(y,b,Tm(n,e,t)),findUnwitnessedPossible:ie,findPostconditionViolation:()=>{let e=ie();if(e)return e;for(let e of t.postconditions){let t=jm(nm(e),n,`a postcondition`);if(t)return{name:e,message:t.message??`Postcondition ${e} is false.`}}}}},Pm=(e,t)=>e instanceof f?a(new f(`${t}\n${e.message}`,e),_(e)):e,Fm=e=>{i(!1);let t=typeof e.config==`string`?O(e.config):e.config,n=e.onPrint??console.log,r={isMuted:!1},a=e=>{r.isMuted||n(e)},o=e=>{r.isMuted=!0;let t=e();return r.isMuted=!1,t};De(Up(e.source,t,e.loadModule));let s=Hd(t,{source:e.source,loadModule:e.loadModule,loadClass:e.loadClass,print:a,files:{readFile:e.readFile,writeFile:e.writeFile},seed:e.seed}),l=s.environment,u=l.runtime;u.pause=e.onPause??(()=>{}),u.getSpecification=()=>pp(t,l,s.variableLocations,s.instanceActions);let m={depth:0},h=(e,t,n)=>({status:e,violation:t&&{...t,loopStart:t.loopStart},failure:n,generatedStates:u.generatedStates,distinctStates:u.distinctStates,queuedStates:u.queueSize,depth:u.generatedStates===0?0:Math.max(m.depth,1),outDegrees:void 0,fingerprintDistance:void 0}),g=Array.from({length:32},()=>0),v={newStates:0},y=()=>Math.min(v.newStates,31),b=()=>g.map((e,t)=>t===y()?e+1:e),ee=()=>({...h(`success`),outDegrees:[...g],fingerprintDistance:Zp(u.distinctStates,u.generatedStates,()=>x?x.getStoredFingerprints(T,se):BigInt64Array.from(T,u.getFingerprint))}),x=Nm(t,l,()=>Hp(e.source,e.loadModule)),te=Mm(s.assumptions,l);if(te)return h(`assumption-violation`,te);if(!x)return ee();let ne=t.postconditions.length>0||t.possible.length>0,re=(e,t,n)=>{if(ne){let e=t.loopStart;u.counterExample=Wl(t.trace,e===void 0||!n?void 0:{start:e,action:n()})}let r=x.findUnwitnessedPossible();return r||x.findPostconditionViolation(),h(e,r?{...t,unwitnessed:r}:t)},S=x.spec,ie=x.getFingerprintState,ae={value:void 0},oe=t.view!==void 0||t.symmetry!==void 0,C=c(()=>Hf(x.properties.liveness,S.temporals,l)),w=x.isSymmetric||C!==void 0,T=[],se=[],E=[],D=[],ce=[],le=/* @__PURE__ */ new Map,ue=Nn(),de=e=>Object.fromEntries(x.getTlcOrder().map(t=>[l.variables[t],e[t]])),fe=(e,t,n,r)=>{let i=t[n].state,a=(t[n+1]??t[r??n]).state;u.getLevel=()=>n+1,u.getBehavior=()=>t.slice(0,n+1).map(e=>e.state);try{let t=am(`alias`,e,l).body,n=X(nm(e),Tm(l,i,a)),r=t.kind===`Record`?t.fields.map(e=>e.name):[];return lm(n,r)??de(i)}catch(e){if(!(e instanceof d||e instanceof f))throw e;return{...de(i),_ALIASEvalError:e.message}}},pe=(e,n,r)=>{ae.value??=dp(t,l,s.instanceActions);let i={...N};Object.assign(N,{index:e,isExpanding:!0,candidate:void 0});let a=ie(r),o=ae.value.find(e=>Na(e.expression,n,l,e.scope).some(e=>Se(ie(e.state),a)));return Object.assign(N,i),o&&fp(o)},me=(e,n,r)=>{let i=t.alias,a=o(()=>(e.length>1&&Bo(l)&&k(),e.map((t,r)=>r===0||t.action===`Stuttering`?void 0:pe(n[r-1],e[r-1].state,t.state))));return e.map((t,n)=>({action:t.action,label:a[n],state:i===void 0?de(t.state):fe(i,e,n,r)}))},k=()=>S.init===void 0?[]:ja(S.init,l,S.scope),A=e=>S.next===void 0?[]:Na(S.next,e,l,S.scope),j=(e,t)=>Se(ie(e),se[t]),he=(e,t)=>A(e).find(e=>j(e.state,t)),ge=(e,t)=>{let n=oe||Bo(l)?k().find(t=>j(t,e[0])):T[e[0]];if(!n)throw new f(em);let r=[{state:n,action:void 0}];for(let n=1;n<e.length;n++){let i=r[n-1].state;if(e[n-1]===e[n]){r.push({state:i,action:`Stuttering`});continue}let a=he(i,e[n]);if(!a)throw new f(t);r.push(a)}return r},_e=(e,t)=>{let n=[];for(let t=e;t!==-1;t=E[t])n.unshift(t);let r=oe&&n.length>1?ge(n,em):n.map(e=>({state:T[e],action:D[e]}));if(!t)return me(r,n);let i=oe?A(T[e]).find(e=>Se(e.state,t.state))?.action:t.action;return me([...r,{state:t.state,action:i}],n)},ve=e=>E[e]===-1?[{action:void 0,label:void 0,state:de(T[e])}]:_e(e),ye=(e,t,n,r)=>{if(!(e instanceof f))throw e;return{...h(`error`,void 0,{message:e.message,trace:t,initialState:n&&!(e instanceof p)?de(n):void 0,exitCode:_(e)}),outDegrees:r}},be=(e,t)=>{let n=ge(e,tm),r=n[n.length-1].state;if(oe&&t!==void 0&&t!==e.length-1&&he(r,e[t])===void 0)throw new f(tm);return me(n,e,t)},xe=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=un(t,hn(e[n]));return t&1073741823},Se=(e,t)=>{for(let n=0;n<t.length;n++)if(!He(e[n],t[n]))return!1;return!0},Ce=(e,t)=>{let n=le.get(e);return n===void 0?-1:typeof n==`number`?Se(se[n],t)?n:-1:n.find(e=>Se(se[e],t))??-1},we=(e,t)=>{let n=le.get(e);n===void 0?le.set(e,t):typeof n==`number`?le.set(e,[n,t]):n.push(t)},M=e=>{u.distinctStates=T.length+1,m.depth=Math.max(m.depth,e),u.diameter=Math.max(u.diameter,e)},Te=(e,t,n,r)=>{let i=n===-1?1:ce[n]+1;T.push(e),se.push(t),E.push(n),D.push(r),ce.push(i)},N={index:-1,isExpanding:!1,candidate:void 0,candidateLevel:0,livenessSource:-1},Ee=e=>e===-1?[]:[...Ee(E[e]),T[e]];u.isSeen=e=>{let t=ie(e);return Ce(xe(t),t)!==-1},u.getBehavior=e=>{let t=e===N.candidate?-1:T.indexOf(e);return t===-1?[...Ee(N.index),e]:Ee(t)},u.getCurrentState=()=>N.index===-1?void 0:T[N.index],u.setLivenessSource=e=>{N.livenessSource=e},u.getLevel=e=>{let t=N.livenessSource;return t===-1?e===N.candidate?N.candidateLevel:N.index===-1?0:e===T[N.index]?ce[N.index]:N.isExpanding?ce[N.index]+1:0:e===T[t]?ce[t]:ce[t]+1};let Oe=e=>{ue(e),u.generatedStates++,u.initialStates++,N.candidate=e,N.candidateLevel=1;let t=ie(e),n=xe(t),r=x.satisfiesConstraints(e);if(r&&x.trackStatePossible(e),r&&Ce(n,t)!==-1)return;r&&(M(1),u.queueSize++,C?.addInitialState(T.length,e));let i=x.findViolatedInvariant(e);if(i)return re(`invariant-violation`,{name:i.name,trace:me([{action:void 0,state:e}],[])});let a=x.findFailedInitialPredicate(e);if(a)return re(`liveness-violation`,{name:a.name,trace:me([{action:void 0,state:e}],[])});r&&(we(n,T.length),Te(e,t,-1,void 0))},ke=(e,t,n)=>{let r=T[e];u.generatedStates++,N.candidate=t.state,N.candidateLevel=ce[e]+1,w&&ue(t.state);let i=ie(t.state),a=xe(i),o=Ce(a,i),s=x.satisfiesConstraints(t.state,r);s&&x.trackStatePossible(t.state);let c=s&&x.satisfiesActionConstraints(r,t.state);c&&x.trackActionPossible(r,t.state);let l=c?o:-1;if(l!==-1&&C){let e=T[l],r=e.every((e,n)=>e===t.state[n]);n.push({index:l,state:r?e:t.state})}let d=c&&l===-1;if(d&&(M(ce[e]+1),v.newStates++),l===-1)try{let n=x.findViolatedInvariant(t.state,r);if(n)return re(`invariant-violation`,{name:n.name,trace:_e(e,t)})}catch(n){return ye(n,_e(e,t),void 0,b())}let f=x.findViolatedActionProperty(r,t.state);if(f)return re(`liveness-violation`,{name:f.name,trace:_e(e,t)});d&&(w||ue(t.state),we(a,T.length),C&&n.push({index:T.length,state:t.state}),Te(t.state,i,e,t.action),u.queueSize++)},Ae={result:void 0};if(S.init!==void 0)try{Aa(S.init,l,e=>{try{Ae.result=Oe(e)}catch(t){Ae.result=ye(t,[],e)}return Ae.result!==void 0},S.scope)}catch(e){return ye(e,[])}if(Ae.result)return Ae.result;let je=S.next;if(je===void 0){if(T.length>0)throw new f(`No next state actions defined to generate successor states from.`);return ee()}let P=e=>{let n=T[e],r=[],i=Ma(je,n,l,t=>{try{Ae.result=ke(e,t,r)}catch(n){Ae.result=ye(n,_e(e,t))}return Ae.result!==void 0},S.scope);if(N.isExpanding=!1,Ae.result)return Ae.result;if(i===0&&t.checkDeadlock)return re(`deadlock`,{name:`deadlock`,trace:ve(e)});try{let t=C?.addState(e,n,r);return N.livenessSource=-1,t?re(`property-violation`,{name:t.name,trace:be(t.path)}):void 0}catch(t){return ye(t,ve(e),void 0,b())}},Me=e=>{let t=[...e.prefix,...e.cycle],n=be(t,e.prefix.length),r=t[e.prefix.length],i=t[t.length-1],a=r===i?void 0:o(()=>pe(i,T[i],T[r]));return re(`liveness-violation`,{name:e.name,trace:n,loopStart:e.prefix.length,loopLabel:a},()=>r===i?n[n.length-1].action:A(T[i]).find(e=>Se(e.state,T[r]))?.action)},Ne=C!==void 0&&e.livenessCheck!==`final`,Pe=performance.now(),Fe={at:Pe+3e3,size:1,time:0},F=e=>{let t=performance.now();if(Fe.at=t+6e4,!((e-Fe.size)/Fe.size>.1)||Fe.time>(t-Pe)*.2)return;Fe.size=e;let n=C?.findViolation();return N.livenessSource=-1,Fe.time+=performance.now()-t,n};i(!0);for(let e=0;e<T.length&&!u.isStopped;e++){N.index=e,N.candidate=void 0,u.queueSize=T.length-e-1,N.isExpanding=!0;try{Ae.result=P(e)}catch(t){Ae.result=ye(t,ve(e))}if(Ae.result)return Ae.result;if(g[y()]++,v.newStates=0,Ne&&performance.now()>=Fe.at){let t=F(e+1);if(t)return Me(t)}}N.index=-1,N.candidate=void 0;let Ie=C?.findViolation();if(N.livenessSource=-1,Ie)return Me(Ie);let Le=x.findPostconditionViolation();return Le?h(`postcondition-violation`,{...Le,trace:[]}):ee()},Im=e=>{let t=Math.imul(e^e>>>16,2146121005),n=Math.imul(t^t>>>15,2221713035);return n^n>>>16},Lm=(e,t)=>{let n=2166136261,r=1779033703;for(let t=0;t<e.length;t++)n=Math.imul(n^hn(e[t]),16777619),r=Math.imul(r^Sn(e[t]),1540483477);t[0]=Im(n)||1,t[1]=Im(r)},Rm=()=>{let e={slots:/* @__PURE__ */ new Int32Array(8192),used:0},t=(e,t,n)=>{let r=e.length/2-1;for(let i=t&r;;i=i+1&r){let r=e[i*2];if(r===0||r===t&&e[i*2+1]===n)return i}},n=()=>{let n=e.slots,r=new Int32Array(n.length*2);for(let e=0;e<n.length;e+=2){if(n[e]===0)continue;let i=t(r,n[e],n[e+1]);r[i*2]=n[e],r[i*2+1]=n[e+1]}e.slots=r};return{insert:(r,i)=>{e.used*4>=e.slots.length&&n();let a=t(e.slots,r,i);return e.slots[a*2]!==r&&(e.slots[a*2]=r,e.slots[a*2+1]=i,e.used++,!0)}}},zm=(e,t)=>{let n=e.length-1;for(let r=Number(t>>32n)&n;;r=r+1&n){let n=Atomics.load(e,r);if(n===t)return!1;if(n!==0n)continue;let i=Atomics.compareExchange(e,r,0n,t);if(i===0n)return!0;if(i===t)return!1}},Bm=()=>({slots:new BigInt64Array(new SharedArrayBuffer(8192)),used:new Int32Array(new SharedArrayBuffer(4))}),Vm=(e,t,n)=>{let r=BigInt.asIntN(64,BigInt(t)<<32n|BigInt(n>>>0));return zm(e.slots,r)?(Atomics.add(e.used,0,1),!0):!1},Hm=e=>Atomics.load(e.used,0)*2>=e.slots.length,Um=e=>{let t=new BigInt64Array(new SharedArrayBuffer(e.slots.byteLength*2));for(let n of e.slots)n!==0n&&zm(t,n);return{slots:t,used:e.used}},Wm=()=>{let e={words:/* @__PURE__ */ new Int32Array(1024),length:0,count:0},t=[],n=/* @__PURE__ */ new Map,r=t=>{if(e.length===e.words.length){let t=new Int32Array(e.words.length*2);t.set(e.words),e.words=t}e.words[e.length++]=t},i=e=>{let i=n.get(e);if(i!==void 0)return r(i);n.set(e,t.length),r(t.length),t.push(e)},a=e=>{if(typeof e==`boolean`)return r(+!!e),!0;if(typeof e==`number`)return(e|0)===e&&(r(2),r(e),!0);if(typeof e==`string`)return r(3),i(e),!0;if(e.kind===`ModelValue`)return r(4),i(e.name),!0;if(e.kind===`Set`)return r(5),r(e.elements.length),e.elements.every(a);if(e.kind===`Function`){let t=an(e.domain);return t?(r(7),r(t.low),r(e.range.length),e.range.every(a)):(r(6),r(e.domain.length),e.domain.every(a)&&e.range.every(a))}return!1};return{encode:t=>{let n=e.length;return t.every(a)?(e.count++,!0):(e.length=n,!1)},finish:()=>({words:e.words.slice(0,e.length),strings:t,count:e.count})}},Gm=e=>t=>{let n=t.words,r={index:0},i=e=>Array.from({length:e},()=>a()),a=()=>{let e=n[r.index++];if(e===0)return!1;if(e===1)return!0;if(e===2)return n[r.index++];if(e===3)return t.strings[n[r.index++]];if(e===4)return Le(t.strings[n[r.index++]]);if(e===7){let e=n[r.index++],t=n[r.index++],a=kt({kind:`Interval`,low:e,high:e+t-1});return ze(a,i(t))}let a=n[r.index++];if(e===5)return Re(i(a));let o=i(a);return ze(o,i(a))};return Array.from({length:t.count},()=>Array.from({length:e},()=>a()))};Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"B",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return ja}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"R",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return Bo}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return Nn}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return Up}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Um}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return ac}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Lm}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return Mm}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return Jp}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return Qp}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return Wp}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Bm}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Fm}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Zp}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Wm}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Vm}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Xp}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Rm}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Hm}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Gm}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return Nm}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Hp}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return oc}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return Hd}}),Object.defineProperty(exports,"z",{enumerable:!0,get:function(){return _}});
package/dist/transfer.js CHANGED
@@ -6,13 +6,13 @@
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
- const e={success:0,assumptionViolation:10,deadlock:11,safetyViolation:12,livenessViolation:13,assertViolation:14,specEvaluationFailure:75,safetyEvaluationFailure:76,livenessEvaluationFailure:77,specParseError:150,configParseError:151,error:255},t=/* @__PURE__ */ new WeakMap,n=/* @__PURE__ */ new WeakMap,r={isNextState:!1},i=e=>{r.isNextState=e},a=(e,n)=>(e instanceof Error&&!t.has(e)&&t.set(e,n),e),o=(e,t)=>{r.isNextState&&n.set(e,t)},s=e=>t.get(e)??n.get(e),c=t=>{try{let n=t();return n&&{addInitialState:(t,r)=>{try{n.addInitialState(t,r)}catch(t){throw a(t,e.error)}},addState:(t,r,i)=>{try{return n.addState(t,r,i)}catch(t){throw a(t,e.error)}},findViolation:()=>{try{return n.findViolation()}catch(t){throw a(t,e.error)}}}}catch(t){throw a(t,e.error)}};var l=class extends Error{constructor(e,t){super(e,{cause:t}),this.name=`TlaError`}},u=class extends l{failure;constructor(e,t,n){super(e,t),this.name=`TlaSyntaxError`,this.failure=n}},d=class extends l{constructor(e,t){super(e,t),this.name=`TlaConfigError`}},f=class extends l{constructor(e,t){super(e,t),this.name=`TlaEvaluationError`}},p=class extends f{constructor(t,n=e.error){super(t),this.name=`TlaEvaluationError`,o(this,n)}},m=class extends l{failure;exception;constructor(e,t={}){super(e),this.name=`TlaProofError`,this.failure=t.exception===void 0?t.failure??e:void 0,this.exception=t.exception??`Failure(${JSON.stringify(this.failure)})`}},h=class extends m{constructor(e=`Assert_failure`){super(`Oops, this seems to be a bug in TLAPM.`,{exception:e}),this.name=`TlaProofError`}},g=class extends l{constructor(e,t){super(e,t),this.name=`TlaUnsupportedError`}};const _=t=>s(t)??(t instanceof u?e.specParseError:t instanceof d?e.configParseError:t instanceof f?e.specEvaluationFailure:e.error),v=/* @__PURE__ */ new Set(/* @__PURE__ */ `ACTION.ACTIONS.ASSUME.ASSUMPTION.AXIOM.BY.CASE.CHOOSE.CONSTANT.CONSTANTS.COROLLARY.DEF.DEFINE.DEFS.DOMAIN.ELSE.ENABLED.EXCEPT.EXTENDS.HAVE.HIDE.IF.IN.INSTANCE.LAMBDA.LEMMA.LET.LOCAL.MODULE.NEW.OBVIOUS.OMITTED.ONLY.OTHER.PICK.PROOF.PROPOSITION.PROVE.QED.RECURSIVE.STATE.SUBSET.SUFFICES.TAKE.TEMPORAL.TEMPORALS.THEN.THEOREM.UNCHANGED.UNION.USE.VARIABLE.VARIABLES.WITH.WITNESS`.split(`.`)),y=/* @__PURE__ */ new Map([[`in`,`\\in`],[`notin`,`\\notin`],[`subseteq`,`\\subseteq`],[`subset`,`\\subset`],[`supseteq`,`\\supseteq`],[`supset`,`\\supset`],[`cup`,`\\cup`],[`union`,`\\cup`],[`cap`,`\\cap`],[`intersect`,`\\cap`],[`X`,`\\X`],[`times`,`\\X`],[`o`,`\\o`],[`circ`,`\\o`],[`div`,`\\div`],[`land`,`/\\`],[`lor`,`\\/`],[`lnot`,`~`],[`neg`,`~`],[`equiv`,`<=>`],[`leq`,`<=`],[`geq`,`>=`],[`A`,`\\A`],[`forall`,`\\A`],[`E`,`\\E`],[`exists`,`\\E`],[`AA`,`\\AA`],[`EE`,`\\EE`],[`cdot`,`\\cdot`],[`sqsubseteq`,`\\sqsubseteq`],[`sqsupseteq`,`\\sqsupseteq`],[`sqsubset`,`\\sqsubset`],[`sqsupset`,`\\sqsupset`],[`sqcap`,`\\sqcap`],[`sqcup`,`\\sqcup`],[`oplus`,`\\oplus`],[`ominus`,`\\ominus`],[`otimes`,`\\otimes`],[`oslash`,`\\oslash`],[`odot`,`\\odot`],[`uplus`,`\\uplus`],[`prec`,`\\prec`],[`preceq`,`\\preceq`],[`succ`,`\\succ`],[`succeq`,`\\succeq`],[`sim`,`\\sim`],[`simeq`,`\\simeq`],[`approx`,`\\approx`],[`cong`,`\\cong`],[`asymp`,`\\asymp`],[`doteq`,`\\doteq`],[`propto`,`\\propto`],[`wr`,`\\wr`],[`star`,`\\star`],[`bullet`,`\\bullet`],[`bigcirc`,`\\bigcirc`],[`ll`,`\\ll`],[`gg`,`\\gg`]]),b=/* @__PURE__ */ new Map([[`/=`,`#`],[`=<`,`<=`],[`(+)`,`\\oplus`],[`(-)`,`\\ominus`],[`(.)`,`\\odot`],[`(/)`,`\\oslash`],[`(\\X)`,`\\otimes`]]),ee=/* @__PURE__ */ `-+-> (\\X) <=> |-> ... ::= >>_ (+) (-) (.) (/) == => =< =| << <= <> <- >> >= /\\ \\/ /= [] ]_ |- |= || -> -| ~> .. :: := :> <: @@ ++ -- -. ** // ^^ ^+ ^* ^# %% ## && $$ ?? !! = < > / [ ] ( ) { } | - ~ . : @ , ' ! # % + * ^ & $ ?`.split(` `),x=/* @__PURE__ */ new Map([[`∧`,`/\\`],[`∨`,`\\/`],[`¬`,`~`],[`⇒`,`=>`],[`⟹`,`=>`],[`≡`,`<=>`],[`⇔`,`<=>`],[`∈`,`\\in`],[`∉`,`\\notin`],[`⊆`,`\\subseteq`],[`⊂`,`\\subset`],[`⊇`,`\\supseteq`],[`⊃`,`\\supset`],[`∪`,`\\cup`],[`∩`,`\\cap`],[`×`,`\\X`],[`∀`,`\\A`],[`∃`,`\\E`],[`≠`,`#`],[`≤`,`<=`],[`≥`,`>=`],[`↦`,`|->`],[`→`,`->`],[`⟨`,`<<`],[`⟩`,`>>`],[`□`,`[]`],[`◇`,`<>`],[`≜`,`==`],[`′`,`'`],[`∘`,`\\o`],[`⋅`,`\\cdot`]]),te=/^\\([bB][01]+|[oO][0-7]+|[hH][0-9a-fA-F]+)/,ne=/* @__PURE__ */ new Map([[`b`,2],[`o`,8],[`h`,16]]),re=e=>e.startsWith(`\\`)?parseInt(e.slice(2),ne.get(e[1].toLowerCase())):Number(e),S=/-{4,}[ \t]*MODULE\b/,ie=e=>/[A-Za-z0-9_]/.test(e),ae=(e,t)=>{let n=e[t];if(n===`\\`&&/[A-Za-z]/.test(e[t+1]??``)){let n=/^[A-Za-z]+/.exec(e.slice(t+1))?.[0]??``,r={value:n.length};for(;r.value>0&&!y.has(n.slice(0,r.value));)r.value--;let i=y.get(n.slice(0,r.value));return{text:i??`\\`,length:i===void 0?1:r.value+1}}let r=x.get(n);if(r)return{text:r,length:n.length};let i=ee.find(n=>e.startsWith(n,t));return i?{text:b.get(i)??i,length:i.length}:n===`\\`?{text:`\\`,length:1}:void 0},oe=e=>e!==void 0&&e>=`0`&&e<=`9`,C=(e,t,n)=>{let r={value:t};for(;r.value<e.length&&n(e[r.value]);)r.value++;return r.value},w=(e,t)=>{if(e[t]!==`<`)return 0;let n=e[t+1]===`+`||e[t+1]===`*`?t+2:C(e,t+1,oe);if(n===t+1||e[n]!==`>`)return 0;let r=C(e,n+1,ie),i=r===n+1&&(e[r]===`*`||e[r]===`-`);return C(e,i?r+1:r,e=>e===`.`)-t},T=(e,t)=>t===` `?e+8-e%8:e+1,se=e=>{let t=S.exec(e);if(!t)throw new u(`Expected a module header such as ---- MODULE Name ----`);let n=[],r=e.slice(0,t.index).split(`
10
- `),i={index:t.index,line:r.length,lineStart:t.index-r[r.length-1].length,moduleDepth:0},a={lineStart:-1,position:0,width:0},o=()=>{for((a.lineStart!==i.lineStart||a.position>i.index)&&(a.lineStart=i.lineStart,a.position=i.lineStart,a.width=0);a.position<i.index;a.position++)a.width=T(a.width,e[a.position]);return T(a.width,e[i.index])},s=(e,t,r)=>{let a=o();n.push({kind:e,text:t,line:i.line,column:a,endColumn:a+r-1}),i.index+=r},c=t=>{for(let n=0;n<t;n++)e[i.index]===`
11
- `&&(i.line++,i.lineStart=i.index+1),i.index++},l=t=>new u(`${t} at line ${i.line}, column ${o()}`,void 0,{reason:t,line:i.line,column:o(),isEnd:i.index>=e.length});for(;i.index<e.length;){let t=e[i.index];if(t===`
12
- `||t===` `||t===` `||t===`\r`){c(1);continue}if(e.startsWith(`\\*`,i.index)){let t=e.indexOf(`
13
- `,i.index);c((t===-1?e.length:t)-i.index);continue}if(e.startsWith(`(*`,i.index)){let t={value:0};do{if(i.index>=e.length)throw l(`Unterminated comment`);e.startsWith(`(*`,i.index)?(t.value++,c(2)):e.startsWith(`*)`,i.index)?(t.value--,c(2)):c(1)}while(t.value>0);continue}if(e.startsWith(`----`,i.index)){let t=C(e,i.index,e=>e===`-`)-i.index;e.slice(i.index+t).trimStart().startsWith(`MODULE`)&&i.moduleDepth++,s(`Separator`,`----`,t);continue}if(e.startsWith(`====`,i.index)){if(s(`ModuleEnd`,`====`,C(e,i.index,e=>e===`=`)-i.index),i.moduleDepth--,i.moduleDepth<=0)break;continue}if(t===`"`){let t=i.line,r=o(),a=[];for(c(1);e[i.index]!==`"`;){if(i.index>=e.length||e[i.index]===`
14
- `)throw l(`Unterminated string`);if(e[i.index]===`\\`){let t=e[i.index+1];a.push({n:`
15
- `,t:` `,r:`\r`,f:`\f`}[t]??t),c(2)}else a.push(e[i.index]),c(1)}c(1),n.push({kind:`String`,text:a.join(``),line:t,column:r,endColumn:o()-1});continue}let r=te.exec(e.slice(i.index,i.index+64));if(r){s(`Number`,r[0],r[0].length);continue}if(ie(t)){let t=e.slice(i.index,C(e,i.index,ie));if(/^\d+$/.test(t)){let n=/^\d+(\.\d+)?/.exec(e.slice(i.index))?.[0]??t;s(n.includes(`.`)?`Decimal`:`Number`,n,n.length);continue}if(t.startsWith(`WF_`)||t.startsWith(`SF_`)){s(`Keyword`,t.slice(0,3),3);continue}s(v.has(t)?`Keyword`:`Identifier`,t,t.length);continue}let a=w(e,i.index);if(a>0){s(`Step`,e.slice(i.index,i.index+a),a);continue}let u=ae(e,i.index);if(u)s(`Operator`,u.text,u.length);else throw l(`Unexpected character ${JSON.stringify(t)}`)}let d=o();return n.push({kind:`End`,text:``,line:i.line,column:d,endColumn:d}),n},E=/* @__PURE__ */ new Set([`CONSTANT`,`CONSTANTS`,`INIT`,`NEXT`,`SPECIFICATION`,`INVARIANT`,`INVARIANTS`,`PROPERTY`,`PROPERTIES`,`CONSTRAINT`,`CONSTRAINTS`,`ACTION_CONSTRAINT`,`ACTION_CONSTRAINTS`,`SYMMETRY`,`VIEW`,`CHECK_DEADLOCK`,`ALIAS`,`POSTCONDITION`,`POSTCONDITIONS`,`_POSSIBLE`,`_PERIODIC`,`_RL_REWARD`]),D=[`<-`,`<<`,`>>`,`=`,`{`,`}`,`,`,`[`,`]`,`(`,`)`],ce=e=>{let t=[],n={index:0,line:1};for(;n.index<e.length;){let r=e.slice(n.index),i=/^\s+/.exec(r)?.[0];if(i){n.line+=i.split(`
9
+ const e={success:0,assumptionViolation:10,deadlock:11,safetyViolation:12,livenessViolation:13,assertViolation:14,specEvaluationFailure:75,safetyEvaluationFailure:76,livenessEvaluationFailure:77,specParseError:150,configParseError:151,error:255},t=/* @__PURE__ */ new WeakMap,n=/* @__PURE__ */ new WeakMap,r={isNextState:!1},i=e=>{r.isNextState=e},a=(e,n)=>(e instanceof Error&&!t.has(e)&&t.set(e,n),e),o=(e,t)=>{r.isNextState&&n.set(e,t)},s=e=>t.get(e)??n.get(e),c=t=>{try{let n=t();return n&&{addInitialState:(t,r)=>{try{n.addInitialState(t,r)}catch(t){throw a(t,e.error)}},addState:(t,r,i)=>{try{return n.addState(t,r,i)}catch(t){throw a(t,e.error)}},findViolation:()=>{try{return n.findViolation()}catch(t){throw a(t,e.error)}}}}catch(t){throw a(t,e.error)}};var l=class extends Error{constructor(e,t){super(e,{cause:t}),this.name=`TlaError`}},u=class extends l{failure;constructor(e,t,n){super(e,t),this.name=`TlaSyntaxError`,this.failure=n}},d=class extends l{constructor(e,t){super(e,t),this.name=`TlaConfigError`}},f=class extends l{constructor(e,t){super(e,t),this.name=`TlaEvaluationError`}},p=class extends f{constructor(t,n=e.error){super(t),this.name=`TlaEvaluationError`,o(this,n)}},m=class extends l{failure;exception;constructor(e,t={}){super(e),this.name=`TlaProofError`,this.failure=t.exception===void 0?t.failure??e:void 0,this.exception=t.exception??`Failure(${JSON.stringify(this.failure)})`}},h=class extends m{constructor(e=`Assert_failure`){super(`Oops, this seems to be a bug in TLAPM.`,{exception:e}),this.name=`TlaProofError`}},g=class extends l{constructor(e,t){super(e,t),this.name=`TlaUnsupportedError`}};const _=t=>s(t)??(t instanceof u?e.specParseError:t instanceof d?e.configParseError:t instanceof f?e.specEvaluationFailure:e.error),v=/* @__PURE__ */ new Set(/* @__PURE__ */ `ACTION.ACTIONS.ASSUME.ASSUMPTION.AXIOM.BY.CASE.CHOOSE.CONSTANT.CONSTANTS.COROLLARY.DEF.DEFINE.DEFS.DOMAIN.ELSE.ENABLED.EXCEPT.EXTENDS.HAVE.HIDE.IF.IN.INSTANCE.LAMBDA.LEMMA.LET.LOCAL.MODULE.NEW.OBVIOUS.OMITTED.ONLY.OTHER.PICK.PROOF.PROPOSITION.PROVE.QED.RECURSIVE.STATE.SUBSET.SUFFICES.TAKE.TEMPORAL.TEMPORALS.THEN.THEOREM.UNCHANGED.UNION.USE.VARIABLE.VARIABLES.WITH.WITNESS`.split(`.`)),y=/* @__PURE__ */ new Map([[`in`,`\\in`],[`notin`,`\\notin`],[`subseteq`,`\\subseteq`],[`subset`,`\\subset`],[`supseteq`,`\\supseteq`],[`supset`,`\\supset`],[`cup`,`\\cup`],[`union`,`\\cup`],[`cap`,`\\cap`],[`intersect`,`\\cap`],[`X`,`\\X`],[`times`,`\\X`],[`o`,`\\o`],[`circ`,`\\o`],[`div`,`\\div`],[`land`,`/\\`],[`lor`,`\\/`],[`lnot`,`~`],[`neg`,`~`],[`equiv`,`<=>`],[`leq`,`<=`],[`geq`,`>=`],[`A`,`\\A`],[`forall`,`\\A`],[`E`,`\\E`],[`exists`,`\\E`],[`AA`,`\\AA`],[`EE`,`\\EE`],[`cdot`,`\\cdot`],[`sqsubseteq`,`\\sqsubseteq`],[`sqsupseteq`,`\\sqsupseteq`],[`sqsubset`,`\\sqsubset`],[`sqsupset`,`\\sqsupset`],[`sqcap`,`\\sqcap`],[`sqcup`,`\\sqcup`],[`oplus`,`\\oplus`],[`ominus`,`\\ominus`],[`otimes`,`\\otimes`],[`oslash`,`\\oslash`],[`odot`,`\\odot`],[`uplus`,`\\uplus`],[`prec`,`\\prec`],[`preceq`,`\\preceq`],[`succ`,`\\succ`],[`succeq`,`\\succeq`],[`sim`,`\\sim`],[`simeq`,`\\simeq`],[`approx`,`\\approx`],[`cong`,`\\cong`],[`asymp`,`\\asymp`],[`doteq`,`\\doteq`],[`propto`,`\\propto`],[`wr`,`\\wr`],[`star`,`\\star`],[`bullet`,`\\bullet`],[`bigcirc`,`\\bigcirc`],[`ll`,`\\ll`],[`gg`,`\\gg`]]),b=/* @__PURE__ */ new Map([[`/=`,`#`],[`=<`,`<=`],[`(+)`,`\\oplus`],[`(-)`,`\\ominus`],[`(.)`,`\\odot`],[`(/)`,`\\oslash`],[`(\\X)`,`\\otimes`]]),ee=/* @__PURE__ */ `-+-> (\\X) <=> |-> ... ::= >>_ (+) (-) (.) (/) == => =< =| << <= <> <- >> >= /\\ \\/ /= [] ]_ |- |= || -> -| ~> .. :: := :> <: @@ ++ -- -. ** // ^^ ^+ ^* ^# %% ## && $$ ?? !! = < > / [ ] ( ) { } | - ~ . : @ , ' ! # % + * ^ & $ ?`.split(` `),x=/* @__PURE__ */ new Map([[`∧`,`/\\`],[`∨`,`\\/`],[`¬`,`~`],[`⇒`,`=>`],[`⟹`,`=>`],[`≡`,`<=>`],[`⇔`,`<=>`],[`∈`,`\\in`],[`∉`,`\\notin`],[`⊆`,`\\subseteq`],[`⊂`,`\\subset`],[`⊇`,`\\supseteq`],[`⊃`,`\\supset`],[`∪`,`\\cup`],[`∩`,`\\cap`],[`×`,`\\X`],[`∀`,`\\A`],[`∃`,`\\E`],[`≠`,`#`],[`≤`,`<=`],[`≥`,`>=`],[`↦`,`|->`],[`→`,`->`],[`⟨`,`<<`],[`⟩`,`>>`],[`□`,`[]`],[`◇`,`<>`],[`≜`,`==`],[`′`,`'`],[`∘`,`\\o`],[`⋅`,`\\cdot`]]),te=/^\\([bB][01]+|[oO][0-7]+|[hH][0-9a-fA-F]+)/,ne=/* @__PURE__ */ new Map([[`b`,2],[`o`,8],[`h`,16]]),re=e=>e.startsWith(`\\`)?parseInt(e.slice(2),ne.get(e[1].toLowerCase())):Number(e),S=/-{4,}[ \t]*MODULE\b/,ie=e=>/[A-Za-z0-9_]/.test(e),ae=(e,t)=>{let n=e[t];if(n===`\\`&&/[A-Za-z]/.test(e[t+1]??``)){let n=/^[A-Za-z]+/.exec(e.slice(t+1))?.[0]??``,r={value:n.length};for(;r.value>0&&!y.has(n.slice(0,r.value));)r.value--;let i=y.get(n.slice(0,r.value));return{text:i??`\\`,length:i===void 0?1:r.value+1}}let r=x.get(n);if(r)return{text:r,length:n.length};let i=ee.find(n=>e.startsWith(n,t));return i?{text:b.get(i)??i,length:i.length}:n===`\\`?{text:`\\`,length:1}:void 0},oe=e=>e!==void 0&&e>=`0`&&e<=`9`,C=(e,t,n)=>{let r={value:t};for(;r.value<e.length&&n(e[r.value]);)r.value++;return r.value},w=(e,t)=>{if(e[t]!==`<`)return 0;let n=e[t+1]===`+`||e[t+1]===`*`?t+2:C(e,t+1,oe);if(n===t+1||e[n]!==`>`)return 0;let r=C(e,n+1,ie),i=r===n+1&&(e[r]===`*`||e[r]===`-`);return C(e,i?r+1:r,e=>e===`.`)-t},T=(e,t)=>t===` `?e+8-e%8:e+1,se=e=>{let t=S.exec(e);if(!t)throw new u(`Expected a module header such as ---- MODULE Name ----`);let n=[],r=/* @__PURE__ */ new Map,i=e.slice(0,t.index).split(`
10
+ `),a={index:t.index,line:i.length,lineStart:t.index-i[i.length-1].length,moduleDepth:0},o={lineStart:-1,position:0,width:0},s=()=>{for((o.lineStart!==a.lineStart||o.position>a.index)&&(o.lineStart=a.lineStart,o.position=a.lineStart,o.width=0);o.position<a.index;o.position++)o.width=T(o.width,e[o.position]);return T(o.width,e[a.index])},c=(e,t,r)=>{let i=s();n.push({kind:e,text:t,line:a.line,column:i,endColumn:i+r-1}),a.index+=r},l=t=>{for(let n=0;n<t;n++)e[a.index]===`
11
+ `&&(a.line++,a.lineStart=a.index+1),a.index++},d=t=>new u(`${t} at line ${a.line}, column ${s()}`,void 0,{reason:t,line:a.line,column:s(),isEnd:a.index>=e.length});for(;a.index<e.length;){let t=e[a.index];if(t===`
12
+ `||t===` `||t===` `||t===`\r`){l(1);continue}if(e.startsWith(`\\*`,a.index)){let t=e.indexOf(`
13
+ `,a.index);l((t===-1?e.length:t)-a.index);continue}if(e.startsWith(`(*`,a.index)){let t={value:0};do{if(a.index>=e.length)throw d(`Unterminated comment`);e.startsWith(`(*`,a.index)?(t.value++,l(2)):e.startsWith(`*)`,a.index)?(t.value--,l(2)):l(1)}while(t.value>0);continue}if(e.startsWith(`----`,a.index)){let t=C(e,a.index,e=>e===`-`)-a.index;e.slice(a.index+t).trimStart().startsWith(`MODULE`)&&a.moduleDepth++,c(`Separator`,`----`,t);continue}if(e.startsWith(`====`,a.index)){if(c(`ModuleEnd`,`====`,C(e,a.index,e=>e===`=`)-a.index),a.moduleDepth--,a.moduleDepth<=0)break;continue}if(t===`"`){let t=a.line,r=s(),i=[];for(l(1);e[a.index]!==`"`;){if(a.index>=e.length||e[a.index]===`
14
+ `)throw d(`Unterminated string`);if(e[a.index]===`\\`){let t=e[a.index+1];i.push({n:`
15
+ `,t:` `,r:`\r`,f:`\f`}[t]??t),l(2)}else i.push(e[a.index]),l(1)}l(1),n.push({kind:`String`,text:i.join(``),line:t,column:r,endColumn:s()-1});continue}let i=te.exec(e.slice(a.index,a.index+64));if(i){c(`Number`,i[0],i[0].length);continue}if(ie(t)){let t=e.slice(a.index,C(e,a.index,ie));if(/^\d+$/.test(t)){let n=/^\d+(\.\d+)?/.exec(e.slice(a.index))?.[0]??t;c(n.includes(`.`)?`Decimal`:`Number`,n,n.length);continue}if(t.startsWith(`WF_`)||t.startsWith(`SF_`)){c(`Keyword`,t.slice(0,3),3);continue}let n=r.get(t)??t;r.set(n,n),c(v.has(t)?`Keyword`:`Identifier`,n,t.length);continue}let o=w(e,a.index);if(o>0){c(`Step`,e.slice(a.index,a.index+o),o);continue}let u=ae(e,a.index);if(u)c(`Operator`,u.text,u.length);else throw d(`Unexpected character ${JSON.stringify(t)}`)}let f=s();return n.push({kind:`End`,text:``,line:a.line,column:f,endColumn:f}),n},E=/* @__PURE__ */ new Set([`CONSTANT`,`CONSTANTS`,`INIT`,`NEXT`,`SPECIFICATION`,`INVARIANT`,`INVARIANTS`,`PROPERTY`,`PROPERTIES`,`CONSTRAINT`,`CONSTRAINTS`,`ACTION_CONSTRAINT`,`ACTION_CONSTRAINTS`,`SYMMETRY`,`VIEW`,`CHECK_DEADLOCK`,`ALIAS`,`POSTCONDITION`,`POSTCONDITIONS`,`_POSSIBLE`,`_PERIODIC`,`_RL_REWARD`]),D=[`<-`,`<<`,`>>`,`=`,`{`,`}`,`,`,`[`,`]`,`(`,`)`],ce=e=>{let t=[],n={index:0,line:1};for(;n.index<e.length;){let r=e.slice(n.index),i=/^\s+/.exec(r)?.[0];if(i){n.line+=i.split(`
16
16
  `).length-1,n.index+=i.length;continue}if(r.startsWith(`\\*`)){let e=r.indexOf(`
17
17
  `);n.index+=e===-1?r.length:e;continue}if(r.startsWith(`(*`)){let e=r.indexOf(`*)`);if(e===-1)throw new d(`Unterminated comment at line ${n.line}`);n.line+=r.slice(0,e).split(`
18
18
  `).length-1,n.index+=e+2;continue}let a=/^\d+(?![A-Za-z_])/.exec(r)?.[0];if(a){t.push({kind:`Number`,text:a,line:n.line}),n.index+=a.length;continue}let o=/^[A-Za-z0-9_!]+/.exec(r)?.[0];if(o){t.push({kind:`Word`,text:o,line:n.line}),n.index+=o.length;continue}let s=/^"((?:[^"\\]|\\.)*)"/.exec(r);if(s){t.push({kind:`String`,text:s[1],line:n.line}),n.index+=s[0].length;continue}let c=D.find(e=>r.startsWith(e));if(c){t.push({kind:`Symbol`,text:c,line:n.line}),n.index+=c.length;continue}let l=ae(e,n.index);if(!l)throw new d(`Unexpected character ${JSON.stringify(r[0])} at line ${n.line}`);t.push({kind:`Word`,text:l.text,line:n.line}),n.index+=l.length}return t.push({kind:`End`,text:``,line:n.line}),t},O=e=>{let t=ce(e),n={index:0},r={init:void 0,next:void 0,specification:void 0,invariants:[],properties:[],constraints:[],actionConstraints:[],constants:[],substitutions:[],checkDeadlock:!0,symmetry:void 0,view:void 0,alias:void 0,postconditions:[],possible:[],periodic:void 0,rlReward:void 0},i={isSet:!1},a=()=>t[n.index],o=()=>t[n.index++],s=e=>e.kind===`Word`&&E.has(e.text),c=e=>{let t=o();if(t.text!==e)throw new d(`Expected ${JSON.stringify(e)} but found ${JSON.stringify(t.text)} at line ${t.line}`)},l=()=>{let e=o();if(e.kind!==`Word`||s(e))throw new d(`Expected a name but found ${JSON.stringify(e.text)} at line ${e.line}`);return e.text},u=()=>a().kind===`Word`&&!s(a()),f=()=>{let e=[];for(;u();)e.push(o().text);return e},p=(e,t)=>{if(r[e]!==void 0)throw new d(`The keyword ${t} appears twice`);r[e]=l()},m=()=>{let e=o();if(e.kind===`Number`)return{kind:`Number`,value:Number(e.text)};if(e.kind===`String`)return{kind:`String`,value:e.text};if(e.text===`TRUE`||e.text===`FALSE`)return{kind:`Boolean`,value:e.text===`TRUE`};if(e.text===`{`){let e=[];for(a().text!==`}`&&e.push(m());a().text===`,`;)o(),e.push(m());return c(`}`),{kind:`Set`,elements:e}}if(e.kind===`Word`&&!s(e))return{kind:`ModelValue`,name:e.text};throw new d(`Expected a value but found ${JSON.stringify(e.text)} at line ${e.line}`)},h=()=>{if(a().text!==`[`)return;o();let e=l();return c(`]`),e},g=()=>{for(;u();){let e=o().text;if(a().text===`(`){o();let t=[];for(;a().text!==`)`;)t.push(m()),a().text!==`)`&&c(`,`);o(),c(`=`);let n=h();r.constants.push({name:e,value:m(),args:t,...n&&{module:n}});continue}if(a().text===`<-`){o();let t=h();r.substitutions.push({name:e,target:l(),...t&&{module:t}});continue}c(`=`);let t=h();r.constants.push({name:e,value:m(),...t&&{module:t}})}};for(;a().kind!==`End`;){let e=o();switch(e.text){case`CONSTANT`:case`CONSTANTS`:g();break;case`INIT`:p(`init`,e.text);break;case`NEXT`:p(`next`,e.text);break;case`SPECIFICATION`:p(`specification`,e.text);break;case`SYMMETRY`:p(`symmetry`,e.text);break;case`VIEW`:p(`view`,e.text);break;case`INVARIANT`:case`INVARIANTS`:r.invariants.push(...f());break;case`PROPERTY`:case`PROPERTIES`:r.properties.push(...f());break;case`CONSTRAINT`:case`CONSTRAINTS`:r.constraints.push(...f());break;case`ACTION_CONSTRAINT`:case`ACTION_CONSTRAINTS`:r.actionConstraints.push(...f());break;case`ALIAS`:p(`alias`,e.text);break;case`POSTCONDITION`:case`POSTCONDITIONS`:r.postconditions.push(...f());break;case`_POSSIBLE`:r.possible.push(...f());break;case`_PERIODIC`:p(`periodic`,e.text);break;case`_RL_REWARD`:p(`rlReward`,e.text);break;case`CHECK_DEADLOCK`:{if(i.isSet)throw new d(`The keyword CHECK_DEADLOCK appears twice`);i.isSet=!0;let e=o().text;if(e!==`TRUE`&&e!==`FALSE`)throw new d(`CHECK_DEADLOCK expects TRUE or FALSE but found ${JSON.stringify(e)}`);r.checkDeadlock=e===`TRUE`;break}default:throw new d(`Unexpected ${JSON.stringify(e.text)} at line ${e.line}`)}}if(r.specification!==void 0&&(r.init!==void 0||r.next!==void 0))throw new d(`SPECIFICATION cannot be combined with INIT or NEXT`);return r},le={Set:{open:`{ `,close:` }`,pad:` `,separator:`,`,divider:``,dividerPad:``},Sequence:{open:`<< `,close:` >>`,pad:` `,separator:`,`,divider:``,dividerPad:``},Subset:{open:`SUBSET `,close:` `,pad:` `,separator:`,`,divider:``,dividerPad:``},Function:{open:`( `,close:` )`,pad:` `,separator:` @@`,divider:` :>`,dividerPad:` `},Record:{open:`[ `,close:` ]`,pad:` `,separator:`,`,divider:` |->`,dividerPad:` `}},ue=e=>{if(e===void 0)return!1;let t=e.charCodeAt(0);return t>=9&&t<=13||t>=28&&t<=32||t===5760||t>=8192&&t<=8202&&t!==8199||t===8232||t===8233||t===8287||t===12288},de=e=>e!==void 0&&/^\p{Nd}$/u.test(e),fe=e=>e!==void 0&&/^[\p{L}\p{Nd}]$/u.test(e),pe=e=>{let t=t=>{let n=C(e,t,ue);return e[n]===void 0?void 0:n},n=(n,r,i,a,o,s)=>{let c={kind:n,first:r,last:r,children:[]},l={index:t(i)};for(;l.index!==void 0&&e[l.index]!==a;){let n=o(l.index);if(!n)return;c.children.push(n);let r=t(n.last+1);if(r===void 0)return;let i=e.startsWith(s,r)?r+s.length:r;l.index=t(i)}if(l.index!==void 0)return c.last=l.index,c},r=(n,r)=>{let i=o(n);if(!i)return;let a=t(i.last+1);if(a===void 0||!e.startsWith(r,a))return;let s=t(a+r.length),c=s===void 0?void 0:o(s);if(c)return{kind:`Pair`,first:n,last:c.last,children:[i,c]}},i=t=>{let n=C(e,t,de);if(e.startsWith(`..`,n)&&de(e[n+2]))return{kind:`Constant`,first:t,last:C(e,n+2,de)-1,children:[]}},a=t=>{let n=e[t];if(n===`"`){let n=e.indexOf(`"`,t+1);return n===-1?void 0:{kind:`Constant`,first:t,last:n,children:[]}}let r=de(n)?i(t):void 0;if(r)return r;if(n===`-`)return t+1>=e.length?void 0:{kind:`Constant`,first:t,last:C(e,t+1,de)-1,children:[]};if(fe(n))return{kind:`Constant`,first:t,last:C(e,t,fe)-1,children:[]}},o=i=>{let s=t(i);if(s!==void 0)switch(e[s]){case`{`:return n(`Set`,s,s+1,`}`,o,`,`);case`<`:{let t=n(`Sequence`,s,s+2,`>`,o,`,`);return!t||t.last+1>=e.length?void 0:{...t,last:t.last+1}}case`[`:return n(`Record`,s,s+1,`]`,e=>r(e,`|->`),`,`);case`(`:return n(`Function`,s,s+1,`)`,e=>r(e,`:>`),`@@`);default:{if(!e.startsWith(`SUBSET`,s))return a(s);let n=t(s+6),r=n===void 0?void 0:o(n);return r?{kind:`Subset`,first:s,last:r.last,children:[r]}:void 0}}};return o(0)},me=e=>{let t=e.length===0?void 0:pe(e);if(!t||t.last<e.length-1)return e;let n=t=>e.slice(t.first,t.last+1),r=e=>e.last-e.first+1,i=(e,t,i,s)=>{if(r(e)<=t-i||e.kind===`Constant`)return n(e);if(e.kind===`Pair`)return;let c=le[e.kind],l=t-Math.max(c.open.length,c.pad.length),u=i+c.close.length,d=s+c.pad,f=e.kind===`Function`||e.kind===`Record`?o(e.children,l,u,d,c):a(e.children,l,u,d,c.separator);return f===void 0?void 0:c.open+f+c.close},a=(e,t,n,r,a)=>{let o=e.map((o,s)=>{let c=s===e.length-1,l=i(o,t,c?n:a.length,r);return l===void 0||c?l:`${l}${a}\n${r}`});return o.includes(void 0)?void 0:o.join(``)},o=(e,t,a,o,s)=>{let c=e.map((c,l)=>{let u=l===e.length-1,d=c.children[0],f=c.children[1],p=u?``:`${s.separator}\n${o}`,m=r(d)+s.divider.length+1+r(f);if(u?m<=t-a:m+s.separator.length<=t)return`${n(d)}${s.divider} ${n(f)}${p}`;let h=r(d)+s.divider.length<=t?n(d):i(d,t,a+s.divider.length,o),g=i(f,t-s.dividerPad.length,u?a:s.separator.length,o+s.dividerPad);return h===void 0||g===void 0?void 0:`${h}${s.divider}\n${o}${s.dividerPad}${g}${p}`});return c.includes(void 0)?void 0:c.join(``)};return i(t,80,0,``)??e},k=e=>typeof e==`object`&&e.kind!==`ModelValue`&&e.kind!==`Function`&&e.kind!==`LazyFunction`,A=e=>typeof e==`object`&&(e.kind===`Function`||e.kind===`LazyFunction`),j=e=>typeof e==`object`&&e.kind===`ModelValue`,he=e=>typeof e==`boolean`?`boolean`:typeof e==`number`?`integer`:typeof e==`string`?`string`:e.kind===`ModelValue`?`model value`:k(e)?`set`:`function`,ge=e=>{if(!Number.isInteger(e)||e>2147483647||e<-2147483648)throw new p(`Integer overflow: ${e} is outside TLC's 32-bit range`);return e},_e={isUsed:!1},ve=(e,t)=>(_e.isUsed=!0,e.writtenKeys=t,e),ye=e=>(e.writtenKeys??e.domain).map(t=>[t,e.range[Jt(e.domain,t)]]),be=(e,t,n)=>ve(ze(e,t),n),xe=e=>{if(!(typeof e!=`object`||e.kind!==`Function`&&e.kind!==`Set`)&&e.hash===0&&e.fingerprint===0){if(e.kind===`Set`)return e.elements.forEach(xe);e.writtenKeys=void 0,e.range.forEach(xe)}},Se=e=>e.every(e=>typeof e==`string`),Ce=(e,t)=>e.length>0&&t.length>0&&Se(e)!==Se(t),we=(e,t)=>{_e.isUsed&&(e.writtenKeys=void 0,t.writtenKeys=void 0);let n=e.domain,r=t.domain;if(n.length!==r.length)return Ce(n,r)?at(e,t):n.length-r.length;if(n!==r)for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}let i=e.range,a=t.range;if(i===a)return 0;for(let e=0;e<i.length;e++){let t=F(i[e],a[e]);if(t!==0)return t}return 0},M=(e,t)=>{let n=e.elements,r=t.elements;if(n.length!==r.length)return n.length-r.length;if(n===r)return 0;for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}return 0},Te=e=>j(e)?e.type:void 0,N=(e,t,n)=>{let r=Te(e),i=Te(t);if(r===void 0&&i===void 0)return;let a=n?`check equality of`:`compare`;if(j(e)&&j(t)){if(r===void 0||i===void 0||r===i)return;throw new f(`Attempted to ${a} the differently-typed model values ${H(e)} and ${H(t)}`)}throw r===void 0?new f(`Attempted to ${a} the typed model value ${H(t)} and the non-model value\n${H(e)}`):new f(`Attempted to ${a}${n?``:` the`} typed model value ${H(e)} and non-model value\n${H(t)}`)},Ee={ranks:Object.create(null),size:0},De=e=>{Ee.ranks=Object.create(null),Ee.size=0,Ie.clear();for(let t of e)Oe(t)},Oe=e=>(Ee.ranks[e]===void 0&&(Ee.ranks[e]=Ee.size++),e),ke=()=>Ee.size,Ae=e=>Ee.ranks[Oe(e)],je=(e,t)=>{if(e===t)return 0;let n=Ee.ranks,r=n[e],i=n[t];return r!==void 0&&i!==void 0?r-i:r===void 0?i===void 0&&e<t?-1:1:-1},P=e=>typeof e==`object`&&(e.kind===`InfiniteSet`||e.kind===`SequenceSet`),Me=(e,t)=>(P(e)||P(t))&&(typeof e!=`object`||e.kind!==`SequenceSet`||typeof t!=`object`||t.kind!==`SequenceSet`),Ne=(e,t,n)=>{if(!P(e))throw new f(`Attempted to ${n} the set ${H(L(e)?R(e):e,!0)} with the value:\n${H(t,!0)}`);if(!P(t))throw new f(`Attempted to compare overridden value ${H(e,!0)} with non-overridden value:\n${H(t,!0)}`);let r=e.kind===`InfiniteSet`?e.name:void 0,i=t.kind===`InfiniteSet`?t.name:void 0;if(r!==void 0&&r===i)return 0;if(r===`Nat`&&i===`Int`||r===`Int`&&i===`Nat`)return r===`Nat`?-1:1;throw new f(`Attempted to compare ${H(e,!0)} with the value\n${H(t,!0)}`)},Pe={kind:`InfiniteSet`,name:`Any`},Fe=e=>{throw new f(`Attempted to compare ANY with the value\n${H(e)}`)},F=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e===Pe?Fe(e):0;if(typeof e==`object`&&typeof t==`object`){let n=e.kind,r=t.kind;if(n===`Function`&&r===`Function`)return we(e,t);if(n===`Set`&&r===`Set`)return M(e,t);if(n===`Interval`&&r===`Interval`){let n=Math.max(0,e.high-e.low+1),r=Math.max(0,t.high-t.low+1);return n!==r||n===0?n-r:e.low-t.low}if(n===`ModelValue`&&r===`ModelValue`)return e.type!==void 0&&t.type!==void 0&&N(e,t,!1),e.rank-t.rank;if(n===`ModelValue`||r===`ModelValue`)return N(e,t,!1),n===`ModelValue`?-1:1;if(e===Pe||t===Pe)return Fe(e===Pe?t:e);if(k(e)&&k(t)&&Me(e,t))return Ne(e,t,`compare`);let i=k(e);if(i!==k(t))throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`);return i?M(R(e),R(t)):we(V(e),V(t))}if(typeof e==`number`&&typeof t==`number`)return e-t;if(typeof e==`string`&&typeof t==`string`)return je(e,t);if(typeof e==`boolean`&&typeof t==`boolean`)return e<t?-1:1;if(N(e,t,!1),j(e))return-1;if(j(t))return 1;throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`)},Ie=/* @__PURE__ */ new Map,Le=e=>{let t=Ie.get(e);if(t)return t;let n={kind:`ModelValue`,name:e,type:e.length>2&&e[1]===`_`?e[0]:void 0,rank:Ae(e)};return Ie.set(e,n),n},Re=e=>({kind:`Set`,elements:e,hash:0,fingerprint:0}),ze=(e,t)=>({kind:`Function`,domain:e,range:t,hash:0,fingerprint:0,writtenKeys:void 0}),Be=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e!==Pe||Fe(e);if(typeof e!=`object`||typeof t!=`object`)return typeof e!=typeof t&&((typeof e==`object`||typeof t==`object`)&&N(e,t,!0),F(e,t)===0);if((e.kind===`Set`||e.kind===`Function`)&&(t.kind===`Set`||t.kind===`Function`)&&e.hash!==0&&t.hash!==0&&e.hash!==t.hash)return!1;if(e.kind===`Function`&&t.kind===`Function`)return we(e,t)===0;if(e.kind===`Set`&&t.kind===`Set`)return M(e,t)===0;if(j(e)||j(t))return N(e,t,!0),j(e)&&j(t)&&e.name===t.name;if(e.kind===`Subset`&&t.kind===`Subset`)return Be(e.base,t.base);if(e.kind===`FunctionSet`&&t.kind===`FunctionSet`){let n=z(e.domain),r=z(t.domain);if(n||r)return n===r;let i=z(e.range),a=z(t.range);return i||a?i===a:Be(e.domain,t.domain)&&Be(e.range,t.range)}if(e.kind===`RecordSet`&&t.kind===`RecordSet`){if(z(e))return z(t);if(z(t))return!1;let n=e=>e.names.map((t,n)=>[t,e.sets[n]]).sort((e,t)=>e[0]<t[0]?-1:1),r=n(t);return e.names.length===t.names.length&&n(e).every((e,t)=>e[0]===r[t][0]&&Be(e[1],r[t][1]))}if(e.kind===`ProductSet`&&t.kind===`ProductSet`)return z(e)?z(t):!z(t)&&e.factors.length===t.factors.length&&e.factors.every((e,n)=>Be(e,t.factors[n]));let n=k(e)&&k(t)&&!(L(e)&&L(t));if(n&&Me(e,t))return Ne(e,t,`check equality of`)===0;if(n){if(!P(e)){let n=R(e);if(!P(t))return M(n,R(t))===0}return wn(e)===wn(t)}return F(e,t)===0},Ve=(e,t)=>e===t||e.length===t.length&&e.every((e,n)=>He(e,t[n])),He=(e,t)=>e===t?!0:typeof e!=`object`||typeof t!=`object`?!1:e.kind===`Set`&&t.kind===`Set`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.elements,t.elements):e.kind===`Function`&&t.kind===`Function`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.domain,t.domain)&&Ve(e.range,t.range):wn(e)===wn(t),Ue=e=>{let t=e.length===0?1:e[0];return typeof t==`number`&&e.every((e,n)=>e===t+n)?t:void 0},We=e=>{if(!A(e))return;let t=V(e);return{domain:t.domain,range:t.range,low:Ue(t.domain)}},Ge=e=>{if(!A(e))return;let t=V(e);return t.domain.every(e=>typeof e==`string`)?t:void 0},Ke=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to compare the typed model value ${H(e)} and the non-model value\n${H(t)}`);return 1},qe=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to check equality of the typed model value ${H(e)} and the non-model value\n${H(t)}`);return!1},Je=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)?e.rank-t.rank:-1;if(!j(t))throw new f(`Attempted to compare the typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to compare the differently-typed model values ${H(e)} and ${H(t)}`);return e.rank-t.rank},Ye=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)&&e.name===t.name;if(!j(t))throw new f(`Attempted to check equality of typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to check equality of the differently-typed model values ${H(e)} and ${H(t)}`);return e.name===t.name},Xe={number:{name:`integer`,other:`non-integer`,equality:`check equality of`},string:{name:`string`,other:`non-string`,equality:`check equality of`},boolean:{name:`boolean`,other:`non-boolean`,equality:`compare equality of`}},Ze=(e,t,n)=>{let r=Xe[typeof e==`number`?`number`:typeof e==`string`?`string`:`boolean`];return`Attempted to ${n?r.equality:`compare`} ${r.name} ${H(e)} with ${r.other}:\n${H(t)}`},Qe=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return Ke(n,t);throw new f(`Attempted to compare the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return e.range.length-r.range.length;let i=()=>$e(e.range,r.range);if(e.low!==void 0&&e.range.length===0)return 0;if(e.low!==void 0&&r.low!==void 0)return e.low===r.low?i():e.low-r.low;let a=e.low??r.low;if(a===void 0)return $e(e.domain,r.domain)||i();let o=e.low===void 0?e.domain:r.domain;for(let t=0;t<o.length;t++){let n=o[t];if(typeof n!=`number`)throw new f(`Attempted to compare integer with non-integer${e.low===void 0?``:`:`}\n${H(n)}.`);let r=e.low===void 0?n-(a+t):a+t-n;if(r!==0)return r}return i()},$e=(e,t)=>{for(let n=0;n<e.length;n++){let r=at(e[n],t[n]);if(r!==0)return r}return 0},et=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length-r.length||$e(n.range,r):Qe({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return Ke(t,e);throw new f(`Attempted to compare record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length-r.domain.length||$e(n.domain,r.domain)||$e(n.range,r.range)}return Qe({...n,low:Ue(n.domain)},e,t)},tt=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`),nt=(e,t)=>P(e)||P(t)||typeof t==`object`&&e.kind===t.kind&&(e.kind===`Interval`||e.kind===`Subset`||e.kind===`FunctionSet`||e.kind===`RecordSet`||e.kind===`ProductSet`),rt=(e,t)=>{let n=tt(t)?t:R(t);return{elements:R(e).elements,otherElements:R(n).elements}},it=(e,t)=>{if(nt(e,t))return F(e,t);if(!tt(e))return it(R(e),t);if(!k(t)){if(j(t))return Ke(t,e);throw new f(`Attempted to compare the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length-n.otherElements.length||$e(n.elements,n.otherElements)},at=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return F(e,t);if(j(t))return Ke(t,e);throw new f(Ze(e,t,!1))}return e.kind===`ModelValue`?Je(e,t):A(e)?et(e,t):it(e,t)},ot=(e,t)=>e.every((e,n)=>ut(e,t[n])),st=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return qe(n,t);throw new f(`Attempted to check equality of the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return!1;if(e.low!==void 0&&r.low!==void 0)return(e.range.length===0||e.low===r.low)&&ot(e.range,r.range);let i=e.low??r.low;return i===void 0?ot(e.domain,r.domain)&&ot(e.range,r.range):(e.low===void 0?e.domain:r.domain).every((e,t)=>{if(typeof e!=`number`)throw new f(`Attempted to compare an integer with non-integer:\n${H(e)}.`);return e===i+t})&&ot(e.range,r.range)},ct=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length===r.length&&ot(n.range,r):st({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length===r.domain.length&&ot(n.domain,r.domain)&&ot(n.range,r.range)}return st({...n,low:Ue(n.domain)},e,t)},lt=(e,t)=>{if(nt(e,t))return Be(e,t);if(!tt(e))return lt(R(e),t);if(!k(t)){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length===n.otherElements.length&&ot(n.elements,n.otherElements)},ut=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return e===t;if(j(t))return qe(t,e);throw new f(Ze(e,t,!0))}return e.kind===`ModelValue`?Ye(e,t):A(e)?ct(e,t):lt(e,t)},dt=e=>{let t=[];for(let n of e){let e={low:0,high:t.length,comparison:1};for(;e.low<e.high;){let r=e.low+(e.high-e.low>>1);if(e.comparison=at(n,t[r]),e.comparison===0)break;e.comparison<0?e.high=r:e.low=r+1}e.comparison!==0&&t.splice(e.low,0,n)}return t},ft=(e,t)=>t.some(t=>ut(t,e)),pt=(e,t)=>{try{return Be(e,t)}catch(n){if(!(n instanceof f))throw n;return ut(e,t)}},mt=e=>{for(let t=1;t<e.length;t++)if(F(e[t-1],e[t])>=0)return!1;return!0},ht=e=>{if(e.length<2||mt(e))return Re(e);let t=[...e].sort(F),n=[t[0]];for(let e=1;e<t.length;e++)F(n[n.length-1],t[e])!==0&&n.push(t[e]);return Re(n)},gt=e=>{try{return ht(e)}catch(t){if(!(t instanceof f))throw t;return{kind:`MixedSet`,elements:e}}},_t=Re([]),vt=(e,t)=>{if(e.elements.length===0||t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0||i.push(t)}return i.length===n.length?e:Re(i)},yt=(e,t)=>{let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0&&i.push(t)}return i.length===n.length?e:Re(i)},bt=(e,t)=>{if(e.elements.length===0)return t;if(t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=[],o=0,s=0;for(;o<n.length&&s<r.length;){let e=F(n[o],r[s]);e<0?i.push(n[o++]):e>0?(a.push(r[s]),i.push(r[s++])):(i.push(n[o++]),s++)}for(;o<n.length;)i.push(n[o++]);for(;s<r.length;)a.push(r[s]),i.push(r[s++]);if(a.length===0)return e;let c=Re(i);if(e.hash!==0){let t=e.hash;for(let e=0;e<a.length;e++)t=t+fn(a[e])|0;c.hash=t}if(e.fingerprint!==0){let t=e.fingerprint;for(let e=0;e<a.length;e++)t=t+yn(a[e])|0;c.fingerprint=t}return c},xt=e=>{let t=e.length<2?e:[...e].sort((e,t)=>F(e[0],t[0])),n=[],r=[];for(let e of t)n.length>0&&F(n[n.length-1],e[0])===0||(n.push(e[0]),r.push(e[1]));return ze(n,r)},St=e=>{let t=xt(e);return t.domain.length!==e.length||e.some(e=>typeof e[0]!=`string`)||e.every((e,n)=>e[0]===t.domain[n])?t:ve(t,e.map(e=>e[0]))},Ct=[],wt=[],Tt=/* @__PURE__ */ new WeakMap,Et=e=>{let t=Ct[e];if(t)return t;let n=Array.from({length:e},(e,t)=>t+1);return Ct[e]=n,n},Dt=e=>{if(Gt(e),e.low===1&&e.high>=1)return Et(e.high);let t=[];for(let n=e.low;n<=e.high;n++)t.push(n);return t},Ot=e=>e.length>0&&(e===Ct[e.length]||Tt.has(e)),kt=e=>{let t=R(e).elements;return Ot(t)&&(typeof e!=`object`||e.kind!==`Interval`)?[...t]:t},At=e=>{let t=wt[e];if(t)return t;let n={kind:`Interval`,low:1,high:e};return wt[e]=n,n},I=e=>ze(Et(e.length),e),jt=e=>xt(e),Mt=e=>k(e)&&!P(e),Nt=(e,t=!1)=>`UNION(${H(e.base,t)})`,Pt=e=>{if(!Mt(e.base))throw new f(`Attempted to enumerate the nonenumerable set:\n${Nt(e)}`);return R(e.base).elements},Ft=(e,t,n)=>{if(Mt(e))return e;throw new f(t===0?`Attempted to enumerate UNION(s), but some element of s is nonenumerable.`:`Attempted to enumerate the nonenumerable set:\n${H(e)}\nwhen enumerating:\n${Nt(n)}`)},L=e=>{if(typeof e!=`object`)return!1;switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:return!0;case`InfiniteSet`:case`SequenceSet`:return!1;case`Subset`:case`FilteredSet`:return L(e.base);case`FunctionSet`:return L(e.domain)&&L(e.range)||It(e.domain)===!0||It(e)===!0;case`RecordSet`:return e.sets.every(L)||It(e)===!0;case`ProductSet`:return e.factors.every(L)||It(e)===!0;case`Union`:return L(e.base)&&R(e.base).elements.every(L);case`SetOperation`:return e.operator===`\\cup`?L(e.left)&&L(e.right):e.operator===`\\cap`?L(e.left)||L(e.right):L(e.left);default:return!1}},It=e=>{if(typeof e==`object`)switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:return e.name===`Any`&&void 0;case`Subset`:case`SequenceSet`:return!1;case`FunctionSet`:{let t=It(e.domain);return t===void 0?void 0:!t&&It(e.range)}case`RecordSet`:case`ProductSet`:for(let t of e.kind===`RecordSet`?e.sets:e.factors){let e=It(t);if(e!==!1)return e}return!1;case`SetOperation`:case`FilteredSet`:case`Union`:return L(e)?R(e).elements.length===0:void 0;default:return}},Lt=e=>{let t=e.reduce((e,t)=>e*t.length,1),n=[],r=e.map(()=>0);for(let i=0;i<t;i++){n.push(e.map((e,t)=>e[r[t]]));for(let t=e.length-1;t>=0&&(r[t]++,!(r[t]<e[t].length));t--)r[t]=0}return n},Rt=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(e[n]<t-e.length+n){e[n]++;for(let t=n+1;t<e.length;t++)e[t]=e[t-1]+1;return!0}return!1},zt=e=>{let t=[];for(let n=0;n<=e.length;n++){let r=Array.from({length:n},(e,t)=>t);do t.push(Re(r.map(t=>e[t])));while(Rt(r,e.length))}return t},Bt=e=>{if(typeof e!=`object`)throw new f(`Expected a set but found ${H(e)}`);switch(e.kind){case`Set`:return e.elements;case`MixedSet`:return dt(e.elements);case`Interval`:{let t=Dt(e);return t!==Ct[t.length]&&Tt.set(t,e),t}case`Subset`:{P(e.base)&&Gt(e.base);let t=R(e.base).elements;if(t.length>30)throw new f(`SUBSET of a set with ${t.length} elements is too large to enumerate`);return zt(t)}case`FunctionSet`:{if(z(e))return[];if(P(e.domain))throw new f(`Attempted to enumerate a set of the form [D -> R],but the domain D:\n${H(e.domain)}\ncannot be enumerated.`);let t=kt(e.domain);if(t.length>0&&P(e.range))throw new f(`Attempted to enumerate a set of the form [D -> R],but the range R:\n${H(e.range)}\ncannot be enumerated.`);let n=t.length===0?[]:R(e.range).elements;return Lt(t.map(()=>n)).map(e=>ze(t,e))}case`RecordSet`:{if(z(e))return[];let t=e.sets.map((t,n)=>{if(P(t))throw new f(`Attempted to enumerate a set of the form [l1 : v1, ..., ln : vn],\nbut can't enumerate the value of the \`${e.names[n]}' field:\n${H(t)}`);return R(t).elements});return Lt(t).map(t=>jt(e.names.map((e,n)=>[e,t[n]])))}case`ProductSet`:{if(z(e))return[];let t=e.factors.map((e,t)=>{if(P(e))throw new f(`Attempted to enumerate a set of the form s1 \\X s2 ... \\X sn,\nbut can't enumerate s${t}:\n${H(e)}`);return R(e).elements});return Lt(t).map(I)}case`FilteredSet`:if(P(e.base))throw new f(`Attempted to enumerate { x \\in S : p(x) } when S:\n${H(e.base)}\nis not enumerable`);return R(e.base).elements.filter(e.test);case`Union`:{let t=Pt(e).flatMap((t,n)=>R(Ft(t,n,e)).elements);return R(gt(t)).elements}case`SetOperation`:{if(e.operator===`\\cup`&&(P(e.left)||P(e.right)))throw new f(`Attempted to enumerate S \\cup T when S:\n${H(e.left)}\nand T:\n${H(e.right)}\nare not both enumerable`);if(e.operator===`\\cap`&&P(e.left)&&P(e.right))throw new f(`Attempted to enumerate S \\cap T when neither S:\n${H(e.left)}\nnor T:\n${H(e.right)}\nis enumerable`);if(e.operator===`\\`&&P(e.left))throw new f(`Attempted to enumerate S \\ T when S:\n${H(e.left)}\nis not enumerable.`);if(e.operator===`\\cup`)return bt(R(e.left),R(e.right)).elements;let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return R(n).elements.filter(t=>B(t,r)===(e.operator===`\\cap`))}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to enumerate the non-enumerable set ${H(e)}`);default:throw new f(`Expected a set but found ${H(e)}`)}},Vt=/* @__PURE__ */ new WeakMap,R=e=>{if(typeof e==`object`&&e.kind===`Set`)return e;if(typeof e==`object`&&e.kind===`Interval`)return Re(Bt(e));let t=typeof e==`object`?Vt.get(e):void 0;if(t)return t;let n=Bt(e),r=typeof e==`object`&&(e.kind===`MixedSet`||e.kind===`Union`||e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`ProductSet`||e.kind===`FunctionSet`||e.kind===`Subset`)?Re(n):ht(n);return typeof e==`object`&&Vt.set(e,r),r},Ht=e=>{if(typeof e!=`object`||Vt.has(e))return R(e).elements;if(e.kind===`Union`)return Pt(e).flatMap((t,n)=>Ht(Ft(t,n,e)));if(e.kind===`FilteredSet`&&!P(e.base))return Ht(e.base).filter(e.test);if(e.kind!==`SetOperation`)return R(e).elements;if(e.operator===`\\cup`)return P(e.left)||P(e.right)?R(e).elements:[...Ht(e.left),...Ht(e.right)];let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return P(n)?R(e).elements:Ht(n).filter(t=>B(t,r)===(e.operator===`\\cap`))},z=e=>{if(typeof e!=`object`||!k(e))throw new f(`Shouldn't call isEmpty() on value ${H(e)}`);switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:if(e.name===`Any`)throw new f(`Shouldn't call isEmpty() on value ANY`);return!1;case`Subset`:case`SequenceSet`:return!1;case`ProductSet`:return e.factors.some(z);case`RecordSet`:return e.sets.some(z);case`FunctionSet`:return!z(e.domain)&&z(e.range);case`Union`:return Pt(e).every((t,n)=>z(Ft(t,n,e)));default:return R(e).elements.length===0}},Ut=(e,t)=>e.reduce((e,n)=>{let r=e*Gt(n);if(r>2147483647)throw new f(t());return r},1),Wt=e=>`Overflow when computing the number of elements in:\n${H(e)}`,Gt=e=>{if(typeof e!=`object`)return R(e).elements.length;switch(e.kind){case`Interval`:{let t=Math.max(0,e.high-e.low+1);if(t>2147483647)throw new f(`Size of interval value exceeds the maximum representable size (32bits): ${e.low}..${e.high}.`);return t}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to compute the number of elements in the overridden value ${H(e)}.`);case`Subset`:{let t=Gt(e.base);if(t>=31)throw new f(Wt(e));return 2**t}case`FunctionSet`:{if(z(e.domain))return 1;if(z(e.range))return 0;let t=Gt(e.range);if(t===1)return 1;let n=Gt(e.domain),r={value:1};for(let i=0;i<n;i++)if(r.value*=t,r.value>2147483647)throw new f(Wt(e));return r.value}case`RecordSet`:return z(e)?0:Ut(e.sets,()=>Wt(e));case`ProductSet`:return z(e)?0:Ut(e.factors,()=>`Overflow when computing the number of elements in ${H(e)}`);default:return R(e).elements.length}},Kt=e=>`Attempted to check if the set ${H(e)}is finite.`,qt=e=>{if(typeof e!=`object`||e.kind===`ModelValue`)throw new f(`Attempted to check if the ${he(e)} ${H(e)} is a finite set.`);switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:case`Function`:return!0;case`LazyFunction`:throw new f(`Attempted to check if the function:\n${H(e)}\nis a finite set.`);case`InfiniteSet`:return!1;case`SequenceSet`:return qt(e.base)&&z(e.base);case`Subset`:return qt(e.base);case`FunctionSet`:{let t=qt(e.domain);if(t&&z(e.domain))return!0;let n=qt(e.range);return n&&z(e.range)?!0:n&&(t||Gt(e.range)===1)}case`RecordSet`:case`ProductSet`:{let t=e.kind===`RecordSet`?e.sets:e.factors,n={isAllFinite:!0};for(let e of t)if(!qt(e))n.isAllFinite=!1;else if(z(e))return!0;return n.isAllFinite}case`Union`:if(!Mt(e.base))throw new f(`Attempted to check if the nonenumerable set:\n${Nt(e)}\nis a finite set.`);return R(e.base).elements.every(qt);case`SetOperation`:if(e.operator===`\\cup`)return qt(e.left)&&qt(e.right);if(e.operator===`\\cap`){if(!qt(e.left)&&!qt(e.right))throw new f(Kt(e));return!0}if(qt(e.left))return!0;if(!qt(e.right))throw new f(Kt(e));return!1;case`FilteredSet`:if(!qt(e.base))throw new f(`Attempted to check if expression of form {x \\in S : p(x)} is a finite set, but cannot check if S:\n${H(e.base)}\nis finite.`);return!0}},Jt=(e,t)=>{let n={low:0,high:e.length-1};for(;n.low<=n.high;){let r=n.low+n.high>>1,i=F(e[r],t);if(i===0)return r;i<0?n.low=r+1:n.high=r-1}return-1},Yt=e=>{if(typeof e!=`object`||!A(e))return;let t=V(e);return t.domain.every((e,t)=>e===t+1)?t.range:void 0},Xt=(e,t)=>`Attempted to check if the value ${H(e)} is an element of ${H(t)}`,Zt=(e,t)=>{let n=`Attempted to check if the value:\n${H(e)}\nis an element of the`;if(!A(t))return`${n} ${he(t)} ${H(t)}`;let r=t.kind===`Function`||L(t.domain)?V(t).domain:[];return r.length>0&&r.every(e=>typeof e==`string`)?`Attempted to check if element:\n${H(e)}\nis in the record:\n${H(t)}`:r.every((e,t)=>e===t+1)?`Attempted to check set membership in a tuple value.`:`${n} function ${H(t)}`},B=(e,t)=>{if(!k(t))throw new f(Zt(e,t));switch(t.kind){case`Set`:try{return Jt(t.elements,e)!==-1}catch(n){if(!(n instanceof f))throw n;return ft(e,t.elements)}case`MixedSet`:return ft(e,t.elements);case`Interval`:if(typeof e==`number`)return e>=t.low&&e<=t.high;if(t.low<=t.high&&!j(e))throw new f(`Attempted to check if the value:\n${H(e)}\nis in the integer interval ${H(t)}`);return!1;case`InfiniteSet`:if(t.name===`Any`)return!0;if(j(e))return!1;if(!(t.name===`STRING`?typeof e==`string`:typeof e==`number`))throw new f(`Attempted to check if the value:\n${H(e)}\nis an element of ${t.name}.`);return t.name!==`Nat`||typeof e==`number`&&e>=0;case`Subset`:if(!k(e))throw new f(Xt(e,t));return R(e).elements.every(e=>B(e,t.base));case`FunctionSet`:{if(!A(e)){if(j(e))return!1;throw new f(Xt(e,t))}let n=V(e),r=Ue(n.domain);return(r===void 0?pt(t.domain,Re(n.domain)):pt({kind:`Interval`,low:r,high:r+n.domain.length-1},t.domain))&&n.range.every(e=>B(e,t.range))}case`RecordSet`:{let n=A(e)?V(e):void 0;if(!n||!Se(n.domain)){if(j(e))return!1;throw new f(`Attempted to check if non-record\n${H(e)}\nis in the set of records:\n${H(t)}`)}return n.domain.length===t.names.length&&t.names.every((e,r)=>{let i=Jt(n.domain,e);return i!==-1&&B(n.range[i],t.sets[r])})}case`ProductSet`:{let n=A(e)?Yt(e):void 0;if(n===void 0){if(A(e)&&V(e).domain.every(e=>typeof e==`number`)||j(e))return!1;throw new f(`Attempted to check if non-tuple\n${H(e)}\nis in the set of tuples:\n${H(t)}`)}return n.length===t.factors.length&&n.every((e,n)=>B(e,t.factors[n]))}case`FilteredSet`:return B(e,t.base)&&t.test(e);case`Union`:if(!Mt(t.base))throw new f(`Attempted to check if:\n ${H(e)}\nis an element of the non-enumerable set:\n ${Nt(t)}`);return R(t.base).elements.some(t=>B(e,t));case`SetOperation`:return t.operator===`\\cup`?B(e,t.left)||B(e,t.right):B(e,t.left)&&B(e,t.right)===(t.operator===`\\cap`);case`SequenceSet`:{let n=Yt(e);if(n===void 0){if(j(e))return!1;throw new f(Xt(e,t))}return n.every(e=>B(e,t.base))}default:throw new f(Zt(e,t))}},Qt=(e,t,n)=>e===t?!0:typeof e!=`object`||typeof t!=`object`||typeof n!=`object`||e.kind!==`Function`||t.kind!==`Function`||n.kind!==`FunctionSet`||e.domain!==t.domain?B(e,n):e.range.every((e,r)=>Qt(e,t.range[r],n.range)),V=e=>{if(typeof e==`object`&&e.kind===`Function`)return e;if(typeof e==`object`&&e.kind===`LazyFunction`){L(e.domain)||Gt(e.domain);let t=kt(e.domain);return ze(t,t.map(t=>e.apply(t)))}throw new f(`Expected a function but found ${H(e)}`)},$t=/* @__PURE__ */ new WeakSet,en=e=>($t.add(e),e),tn=(e,t)=>typeof e==`object`&&$t.has(e)?`In applying the function\n${me(H(e))},\nthe first argument is:\n${me(H(t))}\nwhich is not in its domain.\n`:`Attempted to apply function ${H(e)} to ${H(t)}, which is not in its domain`,nn=(e,t)=>{let n=e[0];if(typeof t==`number`&&typeof n==`number`){let r=t-n;if(e[r]===t)return r}if(e.length<=8){for(let n=0;n<e.length;n++)if(e[n]===t)return n}return Jt(e,t)},rn=(e,t,n)=>{if(typeof e==`object`&&e.kind===`LazyFunction`){if(!B(t,e.domain))throw new f($t.has(e)?tn(e,t):`Attempted to apply a function to ${H(t)}, which is not in its domain`);return e.apply(t)}if(typeof e!=`object`||e.kind!==`Function`)throw new f(`Attempted to apply ${H(e)}, which is not a function`);let r=nn(e.domain,t);if(r===-1)throw new f(n?.(e)??tn(e,t));return e.range[r]},an=e=>Ot(e)?Tt.get(e)??At(e.length):void 0,on=e=>{if(typeof e==`object`&&e.kind===`LazyFunction`)return e.domain;let t=V(e).domain;return an(t)??Re(t)},sn=(e,t,n,r=!1)=>{if(typeof e==`object`&&e.kind===`LazyFunction`&&(r||!L(e.domain))){if(!B(t,e.domain))return e;let r=n(e.apply(t));return{kind:`LazyFunction`,domain:e.domain,apply:n=>pt(t,n)?r:e.apply(n),source:e.source}}let i=V(e),a=nn(i.domain,t);if(a===-1)return i;let o=[...i.range],s=i.range[a],c=n(s);o[a]=c;let l=ze(i.domain,o);if(l.writtenKeys=i.writtenKeys,i.hash!==0){let e=i.domain[a];l.hash=s===c?i.hash:i.hash-pn(e,s)+pn(e,c)|0}if(i.fingerprint!==0){let e=i.domain[a];l.fingerprint=s===c?i.fingerprint:i.fingerprint-bn(e,s)+bn(e,c)|0}return l},cn=/* @__PURE__ */ new WeakMap,ln=e=>{let t=Math.imul(e^e>>>16,2246822507),n=Math.imul(t^t>>>13,3266489909);return n^n>>>16},un=(e,t)=>Math.imul(e^t,16777619),dn=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return ln(t)},fn=e=>ln(hn(e)+2654435769|0),pn=(e,t)=>ln(Math.imul(hn(e),668265261)+hn(t)|0),mn=e=>{if(e.kind===`ModelValue`)return ln(un(dn(e.name),109));if(k(e)){if(!L(e))return dn(wn(e));let t=R(e).elements,n=1940243425;for(let e=0;e<t.length;e++)n=n+fn(t[e])|0;return n}let t=V(e),n=1725019383;for(let e=0;e<t.domain.length;e++)n=n+pn(t.domain[e],t.range[e])|0;return n},hn=e=>{if(typeof e==`number`)return ln(e^1540483477);if(typeof e==`boolean`)return e?729683222:682545830;if(typeof e==`string`)return dn(e);if(e.kind===`Set`||e.kind===`Function`)return e.hash===0&&(e.hash=mn(e)),e.hash;let t=cn.get(e);if(t!==void 0)return t;let n=mn(e);return cn.set(e,n),n},gn=/* @__PURE__ */ new WeakMap,_n=e=>{let t=Math.imul(e^e>>>15,739982445),n=Math.imul(t^t>>>12,695872825);return n^n>>>15},vn=e=>{let t=2538058380;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),1540483477);return _n(t)},yn=e=>_n(Sn(e)+2135587861|0),bn=(e,t)=>_n(Math.imul(Sn(e),374761393)+Sn(t)|0),xn=e=>{if(e.kind===`ModelValue`)return _n(vn(e.name)^60);if(k(e)){if(!L(e))return vn(wn(e));let t=R(e).elements,n=461845907;for(let e=0;e<t.length;e++)n=n+yn(t[e])|0;return n}let t=V(e),n=1291169091;for(let e=0;e<t.domain.length;e++)n=n+bn(t.domain[e],t.range[e])|0;return n},Sn=e=>{if(typeof e==`number`)return _n(e^1759714724);if(typeof e==`boolean`)return e?1000000007:521288629;if(typeof e==`string`)return vn(e);if(e.kind===`Set`||e.kind===`Function`)return e.fingerprint===0&&(e.fingerprint=xn(e)),e.fingerprint;let t=gn.get(e);if(t!==void 0)return t;let n=xn(e);return gn.set(e,n),n},Cn=/* @__PURE__ */ new WeakMap,wn=e=>{if(typeof e==`boolean`)return e?`T`:`F`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);let t=Cn.get(e);if(t!==void 0)return t;let n=Tn(e);return Cn.set(e,n),n},Tn=e=>{if(e.kind===`ModelValue`)return`@${e.name}`;if(e.kind===`InfiniteSet`)return`<${e.name}>`;if(e.kind===`SequenceSet`)return`<Seq ${wn(e.base)}>`;if(e.kind===`FilteredSet`&&!L(e))throw new f(`Attempted to compare the non-enumerable set ${H(e)} with another value`);if(k(e))return L(e)?`{${R(e).elements.map(wn).join(`,`)}}`:`<${e.kind} ${H(e)}>`;let t=V(e);return`(${t.domain.map((e,n)=>`${wn(e)}:${wn(t.range[n])}`).join(`,`)})`},En=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\n/g,`\\n`).replace(/\t/g,`\\t`)}"`,Dn=e=>e.reduce((e,t)=>e===0?0:e*Gt(t),1),On=e=>{if(e.kind===`Subset`)return Gt(e.base)<=6?R(e):void 0;if(e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`Union`)return R(e);if(e.kind===`FunctionSet`&&L(e.domain)&&Gt(e.domain)===0)return Re([ze([],[])]);let t=e.kind===`FunctionSet`?Gt(e.range)**Gt(e.domain):Dn(e.kind===`RecordSet`?e.sets:e.factors);return t===0?_t:t<=1999?R(e):void 0},kn=(e,t)=>{if(t)return On(e);if(L(e))try{return On(e)}catch(e){if(e instanceof f)return;throw e}},An=(e,t)=>{let n=e=>H(e,t);switch(e.kind){case`Subset`:return typeof e.base==`object`&&e.base.kind===`Interval`?`SUBSET (${n(e.base)})`:`SUBSET ${n(e.base)}`;case`FunctionSet`:return`[${n(e.domain)} -> ${n(e.range)}]`;case`RecordSet`:return`[${e.names.map((t,r)=>`${t}: ${n(e.sets[r])}`).join(`, `)}]`;case`ProductSet`:return`(${e.factors.map(n).join(` \\X `)})`;case`SetOperation`:return`${n(e.left)} ${e.operator} ${n(e.right)}`;case`FilteredSet`:return`{x \\in ${n(e.base)} : ...}`;case`Union`:return Nt(e,t)}},jn=e=>/^[\p{L}\p{Nd}_]*$/u.test(e)&&/\p{L}/u.test(e)&&(e.length<4||!/^[WS]F_/.test(e)),H=(e,t=!1,n=!1)=>{let r=e=>H(e,t,n);if(typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return En(e);switch(e.kind){case`ModelValue`:return e.name;case`Set`:return`{${e.elements.map(r).join(`, `)}}`;case`MixedSet`:return r(R(e));case`Interval`:return e.low<=e.high?`${e.low}..${e.high}`:`{}`;case`InfiniteSet`:return e.name===`Any`?`ANY`:e.name;case`Subset`:case`FunctionSet`:case`RecordSet`:case`ProductSet`:case`SetOperation`:case`FilteredSet`:case`Union`:{let n=kn(e,t);return n?r(n):An(e,t)}case`SequenceSet`:return`Seq(${r(e.base)})`;case`Function`:case`LazyFunction`:{if(e.kind===`LazyFunction`&&!L(e.domain)){let t=e.source;return t?`[${t.parameters.map(e=>`${e.name} \\in ${H(e.domain)}`).join(`, `)} |-> <expression ${t.body}>]`:`<function>`}let t=V(e);return t.domain.every((e,t)=>e===t+1)?`<<${t.range.map(r).join(`, `)}>>`:t.domain.every(e=>typeof e==`string`&&jn(e))?`[${(n||t.hash!==0||t.fingerprint!==0?t.domain.map((e,n)=>[e,t.range[n]]):ye(t)).map(e=>`${String(e[0])} |-> ${r(e[1])}`).join(`, `)}]`:`(${t.domain.map((e,n)=>`${r(e)} :> ${r(t.range[n])}`).join(` @@ `)})`}}},Mn=(e,t)=>{for(let n=0;n<e.length;n++)e[n]=t(e[n])},Nn=()=>{let e=/* @__PURE__ */ new Map,t=n=>{if(typeof n!=`object`||n.kind!==`Set`&&n.kind!==`Function`)return n;let r=hn(n),i=e.get(r);if(i!==void 0&&!Array.isArray(i)&&(i===n||He(i,n)))return i;if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(i[e]===n||He(i[e],n))return i[e]}return n.kind===`Set`?Mn(n.elements,t):(Mn(n.domain,t),Mn(n.range,t)),i===void 0?e.set(r,n):Array.isArray(i)?i.push(n):e.set(r,[i,n]),n};return e=>{for(let n=0;n<e.length;n++)e[n]=t(e[n]);return e}},Pn=/* @__PURE__ */ new Set(/* @__PURE__ */ `=,#,~,<=>,/\\,\\/,=>,\\in,\\notin,\\subseteq,\\cup,\\cap,\\,SUBSET,UNION,DOMAIN,+,-,*,^,\\div,%,..,Seq,IsFiniteSet,RandomElement`.split(`,`)),Fn=(e,t)=>Pn.has(e)?new f(t):new p(t),In=e=>typeof e==`object`&&e.kind===`Operator`,U=(e,t,n)=>{let r=e[t];if(r===void 0||In(r))throw Fn(n,`${n} expects a value as argument ${t+1}`);return r},Ln=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`number`)throw Fn(n,`${n} expects an integer but received ${H(r)}`);return r},Rn=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`boolean`)throw Fn(n,`${n} expects a boolean but received ${H(r)}`);return r},zn=(e,t,n)=>{let r=U(e,t,n);if(!k(r))throw Fn(n,`${n} expects a set but received ${H(r)}`);return r},Bn=(e,t,n)=>{let r=zn(e,t,n);if(!L(r))throw Fn(n,`${n} cannot enumerate the non-enumerable set ${H(r)}`);return r},Vn=(e,t,n)=>R(Bn(e,t,n)),Hn=(e,t,n)=>Vn(e,t,n).elements,Un=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw Fn(n,`${n} expects a sequence but received ${H(r)}`);return i},Wn=(e,t,n)=>{let r=U(e,t,n);if(!A(r))throw Fn(n,`${n} expects a function but received ${H(r)}`);return V(r)},Gn=(e,t,n)=>{let r=e[t];if(r===void 0||!In(r))throw Fn(n,`${n} expects an operator as argument ${t+1}`);return r},Kn=(e,t)=>({kind:`Builtin`,name:e,arity:0,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0}),W=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:t===1?e=>n([e]):void 0,evaluateBinary:t===2?(e,t)=>n([e,t]):void 0}),qn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0}),Jn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0,isStateLevel:!0}),Yn=(e,t)=>({kind:`Builtin`,name:e,arity:2,evaluate:n=>t(U(n,0,e),U(n,1,e)),evaluateUnary:void 0,evaluateBinary:t}),Xn=e=>e>2147483647||e<-2147483648,Zn=e=>new p(`Overflow when computing ${e}`),Qn={ModelValue:`ModelValue`,Set:`SetEnumValue`,Interval:`IntervalValue`,InfiniteSet:`UserValue`,SequenceSet:`UserValue`,Subset:`SubsetValue`,FunctionSet:`SetOfFcnsValue`,RecordSet:`SetOfRcdsValue`,ProductSet:`SetOfTuplesValue`,FilteredSet:`SetPredValue`,LazyFunction:`FcnLambdaValue`,Union:`UnionValue`,MixedSet:`SetEnumValue`},$n={"\\cup":`SetCupValue`,"\\cap":`SetCapValue`,"\\":`SetDiffValue`},er={BoolValue:`a Boolean value`,IntValue:`an integer`,StringValue:`a string`,RecordValue:`a record`,SetEnumValue:`a set of the form {e1, ... ,eN}`,SetPredValue:`a set of the form {x \\in S : expr}`,TupleValue:`a tuple`,FcnLambdaValue:`a function of the form [x \\in S |-> expr]`,FcnRcdValue:`a function of the form (d1 :> e1 @@ ... @@ dN :> eN)`,SetOfFcnsValue:`a set of the form [S -> T]`,SetOfRcdsValue:`a set of the form [d1 : S1, ... , dN : SN]`,SetOfTuplesValue:`a cartesian product`,SubsetValue:`a set of the form SUBSET S`,SetDiffValue:`a set of the form S \\ T`,SetCapValue:`a set of the form S \\cap T`,SetCupValue:`a set of the form S \\cup T`,ModelValue:`a model value`,UserValue:`a special set constant`,IntervalValue:`a set of the form i..j`,UnionValue:`a set of the form UNION S`},tr=e=>{if(typeof e==`number`)return`IntValue`;if(typeof e==`string`)return`StringValue`;if(typeof e==`boolean`)return`BoolValue`;if(e.kind===`SetOperation`)return $n[e.operator];if(e.kind!==`Function`)return Qn[e.kind];let t=e.domain;return t.every((e,t)=>e===t+1)?`TupleValue`:t.every(e=>typeof e==`string`)?`RecordValue`:`FcnRcdValue`},nr=e=>er[tr(e)],rr=(e,t)=>new f(`Attempted to apply the operator overridden by the Java method\n${e},\nbut it produced the following error:\n${t}`),ir=(e,t)=>{let n=n=>(...r)=>{try{return n(...r)}catch(n){throw n instanceof f&&(e.isLazy===!0||!(n instanceof p))?rr(t,n.message):n}};return{...e,evaluate:n(e.evaluate),evaluateUnary:e.evaluateUnary&&n(e.evaluateUnary),evaluateBinary:e.evaluateBinary&&n(e.evaluateBinary)}},ar=(e,t)=>{if(typeof e!=`number`)throw rr(t,`Cannot cast tlc2.value.impl.${tr(e)} to tlc2.value.impl.IntValue`);return e},or=(e,t,n)=>`public static tlc2.value.impl.${t} tlc2.module.Integers.${e}(${Array.from({length:n},()=>`tlc2.value.impl.IntValue`).join(`,`)})`,sr=(e,t,n)=>{let r=or(t,`IntValue`,2);return Yn(e,(t,i)=>{let a=ar(t,r),o=ar(i,r),s=n(a,o);if(Xn(s))throw Zn(`${a}${e}${o}`);return s})},cr=(e,t,n)=>{if(typeof e!=`number`)throw new p(`The ${t} argument of ${n} should be an integer, but instead it is:\n${H(e)}`);return e},lr=(e,t)=>Yn(e,(n,r)=>t(cr(n,`first`,e),cr(r,`second`,e))),ur=(e,t,n)=>({...Jn(e,t,n),isLazy:!0}),dr=(e,t,n)=>{let r=Gn(e,t,n);return()=>r.call([])},fr=/* @__PURE__ */ new Set([`Apply`,`And`,`Or`,`If`,`FunctionApplication`,`FieldAccess`,`Record`,`Tuple`,`SetEnumeration`,`Prime`,`Unchanged`,`Forall`,`Exists`]),pr=()=>({bool:qa,condition:(e,t)=>{if(typeof e!=`boolean`)throw Ia(t,e);return e},conjunct:(e,t,n)=>{if(typeof e!=`boolean`)throw La(t,n,e);return e},apply:rn,tuple:I,set:gt,record:ze,writtenRecord:be,equal:Be,enumerate:$a,unassigned:(e,t)=>{throw new f(`The variable ${e} is not assigned at ${q(t)}`)},primeOutsideAction:e=>{throw new f(`A primed expression appears outside an action at ${q(e)}`)},prime:e=>({environment:e.environment,scope:e.scope,state:e.next,next:void 0}),extend:(e,t,n)=>({environment:e.environment,scope:t.reduce((e,t,r)=>Wa(e,t,n[r]),e.scope),state:e.state,next:e.next})}),mr={value:void 0},hr=(e,t)=>(e.references.push(t),`reference${e.references.length-1}`),gr=e=>`local${e.counter++}`,_r=(e,t=/* @__PURE__ */ new Set)=>(e.kind===`Identifier`&&t.add(e.name),e.kind===`Apply`&&t.add(e.operator),Ja(e).forEach(e=>_r(e,t)),t),vr=(e,t,n)=>{let r=hr(e,Y(t,e.environment)),i=_r(t),a=[...n.locals].filter(([e])=>i.has(e));if(a.length===0)return`${r}(${n.context})`;let o=hr(e,a.map(([e])=>e));return`${r}(extend(${n.context}, ${o}, [${a.map(([,e])=>e).join(`, `)}]))`},yr=(e,t,n)=>{let r=t.kind===`Forall`,i=JSON.stringify(r?`the body of \\A`:`the body of \\E`),a=`quantifier${e.counter++}`,o=[...n.locals.values()],s={context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:new Map(n.locals)},c=t.bounds.map(()=>gr(e)),l=t.bounds.map((t,n)=>`const ${c[n]} = enumerate(${xr(e,t.set,s)}, ${hr(e,t.set)});`),u=t.bounds.map(t=>{let n=gr(e);return t.pattern.kind===`Name`&&s.locals.set(t.pattern.name,n),n}),d=`if (bool(${xr(e,t.body,s)}, ${i}) !== ${r}) return ${!r};`,f=u.reduce((t,n,r)=>{let i=gr(e);return`for (let ${i} = 0; ${i} < ${c[r]}.length; ${i}++) { const ${n} = ${c[r]}[${i}]; ${t} }`},d),p=o.map(e=>`, ${e}`).join(``);return e.helpers.push(`function ${a}(context, state, next${p}) { let primed; ${l.join(` `)} ${f} return ${r}; }`),`${a}(${n.context}, ${n.state}, ${n.isPrimed?`undefined`:n.next}${p})`},br=(e,t,n)=>{let r=t.args;if(t.operator===`=>`)return`(bool(${xr(e,r[0],n)}, "the left side of =>") ? bool(${xr(e,r[1],n)}, "the right side of =>") : true)`;if(J(t))return vr(e,t,n);let i=mo(t.operator,e.environment);if(i?.kind!==`Builtin`)return vr(e,t,n);if(i.name===`DOMAIN`)return`${hr(e,za(t))}(${xr(e,r[0],n)})`;if(i.name===`TLCEval`)return vr(e,t,n);if(i.name===`\\subseteq`&&r.length===2)return`${hr(e,Ba(t,i))}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`;let a=e.environment;if(i.evaluateUnary&&r.length===1&&rs(r[0],a))return`${hr(e,i.evaluateUnary)}(${xr(e,r[0],n)})`;let o=r.length===2&&rs(r[0],a)&&rs(r[1],a);return i.evaluateBinary&&o?`${hr(e,i.evaluateBinary)}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`:vr(e,t,n)},xr=(e,t,n)=>{let r=(t,r=n)=>xr(e,t,r);if(qo(t)&&Ho(t,e.environment))return vr(e,t,n);switch(t.kind){case`Number`:return Mo(t.value)?String(t.value):vr(e,t,n);case`String`:return JSON.stringify(t.value);case`Identifier`:{let r=n.locals.get(t.name);if(r)return r;if(J(t))return vr(e,t,n);let i=wo(t.name,e.environment);if(i?.kind===`Variable`){let r=JSON.stringify(t.name),a=hr(e,t);return`(${n.state}?.[${i.index}] ?? unassigned(${r}, ${a}))`}return i?.kind===`Value`?hr(e,i.value):vr(e,t,n)}case`Apply`:return br(e,t,n);case`And`:{let n=hr(e,t);return`(${t.operands.map((e,t)=>`conjunct(${r(e)}, ${n}, ${t})`).join(` && `)})`}case`Or`:return`(${t.operands.map(e=>`bool(${r(e)}, "a disjunct")`).join(` || `)})`;case`If`:return`(condition(${r(t.condition)}, ${hr(e,t)}) ? ${r(t.consequent)} : ${r(t.alternative)})`;case`FunctionApplication`:{_s(t.function);let e=r(t.function);return t.args.length===1?`apply(${e}, ${r(t.args[0])})`:`apply(${e}, tuple([${t.args.map(e=>r(e)).join(`, `)}]))`}case`FieldAccess`:return`apply(${r(t.record)}, ${JSON.stringify(t.field)}, ${hr(e,Ra(t))})`;case`Record`:{let i=[...t.fields].sort((e,t)=>F(e.name,t.name));if(i.some((e,t)=>t>0&&i[t-1].name===e.name))return vr(e,t,n);let a=hr(e,i.map(e=>e.name)),o=`[${i.map(e=>r(e.value)).join(`, `)}]`,s=t.fields.map(e=>e.name);return s.every((e,t)=>e===i[t].name)?`record(${a}, ${o})`:`writtenRecord(${a}, ${o}, ${hr(e,s)})`}case`Tuple`:return`tuple([${t.elements.map(e=>r(e)).join(`, `)}])`;case`SetEnumeration`:return`set([${t.elements.map(e=>r(e)).join(`, `)}])`;case`Prime`:{let i=hr(e,t);if(n.isPrimed)return`primeOutsideAction(${i})`;let a={context:`(primed ??= prime(${n.context}))`,state:n.next,next:`undefined`,isPrimed:!0,locals:n.locals};return`(${n.next} === undefined ? primeOutsideAction(${i}) : ${r(t.expression,a)})`}case`Unchanged`:return`equal(${r({kind:`Prime`,expression:t.expression,location:t.location})}, ${r(t.expression)})`;case`Forall`:case`Exists`:return t.bounds.every(e=>e.pattern.kind===`Name`)?yr(e,t,n):vr(e,t,n);default:return vr(e,t,n)}},Sr=(e,t)=>{if(!fr.has(e.kind))return;let n={environment:t,references:[],helpers:[],counter:0},r=xr(n,e,{context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:/* @__PURE__ */ new Map}),i=n.references.map((e,t)=>`reference${t}`),a=`${n.helpers.join(`
@@ -403,7 +403,7 @@ _CheckName(name) ==
403
403
  _PrintCounts == PrintT(_Counts)
404
404
  =============================================================================
405
405
  `]]),du=/* @__PURE__ */ new Map([[`FiniteSets`,/* @__PURE__ */ new Map([[`IsFiniteSet`,`public static tlc2.value.IBoolValue tlc2.module.FiniteSets.IsFiniteSet(tlc2.value.impl.Value)`],[`Cardinality`,`public static tlc2.value.impl.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.impl.Value)`]])],[`Sequences`,/* @__PURE__ */ new Map([[`Seq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Seq(tlc2.value.impl.Value)`],[`Len`,`public static tlc2.value.impl.IntValue tlc2.module.Sequences.Len(tlc2.value.impl.Value)`],[`Head`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Head(tlc2.value.impl.Value)`],[`Tail`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Tail(tlc2.value.impl.Value)`],[`Append`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Append(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`\\o`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Concat(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SubSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SubSeq(tlc2.value.impl.Value,tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SelectSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SelectSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`]])],[`TLC`,/* @__PURE__ */ new Map([[`Print`,`public static tlc2.value.impl.Value tlc2.module.TLC.Print(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`PrintT`,`public static tlc2.value.impl.Value tlc2.module.TLC.PrintT(tlc2.value.impl.Value)`],[`ToString`,`public static tlc2.value.impl.Value tlc2.module.TLC.ToString(tlc2.value.impl.Value)`],[`Assert`,`public static tlc2.value.impl.Value tlc2.module.TLC.Assert(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`:>`,`public static tlc2.value.impl.Value tlc2.module.TLC.MakeFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`@@`,`public static tlc2.value.impl.Value tlc2.module.TLC.CombineFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SortSeq`,`public static tlc2.value.impl.Value tlc2.module.TLC.SortSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`Permutations`,`public static tlc2.value.impl.Value tlc2.module.TLC.Permutations(tlc2.value.impl.Value)`],[`RandomElement`,`public static tlc2.value.impl.Value tlc2.module.TLC.RandomElement(tlc2.value.impl.Value)`],[`TLCEval`,`public static tlc2.value.impl.Value tlc2.module.TLCEval.tlcEval(tlc2.tool.impl.Tool,tla2sany.semantic.ExprOrOpArgNode[],tlc2.util.Context,tlc2.tool.TLCState,tlc2.tool.TLCState,int,tlc2.tool.coverage.CostModel)`]])]]),fu=(e,t)=>e.every(e=>B(e,t)),pu=ht([!1,!0]),mu=(e,t,n)=>{if(n-t===1)return e[t];let r=t+n>>1;return bt(mu(e,t,r),mu(e,r,n))},hu=[`\\cup`,`\\cap`,`\\`],gu=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`||e.kind===`Interval`),_u=e=>typeof e==`object`&&e.kind===`MixedSet`,vu=e=>e.kind===`Interval`?R(e).elements:e.elements,yu=(e,t,n)=>{let r=vu(t);if(e!==`\\cup`){let t=e===`\\cap`;return gt(r.filter(e=>B(e,n)===t))}if(r.length===0)return n;if(!gu(n))return{kind:`SetOperation`,operator:e,left:t,right:n};let i=R(n).elements.filter(e=>!B(e,t));return gt([...r,...i])},bu=[Kn(`TRUE`,!0),Kn(`FALSE`,!1),Kn(`BOOLEAN`,pu),Kn(`STRING`,{kind:`InfiniteSet`,name:`STRING`}),Yn(`=`,pt),Yn(`#`,(e,t)=>!pt(e,t)),W(`~`,1,e=>!Rn(e,0,`~`)),W(`<=>`,2,e=>Rn(e,0,`<=>`)===Rn(e,1,`<=>`)),W(`/\\`,2,e=>Rn(e,0,`/\\`)&&Rn(e,1,`/\\`)),W(`\\/`,2,e=>Rn(e,0,`\\/`)||Rn(e,1,`\\/`)),W(`=>`,2,e=>!Rn(e,0,`=>`)||Rn(e,1,`=>`)),W(`\\in`,2,e=>B(U(e,0,`\\in`),U(e,1,`\\in`))),W(`\\notin`,2,e=>!B(U(e,0,`\\notin`),U(e,1,`\\notin`))),W(`\\subseteq`,2,e=>{let t=zn(e,0,`\\subseteq`),n=zn(e,1,`\\subseteq`);return typeof t==`object`&&t.kind===`Subset`&&typeof n==`object`&&n.kind===`Subset`&&L(t.base)?fu(R(t.base).elements,n.base):fu(R(t).elements,n)}),...hu.map(e=>W(e,2,t=>{let n=zn(t,0,e),r=zn(t,1,e);return gu(n)&&gu(r)&&!_u(n)&&!_u(r)?e===`\\cup`&&z(n)?r:(e===`\\cup`?bt:e===`\\cap`?yt:vt)(R(n),R(r)):gu(n)?yu(e,n,r):e!==`\\`&&gu(r)?yu(e,r,n):{kind:`SetOperation`,operator:e,left:n,right:r}})),W(`SUBSET`,1,e=>({kind:`Subset`,base:zn(e,0,`SUBSET`)})),W(`UNION`,1,e=>{let t=zn(e,0,`UNION`),n=tt(t)?t.elements.filter(tt):[];if(!tt(t)||n.length!==t.elements.length)return{kind:`Union`,base:t};if(_u(t)||n.some(_u)){let e={kind:`MixedSet`,elements:[]};return n.forEach(t=>t.elements.forEach(t=>{B(t,e)||e.elements.push(t)})),gt(e.elements)}return n.length===0?_t:mu(n.map(R),0,n.length)}),W(`DOMAIN`,1,e=>{let t=U(e,0,`DOMAIN`);if(!A(t))throw new f(`DOMAIN expects a function but received ${H(t)}`);return on(t)})],xu=or(`DotDot`,`IntervalValue`,2),Su=or(`Neg`,`IntValue`,1),Cu=[Kn(`Nat`,{kind:`InfiniteSet`,name:`Nat`}),sr(`+`,`Plus`,(e,t)=>e+t),sr(`-`,`Minus`,(e,t)=>e-t),sr(`*`,`Times`,(e,t)=>e*t),sr(`^`,`Expt`,(e,t)=>{if(t<0)throw new p(`The second argument of ^ should be a natural number, but instead it is:\n${t}`);if(e===0&&t===0)throw new p(`0^0 is undefined.`);return e**t}),sr(`\\div`,`Divide`,(e,t)=>{if(t===0)throw new p(`The second argument of \\div is 0.`);let n=Math.floor(e/t);if(Xn(n))throw Zn(`${e} \\div ${t}`);return n}),sr(`%`,`Mod`,(e,t)=>{if(t<=0)throw new p(`The second argument of % should be a positive number, but instead it is:\n${t}`);return(e%t+t)%t}),lr(`<`,(e,t)=>e<t),lr(`>`,(e,t)=>e>t),lr(`<=`,(e,t)=>e<=t),lr(`>=`,(e,t)=>e>=t),W(`..`,2,e=>({kind:`Interval`,low:ar(U(e,0,`..`),xu),high:ar(U(e,1,`..`),xu)}))],wu=[Kn(`Int`,{kind:`InfiniteSet`,name:`Int`}),W(`-.`,1,e=>{let t=ar(U(e,0,`-`),Su);if(Xn(-t))throw Zn(`-${t}`);return-t})],Tu=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw new p(`${n}\n${H(r)}`);return i},Eu=(e,t,n)=>{let r=U(e,t,n);return typeof r==`string`?r:Tu(e,t,n)},Du=(e,t,n)=>typeof e==`string`?Oe(e.slice(t,n)):I(e.slice(t,n)),Ou=(e,t)=>`The ${e}argument of ${t} should be a sequence, but instead it is:`,ku=(e,t)=>`Evaluating an expression of the form ${e} when s is not a ${t}:`,Au=(e,t)=>{let n=du.get(e);return n?t.map(e=>{let t=n.get(e.name);return t?ir(e,t):e}):t},ju=Au(`Sequences`,[W(`Seq`,1,e=>({kind:`SequenceSet`,base:U(e,0,`Seq`)})),W(`Len`,1,e=>Eu(e,0,Ou(``,`Len`)).length),W(`\\o`,2,e=>{let t=Eu(e,0,ku(`s \\o t`,`sequence`));if(typeof t!=`string`){let n=Tu(e,1,ku(`t \\o s`,`sequence`));return I([...t,...n])}let n=U(e,1,`\\o`);if(typeof n!=`string`)throw new p(`${ku(`t \\o s`,`string`)}\n${H(n)}`);return Oe(t+n)}),W(`Append`,2,e=>I([...Tu(e,0,ku(`Append(s, v)`,`sequence`)),U(e,1,`Append`)])),W(`Head`,1,e=>{let t=Tu(e,0,Ou(``,`Head`));if(t.length===0)throw new p(`Attempted to apply Head to the empty sequence.`);return t[0]}),W(`Tail`,1,e=>{let t=Eu(e,0,Ou(``,`Tail`));if(t.length===0)throw new p(`Attempted to apply Tail to the empty sequence.`);return Du(t,1)}),W(`SubSeq`,3,e=>{let t=Eu(e,0,Ou(`first `,`SubSeq`)),n=Ln(e,1,`SubSeq`),r=Ln(e,2,`SubSeq`);if(n>r)return Du(t,0,0);let i=n<1?{position:`second`,value:n}:r>t.length?{position:`third`,value:r}:void 0;if(i)throw new p(`The ${i.position} argument of SubSeq must be in the domain of its first argument:\n${H(U(e,0,`SubSeq`))}\n, but instead it is\n${i.value}`);return Du(t,n-1,r)}),qn(`SelectSeq`,2,e=>{let t=Gn(e,1,`SelectSeq`);return I(Tu(e,0,Ou(`first `,`SelectSeq`)).filter(e=>{let n=t.call([e]);if(typeof n!=`boolean`)throw new p(`The second argument of SelectSeq should be a operator, but instead it is:\n${H(n)}`);return n}))})]),Mu=Au(`FiniteSets`,[W(`IsFiniteSet`,1,e=>{let t=U(e,0,`IsFiniteSet`);if(k(t))return qt(t);if(typeof t==`object`&&t.kind===`Function`)return!0;throw new f(typeof t==`object`&&t.kind===`LazyFunction`?`Attempted to check if the function:\n${H(t)}\nis a finite set.`:`Attempted to check if the ${he(t)} ${H(t)} is a finite set.`)}),W(`Cardinality`,1,e=>{let t=U(e,0,`Cardinality`);if(!k(t)||typeof t==`object`&&(t.kind===`InfiniteSet`||t.kind===`SequenceSet`))throw new p(`Attempted to compute cardinality of the value\n${H(t)}`);return Gt(t)})]),Nu=/* @__PURE__ */ new Map([[`Integers`,[`Naturals`]],[`Sequences`,[`Naturals`]],[`FiniteSets`,[`Naturals`,`Sequences`]],[`TLC`,[`Naturals`,`Sequences`,`FiniteSets`]],[`Randomization`,[`Naturals`,`FiniteSets`,`Sequences`]],[`_Possible`,[`TLC`,`TLCExt`,`Naturals`,`Sequences`,`FiniteSets`,`Integers`]],[`Json`,[`Sequences`,`FiniteSets`,`TLC`,`Naturals`]],[`Bags`,[`Naturals`]],[`TLCExt`,[`TLC`,`Integers`,`Naturals`,`Sequences`,`FiniteSets`]]]),Pu=(e,t,n,r)=>{switch(e){case`Naturals`:return{extends:[],operators:Cu};case`Integers`:return{extends:[`Naturals`],operators:wu};case`Sequences`:return{extends:[],operators:ju};case`FiniteSets`:return{extends:[],operators:Mu};case`TLC`:return{extends:[],operators:Au(`TLC`,iu(t,n))};case`Randomization`:return{extends:[],operators:Il(n)};case`_Possible`:return{extends:[],operators:Zl(t,n)};case`Json`:return{extends:[],operators:Al(r)};case`Bags`:return{extends:[],operators:ll};case`TLCExt`:return{extends:[],operators:Xl(t,n)};default:return}},Fu=`$subexpression`,Iu=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Lu=e=>e.filter((t,n)=>n===0||e[n-1].set!==t.set).map(e=>e.set),Ru=(e,t)=>typeof e==`number`?e>=1&&e<=t?e-1:-1:e===`<<`?t>0?0:-1:t===2?1:-1,zu=e=>{switch(e.kind){case`Apply`:return e.args;case`And`:case`Or`:return e.operands;case`If`:return[e.condition,e.consequent,e.alternative];case`Tuple`:case`SetEnumeration`:return e.elements;case`Record`:case`RecordSet`:return e.fields.map(e=>e.value);case`FunctionApplication`:return[e.function,e.args.length===1?e.args[0]:{kind:`Tuple`,elements:e.args,location:e.location}];case`FieldAccess`:return[e.record,{kind:`String`,value:e.field,location:e.location}];case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:return[e.expression];case`BoxAction`:case`AngleAction`:return[e.action,e.subscript];case`WeakFairness`:case`StrongFairness`:return[e.subscript,e.action];case`FunctionSet`:return[e.domain,e.range];case`Product`:return e.factors;case`Except`:return[e.function];default:return}},Bu=e=>{switch(e.kind){case`Forall`:case`Exists`:case`FunctionConstruction`:return{names:Pr(e.bounds),body:e.body,sets:Lu(e.bounds)};case`SetMap`:return{names:Pr(e.bounds),body:e.expression,sets:Lu(e.bounds)};case`SetFilter`:return{names:Nr(e.bound.pattern),body:e.predicate,sets:[e.bound.set]};case`Choose`:return{names:Nr(e.pattern),body:e.body,sets:e.set?[e.set]:[]};case`UnboundedQuantifier`:case`Lambda`:return{names:e.kind===`Lambda`?e.params:e.names,body:e.body,sets:[]};default:return}},Vu=(e,t,n)=>{if(e.kind===`Label`)return e.name===t?{label:e,lets:n}:void 0;if(e.kind===`Let`)return Vu(e.body,t,[...n,e.definitions]);if(e.kind!==`Lambda`)for(let r of Ja(e)){let e=Vu(r,t,n);if(e)return e}},Hu=(e,t,n)=>e.length===0&&n.length>0?n.splice(0,t):e,Uu=(e,t,n)=>t.reduceRight((e,t)=>({kind:`Let`,definitions:t,body:e,location:n}),e),Wu=(e,t)=>{let n=e.location,r=Uu(t,e.lets,n);if(e.params.length===0)return r;if(e.args.length===0){if(e.params.some(e=>e.arity>0))throw Iu(`Selected an operator with operator parameters as an argument`,n);return{kind:`Lambda`,params:e.params.map(e=>e.name),body:r,location:n}}if(e.args.length!==e.params.length)throw Iu(`The subexpression requires ${e.params.length} arguments but received ${e.args.length}`,n);return{kind:`Let`,definitions:[{kind:`Operator`,name:Fu,params:e.params,body:r,isLocal:!0,isRecursive:!1,location:n}],body:{kind:`Apply`,operator:Fu,args:e.args,location:n,resolution:Cr},location:n}},Gu=(e,t)=>{let n=t.location,r=e.kind===`Operator`?e.params.map((e,n)=>({name:`${e.name}$${t.params.length+n}`,arity:e.arity})):[],i=r.map(e=>({kind:`Identifier`,name:e.name,location:n,resolution:Cr})),a=i.length===0?{kind:`Identifier`,name:e.name,location:n,resolution:Cr}:{kind:`Apply`,operator:e.name,args:i,location:n,resolution:Cr};return Wu({...t,params:[...t.params,...r]},a)},Ku=(e,t,n,r)=>{let i={params:[],args:[],lets:[],location:n},a={index:0,current:void 0},o=i=>{let o=[],s=[];for(;a.index<e.length;){let c=e[a.index];if(c.kind!==`Name`)throw Iu(`Expected an operator name`,n);o.push(c.name),s.push(...c.args);let l=o.join(`!`),u=i?i.find(e=>gi(e)===l):t(l);if(u)return{definition:u,args:Hu(s,Or(u),r)};a.index++}throw Iu(`Unknown operator ${o.join(`!`)}`,n)},s=t=>{let r=o(t),s=r.definition,c=Or(s),l=a.index===e.length-1;if(r.args.length!==c&&r.args.length!==0)throw Iu(`The operator ${s.name} requires ${c} arguments`,n);if(l)return{definition:s,args:r.args};if(s.kind!==`Operator`)throw Iu(`Cannot select a subexpression of ${s.name}`,n);i.params.push(...s.params),i.args.push(...r.args),a.current=s.body,a.index++},c=()=>{for(;a.index<e.length;){let t=e[a.index];if(t.kind!==`Name`)return;let o=a.current&&Vu(a.current,t.name,[]);if(!o)throw Iu(`Cannot find label ${t.name}`,n);i.lets.push(...o.lets),i.params.push(...o.label.params.map(e=>({name:e,arity:0}))),i.args.push(...Hu(t.args,o.label.params.length,r)),a.current=o.label.body,a.index++}},l=t=>{let o=a.current;if(!o)throw Iu(`Subexpression selection failed`,n);if(t.kind===`Colon`)return;if(o.kind===`Label`){a.current=o.body,l(t);return}if(o.kind===`Let`){if(t.kind!==`Operand`||Ru(t.operand,1)!==0)throw Iu(`A LET/IN expression has only one operand`,n);i.lets.push(o.definitions),a.current=o.body;return}let s=Bu(o);if(s&&(t.kind===`Bound`||t.kind===`At`)){i.params.push(...s.names.map(e=>({name:e,arity:0}))),t.kind===`Bound`&&i.args.push(...Hu(t.args,s.names.length,r)),a.current=s.body;return}if(o.kind===`Case`&&t.kind===`Operand`){let r=[...o.arms,...o.other?[{condition:void 0,body:o.other}]:[]],i=r[Ru(t.operand,r.length)],s=e[a.index+1];if(!i||s?.kind!==`Operand`)throw Iu(`A subexpression of CASE must have the form !i!j`,n);a.index++;let c=Ru(s.operand,2),l=c===0?i.condition:c===1?i.body:void 0;if(!l)throw Iu(`Nonexistent CASE operand`,n);a.current=l;return}if(t.kind!==`Operand`)throw Iu(`Unexpected subexpression selector`,n);let c=s?s.sets:zu(o),u=c?.[Ru(t.operand,c.length)];if(!u)throw Iu(`Nonexistent operand specified by the selector`,n);a.current=u},u=s(void 0);if(u)return Gu(u.definition,{...i,args:u.args});for(c();a.index<e.length;){let t=e[a.index];if(t.kind===`Name`){for(;a.current?.kind===`Label`;)a.current=a.current.body;if(a.current?.kind!==`Let`)throw Iu(`A name selector here must be from a LET clause`,n);i.lets.push(a.current.definitions);let e=s(a.current.definitions);if(e)return Gu(e.definition,{...i,args:[...i.args,...e.args]});c()}else l(t),a.index++}if(!a.current)throw Iu(`Subexpression selection failed`,n);return Wu(i,a.current)},qu=(e,t)=>{if(!e.includes(`!`)||t(e))return;let n=e.split(`!`),r=n.findIndex((e,r)=>t(n.slice(0,r+1).join(`!`)));if(r!==-1)return[{kind:`Name`,name:n.slice(0,r+1).join(`!`),args:[]},...n.slice(r+1).map(e=>({kind:`Name`,name:e,args:[]}))]},Ju=e=>e.kind===`Subexpression`||e.kind===`Identifier`&&e.name.includes(`!`)||e.kind===`Apply`&&e.operator.includes(`!`)||Ja(e).some(Ju),Yu=(e,t)=>{if(!Ju(e))return e;if(e.kind===`Let`){let n=n=>e.definitions.find(e=>e.name===n)??t(n);return yi(e,e=>Yu(e,n))}let n=yi(e,e=>Yu(e,t));if(n.kind===`Subexpression`)return Ku(n.selectors,t,n.location,[]);let r=n.kind===`Identifier`?n.name:n.kind===`Apply`?n.operator:``,i=qu(r,t);if(!i)return n;let a=n.kind===`Apply`?[...n.args]:[],o=Ku(i,t,n.location,a);if(a.length>0)throw Iu(`Too many arguments for ${r}`,n.location);return o},Xu=e=>{let t=new Map(e.map(e=>[e.name,e]));return e=>t.get(e)},Zu=(e,t)=>{let n=Xu(t.definitions);return{...e,substitutions:e.substitutions.map(e=>({name:e.name,expression:Yu(e.expression,n)}))}},Qu=(e,t)=>{let n=Xu([...t,...e.definitions]);return e.definitions.some(e=>Ju(e.body))||e.assumptions.some(e=>Ju(e.expression))?{...e,definitions:e.definitions.map(e=>vi(e,e=>Yu(e,n))),assumptions:e.assumptions.map(e=>({...e,expression:Yu(e.expression,n)}))}:e},$u=new Map([[`Nat`,0,[],[],[]],[`+`,0,[0,0],[2,2],[1,1]],[`-`,0,[0,0],[2,2],[1,1]],[`*`,0,[0,0],[3,3],[0,0]],[`^`,0,[0,0],[2,2],[1,1]],[`<`,0,[0,0],[2,2],[1,1]],[`>`,0,[0,0],[2,2],[1,1]],[`<=`,0,[0,0],[2,2],[1,1]],[`>=`,0,[0,0],[2,2],[1,1]],[`%`,0,[0,0],[2,2],[1,1]],[`\\div`,0,[0,0],[2,2],[1,1]],[`..`,0,[0,0],[2,2],[1,1]],[`Int`,0,[],[],[]],[`-.`,0,[0],[2],[1]],[`Seq`,0,[0],[2],[1]],[`Len`,0,[0],[2],[1]],[`\\o`,0,[0,0],[2,2],[1,1]],[`Append`,0,[0,0],[2,2],[1,1]],[`Head`,0,[0],[2],[1]],[`Tail`,0,[0],[2],[1]],[`SubSeq`,0,[0,0,0],[2,2,2],[1,1,1]],[`SelectSeq`,0,[0,1],[2,2],[1,1],[],[`1,0,0`]],[`IsFiniteSet`,0,[0],[2],[1]],[`Cardinality`,0,[0],[2],[1]],[`IsABag`,0,[0],[2],[1]],[`BagToSet`,0,[0],[2],[1]],[`SetToBag`,0,[0],[3],[1]],[`BagIn`,0,[0,0],[2,2],[1,1]],[`EmptyBag`,0,[],[],[]],[`\\oplus`,0,[0,0],[2,2],[1,1]],[`\\ominus`,0,[0,0],[2,2],[1,1]],[`BagUnion`,0,[0],[2],[1]],[`\\sqsubseteq`,0,[0,0],[2,2],[1,1]],[`SubBag`,0,[0],[2],[1]],[`BagOfAll`,0,[1,0],[2,2],[1,1]],[`BagCardinality`,0,[0],[2],[1]],[`CopiesIn`,0,[0,0],[2,2],[1,1]],[`Print`,0,[0,0],[3,3],[0,1]],[`PrintT`,0,[0],[3],[0]],[`Assert`,0,[0,0],[2,3],[1,0]],[`JavaTime`,0,[],[],[]],[`TLCGet`,0,[0],[3],[0]],[`TLCSet`,0,[0,0],[3,3],[0,0]],[`:>`,0,[0,0],[2,3],[1,1]],[`@@`,0,[0,0],[2,2],[1,1]],[`Permutations`,0,[0],[2],[1]],[`SortSeq`,0,[0,2],[2,2],[1,1],[],[`1,0,0`,`1,0,1`]],[`RandomElement`,0,[0],[3],[1]],[`Any`,0,[],[],[]],[`ToString`,0,[0],[2],[1]],[`TLCEval`,0,[0],[3],[1]],[`AssertEq`,0,[0,0],[2,2],[1,1]],[`AssertError`,0,[0,0],[2,3],[1,0]],[`TLCGetOrDefault`,0,[0,0],[3,3],[0,0]],[`TLCGetAndSet`,0,[0,2,0,0],[3,3,3,3],[0,0,0,0],[],[`1,2,1`]],[`Trace`,0,[],[],[]],[`CounterExample`,0,[],[],[]],[`ToTrace`,0,[0],[3],[0]],[`TLCModelValue`,0,[0],[2],[1]],[`TLCDefer`,0,[0],[3],[0]],[`TLCNoOp`,0,[0],[3],[1]],[`PickSuccessor`,0,[0],[3],[1]],[`TLCCache`,0,[0,0],[3,3],[1,0]],[`TLCFP`,0,[0],[3],[0]],[`TLCEvalDefinition`,0,[0],[3],[0]],[`ToJson`,0,[0],[2],[1]],[`ToJsonArray`,0,[0],[2],[1]],[`ToJsonObject`,0,[0],[2],[1]],[`JsonSerialize`,0,[0,0],[3,3],[0,0]],[`JsonDeserialize`,0,[0],[3],[0]],[`ndJsonSerialize`,0,[0,0],[3,3],[0,0]],[`ndJsonDeserialize`,0,[0],[3],[0]],[`RandomSubset`,0,[0,0],[2,2],[1,1]],[`RandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]],[`TestRandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]]].map(e=>[e[0],{name:e[0],level:e[1],params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set,formals:e[2].map((e,t)=>({name:`$${t}`,arity:e})),maxLevels:e[3],weights:e[4],minMaxLevels:e[5]??[],conditions:new Set(e[6]),nonLeibniz:/* @__PURE__ */ new Set}])),ed=(e,t)=>`${e}${t}`,td=(e,t,n)=>`${e}${t}${n}`,nd=e=>{let t=e.split(`\0`);return{operator:t[0],index:Number(t[1]),param:t[2]}},rd=(e,t,n)=>`${e},${t},${n}`,id=(e=0)=>({level:e,params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set}),ad=(e,t,n)=>e.set(t,Math.min(n,e.get(t)??3)),od=(e,t,n)=>e.set(t,Math.max(n,e.get(t)??0)),sd=(e,t,n,r)=>({...id(t),name:e,formals:[],maxLevels:n,weights:r,minMaxLevels:[],conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set}),cd=(e,t)=>e.formals.length===0&&e.maxLevels.length>0?e.maxLevels[Math.min(t,e.maxLevels.length-1)]:e.maxLevels[t]??3,ld=(e,t)=>e.formals.length===0&&e.weights.length>0?e.weights[Math.min(t,e.weights.length-1)]:e.weights[t]??1,ud=new Map([[`=`,0,[2,2],[1,1]],[`#`,0,[2,2],[1,1]],[`\\in`,0,[2,2],[1,1]],[`\\notin`,0,[2,2],[1,1]],[`\\subseteq`,0,[2,2],[1,1]],[`\\cup`,0,[2,2],[1,1]],[`\\cap`,0,[2,2],[1,1]],[`\\`,0,[2,2],[1,1]],[`=>`,0,[3,3],[1,1]],[`<=>`,0,[3,3],[1,1]],[`/\\`,0,[3,3],[1,1]],[`\\/`,0,[3,3],[1,1]],[`~`,0,[3],[1]],[`SUBSET`,0,[2],[1]],[`UNION`,0,[2],[1]],[`DOMAIN`,0,[2],[1]],[`~>`,3,[3,3],[0,0]],[`-+->`,3,[3,3],[0,0]],[`\\cdot`,2,[2,2],[0,0]],[`TRUE`,0,[],[]],[`FALSE`,0,[],[]],[`BOOLEAN`,0,[],[]],[`STRING`,0,[],[]]].map(([e,t,n,r])=>[e,{...sd(e,t,[...n],[...r]),nonLeibniz:new Set(t>1?[0,1]:[])}])),dd=sd(`$Set`,0,[2],[1]),fd=sd(`$Junction`,0,[3],[1]),pd=sd(`$Choose`,0,[2],[1]),md=sd(`$Function`,0,[3],[1]),hd=sd(`$FcnApply`,0,[2,2],[1,1]),gd=sd(`$RcdSelect`,0,[2,0],[1,1]),_d=sd(`'`,2,[1],[0]),vd=sd(`ENABLED`,1,[2],[0]),yd=sd(`[]`,3,[3],[0]),bd=sd(`$SquareAct`,2,[2,1],[0,0]),xd=sd(`$WF`,3,[1,2],[0,0]),Sd=sd(`$TemporalExists`,3,[3],[0]),Cd=(e,t)=>t.length===0?e:new Map([...e,...t.map(e=>[e.name,{kind:`Formal`,arity:e.arity}])]),wd=e=>e.map(e=>({name:e,arity:0})),Td=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Ed=/* @__PURE__ */ new Set([`/\\`,`\\/`,`=>`,`<=>`]),Dd=e=>e.kind!==`Let`&&e.kind!==`Label`,Od=e=>{let t=/* @__PURE__ */ new Map,n=(t,n)=>{let r=n.get(t);if(r?.kind===`Formal`)return{kind:`Declared`,name:t,level:0,arity:r.arity};if(r?.kind===`Let`)return{kind:`Defined`,levels:_(r.definition,r.scope)};if(e.constants.has(t))return{kind:`Declared`,name:t,level:0,arity:0};if(e.variables.has(t))return{kind:`Declared`,name:t,level:1,arity:0};let i=e.getDefinition(t);if(i)return{kind:`Defined`,levels:_(i,/* @__PURE__ */ new Map)};let a=ud.get(t)??$u.get(t);return a?{kind:`Defined`,levels:a}:{kind:`Declared`,name:t,level:0,arity:0}},r=(e,t,n)=>{let r=id(Math.max(t,...n.map(e=>e.data.level)));return r.params.add(e),n.forEach((t,n)=>{t.data.params.forEach(t=>{r.params.add(t),r.argParams.add(td(e,n,t))}),t.data.constraints.forEach((e,t)=>ad(r.constraints,t,e)),od(r.argConstraints,ed(e,n),t.data.level),t.data.argConstraints.forEach((e,t)=>od(r.argConstraints,t,e)),t.data.argParams.forEach(e=>r.argParams.add(e))}),r},i=(e,t,n=[],r=[])=>{let i=e=>r.includes(e);if(t.forEach((t,n)=>{if(!(t.operator||t.declared)&&t.data.level>cd(e,n))throw new u(`Level error in applying operator ${e.name}: The level of argument ${n+1} exceeds the maximum level allowed by the operator.`)}),n.some(e=>e.level>2))throw new u(`Level error in applying operator ${e.name}: The level of the range for a bounded variable exceeds the maximum level allowed by the operator.`);let a=n=>{let r=e.formals.findIndex(e=>e.name===n);return r===-1?void 0:t[r]},o=(t,n,r)=>e.conditions.has(rd(t,n,r)),s=id(Math.max(e.level,...t.filter((t,n)=>ld(e,n)===1).map(e=>e.data.level),...n.map(e=>e.level)));return e.params.forEach(e=>s.params.add(e)),t.forEach((t,n)=>{ld(e,n)===1&&t.data.params.forEach(e=>s.params.add(e))}),n.forEach(e=>e.params.forEach(e=>s.params.add(e))),r.forEach(e=>s.params.delete(e)),e.constraints.forEach((e,t)=>ad(s.constraints,t,e)),t.forEach(e=>e.data.constraints.forEach((e,t)=>{i(t)||ad(s.constraints,t,e)})),n.forEach(e=>e.constraints.forEach((e,t)=>ad(s.constraints,t,e))),t.forEach((t,n)=>t.data.params.forEach(t=>{i(t)||ad(s.constraints,t,cd(e,n))})),t.forEach((e,n)=>{let r=e.operator;r&&t.forEach((e,t)=>r.formals.forEach((i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>ad(s.constraints,e,cd(r,a)))}))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator)?.operator;n&&ad(s.constraints,t.param,cd(n,t.index))}),[e.argConstraints,...t.map(e=>e.data.argConstraints),...n.map(e=>e.argConstraints)].forEach(e=>e.forEach((e,t)=>od(s.argConstraints,t,e))),t.forEach((n,r)=>{let i=n.declared;i&&(Array.from({length:i.arity},(t,n)=>od(s.argConstraints,ed(i.name,n),e.minMaxLevels[r]?.[n]??0)),t.forEach((e,t)=>Array.from({length:i.arity},(n,a)=>{o(r,t,a)&&od(s.argConstraints,ed(i.name,a),e.data.level)})))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);n&&od(s.argConstraints,ed(t.operator,t.index),n.data.level)}),t.forEach(e=>e.data.argParams.forEach(e=>{i(nd(e).param)||s.argParams.add(e)})),n.forEach(e=>e.argParams.forEach(e=>s.argParams.add(e))),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);if(n)n.declared&&s.argParams.add(td(n.declared.name,t.index,t.param));else{let n=a(t.param);if(!n){s.argParams.add(e);return}n.data.params.forEach(e=>s.argParams.add(td(t.operator,t.index,e)))}}),t.forEach((e,n)=>{let r=e.declared;r&&t.forEach((e,t)=>Array.from({length:r.arity},(i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>s.argParams.add(td(r.name,a,e)))}))}),s},a=(e,t)=>{if(e.kind===`Lambda`){let n=g(`LAMBDA`,wd(e.params),e.body,t);return{data:n,operator:n}}let r=e.kind===`OperatorReference`?e.operator:e.kind===`Identifier`?e.name:void 0;if(r!==void 0){let i=n(r,t);if(i.kind===`Defined`&&(i.levels.formals.length>0||e.kind===`OperatorReference`))return{data:i.levels,operator:i.levels};if(i.kind===`Declared`&&i.arity>0){let e=id();return e.params.add(r),{data:e,declared:{name:r,arity:i.arity}}}}return{data:m(e,t)}},o=(e,t)=>e.map(e=>a(e,t)),s=(e,t,n,r=[],a=[])=>{let s=Cd(n,wd(a));return i(e,o(t,s),r.map(e=>m(e,n)),a)},c=(e,t)=>e.kind===`Declared`?r(e.name,e.level,t):i(e.levels,t),l=(e,t)=>{let n=e.map(e=>e.data.level);if(n.includes(2)&&n.includes(3))throw Td(`Formula has both temporal formula and action as arguments`,t)},d=(e,t)=>{if((e.operator===`~>`||e.operator===`-+->`)&&t.some(e=>e.data.level===2))throw Td(`Action used where only temporal formula or state predicate allowed`,e.location);Ed.has(e.operator)&&l(t,e.location)},f=(e,t)=>{let n=e.expression,r=e.kind===`Always`?`BoxAction`:`AngleAction`;if(t===2&&Dd(n)&&n.kind!==r)throw Td(e.kind===`Always`?`[] followed by action not of form [A]_v`:`<> followed by action not of form <<A>>_v`,e.location)},p=(e,t)=>{let n=new Map(t);e.definitions.forEach(e=>n.set(e.name,{kind:`Let`,definition:e,scope:n}));let r=m(e.body,n),i={level:r.level,params:new Set(r.params),constraints:new Map(r.constraints),argConstraints:new Map(r.argConstraints),argParams:new Set(r.argParams)};return e.definitions.forEach(e=>{let t=_(e,n);t.constraints.forEach((e,t)=>ad(i.constraints,t,e)),t.argConstraints.forEach((e,t)=>od(i.argConstraints,t,e)),t.argParams.forEach(e=>i.argParams.add(e))}),i},m=(e,t)=>{switch(e.kind){case`Number`:case`Decimal`:case`String`:case`ExceptAt`:return id();case`Identifier`:return c(n(e.name,t),[]);case`Apply`:{let r=o(e.args,t);return d(e,r),c(n(e.operator,t),r)}case`OperatorReference`:case`Lambda`:return a(e,t).data;case`And`:case`Or`:{let n=o(e.operands,t);return l(n,e.location),i(fd,n)}case`Prime`:case`Unchanged`:return s(_d,[e.expression],t);case`Enabled`:return s(vd,[e.expression],t);case`Always`:case`Eventually`:{let n=a(e.expression,t);return f(e,n.data.level),i(yd,[n])}case`If`:return s(fd,[e.condition,e.consequent,e.alternative],t);case`Case`:return s(fd,[...e.arms.flatMap(e=>[e.condition,e.body]),...e.other?[e.other]:[]],t);case`Let`:return p(e,t);case`Forall`:case`Exists`:{let n=s(fd,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));if(n.level===3&&e.bounds.some(e=>m(e.set,t).level===2))throw Td(`Action-level bound of quantified temporal formula`,e.location);return n}case`UnboundedQuantifier`:return s(e.isTemporal?Sd:fd,[e.body],t,[],e.names);case`Choose`:return s(pd,[e.body],t,e.set?[e.set]:[],Nr(e.pattern));case`SetEnumeration`:case`Tuple`:case`FunctionSet`:case`Product`:return s(dd,e.kind===`FunctionSet`?[e.domain,e.range]:e.kind===`Product`?e.factors:e.elements,t);case`SetFilter`:return s(dd,[e.predicate],t,[e.bound.set],Nr(e.bound.pattern));case`SetMap`:return s(dd,[e.expression],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`FunctionConstruction`:return s(md,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`Record`:return s(md,e.fields.map(e=>e.value),t);case`RecordSet`:return s(dd,e.fields.map(e=>e.value),t);case`Except`:return s(dd,[e.function,...e.updates.flatMap(e=>[...e.path.flatMap(e=>e.kind===`Index`?e.args:[]),e.value])],t);case`FunctionApplication`:return i(hd,[a(e.function,t),e.args.length===1?a(e.args[0],t):{data:s(dd,e.args,t)}]);case`FieldAccess`:return i(gd,[a(e.record,t),{data:id()}]);case`BoxAction`:case`AngleAction`:return s(bd,[e.action,e.subscript],t);case`WeakFairness`:case`StrongFairness`:return s(xd,[e.subscript,e.action],t);case`Label`:return m(e.body,t);case`Subexpression`:return id()}},h=(e,t,r=!1,i=/* @__PURE__ */ new Set)=>{let a=(e,n=r,a=t)=>h(e,a,n,i),o=(e,o)=>{let s=n(e,t);s.kind===`Declared`?(r&&i.add(e),o.forEach(e=>a(e))):o.forEach((e,t)=>a(e,r||s.levels.nonLeibniz.has(t)))};switch(e.kind){case`Identifier`:return o(e.name,[]),i;case`Apply`:return o(e.operator,e.args),i;case`Lambda`:case`Let`:return i;case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:case`BoxAction`:case`AngleAction`:case`WeakFairness`:case`StrongFairness`:return Ja(e).forEach(e=>a(e,!0)),i;case`UnboundedQuantifier`:return a(e.body,r||e.isTemporal===!0,Cd(t,wd(e.names))),i;default:return yi(e,(e,n)=>(a(e,r,Cd(t,wd(n))),e)),i}},g=(e,t,n,r)=>{let i=Cd(r,t),a=m(n,i),o=e=>t.some(t=>t.name===e),s=h(n,i),c={...id(a.level),name:e,formals:t,nonLeibniz:new Set(t.flatMap((e,t)=>s.has(e.name)?[t]:[])),maxLevels:t.map(e=>Math.min(3,a.constraints.get(e.name)??3)),weights:t.map(e=>+!!a.params.has(e.name)),minMaxLevels:t.map(e=>Array.from({length:e.arity},(t,n)=>a.argConstraints.get(ed(e.name,n))??0)),conditions:new Set(t.flatMap((e,n)=>t.flatMap((t,r)=>Array.from({length:e.arity},(e,t)=>t).filter(n=>a.argParams.has(td(e.name,n,t.name))).map(e=>rd(n,r,e)))))};return a.params.forEach(e=>{o(e)||c.params.add(e)}),a.constraints.forEach((e,t)=>{o(t)||c.constraints.set(t,e)}),a.argConstraints.forEach((e,t)=>{o(nd(t).operator)||c.argConstraints.set(t,e)}),a.argParams.forEach(e=>{let t=nd(e);o(t.operator)&&o(t.param)||c.argParams.add(e)}),c},_=(e,n)=>{let r=t.get(e);if(r)return r;let i=e.kind===`Operator`?e.params:[];t.set(e,{...id(),name:e.name,formals:i,maxLevels:i.map(()=>3),weights:i.map(()=>0),minMaxLevels:i.map(()=>[]),conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set});let a=e.kind===`Function`?{kind:`FunctionConstruction`,bounds:e.bounds,body:e.body,location:e.location}:e.body,o=g(e.name,i,a,n);return t.set(e,o),o};return{analyze:m,analyzeDefinition:_,toOperand:a}},kd=(e,t,n)=>{let r=new Map(t);e.assumptions.forEach(e=>{e.kind===`NewSymbol`?(e.set&&n.analyze(e.set,r),r.set(e.name,{kind:`Formal`,arity:e.arity})):e.kind===`AssumeProve`?kd(e,r,n):n.analyze(e,r)}),n.analyze(e.conclusion,r)},Ad=(e,t)=>{let n=Od(t);e.definitions.filter(e=>!e.name.includes(`!`)).forEach(e=>n.analyzeDefinition(e,/* @__PURE__ */ new Map)),e.assumptions.forEach(e=>n.analyze(e.expression,/* @__PURE__ */ new Map)),e.theorems.forEach(e=>e.statement.kind===`AssumeProve`?kd(e.statement,/* @__PURE__ */ new Map,n):n.analyze(e.statement,/* @__PURE__ */ new Map))},jd=(e,t)=>e.maxLevels[t]??3,Md=(e,t)=>{let n=/* @__PURE__ */ new Map,r=e=>{let r=n.get(e);if(r)return r;let i=t(e),a=Od({constants:new Set(i.constants.map(e=>e.name)),variables:new Set(i.variables),getDefinition:i.getDefinition});return n.set(e,a),a},i=/* @__PURE__ */ new Map,a=e=>{let n=i.get(e);if(n)return n;let a=t(e),o=r(e),s=a.definitions.map(e=>o.analyzeDefinition(e,/* @__PURE__ */ new Map)),c={isConstant:a.variables.length===0&&s.every(e=>e.level===0),constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set};c.isConstant||a.constants.forEach(e=>ad(c.constraints,e.name,0));let l=(e,t)=>{e.constraints.forEach((e,t)=>ad(c.constraints,t,e)),e.argConstraints.forEach((e,t)=>od(c.argConstraints,t,e)),e.argParams.forEach(e=>{let n=nd(e);t(n.operator,n.param)&&c.argParams.add(e)})};return s.forEach(e=>l(e,(t,n)=>e.formals.every(e=>e.name!==t&&e.name!==n))),a.assumptions.forEach(e=>l(o.analyze(e,/* @__PURE__ */ new Map),()=>!0)),i.set(e,c),c},o=/* @__PURE__ */ new Set;if(e.forEach(e=>{let n=`at line ${e.location.line}, column ${e.location.column}`,i=e=>o.add(`${e} ${n}`),s=t(e.module),c=a(e.module),l=r(e.instancer),u=/* @__PURE__ */ new Map;e.lets.forEach(e=>u.set(e.name,{kind:`Let`,definition:e,scope:u}));let d=[...s.constants.map(e=>({...e,maximumLevel:0})),...s.variables.map(e=>({name:e,arity:0,maximumLevel:1}))].flatMap(t=>{let n=e.substitutions.get(t.name);if(!n)return[];if(t.arity===0){let e=l.analyze(n,u);return[{...t,level:e.level,operator:void 0,isLeibniz:!0}]}let r=l.toOperand(n,u);return[{...t,level:r.data.level,operator:r.operator,isLeibniz:r.operator===void 0||r.operator.nonLeibniz.size===0}]}),f=(t,n)=>`Level error in instantiating module '${e.module}': the level of the expression or operator substituted for '${t}' must be at most ${n}`;d.forEach(t=>{!c.isConstant&&t.level>t.maximumLevel&&i(f(t.name,t.maximumLevel)),t.isLeibniz||i(`Error in instantiating module '${e.module}': a non-Leibniz operator substituted for '${t.name}'`)}),d.forEach(t=>{let n=c.constraints.get(t.name);n!==void 0&&t.level>n&&i(f(t.name,n));let r=t.operator;r&&Array.from({length:t.arity},(n,a)=>{let o=c.argConstraints.get(ed(t.name,a));o!==void 0&&jd(r,a)<o&&i(`Level error in instantiating module '${e.module}': the level of the argument ${a+1} of the operator ${r.name} must be at least ${o}`)})}),c.argParams.forEach(t=>{let n=nd(t),r=d.find(e=>e.name===n.operator)?.operator,a=d.find(e=>e.name===n.param);if(!r||!a)return;let o=jd(r,n.index);a.level>o&&i(`Level error when instantiating module '${e.module}': the level of the argument ${n.index} of the operator ${n.operator}' must be at most ${o}`)})}),o.size>0)throw new u([...o].join(`
406
- `))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t),a=i!==e&&He(i,e)?e:i;return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,a),t.cacheSize++,a},Sp=(e,t)=>{let n=e.kind;if(n===`Set`){let n=yp(e.elements,t);return n?Re(n):e}if(n===`Function`||n===`LazyFunction`&&L(e.domain)){let n=V(e),r=vp(n.domain,t),i=vp(n.range,t)??n.range;return r?xt(r.map((e,t)=>[e,i[t]])):i===n.range?n:ze(n.domain,i)}if(n===`Interval`||!k(e)||!L(e))return e;let r=R(e),i=vp(r.elements,t);return i?ht(i):r},Cp=(e,t,n)=>{for(let r=t.length;r<e.length;r++)t.push(xp(e[r],n));return t},wp=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=r?r[a]:a,s=xp(e[o],n),c=F(s,t[o]);if(c>0)return;if(r||i.push(s),c<0)return r?e.map(e=>xp(e,n)):Cp(e,i,n)}},Tp=(e,t,n)=>t.reduce((t,r)=>wp(e,t,r,n)??t,e),Ep=[`LAMBDA`,`$$InAssume`,`nullODN`,`nullOpArg`,`nullLabelNode`],Dp=/* @__PURE__ */ new Set([`THEOREM`,`LEMMA`,`COROLLARY`,`PROPOSITION`]),Op=new Map(ou.flatMap(e=>e.map(t=>[t,e[0]]))),kp=e=>Op.get(e)??e,Ap=e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return t},jp=()=>{let e={buckets:Array.from({length:11},()=>[]),threshold:8},t=/* @__PURE__ */ new Set,n=[],r=(e,t)=>(Ap(e.name)&2147483647)%t,i=()=>{let t=e.buckets.length*2+1,n=Array.from({length:t},()=>[]);for(let i=e.buckets.length-1;i>=0;i--)for(let a of e.buckets[i])n[r(a,t)].unshift(a);e.buckets=n,e.threshold=Math.floor(t*.75)};return{put:a=>{t.has(a.key)||(n.length>=e.threshold&&i(),e.buckets[r(a,e.buckets.length)].unshift(a),t.add(a.key),n.push(a))},inserted:n,enumerate:()=>e.buckets.toReversed().flat()}},Mp=(e,t,n)=>({key:t===`module`?`module ${e}`:e,name:e,kind:t,isLocal:n}),Np=(e,t)=>{let n=e[t],r=e[t+1];if(n.text===`_`&&r.kind===`Operator`)return e[t+2]?.text===`_`?{name:kp(r.text),end:t+3}:{name:r.text,end:t+2};if(n.kind===`Operator`)return{name:n.text===`-`?`-.`:kp(n.text),end:t+2};if(r?.text!==`(`)return{name:n.text,end:t+1};let i=e.findIndex((e,n)=>n>t&&e.text===`)`);return{name:n.text,end:i+1}},Pp=(e,t)=>{let n=[];for(let r=t;;){let t=Np(e,r);if(n.push(t.name),e[t.end]?.text!==`,`)return n;r=t.end+1}},Fp=e=>({line:e.line,column:e.column}),Ip=(e,t,n)=>{let r=/* @__PURE__ */ new Set,i=(a,o)=>{let s={key:o,unit:t,extends:[],instances:[],inner:[],allExtends:r};for(let t=a+1;t<e.length;t++){let a=e[t];if(a.kind===`ModuleEnd`)return{references:s,end:t};if(a.kind===`Separator`&&e[t+1]?.text===`MODULE`){let r=e[t+2].text,a=i(t,`${o}/${r}`);n.set(r,a.references),s.inner.push(a.references),t=a.end}else if(a.text===`EXTENDS`){let n=Pp(e,t+1);s.extends.push(...n),n.forEach(e=>r.add(e))}else a.text===`INSTANCE`&&e[t+1]?.kind===`Identifier`&&s.instances.push(e[t+1].text)}return{references:s,end:e.length}};return i(0,t??``).references},Lp=(e,t)=>t!==void 0&&t.line===e.line&&t.column===e.column+e.text.length,Rp=e=>{let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.text===`<`&&Lp(r,e[n+1])&&/^(\d+|\*|\+)$/.test(e[n+1].text)&&e[n+2]?.text===`>`&&Lp(e[n+1],e[n+2])){n+=Lp(e[n+2],e[n+3])?3:2;continue}let i=r.text===`MODULE`&&e[n-1]?.kind===`Separator`;r.kind!==`String`&&!i&&t.push(r.text)}return t},zp=e=>{let t=/* @__PURE__ */ new Map,n=[];return e.forEach((r,i)=>{r.kind===`Separator`&&e[i+1]?.text===`MODULE`&&n.push({name:e[i+2].text,start:i});let a=r.kind===`ModuleEnd`?n.pop():void 0;a&&!t.has(a.name)&&t.set(a.name,{start:a.start,end:i+1})}),t},Bp=(e,t)=>e.find(e=>e.name===t)??e.map(e=>Bp(e.modules,t)).find(Boolean),Vp=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=i=>{let a=n.get(i??``);if(a)return a;let o=i===void 0?e:uu.get(i)??t?.(i)??rc(e,i),s=o===void 0?[]:se(o),c=zp(s),l=c.get(s[2]?.text??``)??{start:0,end:0},u={module:void 0},d={tokens:s,...l,getModule:()=>u.module??=ac(o??``)};return n.set(i??``,d),c.forEach((e,t)=>{e.start===l.start||r.has(t)||r.set(t,{tokens:s,...e,getModule:()=>Bp(d.getModule().modules,t)??d.getModule()})}),d};return i(void 0),e=>(e===void 0?void 0:r.get(e))??i(e)},Hp=(e,t)=>{let n=Vp(e,t),r=e=>{let t=e.tokens,n=e.getModule(),r=[],i=[],o=(e,n)=>{let i=Pp(t,e+1);r.push({location:Fp(t[e]),apply:e=>i.forEach(t=>e.put(Mp(t,n,!1)))})},s=new Set(n.definitions.filter(e=>e.isRecursive).map(e=>e.name)),c={value:0};t.slice(e.start,e.end).forEach((n,a)=>{let l=e.start+a,u=t[l];if(u.kind===`Separator`&&t[l+1]?.text===`MODULE`){if(c.value++,c.value===2){let e=t[l+2].text;r.push({location:Fp(u),apply:t=>t.put(Mp(e,`module`,!1))})}}else u.kind===`ModuleEnd`&&c.value--,c.value===1&&u.kind===`Keyword`&&((u.text===`CONSTANT`||u.text===`CONSTANTS`)&&o(l,`constant`),(u.text===`VARIABLE`||u.text===`VARIABLES`)&&o(l,`variable`),u.text===`RECURSIVE`&&Pp(t,l+1).every(e=>s.has(e))&&o(l,`definition`),Dp.has(u.text)&&t[l+1]?.kind===`Identifier`&&t[l+2]?.text===`==`&&(i.push(Fp(u)),r.push({location:Fp(u),apply:e=>e.put(Mp(t[l+1].text,`theorem`,!1))})))}),n.assumptions.forEach(e=>{i.push(e.location);let t=e.name;t!==void 0&&r.push({location:e.location,apply:e=>e.put(Mp(t,`theorem`,!1))})});let l=e=>i.some(t=>t.line===e.line&&t.column===e.column);return n.definitions.forEach(e=>{if(l(e.location))return;let t=kp(e.name);r.push({location:e.location,apply:n=>n.put(Mp(t,`definition`,e.isLocal))})}),n.instances.forEach(e=>{r.push({location:e.location,apply:t=>{let n=a(e.module).enumerate(),r=e.name===void 0?``:`${e.name}!`,i=n.filter(e=>e.kind===`definition`),o=n.filter(e=>e.kind===`theorem`);[...i,...o].forEach(n=>{n.isLocal||t.put(Mp(`${r}${n.name}`,n.kind,e.isLocal))}),e.name!==void 0&&t.put(Mp(e.name,`definition`,e.isLocal))}})}),r.sort((e,t)=>Dr(e.location,t.location)?-1:+!!Dr(t.location,e.location))},i=/* @__PURE__ */ new Map,a=e=>{let t=i.get(e??``);if(t)return t;let o=jp();i.set(e??``,o),au.toReversed().forEach(e=>o.put(Mp(e,`builtin`,!1)));let s=n(e);return s.getModule().extends.forEach(e=>a(e).inserted.forEach(e=>{e.isLocal||o.put(e)})),r(s).forEach(e=>e.apply(o)),o};return a(void 0).enumerate().filter(e=>e.kind===`variable`).map(e=>e.name).reverse()},Up=(e,t,n)=>{let r=Vp(e,n),i=/* @__PURE__ */ new Set,a=e=>{i.add(e)},o=e=>{e.kind===`ModelValue`&&a(e.name),e.kind===`String`&&a(e.value),e.kind===`Set`&&e.elements.forEach(o)};t.constants.forEach(e=>{e.args?.forEach(o),o(e.value)}),su.forEach(a);let s=e=>{let t=r(e);return t.tokens.slice(t.start,t.end)},c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,u=e=>{let t=l.get(e);if(t)return t;let n=Ip(s(e),e,c);return l.set(e,n),n},d=e=>c.get(e)??u(e),f=/* @__PURE__ */ new Set,p=(e,t)=>c.has(t)||f.has(`${e.key}>${t}`),m=(e,t,n)=>{let r=[...e.extends.map(d),...e.instances.filter(t=>p(e,t)).map(d),...e.inner];for(let e of r){let r=n(e,t);if(r)return r}},h=e=>{let t=(n,r)=>{if(r.has(n.key))return;r.add(n.key);let i=e(n).find(e=>!p(n,e));return i===void 0?m(n,r,t):[n,i]};return t},g=h(e=>e.extends),_=h(e=>e.instances),v=/* @__PURE__ */ new Set([void 0]),y=/* @__PURE__ */ new Map;Rp(s(void 0)).forEach((e,t)=>{t===3&&lu.forEach(a),a(e)});let b=u(void 0);for(;;){let e=g(b,/* @__PURE__ */ new Set)??_(b,/* @__PURE__ */ new Set);if(!e)break;let[t,n]=e;f.add(`${t.key}>${n}`),y.set(t.unit,[...y.get(t.unit)??[],n]),!v.has(n)&&(v.add(n),Rp(s(n)).forEach(a))}Ep.forEach(a);let ee=/* @__PURE__ */ new Set,x=e=>{if(ee.has(e))return;ee.add(e);let t=y.get(e)??[],n=u(e).allExtends;[...t.filter(e=>n.has(e)),...t.filter(e=>!n.has(e))].forEach(x),s(e).forEach(e=>{e.kind===`String`&&a(e.text)})};return x(void 0),cu.forEach(a),[...i]},Wp=(e,t)=>e*((t-e)/2**64),Gp=e=>e.includes(`.`)?e:`${e}.0`,Kp=e=>{let t=Math.abs(e);if(t>=.001&&t<1e7)return Gp(String(e));let[n,r]=e.toExponential().split(`e`);return`${Gp(n)}E${r.replace(`+`,``)}`},qp=e=>e!==void 0&&e>=`0`&&e<=`9`,Jp=e=>{if(e===0)return`0.0`;let t=Kp(e),n={next:0,digits:0,result:``};for(;t[n.next]===`0`;)n.next++;for(;qp(t[n.next]);)n.result+=t[n.next++],n.digits++;if(n.next===t.length)return n.result;if(t[n.next]!==`.`)return t;if(n.next++,n.digits>=2)for(;qp(t[n.next]);)n.next++;else{if(n.result+=`.`,n.digits===0)for(;t[n.next]===`0`;)n.result+=t[n.next++];for(;qp(t[n.next])&&n.digits<2;)n.result+=t[n.next++],n.digits++;for(qp(t[n.next])&&Number(t[n.next])>=5&&(n.result=Yp(n.result));qp(t[n.next]);)n.next++}return n.next>=t.length?n.result:t[n.next]===`E`?`${n.result}${t.slice(n.next)}`:t},Yp=e=>{let t=e.length-1;if(t<0)return`1`;let n=e[t],r=e.slice(0,t);return n===`.`?`${Yp(r)}.`:n===`9`?`${Yp(r)}0`:`${r}${Number(n)+1}`},Xp=e=>{let t={value:0};for(;10n**BigInt(t.value+1)<e*10n;)t.value++;let n=10n**BigInt(t.value+1),r=n/e,i=n%e*2n>=e;return Number(`${r+(i?1n:0n)}e-${t.value+1}`)},Zp=(e,t,n)=>{if(Wp(e,t)<1e-10)return;let r=n().sort();return r.reduce((e,t,n)=>{let i=r[n-1];return n>0&&i<0n==t<0n&&t-i<e?t-i:e},9223372036854775807n)},Qp=e=>{let t=e.reduce((e,t)=>e+t,0);if(t===0)return;let n=e.flatMap((e,t)=>e>0?[t]:[]),r=e.reduce((e,t,n)=>e+t*n,0),i=Math.floor(t*.95),a={count:0},o=n.find(t=>(a.count+=e[t],a.count>i));return`The average outdegree of the complete state graph is ${Math.round(r/t)} (minimum is ${n[0]}, the maximum ${n[n.length-1]} and the 95th percentile is ${o}).`},$p={line:0,column:0},em=`Failed to recover the initial state from its fingerprint.`,tm=`Failed to recover the next state from its fingerprint.`,nm=e=>({kind:`Identifier`,name:e,location:$p}),rm=/* @__PURE__ */ new Set([`name`,`property`]),im=(e,t,n)=>{let r=Ya(t,n);if(!r)throw new d(`The ${e} ${t} specified in the configuration file\nis not defined in the specification.`);if(r.kind===`Operator`&&r.params.length>0)throw new d(rm.has(e)?`TLC requires ${t} not to take any argument.`:`TLC requires ${e} not to take any argument, but one was given: ${t}`);return r},am=(e,t,n)=>{let r=im(e,t,n);if(Za(r,n))throw new d(`The ${e} ${t} cannot be a constant.`);return r},om=(e,t,n)=>{if(Za(t,n)&&t.body.kind!==`Number`&&t.body.kind!==`String`)try{return X(nm(e),Tm(n,void 0,void 0))}catch(e){if(e instanceof f)return;throw e}},sm=(e,t,n)=>{let r=im(e,t,n),i=om(t,r,n);if(i!==void 0&&i!==!0)throw new d(`The ${e} of ${t} is equal to ${H(i)}`);return i===void 0?r:void 0},cm=(e,t)=>{let n=Od({constants:new Set(t.constants.keys()),variables:new Set(t.variables),getDefinition:e=>Ya(e,t)});return e.flatMap(e=>{let r=sm(`invariant`,e,t);if(!r)return[];let i=n.analyzeDefinition(r,/* @__PURE__ */ new Map);if(i.level>=2)throw new d(`The invariant ${e} is not a state predicate (one with no primes or temporal operators).${i.params.size===0?``:`
406
+ `))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t),a=i!==e&&He(i,e)?e:i;return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,a),t.cacheSize++,a},Sp=(e,t)=>{let n=e.kind;if(n===`Set`){let n=yp(e.elements,t);return n?Re(n):e}if(n===`Function`||n===`LazyFunction`&&L(e.domain)){let n=V(e),r=vp(n.domain,t),i=vp(n.range,t)??n.range;if(r){let e=xt(r.map((e,t)=>[e,i[t]]));return e.domain.every((e,t)=>e===n.domain[t])?ze(n.domain,e.range):e}return i===n.range?n:ze(n.domain,i)}if(n===`Interval`||!k(e)||!L(e))return e;let r=R(e),i=vp(r.elements,t);return i?ht(i):r},Cp=(e,t,n)=>{for(let r=t.length;r<e.length;r++)t.push(xp(e[r],n));return t},wp=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=r?r[a]:a,s=xp(e[o],n),c=F(s,t[o]);if(c>0)return;if(r||i.push(s),c<0)return r?e.map(e=>xp(e,n)):Cp(e,i,n)}},Tp=(e,t,n)=>t.reduce((t,r)=>wp(e,t,r,n)??t,e),Ep=[`LAMBDA`,`$$InAssume`,`nullODN`,`nullOpArg`,`nullLabelNode`],Dp=/* @__PURE__ */ new Set([`THEOREM`,`LEMMA`,`COROLLARY`,`PROPOSITION`]),Op=new Map(ou.flatMap(e=>e.map(t=>[t,e[0]]))),kp=e=>Op.get(e)??e,Ap=e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return t},jp=()=>{let e={buckets:Array.from({length:11},()=>[]),threshold:8},t=/* @__PURE__ */ new Set,n=[],r=(e,t)=>(Ap(e.name)&2147483647)%t,i=()=>{let t=e.buckets.length*2+1,n=Array.from({length:t},()=>[]);for(let i=e.buckets.length-1;i>=0;i--)for(let a of e.buckets[i])n[r(a,t)].unshift(a);e.buckets=n,e.threshold=Math.floor(t*.75)};return{put:a=>{t.has(a.key)||(n.length>=e.threshold&&i(),e.buckets[r(a,e.buckets.length)].unshift(a),t.add(a.key),n.push(a))},inserted:n,enumerate:()=>e.buckets.toReversed().flat()}},Mp=(e,t,n)=>({key:t===`module`?`module ${e}`:e,name:e,kind:t,isLocal:n}),Np=(e,t)=>{let n=e[t],r=e[t+1];if(n.text===`_`&&r.kind===`Operator`)return e[t+2]?.text===`_`?{name:kp(r.text),end:t+3}:{name:r.text,end:t+2};if(n.kind===`Operator`)return{name:n.text===`-`?`-.`:kp(n.text),end:t+2};if(r?.text!==`(`)return{name:n.text,end:t+1};let i=e.findIndex((e,n)=>n>t&&e.text===`)`);return{name:n.text,end:i+1}},Pp=(e,t)=>{let n=[];for(let r=t;;){let t=Np(e,r);if(n.push(t.name),e[t.end]?.text!==`,`)return n;r=t.end+1}},Fp=e=>({line:e.line,column:e.column}),Ip=(e,t,n)=>{let r=/* @__PURE__ */ new Set,i=(a,o)=>{let s={key:o,unit:t,extends:[],instances:[],inner:[],allExtends:r};for(let t=a+1;t<e.length;t++){let a=e[t];if(a.kind===`ModuleEnd`)return{references:s,end:t};if(a.kind===`Separator`&&e[t+1]?.text===`MODULE`){let r=e[t+2].text,a=i(t,`${o}/${r}`);n.set(r,a.references),s.inner.push(a.references),t=a.end}else if(a.text===`EXTENDS`){let n=Pp(e,t+1);s.extends.push(...n),n.forEach(e=>r.add(e))}else a.text===`INSTANCE`&&e[t+1]?.kind===`Identifier`&&s.instances.push(e[t+1].text)}return{references:s,end:e.length}};return i(0,t??``).references},Lp=(e,t)=>t!==void 0&&t.line===e.line&&t.column===e.column+e.text.length,Rp=e=>{let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.text===`<`&&Lp(r,e[n+1])&&/^(\d+|\*|\+)$/.test(e[n+1].text)&&e[n+2]?.text===`>`&&Lp(e[n+1],e[n+2])){n+=Lp(e[n+2],e[n+3])?3:2;continue}let i=r.text===`MODULE`&&e[n-1]?.kind===`Separator`;r.kind!==`String`&&!i&&t.push(r.text)}return t},zp=e=>{let t=/* @__PURE__ */ new Map,n=[];return e.forEach((r,i)=>{r.kind===`Separator`&&e[i+1]?.text===`MODULE`&&n.push({name:e[i+2].text,start:i});let a=r.kind===`ModuleEnd`?n.pop():void 0;a&&!t.has(a.name)&&t.set(a.name,{start:a.start,end:i+1})}),t},Bp=(e,t)=>e.find(e=>e.name===t)??e.map(e=>Bp(e.modules,t)).find(Boolean),Vp=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=i=>{let a=n.get(i??``);if(a)return a;let o=i===void 0?e:uu.get(i)??t?.(i)??rc(e,i),s=o===void 0?[]:se(o),c=zp(s),l=c.get(s[2]?.text??``)??{start:0,end:0},u={module:void 0},d={tokens:s,...l,getModule:()=>u.module??=ac(o??``)};return n.set(i??``,d),c.forEach((e,t)=>{e.start===l.start||r.has(t)||r.set(t,{tokens:s,...e,getModule:()=>Bp(d.getModule().modules,t)??d.getModule()})}),d};return i(void 0),e=>(e===void 0?void 0:r.get(e))??i(e)},Hp=(e,t)=>{let n=Vp(e,t),r=e=>{let t=e.tokens,n=e.getModule(),r=[],i=[],o=(e,n)=>{let i=Pp(t,e+1);r.push({location:Fp(t[e]),apply:e=>i.forEach(t=>e.put(Mp(t,n,!1)))})},s=new Set(n.definitions.filter(e=>e.isRecursive).map(e=>e.name)),c={value:0};t.slice(e.start,e.end).forEach((n,a)=>{let l=e.start+a,u=t[l];if(u.kind===`Separator`&&t[l+1]?.text===`MODULE`){if(c.value++,c.value===2){let e=t[l+2].text;r.push({location:Fp(u),apply:t=>t.put(Mp(e,`module`,!1))})}}else u.kind===`ModuleEnd`&&c.value--,c.value===1&&u.kind===`Keyword`&&((u.text===`CONSTANT`||u.text===`CONSTANTS`)&&o(l,`constant`),(u.text===`VARIABLE`||u.text===`VARIABLES`)&&o(l,`variable`),u.text===`RECURSIVE`&&Pp(t,l+1).every(e=>s.has(e))&&o(l,`definition`),Dp.has(u.text)&&t[l+1]?.kind===`Identifier`&&t[l+2]?.text===`==`&&(i.push(Fp(u)),r.push({location:Fp(u),apply:e=>e.put(Mp(t[l+1].text,`theorem`,!1))})))}),n.assumptions.forEach(e=>{i.push(e.location);let t=e.name;t!==void 0&&r.push({location:e.location,apply:e=>e.put(Mp(t,`theorem`,!1))})});let l=e=>i.some(t=>t.line===e.line&&t.column===e.column);return n.definitions.forEach(e=>{if(l(e.location))return;let t=kp(e.name);r.push({location:e.location,apply:n=>n.put(Mp(t,`definition`,e.isLocal))})}),n.instances.forEach(e=>{r.push({location:e.location,apply:t=>{let n=a(e.module).enumerate(),r=e.name===void 0?``:`${e.name}!`,i=n.filter(e=>e.kind===`definition`),o=n.filter(e=>e.kind===`theorem`);[...i,...o].forEach(n=>{n.isLocal||t.put(Mp(`${r}${n.name}`,n.kind,e.isLocal))}),e.name!==void 0&&t.put(Mp(e.name,`definition`,e.isLocal))}})}),r.sort((e,t)=>Dr(e.location,t.location)?-1:+!!Dr(t.location,e.location))},i=/* @__PURE__ */ new Map,a=e=>{let t=i.get(e??``);if(t)return t;let o=jp();i.set(e??``,o),au.toReversed().forEach(e=>o.put(Mp(e,`builtin`,!1)));let s=n(e);return s.getModule().extends.forEach(e=>a(e).inserted.forEach(e=>{e.isLocal||o.put(e)})),r(s).forEach(e=>e.apply(o)),o};return a(void 0).enumerate().filter(e=>e.kind===`variable`).map(e=>e.name).reverse()},Up=(e,t,n)=>{let r=Vp(e,n),i=/* @__PURE__ */ new Set,a=e=>{i.add(e)},o=e=>{e.kind===`ModelValue`&&a(e.name),e.kind===`String`&&a(e.value),e.kind===`Set`&&e.elements.forEach(o)};t.constants.forEach(e=>{e.args?.forEach(o),o(e.value)}),su.forEach(a);let s=e=>{let t=r(e);return t.tokens.slice(t.start,t.end)},c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,u=e=>{let t=l.get(e);if(t)return t;let n=Ip(s(e),e,c);return l.set(e,n),n},d=e=>c.get(e)??u(e),f=/* @__PURE__ */ new Set,p=(e,t)=>c.has(t)||f.has(`${e.key}>${t}`),m=(e,t,n)=>{let r=[...e.extends.map(d),...e.instances.filter(t=>p(e,t)).map(d),...e.inner];for(let e of r){let r=n(e,t);if(r)return r}},h=e=>{let t=(n,r)=>{if(r.has(n.key))return;r.add(n.key);let i=e(n).find(e=>!p(n,e));return i===void 0?m(n,r,t):[n,i]};return t},g=h(e=>e.extends),_=h(e=>e.instances),v=/* @__PURE__ */ new Set([void 0]),y=/* @__PURE__ */ new Map;Rp(s(void 0)).forEach((e,t)=>{t===3&&lu.forEach(a),a(e)});let b=u(void 0);for(;;){let e=g(b,/* @__PURE__ */ new Set)??_(b,/* @__PURE__ */ new Set);if(!e)break;let[t,n]=e;f.add(`${t.key}>${n}`),y.set(t.unit,[...y.get(t.unit)??[],n]),!v.has(n)&&(v.add(n),Rp(s(n)).forEach(a))}Ep.forEach(a);let ee=/* @__PURE__ */ new Set,x=e=>{if(ee.has(e))return;ee.add(e);let t=y.get(e)??[],n=u(e).allExtends;[...t.filter(e=>n.has(e)),...t.filter(e=>!n.has(e))].forEach(x),s(e).forEach(e=>{e.kind===`String`&&a(e.text)})};return x(void 0),cu.forEach(a),[...i]},Wp=(e,t)=>e*((t-e)/2**64),Gp=e=>e.includes(`.`)?e:`${e}.0`,Kp=e=>{let t=Math.abs(e);if(t>=.001&&t<1e7)return Gp(String(e));let[n,r]=e.toExponential().split(`e`);return`${Gp(n)}E${r.replace(`+`,``)}`},qp=e=>e!==void 0&&e>=`0`&&e<=`9`,Jp=e=>{if(e===0)return`0.0`;let t=Kp(e),n={next:0,digits:0,result:``};for(;t[n.next]===`0`;)n.next++;for(;qp(t[n.next]);)n.result+=t[n.next++],n.digits++;if(n.next===t.length)return n.result;if(t[n.next]!==`.`)return t;if(n.next++,n.digits>=2)for(;qp(t[n.next]);)n.next++;else{if(n.result+=`.`,n.digits===0)for(;t[n.next]===`0`;)n.result+=t[n.next++];for(;qp(t[n.next])&&n.digits<2;)n.result+=t[n.next++],n.digits++;for(qp(t[n.next])&&Number(t[n.next])>=5&&(n.result=Yp(n.result));qp(t[n.next]);)n.next++}return n.next>=t.length?n.result:t[n.next]===`E`?`${n.result}${t.slice(n.next)}`:t},Yp=e=>{let t=e.length-1;if(t<0)return`1`;let n=e[t],r=e.slice(0,t);return n===`.`?`${Yp(r)}.`:n===`9`?`${Yp(r)}0`:`${r}${Number(n)+1}`},Xp=e=>{let t={value:0};for(;10n**BigInt(t.value+1)<e*10n;)t.value++;let n=10n**BigInt(t.value+1),r=n/e,i=n%e*2n>=e;return Number(`${r+(i?1n:0n)}e-${t.value+1}`)},Zp=(e,t,n)=>{if(Wp(e,t)<1e-10)return;let r=n().sort();return r.reduce((e,t,n)=>{let i=r[n-1];return n>0&&i<0n==t<0n&&t-i<e?t-i:e},9223372036854775807n)},Qp=e=>{let t=e.reduce((e,t)=>e+t,0);if(t===0)return;let n=e.flatMap((e,t)=>e>0?[t]:[]),r=e.reduce((e,t,n)=>e+t*n,0),i=Math.floor(t*.95),a={count:0},o=n.find(t=>(a.count+=e[t],a.count>i));return`The average outdegree of the complete state graph is ${Math.round(r/t)} (minimum is ${n[0]}, the maximum ${n[n.length-1]} and the 95th percentile is ${o}).`},$p={line:0,column:0},em=`Failed to recover the initial state from its fingerprint.`,tm=`Failed to recover the next state from its fingerprint.`,nm=e=>({kind:`Identifier`,name:e,location:$p}),rm=/* @__PURE__ */ new Set([`name`,`property`]),im=(e,t,n)=>{let r=Ya(t,n);if(!r)throw new d(`The ${e} ${t} specified in the configuration file\nis not defined in the specification.`);if(r.kind===`Operator`&&r.params.length>0)throw new d(rm.has(e)?`TLC requires ${t} not to take any argument.`:`TLC requires ${e} not to take any argument, but one was given: ${t}`);return r},am=(e,t,n)=>{let r=im(e,t,n);if(Za(r,n))throw new d(`The ${e} ${t} cannot be a constant.`);return r},om=(e,t,n)=>{if(Za(t,n)&&t.body.kind!==`Number`&&t.body.kind!==`String`)try{return X(nm(e),Tm(n,void 0,void 0))}catch(e){if(e instanceof f)return;throw e}},sm=(e,t,n)=>{let r=im(e,t,n),i=om(t,r,n);if(i!==void 0&&i!==!0)throw new d(`The ${e} of ${t} is equal to ${H(i)}`);return i===void 0?r:void 0},cm=(e,t)=>{let n=Od({constants:new Set(t.constants.keys()),variables:new Set(t.variables),getDefinition:e=>Ya(e,t)});return e.flatMap(e=>{let r=sm(`invariant`,e,t);if(!r)return[];let i=n.analyzeDefinition(r,/* @__PURE__ */ new Map);if(i.level>=2)throw new d(`The invariant ${e} is not a state predicate (one with no primes or temporal operators).${i.params.size===0?``:`
407
407
  Note that a bug can cause TLC to incorrectly report this error.
408
408
  If you believe your TLA+ or PlusCal specification to be correct,
409
409
  please check if this bug described in LevelNode.java starting at line 590ff affects you.`}`);return[{name:e,expression:nm(e),scope:void 0}]})},lm=(e,t)=>{if(!A(e))return;let n=V(e);if(!n.domain.every(e=>typeof e==`string`))return;let r=n.domain.map((e,t)=>[String(e),n.range[t]]);return Object.fromEntries(r.sort((e,n)=>t.indexOf(e[0])-t.indexOf(n[0])))},um=(e,t)=>{if(e.kind===`And`)return e.operands.flatMap(e=>um(e,t));if(e.kind===`Identifier`&&!t.constants.has(e.name)){let n=Ya(e.name,t);if(n?.kind===`Operator`&&n.params.length===0)return um(n.body,t)}return[e]},dm=(e,t,n)=>{let r=e.expression;if(r.kind!==`Identifier`||$(r,e.scope,t)>0)return!1;let i=X(r,Tm(t,void 0,void 0,e.scope));if(i===!1)throw new d(`The spec is trivially false because ${r.name} is false.`);if(i!==!0)throw new d(`The operator ${r.name}, which equals ${H(i)},\ncannot be used as a ${n}`);return!0},fm=(t,n)=>{if(t.specification===void 0){let e=(e,t)=>{if(e===void 0)return;let r=im(t,e,n).body,i=nm(e);if(r.kind!==`Number`&&r.kind!==`String`&&$(i,void 0,n)===0)throw new d(`The ${t} ${e} cannot be a constant.`);return i};return{init:e(t.init,`initial predicate`),next:e(t.next,`next state action`),scope:void 0,temporals:[]}}let r=[],i=[],o=[],s=im(`name`,t.specification,n),c=om(t.specification,s,n);if(c!==void 0)throw new d(`The value of ${t.specification} is equal to ${H(c)}`);if(kf(s.body,void 0,n,!1).forEach(s=>{let c=s.expression;if(dm(s,n,`spec`))return;if(c.kind===`UnboundedQuantifier`&&c.isTemporal)throw a(new d(`TLC does not support temporal existential, nor universal, quantification over state variables.`),e.error);if(c.kind===`Always`&&c.expression.kind===`BoxAction`){i.push({expression:c.expression.action,scope:s.scope});return}if(c.kind===`Always`&&$(c.expression,s.scope,n)<2)throw new d(`TLC cannot handle []P in the specification ${t.specification} when P is a state predicate`);let l=$(c,s.scope,n);if(l===3)o.push(s);else{if(l===2)throw new d(`TLC cannot handle the action-level conjunct of the specification ${t.specification}`);r.push(s)}}),i.length>1)throw new d(`The specification ${t.specification} must contain at most one [][Next]_vars`);let l=[...r,...i],u=e=>`$specification${e}`,f=l.reduce((e,t,n)=>t.scope===void 0?e:{name:u(n),binding:{kind:`Thunk`,expression:t.expression,scope:t.scope,state:void 0,next:void 0,cache:void 0},parent:e},void 0),p=(e,t)=>e.scope===void 0?e.expression:{kind:`Identifier`,name:u(t),location:e.expression.location,resolution:{kind:`Local`}};return{init:r.length===0?void 0:{kind:`And`,operands:r.map(p),location:$p},next:i.length===0?void 0:p(i[0],r.length),scope:f,temporals:o}},pm=(e,t)=>{let n={initialPredicates:[],invariants:[],actionProperties:[],liveness:[]};return e.properties.forEach(e=>{let r=sm(`property`,e,t);r&&kf(r.body,void 0,t,!0).forEach(r=>{let i=r.expression;if(dm(r,t,`property`))return;if(i.kind===`Always`&&i.expression.kind===`BoxAction`){n.actionProperties.push({name:e,box:i.expression,action:i.expression.action,subscript:i.expression.subscript,scope:r.scope});return}if(i.kind===`Always`&&$(i.expression,r.scope,t)<=1){n.invariants.push({name:e,expression:i.expression,scope:r.scope});return}let a=$(i,r.scope,t);if(a<2)n.initialPredicates.push({name:e,expression:i,scope:r.scope});else{if(a===2)throw new d(`The property ${e} is an action-level formula`);n.liveness.push({name:e,expression:i,scope:r.scope})}})}),n},mm=(e,t,n)=>t.flatMap(t=>sm(e,t,n)?[{name:t,expression:nm(t),scope:void 0}]:[]),hm=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`?n.bodyRange:void 0},gm=(e,t)=>e.map((n,r)=>{if(e.indexOf(n)!==r)throw new d(`_POSSIBLE lists ${n} more than once`);am(`possible`,n,t);let i=nm(n);if($(i,void 0,t)===3)throw new d(`The possible of ${n} is equal to a temporal formula; only state- and action-level predicates are supported`);return{name:n,expression:i,scope:void 0}}),_m=(e,t,n)=>{if(e.kind!==`Apply`||e.operator!==`\\in`||t?.length!==1)return;let r=e.args[0];if(!(r.kind!==`Identifier`||J(r)))return n.variableIndex.get(r.name)===t[0]?{variable:t[0],set:e.args[1]}:void 0},vm=(e,t)=>e.flatMap(e=>um(e.expression,t).map(n=>{let r=Ts(n,t);return{name:e.name,expression:n,scope:e.scope,variables:r,membership:_m(n,r,t)}})),ym=(e,t,n)=>{let r=e.variables;if(!n||!r)return!1;for(let e=0;e<r.length;e++)if(t[r[e]]!==n[r[e]])return!1;return!0},bm=/[\u0100-\uffff]/,xm=/* @__PURE__ */ new Set([`JsonDeserialize`,`ndJsonDeserialize`]),Sm=e=>e.kind===`String`?bm.test(e.value):e.kind===`Set`&&e.elements.some(Sm),Cm=e=>e.kind===`String`&&bm.test(e.value)||e.kind===`Apply`&&xm.has(e.operator)||Ja(e).some(Cm),wm=(e,t)=>e.constants.some(e=>Sm(e.value)||(e.args??[]).some(Sm))||[...t.definitions.values()].some(e=>Cm(e.body)||e.kind===`Function`&&e.bounds.some(e=>Cm(e.set))),Tm=(e,t,n,r)=>({environment:e,scope:r,state:t,next:n}),Em=(e,t,n)=>qa(X(e,t),n),Dm=(e,t,n=Om)=>{let r=X(e,t);if(typeof r!=`boolean`)throw new f(n(e,t.environment));return r},Om=(e,t)=>{let n=e.kind===`Identifier`?Ya(e.name,t):void 0,r=n?.kind===`Operator`?n.body:e,i=n?.kind===`Operator`?n.bodyRange:void 0;return`TLC expected a boolean value, but did not find one. ${r.kind===`Number`?r.text??String(r.value):i?Pa(i):Fa(r)}`},km=()=>{},Am=(e,t,n)=>e.forEach(e=>{let r=t.possibleCounts.get(e.name)??0,i=Em(e.expression,n,`_POSSIBLE ${e.name}`);t.possibleCounts.set(e.name,i?r+1:r)}),jm=(e,t,n)=>{try{return Em(e,Tm(t,void 0,void 0),n)?void 0:{message:void 0}}catch(e){if(e instanceof f)return{message:e.message};throw e}},Mm=(e,t)=>{for(let n of e.filter(e=>!e.isAxiom)){let e=jm(n.expression,t,`an assumption`);if(e)return{name:Fa(n.expression),trace:[],message:e.message}}},Nm=(t,n,r)=>{let i=cm(t.invariants,n),o=fm(t,n),s=pm(t,n),c=vm([...i,...s.invariants],n),l=c.length>0||s.actionProperties.length>0||s.liveness.length>0;if(o.init===void 0&&(l||s.initialPredicates.length>0||n.variables.length>0))throw new d(`The configuration file did not specify the initial state predicate.`);if(o.next===void 0&&l)throw new d(`The configuration file did not specify the next state predicate.`);let u=vm(mm(`constraint`,t.constraints,n),n),f=mm(`action constraint`,t.actionConstraints,n);t.rlReward!==void 0&&im(`rlreward`,t.rlReward,n),t.periodic!==void 0&&im(`periodic`,t.periodic,n);let p=gm(t.possible,n);if(n.variables.length===0)return;let m=t.symmetry===void 0?[]:_p(t.symmetry,n);t.view!==void 0&&im(`view function`,t.view,n);let h=t.view===void 0?void 0:{name:t.view,expression:nm(t.view),scope:void 0},g=s.actionProperties.map(e=>{let t={kind:`Unchanged`,expression:e.subscript,location:$p};return{...e,unchanged:t}}),_=e=>$(e.expression,void 0,n)>=2,v=p.filter(e=>!_(e)),y=p.filter(_),b=n.runtime,ee={indices:void 0},x=()=>{if(ee.indices)return ee.indices;let e=r(),t=t=>{let r=e.indexOf(n.variables[t]);return r===-1?n.variables.length:r};return ee.indices=n.variables.map((e,t)=>t).sort((e,n)=>t(e)-t(n)),ee.indices},te=m.length>0?x():void 0,ne=(e,t)=>X(e,Tm(n,t,void 0)),re=e=>{let t=x(),n=m.length===0?e:Tp(e,m,t);return Sc(h===void 0?t.map(e=>n[e]):[ne(h.expression,n)])},S=wm(t,n);b.getFingerprint=re;let ie=()=>{let e=p.find(e=>!b.possibleCounts.get(e.name));if(!e)return;let t=hm(e.name,n),r=t?` at ${Pa(t)}`:``;return{name:e.name,message:`The _POSSIBLE predicate ${e.name}${r} was never witnessed.\nOthers may be unwitnessed too; only witnessed predicates appear with a\nnon-zero count in the record printed above.\nSee https://explain.tlapl.us/possible-conditions for additional details.`,counts:me(H(Vc(b),!0))}};return{properties:s,spec:o,isSymmetric:m.length>0,getTlcOrder:x,getStoredFingerprints:(e,t)=>{if(h!==void 0||S)return BigInt64Array.from(e,re);let n=x(),r=Tc();return BigInt64Array.from(t,e=>r(n.map(t=>e[t])))},getFingerprintState:e=>{if(S)return[String(re(e))];let t=m.length===0?e:Tp(e,m,te);return h===void 0?t:[ne(h.expression,t)]},findViolatedInvariant:(t,r)=>c.find(i=>{if(ym(i,t,r))return!1;try{let e=Tm(n,t,void 0,i.scope),a=i.membership;return r&&a?!Qt(t[a.variable],r[a.variable],X(a.set,e)):!Dm(i.expression,e)}catch(t){throw r?Pm(a(t,e.safetyEvaluationFailure),`Evaluating invariant ${i.name} failed.`):t}}),satisfiesConstraints:(e,t)=>u.every(r=>ym(r,e,t)||Dm(r.expression,Tm(n,e,void 0))),findFailedInitialPredicate:e=>s.initialPredicates.find(t=>!Dm(t.expression,Tm(n,e,void 0,t.scope))),findViolatedActionProperty:(e,t)=>g.find(r=>{try{return!Dm(r.action,Tm(n,e,t,r.scope),()=>`Attempted to evaluate an expression of form [A]_e, but A was not a boolean.\n${Fa(r.box)}`)&&!Em(r.unchanged,Tm(n,e,t,r.scope),`a subscript`)}catch(e){throw Pm(e,`Evaluating action property ${r.name} failed.`)}}),satisfiesActionConstraints:(e,t)=>f.every(r=>Dm(r.expression,Tm(n,e,t),e=>`TLC threw an unexpected exception.\nThis was probably caused by an error in the spec or model.\nSee the User Output or TLC Console for clues to what happened.\nThe exception was a java.lang.RuntimeException\n: ${Om(e,n)}`)),trackStatePossible:v.length===0?km:e=>Am(v,b,Tm(n,e,void 0)),trackActionPossible:y.length===0?km:(e,t)=>Am(y,b,Tm(n,e,t)),findUnwitnessedPossible:ie,findPostconditionViolation:()=>{let e=ie();if(e)return e;for(let e of t.postconditions){let t=jm(nm(e),n,`a postcondition`);if(t)return{name:e,message:t.message??`Postcondition ${e} is false.`}}}}},Pm=(e,t)=>e instanceof f?a(new f(`${t}\n${e.message}`,e),_(e)):e,Fm=e=>{i(!1);let t=typeof e.config==`string`?O(e.config):e.config,n=e.onPrint??console.log,r={isMuted:!1},a=e=>{r.isMuted||n(e)},o=e=>{r.isMuted=!0;let t=e();return r.isMuted=!1,t};De(Up(e.source,t,e.loadModule));let s=Hd(t,{source:e.source,loadModule:e.loadModule,loadClass:e.loadClass,print:a,files:{readFile:e.readFile,writeFile:e.writeFile},seed:e.seed}),l=s.environment,u=l.runtime;u.pause=e.onPause??(()=>{}),u.getSpecification=()=>pp(t,l,s.variableLocations,s.instanceActions);let m={depth:0},h=(e,t,n)=>({status:e,violation:t&&{...t,loopStart:t.loopStart},failure:n,generatedStates:u.generatedStates,distinctStates:u.distinctStates,queuedStates:u.queueSize,depth:u.generatedStates===0?0:Math.max(m.depth,1),outDegrees:void 0,fingerprintDistance:void 0}),g=Array.from({length:32},()=>0),v={newStates:0},y=()=>Math.min(v.newStates,31),b=()=>g.map((e,t)=>t===y()?e+1:e),ee=()=>({...h(`success`),outDegrees:[...g],fingerprintDistance:Zp(u.distinctStates,u.generatedStates,()=>x?x.getStoredFingerprints(T,se):BigInt64Array.from(T,u.getFingerprint))}),x=Nm(t,l,()=>Hp(e.source,e.loadModule)),te=Mm(s.assumptions,l);if(te)return h(`assumption-violation`,te);if(!x)return ee();let ne=t.postconditions.length>0||t.possible.length>0,re=(e,t,n)=>{if(ne){let e=t.loopStart;u.counterExample=Wl(t.trace,e===void 0||!n?void 0:{start:e,action:n()})}let r=x.findUnwitnessedPossible();return r||x.findPostconditionViolation(),h(e,r?{...t,unwitnessed:r}:t)},S=x.spec,ie=x.getFingerprintState,ae={value:void 0},oe=t.view!==void 0||t.symmetry!==void 0,C=c(()=>Hf(x.properties.liveness,S.temporals,l)),w=x.isSymmetric||C!==void 0,T=[],se=[],E=[],D=[],ce=[],le=/* @__PURE__ */ new Map,ue=Nn(),de=e=>Object.fromEntries(x.getTlcOrder().map(t=>[l.variables[t],e[t]])),fe=(e,t,n,r)=>{let i=t[n].state,a=(t[n+1]??t[r??n]).state;u.getLevel=()=>n+1,u.getBehavior=()=>t.slice(0,n+1).map(e=>e.state);try{let t=am(`alias`,e,l).body,n=X(nm(e),Tm(l,i,a)),r=t.kind===`Record`?t.fields.map(e=>e.name):[];return lm(n,r)??de(i)}catch(e){if(!(e instanceof d||e instanceof f))throw e;return{...de(i),_ALIASEvalError:e.message}}},pe=(e,n,r)=>{ae.value??=dp(t,l,s.instanceActions);let i={...N};Object.assign(N,{index:e,isExpanding:!0,candidate:void 0});let a=ie(r),o=ae.value.find(e=>Na(e.expression,n,l,e.scope).some(e=>Se(ie(e.state),a)));return Object.assign(N,i),o&&fp(o)},me=(e,n,r)=>{let i=t.alias,a=o(()=>(e.length>1&&Bo(l)&&k(),e.map((t,r)=>r===0||t.action===`Stuttering`?void 0:pe(n[r-1],e[r-1].state,t.state))));return e.map((t,n)=>({action:t.action,label:a[n],state:i===void 0?de(t.state):fe(i,e,n,r)}))},k=()=>S.init===void 0?[]:ja(S.init,l,S.scope),A=e=>S.next===void 0?[]:Na(S.next,e,l,S.scope),j=(e,t)=>Se(ie(e),se[t]),he=(e,t)=>A(e).find(e=>j(e.state,t)),ge=(e,t)=>{let n=oe||Bo(l)?k().find(t=>j(t,e[0])):T[e[0]];if(!n)throw new f(em);let r=[{state:n,action:void 0}];for(let n=1;n<e.length;n++){let i=r[n-1].state;if(e[n-1]===e[n]){r.push({state:i,action:`Stuttering`});continue}let a=he(i,e[n]);if(!a)throw new f(t);r.push(a)}return r},_e=(e,t)=>{let n=[];for(let t=e;t!==-1;t=E[t])n.unshift(t);let r=oe&&n.length>1?ge(n,em):n.map(e=>({state:T[e],action:D[e]}));if(!t)return me(r,n);let i=oe?A(T[e]).find(e=>Se(e.state,t.state))?.action:t.action;return me([...r,{state:t.state,action:i}],n)},ve=e=>E[e]===-1?[{action:void 0,label:void 0,state:de(T[e])}]:_e(e),ye=(e,t,n,r)=>{if(!(e instanceof f))throw e;return{...h(`error`,void 0,{message:e.message,trace:t,initialState:n&&!(e instanceof p)?de(n):void 0,exitCode:_(e)}),outDegrees:r}},be=(e,t)=>{let n=ge(e,tm),r=n[n.length-1].state;if(oe&&t!==void 0&&t!==e.length-1&&he(r,e[t])===void 0)throw new f(tm);return me(n,e,t)},xe=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=un(t,hn(e[n]));return t&1073741823},Se=(e,t)=>{for(let n=0;n<t.length;n++)if(!He(e[n],t[n]))return!1;return!0},Ce=(e,t)=>{let n=le.get(e);return n===void 0?-1:typeof n==`number`?Se(se[n],t)?n:-1:n.find(e=>Se(se[e],t))??-1},we=(e,t)=>{let n=le.get(e);n===void 0?le.set(e,t):typeof n==`number`?le.set(e,[n,t]):n.push(t)},M=e=>{u.distinctStates=T.length+1,m.depth=Math.max(m.depth,e),u.diameter=Math.max(u.diameter,e)},Te=(e,t,n,r)=>{let i=n===-1?1:ce[n]+1;T.push(e),se.push(t),E.push(n),D.push(r),ce.push(i)},N={index:-1,isExpanding:!1,candidate:void 0,candidateLevel:0,livenessSource:-1},Ee=e=>e===-1?[]:[...Ee(E[e]),T[e]];u.isSeen=e=>{let t=ie(e);return Ce(xe(t),t)!==-1},u.getBehavior=e=>{let t=e===N.candidate?-1:T.indexOf(e);return t===-1?[...Ee(N.index),e]:Ee(t)},u.getCurrentState=()=>N.index===-1?void 0:T[N.index],u.setLivenessSource=e=>{N.livenessSource=e},u.getLevel=e=>{let t=N.livenessSource;return t===-1?e===N.candidate?N.candidateLevel:N.index===-1?0:e===T[N.index]?ce[N.index]:N.isExpanding?ce[N.index]+1:0:e===T[t]?ce[t]:ce[t]+1};let Oe=e=>{ue(e),u.generatedStates++,u.initialStates++,N.candidate=e,N.candidateLevel=1;let t=ie(e),n=xe(t),r=x.satisfiesConstraints(e);if(r&&x.trackStatePossible(e),r&&Ce(n,t)!==-1)return;r&&(M(1),u.queueSize++,C?.addInitialState(T.length,e));let i=x.findViolatedInvariant(e);if(i)return re(`invariant-violation`,{name:i.name,trace:me([{action:void 0,state:e}],[])});let a=x.findFailedInitialPredicate(e);if(a)return re(`liveness-violation`,{name:a.name,trace:me([{action:void 0,state:e}],[])});r&&(we(n,T.length),Te(e,t,-1,void 0))},ke=(e,t,n)=>{let r=T[e];u.generatedStates++,N.candidate=t.state,N.candidateLevel=ce[e]+1,w&&ue(t.state);let i=ie(t.state),a=xe(i),o=Ce(a,i),s=x.satisfiesConstraints(t.state,r);s&&x.trackStatePossible(t.state);let c=s&&x.satisfiesActionConstraints(r,t.state);c&&x.trackActionPossible(r,t.state);let l=c?o:-1;if(l!==-1&&C){let e=T[l],r=e.every((e,n)=>e===t.state[n]);n.push({index:l,state:r?e:t.state})}let d=c&&l===-1;if(d&&(M(ce[e]+1),v.newStates++),l===-1)try{let n=x.findViolatedInvariant(t.state,r);if(n)return re(`invariant-violation`,{name:n.name,trace:_e(e,t)})}catch(n){return ye(n,_e(e,t),void 0,b())}let f=x.findViolatedActionProperty(r,t.state);if(f)return re(`liveness-violation`,{name:f.name,trace:_e(e,t)});d&&(w||ue(t.state),we(a,T.length),C&&n.push({index:T.length,state:t.state}),Te(t.state,i,e,t.action),u.queueSize++)},Ae={result:void 0};if(S.init!==void 0)try{Aa(S.init,l,e=>{try{Ae.result=Oe(e)}catch(t){Ae.result=ye(t,[],e)}return Ae.result!==void 0},S.scope)}catch(e){return ye(e,[])}if(Ae.result)return Ae.result;let je=S.next;if(je===void 0){if(T.length>0)throw new f(`No next state actions defined to generate successor states from.`);return ee()}let P=e=>{let n=T[e],r=[],i=Ma(je,n,l,t=>{try{Ae.result=ke(e,t,r)}catch(n){Ae.result=ye(n,_e(e,t))}return Ae.result!==void 0},S.scope);if(N.isExpanding=!1,Ae.result)return Ae.result;if(i===0&&t.checkDeadlock)return re(`deadlock`,{name:`deadlock`,trace:ve(e)});try{let t=C?.addState(e,n,r);return N.livenessSource=-1,t?re(`property-violation`,{name:t.name,trace:be(t.path)}):void 0}catch(t){return ye(t,ve(e),void 0,b())}},Me=e=>{let t=[...e.prefix,...e.cycle],n=be(t,e.prefix.length),r=t[e.prefix.length],i=t[t.length-1],a=r===i?void 0:o(()=>pe(i,T[i],T[r]));return re(`liveness-violation`,{name:e.name,trace:n,loopStart:e.prefix.length,loopLabel:a},()=>r===i?n[n.length-1].action:A(T[i]).find(e=>Se(e.state,T[r]))?.action)},Ne=C!==void 0&&e.livenessCheck!==`final`,Pe=performance.now(),Fe={at:Pe+3e3,size:1,time:0},F=e=>{let t=performance.now();if(Fe.at=t+6e4,!((e-Fe.size)/Fe.size>.1)||Fe.time>(t-Pe)*.2)return;Fe.size=e;let n=C?.findViolation();return N.livenessSource=-1,Fe.time+=performance.now()-t,n};i(!0);for(let e=0;e<T.length&&!u.isStopped;e++){N.index=e,N.candidate=void 0,u.queueSize=T.length-e-1,N.isExpanding=!0;try{Ae.result=P(e)}catch(t){Ae.result=ye(t,ve(e))}if(Ae.result)return Ae.result;if(g[y()]++,v.newStates=0,Ne&&performance.now()>=Fe.at){let t=F(e+1);if(t)return Me(t)}}N.index=-1,N.candidate=void 0;let Ie=C?.findViolation();if(N.livenessSource=-1,Ie)return Me(Ie);let Le=x.findPostconditionViolation();return Le?h(`postcondition-violation`,{...Le,trace:[]}):ee()},Im=e=>{let t=Math.imul(e^e>>>16,2146121005),n=Math.imul(t^t>>>15,2221713035);return n^n>>>16},Lm=(e,t)=>{let n=2166136261,r=1779033703;for(let t=0;t<e.length;t++)n=Math.imul(n^hn(e[t]),16777619),r=Math.imul(r^Sn(e[t]),1540483477);t[0]=Im(n)||1,t[1]=Im(r)},Rm=()=>{let e={slots:/* @__PURE__ */ new Int32Array(8192),used:0},t=(e,t,n)=>{let r=e.length/2-1;for(let i=t&r;;i=i+1&r){let r=e[i*2];if(r===0||r===t&&e[i*2+1]===n)return i}},n=()=>{let n=e.slots,r=new Int32Array(n.length*2);for(let e=0;e<n.length;e+=2){if(n[e]===0)continue;let i=t(r,n[e],n[e+1]);r[i*2]=n[e],r[i*2+1]=n[e+1]}e.slots=r};return{insert:(r,i)=>{e.used*4>=e.slots.length&&n();let a=t(e.slots,r,i);return e.slots[a*2]!==r&&(e.slots[a*2]=r,e.slots[a*2+1]=i,e.used++,!0)}}},zm=(e,t)=>{let n=e.length-1;for(let r=Number(t>>32n)&n;;r=r+1&n){let n=Atomics.load(e,r);if(n===t)return!1;if(n!==0n)continue;let i=Atomics.compareExchange(e,r,0n,t);if(i===0n)return!0;if(i===t)return!1}},Bm=()=>({slots:new BigInt64Array(new SharedArrayBuffer(8192)),used:new Int32Array(new SharedArrayBuffer(4))}),Vm=(e,t,n)=>{let r=BigInt.asIntN(64,BigInt(t)<<32n|BigInt(n>>>0));return zm(e.slots,r)?(Atomics.add(e.used,0,1),!0):!1},Hm=e=>Atomics.load(e.used,0)*2>=e.slots.length,Um=e=>{let t=new BigInt64Array(new SharedArrayBuffer(e.slots.byteLength*2));for(let n of e.slots)n!==0n&&zm(t,n);return{slots:t,used:e.used}},Wm=()=>{let e={words:/* @__PURE__ */ new Int32Array(1024),length:0,count:0},t=[],n=/* @__PURE__ */ new Map,r=t=>{if(e.length===e.words.length){let t=new Int32Array(e.words.length*2);t.set(e.words),e.words=t}e.words[e.length++]=t},i=e=>{let i=n.get(e);if(i!==void 0)return r(i);n.set(e,t.length),r(t.length),t.push(e)},a=e=>{if(typeof e==`boolean`)return r(+!!e),!0;if(typeof e==`number`)return(e|0)===e&&(r(2),r(e),!0);if(typeof e==`string`)return r(3),i(e),!0;if(e.kind===`ModelValue`)return r(4),i(e.name),!0;if(e.kind===`Set`)return r(5),r(e.elements.length),e.elements.every(a);if(e.kind===`Function`){let t=an(e.domain);return t?(r(7),r(t.low),r(e.range.length),e.range.every(a)):(r(6),r(e.domain.length),e.domain.every(a)&&e.range.every(a))}return!1};return{encode:t=>{let n=e.length;return t.every(a)?(e.count++,!0):(e.length=n,!1)},finish:()=>({words:e.words.slice(0,e.length),strings:t,count:e.count})}},Gm=e=>t=>{let n=t.words,r={index:0},i=e=>Array.from({length:e},()=>a()),a=()=>{let e=n[r.index++];if(e===0)return!1;if(e===1)return!0;if(e===2)return n[r.index++];if(e===3)return t.strings[n[r.index++]];if(e===4)return Le(t.strings[n[r.index++]]);if(e===7){let e=n[r.index++],t=n[r.index++],a=kt({kind:`Interval`,low:e,high:e+t-1});return ze(a,i(t))}let a=n[r.index++];if(e===5)return Re(i(a));let o=i(a);return ze(o,i(a))};return Array.from({length:t.count},()=>Array.from({length:e},()=>a()))};export{O as A,e as B,ja as C,ke as D,H as E,m as F,u as I,g as L,d as M,l as N,De as O,f as P,h as R,Bo as S,Nn as T,Up as _,Um as a,ac as b,Lm as c,Mm as d,Jp as f,Qp as g,Wp as h,Bm as i,se as j,me as k,Fm as l,Zp as m,Wm as n,Vm as o,Xp as p,Rm as r,Hm as s,Gm as t,Nm as u,Hp as v,Na as w,oc as x,Hd as y,_ as z};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tla-ts",
3
- "version": "0.0.3-dev.3cf2ad0",
3
+ "version": "0.0.3-dev.4c8c06c",
4
4
  "description": "A TLA+ interpreter and model checker in TypeScript, 2× faster than TLC",
5
5
  "keywords": [
6
6
  "formal verification",
package/src/lexer.ts CHANGED
@@ -345,6 +345,8 @@ export const tokenize = (source: string): Token[] => {
345
345
  if (!headerMatch)
346
346
  throw new TlaSyntaxError("Expected a module header such as ---- MODULE Name ----");
347
347
  const tokens: Token[] = [];
348
+ // Each name is one string object, so looking a name up in a scope compares pointers.
349
+ const names = new Map<string, string>();
348
350
  const prefixLines = source.slice(0, headerMatch.index).split("\n");
349
351
  const cursor = {
350
352
  index: headerMatch.index,
@@ -481,7 +483,9 @@ export const tokenize = (source: string): Token[] => {
481
483
  pushToken("Keyword", word.slice(0, 3), 3);
482
484
  continue;
483
485
  }
484
- pushToken(KEYWORDS.has(word) ? "Keyword" : "Identifier", word, word.length);
486
+ const name = names.get(word) ?? word;
487
+ names.set(name, name);
488
+ pushToken(KEYWORDS.has(word) ? "Keyword" : "Identifier", name, word.length);
485
489
  continue;
486
490
  }
487
491
  const stepLength = matchStep(source, cursor.index);
package/src/symmetry.ts CHANGED
@@ -188,7 +188,15 @@ const computePermutedValue = (value: ObjectValue, permutation: Permutation) => {
188
188
  const domain = permuteElements(functionValue.domain, permutation);
189
189
  const range = permuteElements(functionValue.range, permutation) ?? functionValue.range;
190
190
  if (domain) {
191
- return createFunction(domain.map((key, index): [Value, Value] => [key, range[index]]));
191
+ const permuted = createFunction(
192
+ domain.map((key, index): [Value, Value] => [key, range[index]]),
193
+ );
194
+ // A permutation often maps the domain to itself, such as a function over the symmetric set.
195
+ // Sharing the original domain array lets comparisons with other images skip the domain.
196
+ const isSameDomain = permuted.domain.every(
197
+ (key, index) => key === functionValue.domain[index],
198
+ );
199
+ return isSameDomain ? createSortedFunction(functionValue.domain, permuted.range) : permuted;
192
200
  }
193
201
  return range === functionValue.range
194
202
  ? functionValue