tla-ts 0.0.3-dev.763cc71 → 0.0.3-dev.79f7ed7

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
@@ -406,4 +406,4 @@ _PrintCounts == PrintT(_Counts)
406
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);return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,i),t.cacheSize++,i},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?``:`
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
- 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=(e,t)=>(e>>>0)%t,zm=()=>{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&&e[i*2+1]===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)},remove:(n,r)=>{let i=t(e.slots,n,r);e.slots[i*2]===n&&(e.slots[i*2]=0,e.slots[i*2+1]=1)}}},Bm=()=>{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})}},Vm=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 l}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return Nn}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return ac}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Lm}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return ja}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Mm}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return Zp}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return Wp}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return Hd}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return Hp}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Rm}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Jp}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Up}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Bm}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Fm}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Qp}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return zm}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Nm}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Vm}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return Xp}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return oc}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return Bo}});
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
@@ -406,4 +406,4 @@ _PrintCounts == PrintT(_Counts)
406
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);return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,i),t.cacheSize++,i},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?``:`
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
- 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=(e,t)=>(e>>>0)%t,zm=()=>{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&&e[i*2+1]===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)},remove:(n,r)=>{let i=t(e.slots,n,r);e.slots[i*2]===n&&(e.slots[i*2]=0,e.slots[i*2+1]=1)}}},Bm=()=>{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})}},Vm=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{l as A,H as C,O as D,me as E,h as F,_ as I,e as L,m as M,u as N,se as O,g as P,Nn as S,De as T,ac as _,Lm as a,ja as b,Mm as c,Zp as d,Wp as f,Hd as g,Hp as h,Rm as i,f as j,d as k,Jp as l,Up as m,Bm as n,Fm as o,Qp as p,zm as r,Nm as s,Vm as t,Xp as u,oc as v,ke as w,Na as x,Bo as y};
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.763cc71",
3
+ "version": "0.0.3-dev.79f7ed7",
4
4
  "description": "A TLA+ interpreter and model checker in TypeScript, 2× faster than TLC",
5
5
  "keywords": [
6
6
  "formal verification",
@@ -1,12 +1,10 @@
1
1
  import { getValueFingerprint, getValueHash, type Value } from "./values";
2
2
 
3
3
  const EMPTY = 0;
4
- const TOMBSTONE = 1;
5
4
  const INITIAL_CAPACITY = 1 << 12;
6
5
 
7
6
  interface FingerprintTable {
8
7
  insert: (first: number, second: number) => boolean;
9
- remove: (first: number, second: number) => void;
10
8
  }
11
9
 
12
10
  const mix = (hash: number) => {
@@ -26,15 +24,13 @@ export const writeStateFingerprint = (state: Value[], fingerprint: Int32Array) =
26
24
  fingerprint[1] = mix(second);
27
25
  };
28
26
 
29
- export const getFingerprintOwner = (second: number, count: number) => (second >>> 0) % count;
30
-
31
27
  export const createFingerprintTable = (): FingerprintTable => {
32
28
  const table = { slots: new Int32Array(INITIAL_CAPACITY * 2), used: 0 };
33
29
  const findSlot = (slots: Int32Array, first: number, second: number) => {
34
30
  const mask = slots.length / 2 - 1;
35
31
  for (let index = first & mask; ; index = (index + 1) & mask) {
36
32
  const stored = slots[index * 2];
37
- if (stored === EMPTY && slots[index * 2 + 1] === EMPTY) return index;
33
+ if (stored === EMPTY) return index;
38
34
  if (stored === first && slots[index * 2 + 1] === second) return index;
39
35
  }
40
36
  };
@@ -59,11 +55,50 @@ export const createFingerprintTable = (): FingerprintTable => {
59
55
  table.used++;
60
56
  return true;
61
57
  },
62
- remove: (first, second) => {
63
- const slot = findSlot(table.slots, first, second);
64
- if (table.slots[slot * 2] !== first) return;
65
- table.slots[slot * 2] = EMPTY;
66
- table.slots[slot * 2 + 1] = TOMBSTONE;
67
- },
68
58
  };
69
59
  };
60
+
61
+ // Workers share one table of 64-bit fingerprints. The first word is never 0, so 0 marks an empty slot.
62
+ export interface SharedFingerprints {
63
+ slots: BigInt64Array;
64
+ used: Int32Array;
65
+ }
66
+
67
+ const INITIAL_SHARED_CAPACITY = 1 << 10;
68
+
69
+ const insertSharedKey = (slots: BigInt64Array, key: bigint) => {
70
+ const mask = slots.length - 1;
71
+ for (let index = Number(key >> 32n) & mask; ; index = (index + 1) & mask) {
72
+ const stored = Atomics.load(slots, index);
73
+ if (stored === key) return false;
74
+ if (stored !== 0n) continue;
75
+ const previous = Atomics.compareExchange(slots, index, 0n, key);
76
+ if (previous === 0n) return true;
77
+ if (previous === key) return false;
78
+ }
79
+ };
80
+
81
+ export const createSharedFingerprints = (): SharedFingerprints => ({
82
+ slots: new BigInt64Array(new SharedArrayBuffer(INITIAL_SHARED_CAPACITY * 8)),
83
+ used: new Int32Array(new SharedArrayBuffer(4)),
84
+ });
85
+
86
+ export const insertSharedFingerprint = (
87
+ table: SharedFingerprints,
88
+ first: number,
89
+ second: number,
90
+ ) => {
91
+ const key = BigInt.asIntN(64, (BigInt(first) << 32n) | BigInt(second >>> 0));
92
+ if (!insertSharedKey(table.slots, key)) return false;
93
+ Atomics.add(table.used, 0, 1);
94
+ return true;
95
+ };
96
+
97
+ export const isSharedFingerprintsFull = (table: SharedFingerprints) =>
98
+ Atomics.load(table.used, 0) * 2 >= table.slots.length;
99
+
100
+ export const growSharedFingerprints = (table: SharedFingerprints): SharedFingerprints => {
101
+ const slots = new BigInt64Array(new SharedArrayBuffer(table.slots.byteLength * 2));
102
+ for (const key of table.slots) if (key !== 0n) insertSharedKey(slots, key);
103
+ return { slots, used: table.used };
104
+ };