tla-ts 0.0.3-dev.a50fc89 → 0.0.3-dev.b74f28c
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/README.md +7 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/parallel-worker.cjs +2 -2
- package/dist/parallel-worker.js +2 -2
- package/dist/parallel.cjs +1 -1
- package/dist/parallel.js +2 -2
- package/dist/run-cli.cjs +12 -12
- package/dist/run-cli.js +13 -13
- package/dist/transfer.cjs +3 -3
- package/dist/transfer.js +3 -3
- package/package.json +1 -1
- package/src/fingerprints.ts +46 -11
- package/src/parallel-worker.ts +163 -211
- package/src/parallel.ts +58 -33
- package/src/symmetry.ts +14 -2
- package/src/values.ts +7 -4
package/dist/transfer.js
CHANGED
|
@@ -15,7 +15,7 @@ const e={success:0,assumptionViolation:10,deadlock:11,safetyViolation:12,livenes
|
|
|
15
15
|
`,t:` `,r:`\r`,f:`\f`}[t]??t),c(2)}else a.push(e[i.index]),c(1)}c(1),n.push({kind:`String`,text:a.join(``),line:t,column:r,endColumn:o()-1});continue}let r=te.exec(e.slice(i.index,i.index+64));if(r){s(`Number`,r[0],r[0].length);continue}if(ie(t)){let t=e.slice(i.index,C(e,i.index,ie));if(/^\d+$/.test(t)){let n=/^\d+(\.\d+)?/.exec(e.slice(i.index))?.[0]??t;s(n.includes(`.`)?`Decimal`:`Number`,n,n.length);continue}if(t.startsWith(`WF_`)||t.startsWith(`SF_`)){s(`Keyword`,t.slice(0,3),3);continue}s(v.has(t)?`Keyword`:`Identifier`,t,t.length);continue}let a=w(e,i.index);if(a>0){s(`Step`,e.slice(i.index,i.index+a),a);continue}let u=ae(e,i.index);if(u)s(`Operator`,u.text,u.length);else throw l(`Unexpected character ${JSON.stringify(t)}`)}let d=o();return n.push({kind:`End`,text:``,line:i.line,column:d,endColumn:d}),n},E=/* @__PURE__ */ new Set([`CONSTANT`,`CONSTANTS`,`INIT`,`NEXT`,`SPECIFICATION`,`INVARIANT`,`INVARIANTS`,`PROPERTY`,`PROPERTIES`,`CONSTRAINT`,`CONSTRAINTS`,`ACTION_CONSTRAINT`,`ACTION_CONSTRAINTS`,`SYMMETRY`,`VIEW`,`CHECK_DEADLOCK`,`ALIAS`,`POSTCONDITION`,`POSTCONDITIONS`,`_POSSIBLE`,`_PERIODIC`,`_RL_REWARD`]),D=[`<-`,`<<`,`>>`,`=`,`{`,`}`,`,`,`[`,`]`,`(`,`)`],ce=e=>{let t=[],n={index:0,line:1};for(;n.index<e.length;){let r=e.slice(n.index),i=/^\s+/.exec(r)?.[0];if(i){n.line+=i.split(`
|
|
16
16
|
`).length-1,n.index+=i.length;continue}if(r.startsWith(`\\*`)){let e=r.indexOf(`
|
|
17
17
|
`);n.index+=e===-1?r.length:e;continue}if(r.startsWith(`(*`)){let e=r.indexOf(`*)`);if(e===-1)throw new d(`Unterminated comment at line ${n.line}`);n.line+=r.slice(0,e).split(`
|
|
18
|
-
`).length-1,n.index+=e+2;continue}let a=/^\d+(?![A-Za-z_])/.exec(r)?.[0];if(a){t.push({kind:`Number`,text:a,line:n.line}),n.index+=a.length;continue}let o=/^[A-Za-z0-9_!]+/.exec(r)?.[0];if(o){t.push({kind:`Word`,text:o,line:n.line}),n.index+=o.length;continue}let s=/^"((?:[^"\\]|\\.)*)"/.exec(r);if(s){t.push({kind:`String`,text:s[1],line:n.line}),n.index+=s[0].length;continue}let c=D.find(e=>r.startsWith(e));if(c){t.push({kind:`Symbol`,text:c,line:n.line}),n.index+=c.length;continue}let l=ae(e,n.index);if(!l)throw new d(`Unexpected character ${JSON.stringify(r[0])} at line ${n.line}`);t.push({kind:`Word`,text:l.text,line:n.line}),n.index+=l.length}return t.push({kind:`End`,text:``,line:n.line}),t},O=e=>{let t=ce(e),n={index:0},r={init:void 0,next:void 0,specification:void 0,invariants:[],properties:[],constraints:[],actionConstraints:[],constants:[],substitutions:[],checkDeadlock:!0,symmetry:void 0,view:void 0,alias:void 0,postconditions:[],possible:[],periodic:void 0,rlReward:void 0},i={isSet:!1},a=()=>t[n.index],o=()=>t[n.index++],s=e=>e.kind===`Word`&&E.has(e.text),c=e=>{let t=o();if(t.text!==e)throw new d(`Expected ${JSON.stringify(e)} but found ${JSON.stringify(t.text)} at line ${t.line}`)},l=()=>{let e=o();if(e.kind!==`Word`||s(e))throw new d(`Expected a name but found ${JSON.stringify(e.text)} at line ${e.line}`);return e.text},u=()=>a().kind===`Word`&&!s(a()),f=()=>{let e=[];for(;u();)e.push(o().text);return e},p=(e,t)=>{if(r[e]!==void 0)throw new d(`The keyword ${t} appears twice`);r[e]=l()},m=()=>{let e=o();if(e.kind===`Number`)return{kind:`Number`,value:Number(e.text)};if(e.kind===`String`)return{kind:`String`,value:e.text};if(e.text===`TRUE`||e.text===`FALSE`)return{kind:`Boolean`,value:e.text===`TRUE`};if(e.text===`{`){let e=[];for(a().text!==`}`&&e.push(m());a().text===`,`;)o(),e.push(m());return c(`}`),{kind:`Set`,elements:e}}if(e.kind===`Word`&&!s(e))return{kind:`ModelValue`,name:e.text};throw new d(`Expected a value but found ${JSON.stringify(e.text)} at line ${e.line}`)},h=()=>{if(a().text!==`[`)return;o();let e=l();return c(`]`),e},g=()=>{for(;u();){let e=o().text;if(a().text===`(`){o();let t=[];for(;a().text!==`)`;)t.push(m()),a().text!==`)`&&c(`,`);o(),c(`=`);let n=h();r.constants.push({name:e,value:m(),args:t,...n&&{module:n}});continue}if(a().text===`<-`){o();let t=h();r.substitutions.push({name:e,target:l(),...t&&{module:t}});continue}c(`=`);let t=h();r.constants.push({name:e,value:m(),...t&&{module:t}})}};for(;a().kind!==`End`;){let e=o();switch(e.text){case`CONSTANT`:case`CONSTANTS`:g();break;case`INIT`:p(`init`,e.text);break;case`NEXT`:p(`next`,e.text);break;case`SPECIFICATION`:p(`specification`,e.text);break;case`SYMMETRY`:p(`symmetry`,e.text);break;case`VIEW`:p(`view`,e.text);break;case`INVARIANT`:case`INVARIANTS`:r.invariants.push(...f());break;case`PROPERTY`:case`PROPERTIES`:r.properties.push(...f());break;case`CONSTRAINT`:case`CONSTRAINTS`:r.constraints.push(...f());break;case`ACTION_CONSTRAINT`:case`ACTION_CONSTRAINTS`:r.actionConstraints.push(...f());break;case`ALIAS`:p(`alias`,e.text);break;case`POSTCONDITION`:case`POSTCONDITIONS`:r.postconditions.push(...f());break;case`_POSSIBLE`:r.possible.push(...f());break;case`_PERIODIC`:p(`periodic`,e.text);break;case`_RL_REWARD`:p(`rlReward`,e.text);break;case`CHECK_DEADLOCK`:{if(i.isSet)throw new d(`The keyword CHECK_DEADLOCK appears twice`);i.isSet=!0;let e=o().text;if(e!==`TRUE`&&e!==`FALSE`)throw new d(`CHECK_DEADLOCK expects TRUE or FALSE but found ${JSON.stringify(e)}`);r.checkDeadlock=e===`TRUE`;break}default:throw new d(`Unexpected ${JSON.stringify(e.text)} at line ${e.line}`)}}if(r.specification!==void 0&&(r.init!==void 0||r.next!==void 0))throw new d(`SPECIFICATION cannot be combined with INIT or NEXT`);return r},le={Set:{open:`{ `,close:` }`,pad:` `,separator:`,`,divider:``,dividerPad:``},Sequence:{open:`<< `,close:` >>`,pad:` `,separator:`,`,divider:``,dividerPad:``},Subset:{open:`SUBSET `,close:` `,pad:` `,separator:`,`,divider:``,dividerPad:``},Function:{open:`( `,close:` )`,pad:` `,separator:` @@`,divider:` :>`,dividerPad:` `},Record:{open:`[ `,close:` ]`,pad:` `,separator:`,`,divider:` |->`,dividerPad:` `}},ue=e=>{if(e===void 0)return!1;let t=e.charCodeAt(0);return t>=9&&t<=13||t>=28&&t<=32||t===5760||t>=8192&&t<=8202&&t!==8199||t===8232||t===8233||t===8287||t===12288},de=e=>e!==void 0&&/^\p{Nd}$/u.test(e),fe=e=>e!==void 0&&/^[\p{L}\p{Nd}]$/u.test(e),pe=e=>{let t=t=>{let n=C(e,t,ue);return e[n]===void 0?void 0:n},n=(n,r,i,a,o,s)=>{let c={kind:n,first:r,last:r,children:[]},l={index:t(i)};for(;l.index!==void 0&&e[l.index]!==a;){let n=o(l.index);if(!n)return;c.children.push(n);let r=t(n.last+1);if(r===void 0)return;let i=e.startsWith(s,r)?r+s.length:r;l.index=t(i)}if(l.index!==void 0)return c.last=l.index,c},r=(n,r)=>{let i=o(n);if(!i)return;let a=t(i.last+1);if(a===void 0||!e.startsWith(r,a))return;let s=t(a+r.length),c=s===void 0?void 0:o(s);if(c)return{kind:`Pair`,first:n,last:c.last,children:[i,c]}},i=t=>{let n=C(e,t,de);if(e.startsWith(`..`,n)&&de(e[n+2]))return{kind:`Constant`,first:t,last:C(e,n+2,de)-1,children:[]}},a=t=>{let n=e[t];if(n===`"`){let n=e.indexOf(`"`,t+1);return n===-1?void 0:{kind:`Constant`,first:t,last:n,children:[]}}let r=de(n)?i(t):void 0;if(r)return r;if(n===`-`)return t+1>=e.length?void 0:{kind:`Constant`,first:t,last:C(e,t+1,de)-1,children:[]};if(fe(n))return{kind:`Constant`,first:t,last:C(e,t,fe)-1,children:[]}},o=i=>{let s=t(i);if(s!==void 0)switch(e[s]){case`{`:return n(`Set`,s,s+1,`}`,o,`,`);case`<`:{let t=n(`Sequence`,s,s+2,`>`,o,`,`);return!t||t.last+1>=e.length?void 0:{...t,last:t.last+1}}case`[`:return n(`Record`,s,s+1,`]`,e=>r(e,`|->`),`,`);case`(`:return n(`Function`,s,s+1,`)`,e=>r(e,`:>`),`@@`);default:{if(!e.startsWith(`SUBSET`,s))return a(s);let n=t(s+6),r=n===void 0?void 0:o(n);return r?{kind:`Subset`,first:s,last:r.last,children:[r]}:void 0}}};return o(0)},me=e=>{let t=e.length===0?void 0:pe(e);if(!t||t.last<e.length-1)return e;let n=t=>e.slice(t.first,t.last+1),r=e=>e.last-e.first+1,i=(e,t,i,s)=>{if(r(e)<=t-i||e.kind===`Constant`)return n(e);if(e.kind===`Pair`)return;let c=le[e.kind],l=t-Math.max(c.open.length,c.pad.length),u=i+c.close.length,d=s+c.pad,f=e.kind===`Function`||e.kind===`Record`?o(e.children,l,u,d,c):a(e.children,l,u,d,c.separator);return f===void 0?void 0:c.open+f+c.close},a=(e,t,n,r,a)=>{let o=e.map((o,s)=>{let c=s===e.length-1,l=i(o,t,c?n:a.length,r);return l===void 0||c?l:`${l}${a}\n${r}`});return o.includes(void 0)?void 0:o.join(``)},o=(e,t,a,o,s)=>{let c=e.map((c,l)=>{let u=l===e.length-1,d=c.children[0],f=c.children[1],p=u?``:`${s.separator}\n${o}`,m=r(d)+s.divider.length+1+r(f);if(u?m<=t-a:m+s.separator.length<=t)return`${n(d)}${s.divider} ${n(f)}${p}`;let h=r(d)+s.divider.length<=t?n(d):i(d,t,a+s.divider.length,o),g=i(f,t-s.dividerPad.length,u?a:s.separator.length,o+s.dividerPad);return h===void 0||g===void 0?void 0:`${h}${s.divider}\n${o}${s.dividerPad}${g}${p}`});return c.includes(void 0)?void 0:c.join(``)};return i(t,80,0,``)??e},k=e=>typeof e==`object`&&e.kind!==`ModelValue`&&e.kind!==`Function`&&e.kind!==`LazyFunction`,A=e=>typeof e==`object`&&(e.kind===`Function`||e.kind===`LazyFunction`),j=e=>typeof e==`object`&&e.kind===`ModelValue`,he=e=>typeof e==`boolean`?`boolean`:typeof e==`number`?`integer`:typeof e==`string`?`string`:e.kind===`ModelValue`?`model value`:k(e)?`set`:`function`,ge=e=>{if(!Number.isInteger(e)||e>2147483647||e<-2147483648)throw new p(`Integer overflow: ${e} is outside TLC's 32-bit range`);return e},_e={isUsed:!1},ve=(e,t)=>(_e.isUsed=!0,e.writtenKeys=t,e),ye=e=>(e.writtenKeys??e.domain).map(t=>[t,e.range[Jt(e.domain,t)]]),be=(e,t,n)=>ve(ze(e,t),n),xe=e=>{if(!(typeof e!=`object`||e.kind!==`Function`&&e.kind!==`Set`)&&e.hash===0&&e.fingerprint===0){if(e.kind===`Set`)return e.elements.forEach(xe);e.writtenKeys=void 0,e.range.forEach(xe)}},Se=e=>e.every(e=>typeof e==`string`),Ce=(e,t)=>e.length>0&&t.length>0&&Se(e)!==Se(t),we=(e,t)=>{_e.isUsed&&(e.writtenKeys=void 0,t.writtenKeys=void 0);let n=e.domain,r=t.domain;if(n.length!==r.length)return Ce(n,r)?at(e,t):n.length-r.length;if(n!==r)for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}let i=e.range,a=t.range;if(i===a)return 0;for(let e=0;e<i.length;e++){let t=F(i[e],a[e]);if(t!==0)return t}return 0},M=(e,t)=>{let n=e.elements,r=t.elements;if(n.length!==r.length)return n.length-r.length;if(n===r)return 0;for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}return 0},Te=e=>j(e)?e.type:void 0,N=(e,t,n)=>{let r=Te(e),i=Te(t);if(r===void 0&&i===void 0)return;let a=n?`check equality of`:`compare`;if(j(e)&&j(t)){if(r===void 0||i===void 0||r===i)return;throw new f(`Attempted to ${a} the differently-typed model values ${H(e)} and ${H(t)}`)}throw r===void 0?new f(`Attempted to ${a} the typed model value ${H(t)} and the non-model value\n${H(e)}`):new f(`Attempted to ${a}${n?``:` the`} typed model value ${H(e)} and non-model value\n${H(t)}`)},Ee={ranks:Object.create(null),size:0},De=e=>{Ee.ranks=Object.create(null),Ee.size=0;for(let t of e)Oe(t)},Oe=e=>(Ee.ranks[e]===void 0&&(Ee.ranks[e]=Ee.size++),e),ke=()=>Ee.size,Ae=e=>Ee.ranks[Oe(e)],je=(e,t)=>{if(e===t)return 0;let n=Ee.ranks,r=n[e],i=n[t];return r!==void 0&&i!==void 0?r-i:r===void 0?i===void 0&&e<t?-1:1:-1},P=e=>typeof e==`object`&&(e.kind===`InfiniteSet`||e.kind===`SequenceSet`),Me=(e,t)=>(P(e)||P(t))&&(typeof e!=`object`||e.kind!==`SequenceSet`||typeof t!=`object`||t.kind!==`SequenceSet`),Ne=(e,t,n)=>{if(!P(e))throw new f(`Attempted to ${n} the set ${H(L(e)?R(e):e,!0)} with the value:\n${H(t,!0)}`);if(!P(t))throw new f(`Attempted to compare overridden value ${H(e,!0)} with non-overridden value:\n${H(t,!0)}`);let r=e.kind===`InfiniteSet`?e.name:void 0,i=t.kind===`InfiniteSet`?t.name:void 0;if(r!==void 0&&r===i)return 0;if(r===`Nat`&&i===`Int`||r===`Int`&&i===`Nat`)return r===`Nat`?-1:1;throw new f(`Attempted to compare ${H(e,!0)} with the value\n${H(t,!0)}`)},Pe={kind:`InfiniteSet`,name:`Any`},Fe=e=>{throw new f(`Attempted to compare ANY with the value\n${H(e)}`)},F=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e===Pe?Fe(e):0;if(typeof e==`object`&&typeof t==`object`){let n=e.kind,r=t.kind;if(n===`Function`&&r===`Function`)return we(e,t);if(n===`Set`&&r===`Set`)return M(e,t);if(n===`Interval`&&r===`Interval`){let n=Math.max(0,e.high-e.low+1),r=Math.max(0,t.high-t.low+1);return n!==r||n===0?n-r:e.low-t.low}if(n===`ModelValue`&&r===`ModelValue`)return e.type!==void 0&&t.type!==void 0&&N(e,t,!1),je(e.name,t.name);if(n===`ModelValue`||r===`ModelValue`)return N(e,t,!1),n===`ModelValue`?-1:1;if(e===Pe||t===Pe)return Fe(e===Pe?t:e);if(k(e)&&k(t)&&Me(e,t))return Ne(e,t,`compare`);let i=k(e);if(i!==k(t))throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`);return i?M(R(e),R(t)):we(V(e),V(t))}if(typeof e==`number`&&typeof t==`number`)return e-t;if(typeof e==`string`&&typeof t==`string`)return je(e,t);if(typeof e==`boolean`&&typeof t==`boolean`)return e<t?-1:1;if(N(e,t,!1),j(e))return-1;if(j(t))return 1;throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`)},Ie=/* @__PURE__ */ new Map,Le=e=>{Oe(e);let t=Ie.get(e);if(t)return t;let n={kind:`ModelValue`,name:e,type:e.length>2&&e[1]===`_`?e[0]:void 0};return Ie.set(e,n),n},Re=e=>({kind:`Set`,elements:e,hash:0,fingerprint:0}),ze=(e,t)=>({kind:`Function`,domain:e,range:t,hash:0,fingerprint:0,writtenKeys:void 0}),Be=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e!==Pe||Fe(e);if(typeof e!=`object`||typeof t!=`object`)return typeof e!=typeof t&&((typeof e==`object`||typeof t==`object`)&&N(e,t,!0),F(e,t)===0);if((e.kind===`Set`||e.kind===`Function`)&&(t.kind===`Set`||t.kind===`Function`)&&e.hash!==0&&t.hash!==0&&e.hash!==t.hash)return!1;if(e.kind===`Function`&&t.kind===`Function`)return we(e,t)===0;if(e.kind===`Set`&&t.kind===`Set`)return M(e,t)===0;if(j(e)||j(t))return N(e,t,!0),j(e)&&j(t)&&e.name===t.name;if(e.kind===`Subset`&&t.kind===`Subset`)return Be(e.base,t.base);if(e.kind===`FunctionSet`&&t.kind===`FunctionSet`){let n=z(e.domain),r=z(t.domain);if(n||r)return n===r;let i=z(e.range),a=z(t.range);return i||a?i===a:Be(e.domain,t.domain)&&Be(e.range,t.range)}if(e.kind===`RecordSet`&&t.kind===`RecordSet`){if(z(e))return z(t);if(z(t))return!1;let n=e=>e.names.map((t,n)=>[t,e.sets[n]]).sort((e,t)=>e[0]<t[0]?-1:1),r=n(t);return e.names.length===t.names.length&&n(e).every((e,t)=>e[0]===r[t][0]&&Be(e[1],r[t][1]))}if(e.kind===`ProductSet`&&t.kind===`ProductSet`)return z(e)?z(t):!z(t)&&e.factors.length===t.factors.length&&e.factors.every((e,n)=>Be(e,t.factors[n]));let n=k(e)&&k(t)&&!(L(e)&&L(t));if(n&&Me(e,t))return Ne(e,t,`check equality of`)===0;if(n){if(!P(e)){let n=R(e);if(!P(t))return M(n,R(t))===0}return wn(e)===wn(t)}return F(e,t)===0},Ve=(e,t)=>e===t||e.length===t.length&&e.every((e,n)=>He(e,t[n])),He=(e,t)=>e===t?!0:typeof e!=`object`||typeof t!=`object`?!1:e.kind===`Set`&&t.kind===`Set`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.elements,t.elements):e.kind===`Function`&&t.kind===`Function`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.domain,t.domain)&&Ve(e.range,t.range):wn(e)===wn(t),Ue=e=>{let t=e.length===0?1:e[0];return typeof t==`number`&&e.every((e,n)=>e===t+n)?t:void 0},We=e=>{if(!A(e))return;let t=V(e);return{domain:t.domain,range:t.range,low:Ue(t.domain)}},Ge=e=>{if(!A(e))return;let t=V(e);return t.domain.every(e=>typeof e==`string`)?t:void 0},Ke=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to compare the typed model value ${H(e)} and the non-model value\n${H(t)}`);return 1},qe=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to check equality of the typed model value ${H(e)} and the non-model value\n${H(t)}`);return!1},Je=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)?je(e.name,t.name):-1;if(!j(t))throw new f(`Attempted to compare the typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to compare the differently-typed model values ${H(e)} and ${H(t)}`);return je(e.name,t.name)},Ye=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)&&e.name===t.name;if(!j(t))throw new f(`Attempted to check equality of typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to check equality of the differently-typed model values ${H(e)} and ${H(t)}`);return e.name===t.name},Xe={number:{name:`integer`,other:`non-integer`,equality:`check equality of`},string:{name:`string`,other:`non-string`,equality:`check equality of`},boolean:{name:`boolean`,other:`non-boolean`,equality:`compare equality of`}},Ze=(e,t,n)=>{let r=Xe[typeof e==`number`?`number`:typeof e==`string`?`string`:`boolean`];return`Attempted to ${n?r.equality:`compare`} ${r.name} ${H(e)} with ${r.other}:\n${H(t)}`},Qe=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return Ke(n,t);throw new f(`Attempted to compare the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return e.range.length-r.range.length;let i=()=>$e(e.range,r.range);if(e.low!==void 0&&e.range.length===0)return 0;if(e.low!==void 0&&r.low!==void 0)return e.low===r.low?i():e.low-r.low;let a=e.low??r.low;if(a===void 0)return $e(e.domain,r.domain)||i();let o=e.low===void 0?e.domain:r.domain;for(let t=0;t<o.length;t++){let n=o[t];if(typeof n!=`number`)throw new f(`Attempted to compare integer with non-integer${e.low===void 0?``:`:`}\n${H(n)}.`);let r=e.low===void 0?n-(a+t):a+t-n;if(r!==0)return r}return i()},$e=(e,t)=>{for(let n=0;n<e.length;n++){let r=at(e[n],t[n]);if(r!==0)return r}return 0},et=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length-r.length||$e(n.range,r):Qe({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return Ke(t,e);throw new f(`Attempted to compare record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length-r.domain.length||$e(n.domain,r.domain)||$e(n.range,r.range)}return Qe({...n,low:Ue(n.domain)},e,t)},tt=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`),nt=(e,t)=>P(e)||P(t)||typeof t==`object`&&e.kind===t.kind&&(e.kind===`Interval`||e.kind===`Subset`||e.kind===`FunctionSet`||e.kind===`RecordSet`||e.kind===`ProductSet`),rt=(e,t)=>{let n=tt(t)?t:R(t);return{elements:R(e).elements,otherElements:R(n).elements}},it=(e,t)=>{if(nt(e,t))return F(e,t);if(!tt(e))return it(R(e),t);if(!k(t)){if(j(t))return Ke(t,e);throw new f(`Attempted to compare the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length-n.otherElements.length||$e(n.elements,n.otherElements)},at=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return F(e,t);if(j(t))return Ke(t,e);throw new f(Ze(e,t,!1))}return e.kind===`ModelValue`?Je(e,t):A(e)?et(e,t):it(e,t)},ot=(e,t)=>e.every((e,n)=>ut(e,t[n])),st=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return qe(n,t);throw new f(`Attempted to check equality of the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return!1;if(e.low!==void 0&&r.low!==void 0)return(e.range.length===0||e.low===r.low)&&ot(e.range,r.range);let i=e.low??r.low;return i===void 0?ot(e.domain,r.domain)&&ot(e.range,r.range):(e.low===void 0?e.domain:r.domain).every((e,t)=>{if(typeof e!=`number`)throw new f(`Attempted to compare an integer with non-integer:\n${H(e)}.`);return e===i+t})&&ot(e.range,r.range)},ct=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length===r.length&&ot(n.range,r):st({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length===r.domain.length&&ot(n.domain,r.domain)&&ot(n.range,r.range)}return st({...n,low:Ue(n.domain)},e,t)},lt=(e,t)=>{if(nt(e,t))return Be(e,t);if(!tt(e))return lt(R(e),t);if(!k(t)){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length===n.otherElements.length&&ot(n.elements,n.otherElements)},ut=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return e===t;if(j(t))return qe(t,e);throw new f(Ze(e,t,!0))}return e.kind===`ModelValue`?Ye(e,t):A(e)?ct(e,t):lt(e,t)},dt=e=>{let t=[];for(let n of e){let e={low:0,high:t.length,comparison:1};for(;e.low<e.high;){let r=e.low+(e.high-e.low>>1);if(e.comparison=at(n,t[r]),e.comparison===0)break;e.comparison<0?e.high=r:e.low=r+1}e.comparison!==0&&t.splice(e.low,0,n)}return t},ft=(e,t)=>t.some(t=>ut(t,e)),pt=(e,t)=>{try{return Be(e,t)}catch(n){if(!(n instanceof f))throw n;return ut(e,t)}},mt=e=>{for(let t=1;t<e.length;t++)if(F(e[t-1],e[t])>=0)return!1;return!0},ht=e=>{if(e.length<2||mt(e))return Re(e);let t=[...e].sort(F),n=[t[0]];for(let e=1;e<t.length;e++)F(n[n.length-1],t[e])!==0&&n.push(t[e]);return Re(n)},gt=e=>{try{return ht(e)}catch(t){if(!(t instanceof f))throw t;return{kind:`MixedSet`,elements:e}}},_t=Re([]),vt=(e,t)=>{if(e.elements.length===0||t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0||i.push(t)}return i.length===n.length?e:Re(i)},yt=(e,t)=>{let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0&&i.push(t)}return i.length===n.length?e:Re(i)},bt=(e,t)=>{if(e.elements.length===0)return t;if(t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=[],o=0,s=0;for(;o<n.length&&s<r.length;){let e=F(n[o],r[s]);e<0?i.push(n[o++]):e>0?(a.push(r[s]),i.push(r[s++])):(i.push(n[o++]),s++)}for(;o<n.length;)i.push(n[o++]);for(;s<r.length;)a.push(r[s]),i.push(r[s++]);if(a.length===0)return e;let c=Re(i);if(e.hash!==0){let t=e.hash;for(let e=0;e<a.length;e++)t=t+fn(a[e])|0;c.hash=t}if(e.fingerprint!==0){let t=e.fingerprint;for(let e=0;e<a.length;e++)t=t+yn(a[e])|0;c.fingerprint=t}return c},xt=e=>{let t=e.length<2?e:[...e].sort((e,t)=>F(e[0],t[0])),n=[],r=[];for(let e of t)n.length>0&&F(n[n.length-1],e[0])===0||(n.push(e[0]),r.push(e[1]));return ze(n,r)},St=e=>{let t=xt(e);return t.domain.length!==e.length||e.some(e=>typeof e[0]!=`string`)||e.every((e,n)=>e[0]===t.domain[n])?t:ve(t,e.map(e=>e[0]))},Ct=[],wt=[],Tt=/* @__PURE__ */ new WeakMap,Et=e=>{let t=Ct[e];if(t)return t;let n=Array.from({length:e},(e,t)=>t+1);return Ct[e]=n,n},Dt=e=>{if(Gt(e),e.low===1&&e.high>=1)return Et(e.high);let t=[];for(let n=e.low;n<=e.high;n++)t.push(n);return t},Ot=e=>e.length>0&&(e===Ct[e.length]||Tt.has(e)),kt=e=>{let t=R(e).elements;return Ot(t)&&(typeof e!=`object`||e.kind!==`Interval`)?[...t]:t},At=e=>{let t=wt[e];if(t)return t;let n={kind:`Interval`,low:1,high:e};return wt[e]=n,n},I=e=>ze(Et(e.length),e),jt=e=>xt(e),Mt=e=>k(e)&&!P(e),Nt=(e,t=!1)=>`UNION(${H(e.base,t)})`,Pt=e=>{if(!Mt(e.base))throw new f(`Attempted to enumerate the nonenumerable set:\n${Nt(e)}`);return R(e.base).elements},Ft=(e,t,n)=>{if(Mt(e))return e;throw new f(t===0?`Attempted to enumerate UNION(s), but some element of s is nonenumerable.`:`Attempted to enumerate the nonenumerable set:\n${H(e)}\nwhen enumerating:\n${Nt(n)}`)},L=e=>{if(typeof e!=`object`)return!1;switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:return!0;case`InfiniteSet`:case`SequenceSet`:return!1;case`Subset`:case`FilteredSet`:return L(e.base);case`FunctionSet`:return L(e.domain)&&L(e.range)||It(e.domain)===!0||It(e)===!0;case`RecordSet`:return e.sets.every(L)||It(e)===!0;case`ProductSet`:return e.factors.every(L)||It(e)===!0;case`Union`:return L(e.base)&&R(e.base).elements.every(L);case`SetOperation`:return e.operator===`\\cup`?L(e.left)&&L(e.right):e.operator===`\\cap`?L(e.left)||L(e.right):L(e.left);default:return!1}},It=e=>{if(typeof e==`object`)switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:return e.name===`Any`&&void 0;case`Subset`:case`SequenceSet`:return!1;case`FunctionSet`:{let t=It(e.domain);return t===void 0?void 0:!t&&It(e.range)}case`RecordSet`:case`ProductSet`:for(let t of e.kind===`RecordSet`?e.sets:e.factors){let e=It(t);if(e!==!1)return e}return!1;case`SetOperation`:case`FilteredSet`:case`Union`:return L(e)?R(e).elements.length===0:void 0;default:return}},Lt=e=>{let t=e.reduce((e,t)=>e*t.length,1),n=[],r=e.map(()=>0);for(let i=0;i<t;i++){n.push(e.map((e,t)=>e[r[t]]));for(let t=e.length-1;t>=0&&(r[t]++,!(r[t]<e[t].length));t--)r[t]=0}return n},Rt=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(e[n]<t-e.length+n){e[n]++;for(let t=n+1;t<e.length;t++)e[t]=e[t-1]+1;return!0}return!1},zt=e=>{let t=[];for(let n=0;n<=e.length;n++){let r=Array.from({length:n},(e,t)=>t);do t.push(Re(r.map(t=>e[t])));while(Rt(r,e.length))}return t},Bt=e=>{if(typeof e!=`object`)throw new f(`Expected a set but found ${H(e)}`);switch(e.kind){case`Set`:return e.elements;case`MixedSet`:return dt(e.elements);case`Interval`:{let t=Dt(e);return t!==Ct[t.length]&&Tt.set(t,e),t}case`Subset`:{P(e.base)&&Gt(e.base);let t=R(e.base).elements;if(t.length>30)throw new f(`SUBSET of a set with ${t.length} elements is too large to enumerate`);return zt(t)}case`FunctionSet`:{if(z(e))return[];if(P(e.domain))throw new f(`Attempted to enumerate a set of the form [D -> R],but the domain D:\n${H(e.domain)}\ncannot be enumerated.`);let t=kt(e.domain);if(t.length>0&&P(e.range))throw new f(`Attempted to enumerate a set of the form [D -> R],but the range R:\n${H(e.range)}\ncannot be enumerated.`);let n=t.length===0?[]:R(e.range).elements;return Lt(t.map(()=>n)).map(e=>ze(t,e))}case`RecordSet`:{if(z(e))return[];let t=e.sets.map((t,n)=>{if(P(t))throw new f(`Attempted to enumerate a set of the form [l1 : v1, ..., ln : vn],\nbut can't enumerate the value of the \`${e.names[n]}' field:\n${H(t)}`);return R(t).elements});return Lt(t).map(t=>jt(e.names.map((e,n)=>[e,t[n]])))}case`ProductSet`:{if(z(e))return[];let t=e.factors.map((e,t)=>{if(P(e))throw new f(`Attempted to enumerate a set of the form s1 \\X s2 ... \\X sn,\nbut can't enumerate s${t}:\n${H(e)}`);return R(e).elements});return Lt(t).map(I)}case`FilteredSet`:if(P(e.base))throw new f(`Attempted to enumerate { x \\in S : p(x) } when S:\n${H(e.base)}\nis not enumerable`);return R(e.base).elements.filter(e.test);case`Union`:{let t=Pt(e).flatMap((t,n)=>R(Ft(t,n,e)).elements);return R(gt(t)).elements}case`SetOperation`:{if(e.operator===`\\cup`&&(P(e.left)||P(e.right)))throw new f(`Attempted to enumerate S \\cup T when S:\n${H(e.left)}\nand T:\n${H(e.right)}\nare not both enumerable`);if(e.operator===`\\cap`&&P(e.left)&&P(e.right))throw new f(`Attempted to enumerate S \\cap T when neither S:\n${H(e.left)}\nnor T:\n${H(e.right)}\nis enumerable`);if(e.operator===`\\`&&P(e.left))throw new f(`Attempted to enumerate S \\ T when S:\n${H(e.left)}\nis not enumerable.`);if(e.operator===`\\cup`)return bt(R(e.left),R(e.right)).elements;let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return R(n).elements.filter(t=>B(t,r)===(e.operator===`\\cap`))}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to enumerate the non-enumerable set ${H(e)}`);default:throw new f(`Expected a set but found ${H(e)}`)}},Vt=/* @__PURE__ */ new WeakMap,R=e=>{if(typeof e==`object`&&e.kind===`Set`)return e;if(typeof e==`object`&&e.kind===`Interval`)return Re(Bt(e));let t=typeof e==`object`?Vt.get(e):void 0;if(t)return t;let n=Bt(e),r=typeof e==`object`&&(e.kind===`MixedSet`||e.kind===`Union`||e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`ProductSet`||e.kind===`FunctionSet`||e.kind===`Subset`)?Re(n):ht(n);return typeof e==`object`&&Vt.set(e,r),r},Ht=e=>{if(typeof e!=`object`||Vt.has(e))return R(e).elements;if(e.kind===`Union`)return Pt(e).flatMap((t,n)=>Ht(Ft(t,n,e)));if(e.kind===`FilteredSet`&&!P(e.base))return Ht(e.base).filter(e.test);if(e.kind!==`SetOperation`)return R(e).elements;if(e.operator===`\\cup`)return P(e.left)||P(e.right)?R(e).elements:[...Ht(e.left),...Ht(e.right)];let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return P(n)?R(e).elements:Ht(n).filter(t=>B(t,r)===(e.operator===`\\cap`))},z=e=>{if(typeof e!=`object`||!k(e))throw new f(`Shouldn't call isEmpty() on value ${H(e)}`);switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:if(e.name===`Any`)throw new f(`Shouldn't call isEmpty() on value ANY`);return!1;case`Subset`:case`SequenceSet`:return!1;case`ProductSet`:return e.factors.some(z);case`RecordSet`:return e.sets.some(z);case`FunctionSet`:return!z(e.domain)&&z(e.range);case`Union`:return Pt(e).every((t,n)=>z(Ft(t,n,e)));default:return R(e).elements.length===0}},Ut=(e,t)=>e.reduce((e,n)=>{let r=e*Gt(n);if(r>2147483647)throw new f(t());return r},1),Wt=e=>`Overflow when computing the number of elements in:\n${H(e)}`,Gt=e=>{if(typeof e!=`object`)return R(e).elements.length;switch(e.kind){case`Interval`:{let t=Math.max(0,e.high-e.low+1);if(t>2147483647)throw new f(`Size of interval value exceeds the maximum representable size (32bits): ${e.low}..${e.high}.`);return t}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to compute the number of elements in the overridden value ${H(e)}.`);case`Subset`:{let t=Gt(e.base);if(t>=31)throw new f(Wt(e));return 2**t}case`FunctionSet`:{if(z(e.domain))return 1;if(z(e.range))return 0;let t=Gt(e.range);if(t===1)return 1;let n=Gt(e.domain),r={value:1};for(let i=0;i<n;i++)if(r.value*=t,r.value>2147483647)throw new f(Wt(e));return r.value}case`RecordSet`:return z(e)?0:Ut(e.sets,()=>Wt(e));case`ProductSet`:return z(e)?0:Ut(e.factors,()=>`Overflow when computing the number of elements in ${H(e)}`);default:return R(e).elements.length}},Kt=e=>`Attempted to check if the set ${H(e)}is finite.`,qt=e=>{if(typeof e!=`object`||e.kind===`ModelValue`)throw new f(`Attempted to check if the ${he(e)} ${H(e)} is a finite set.`);switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:case`Function`:return!0;case`LazyFunction`:throw new f(`Attempted to check if the function:\n${H(e)}\nis a finite set.`);case`InfiniteSet`:return!1;case`SequenceSet`:return qt(e.base)&&z(e.base);case`Subset`:return qt(e.base);case`FunctionSet`:{let t=qt(e.domain);if(t&&z(e.domain))return!0;let n=qt(e.range);return n&&z(e.range)?!0:n&&(t||Gt(e.range)===1)}case`RecordSet`:case`ProductSet`:{let t=e.kind===`RecordSet`?e.sets:e.factors,n={isAllFinite:!0};for(let e of t)if(!qt(e))n.isAllFinite=!1;else if(z(e))return!0;return n.isAllFinite}case`Union`:if(!Mt(e.base))throw new f(`Attempted to check if the nonenumerable set:\n${Nt(e)}\nis a finite set.`);return R(e.base).elements.every(qt);case`SetOperation`:if(e.operator===`\\cup`)return qt(e.left)&&qt(e.right);if(e.operator===`\\cap`){if(!qt(e.left)&&!qt(e.right))throw new f(Kt(e));return!0}if(qt(e.left))return!0;if(!qt(e.right))throw new f(Kt(e));return!1;case`FilteredSet`:if(!qt(e.base))throw new f(`Attempted to check if expression of form {x \\in S : p(x)} is a finite set, but cannot check if S:\n${H(e.base)}\nis finite.`);return!0}},Jt=(e,t)=>{let n={low:0,high:e.length-1};for(;n.low<=n.high;){let r=n.low+n.high>>1,i=F(e[r],t);if(i===0)return r;i<0?n.low=r+1:n.high=r-1}return-1},Yt=e=>{if(typeof e!=`object`||!A(e))return;let t=V(e);return t.domain.every((e,t)=>e===t+1)?t.range:void 0},Xt=(e,t)=>`Attempted to check if the value ${H(e)} is an element of ${H(t)}`,Zt=(e,t)=>{let n=`Attempted to check if the value:\n${H(e)}\nis an element of the`;if(!A(t))return`${n} ${he(t)} ${H(t)}`;let r=t.kind===`Function`||L(t.domain)?V(t).domain:[];return r.length>0&&r.every(e=>typeof e==`string`)?`Attempted to check if element:\n${H(e)}\nis in the record:\n${H(t)}`:r.every((e,t)=>e===t+1)?`Attempted to check set membership in a tuple value.`:`${n} function ${H(t)}`},B=(e,t)=>{if(!k(t))throw new f(Zt(e,t));switch(t.kind){case`Set`:try{return Jt(t.elements,e)!==-1}catch(n){if(!(n instanceof f))throw n;return ft(e,t.elements)}case`MixedSet`:return ft(e,t.elements);case`Interval`:if(typeof e==`number`)return e>=t.low&&e<=t.high;if(t.low<=t.high&&!j(e))throw new f(`Attempted to check if the value:\n${H(e)}\nis in the integer interval ${H(t)}`);return!1;case`InfiniteSet`:if(t.name===`Any`)return!0;if(j(e))return!1;if(!(t.name===`STRING`?typeof e==`string`:typeof e==`number`))throw new f(`Attempted to check if the value:\n${H(e)}\nis an element of ${t.name}.`);return t.name!==`Nat`||typeof e==`number`&&e>=0;case`Subset`:if(!k(e))throw new f(Xt(e,t));return R(e).elements.every(e=>B(e,t.base));case`FunctionSet`:{if(!A(e)){if(j(e))return!1;throw new f(Xt(e,t))}let n=V(e),r=Ue(n.domain);return(r===void 0?pt(t.domain,Re(n.domain)):pt({kind:`Interval`,low:r,high:r+n.domain.length-1},t.domain))&&n.range.every(e=>B(e,t.range))}case`RecordSet`:{let n=A(e)?V(e):void 0;if(!n||!Se(n.domain)){if(j(e))return!1;throw new f(`Attempted to check if non-record\n${H(e)}\nis in the set of records:\n${H(t)}`)}return n.domain.length===t.names.length&&t.names.every((e,r)=>{let i=Jt(n.domain,e);return i!==-1&&B(n.range[i],t.sets[r])})}case`ProductSet`:{let n=A(e)?Yt(e):void 0;if(n===void 0){if(A(e)&&V(e).domain.every(e=>typeof e==`number`)||j(e))return!1;throw new f(`Attempted to check if non-tuple\n${H(e)}\nis in the set of tuples:\n${H(t)}`)}return n.length===t.factors.length&&n.every((e,n)=>B(e,t.factors[n]))}case`FilteredSet`:return B(e,t.base)&&t.test(e);case`Union`:if(!Mt(t.base))throw new f(`Attempted to check if:\n ${H(e)}\nis an element of the non-enumerable set:\n ${Nt(t)}`);return R(t.base).elements.some(t=>B(e,t));case`SetOperation`:return t.operator===`\\cup`?B(e,t.left)||B(e,t.right):B(e,t.left)&&B(e,t.right)===(t.operator===`\\cap`);case`SequenceSet`:{let n=Yt(e);if(n===void 0){if(j(e))return!1;throw new f(Xt(e,t))}return n.every(e=>B(e,t.base))}default:throw new f(Zt(e,t))}},Qt=(e,t,n)=>e===t?!0:typeof e!=`object`||typeof t!=`object`||typeof n!=`object`||e.kind!==`Function`||t.kind!==`Function`||n.kind!==`FunctionSet`||e.domain!==t.domain?B(e,n):e.range.every((e,r)=>Qt(e,t.range[r],n.range)),V=e=>{if(typeof e==`object`&&e.kind===`Function`)return e;if(typeof e==`object`&&e.kind===`LazyFunction`){L(e.domain)||Gt(e.domain);let t=kt(e.domain);return ze(t,t.map(t=>e.apply(t)))}throw new f(`Expected a function but found ${H(e)}`)},$t=/* @__PURE__ */ new WeakSet,en=e=>($t.add(e),e),tn=(e,t)=>typeof e==`object`&&$t.has(e)?`In applying the function\n${me(H(e))},\nthe first argument is:\n${me(H(t))}\nwhich is not in its domain.\n`:`Attempted to apply function ${H(e)} to ${H(t)}, which is not in its domain`,nn=(e,t)=>{let n=e[0];if(typeof t==`number`&&typeof n==`number`){let r=t-n;if(e[r]===t)return r}if(e.length<=8){for(let n=0;n<e.length;n++)if(e[n]===t)return n}return Jt(e,t)},rn=(e,t,n)=>{if(typeof e==`object`&&e.kind===`LazyFunction`){if(!B(t,e.domain))throw new f($t.has(e)?tn(e,t):`Attempted to apply a function to ${H(t)}, which is not in its domain`);return e.apply(t)}if(typeof e!=`object`||e.kind!==`Function`)throw new f(`Attempted to apply ${H(e)}, which is not a function`);let r=nn(e.domain,t);if(r===-1)throw new f(n?.(e)??tn(e,t));return e.range[r]},an=e=>Ot(e)?Tt.get(e)??At(e.length):void 0,on=e=>{if(typeof e==`object`&&e.kind===`LazyFunction`)return e.domain;let t=V(e).domain;return an(t)??Re(t)},sn=(e,t,n,r=!1)=>{if(typeof e==`object`&&e.kind===`LazyFunction`&&(r||!L(e.domain))){if(!B(t,e.domain))return e;let r=n(e.apply(t));return{kind:`LazyFunction`,domain:e.domain,apply:n=>pt(t,n)?r:e.apply(n),source:e.source}}let i=V(e),a=nn(i.domain,t);if(a===-1)return i;let o=[...i.range],s=i.range[a],c=n(s);o[a]=c;let l=ze(i.domain,o);if(l.writtenKeys=i.writtenKeys,i.hash!==0){let e=i.domain[a];l.hash=s===c?i.hash:i.hash-pn(e,s)+pn(e,c)|0}if(i.fingerprint!==0){let e=i.domain[a];l.fingerprint=s===c?i.fingerprint:i.fingerprint-bn(e,s)+bn(e,c)|0}return l},cn=/* @__PURE__ */ new WeakMap,ln=e=>{let t=Math.imul(e^e>>>16,2246822507),n=Math.imul(t^t>>>13,3266489909);return n^n>>>16},un=(e,t)=>Math.imul(e^t,16777619),dn=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return ln(t)},fn=e=>ln(hn(e)+2654435769|0),pn=(e,t)=>ln(Math.imul(hn(e),668265261)+hn(t)|0),mn=e=>{if(e.kind===`ModelValue`)return ln(un(dn(e.name),109));if(k(e)){if(!L(e))return dn(wn(e));let t=R(e).elements,n=1940243425;for(let e=0;e<t.length;e++)n=n+fn(t[e])|0;return n}let t=V(e),n=1725019383;for(let e=0;e<t.domain.length;e++)n=n+pn(t.domain[e],t.range[e])|0;return n},hn=e=>{if(typeof e==`number`)return ln(e^1540483477);if(typeof e==`boolean`)return e?729683222:682545830;if(typeof e==`string`)return dn(e);if(e.kind===`Set`||e.kind===`Function`)return e.hash===0&&(e.hash=mn(e)),e.hash;let t=cn.get(e);if(t!==void 0)return t;let n=mn(e);return cn.set(e,n),n},gn=/* @__PURE__ */ new WeakMap,_n=e=>{let t=Math.imul(e^e>>>15,739982445),n=Math.imul(t^t>>>12,695872825);return n^n>>>15},vn=e=>{let t=2538058380;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),1540483477);return _n(t)},yn=e=>_n(Sn(e)+2135587861|0),bn=(e,t)=>_n(Math.imul(Sn(e),374761393)+Sn(t)|0),xn=e=>{if(e.kind===`ModelValue`)return _n(vn(e.name)^60);if(k(e)){if(!L(e))return vn(wn(e));let t=R(e).elements,n=461845907;for(let e=0;e<t.length;e++)n=n+yn(t[e])|0;return n}let t=V(e),n=1291169091;for(let e=0;e<t.domain.length;e++)n=n+bn(t.domain[e],t.range[e])|0;return n},Sn=e=>{if(typeof e==`number`)return _n(e^1759714724);if(typeof e==`boolean`)return e?1000000007:521288629;if(typeof e==`string`)return vn(e);if(e.kind===`Set`||e.kind===`Function`)return e.fingerprint===0&&(e.fingerprint=xn(e)),e.fingerprint;let t=gn.get(e);if(t!==void 0)return t;let n=xn(e);return gn.set(e,n),n},Cn=/* @__PURE__ */ new WeakMap,wn=e=>{if(typeof e==`boolean`)return e?`T`:`F`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);let t=Cn.get(e);if(t!==void 0)return t;let n=Tn(e);return Cn.set(e,n),n},Tn=e=>{if(e.kind===`ModelValue`)return`@${e.name}`;if(e.kind===`InfiniteSet`)return`<${e.name}>`;if(e.kind===`SequenceSet`)return`<Seq ${wn(e.base)}>`;if(e.kind===`FilteredSet`&&!L(e))throw new f(`Attempted to compare the non-enumerable set ${H(e)} with another value`);if(k(e))return L(e)?`{${R(e).elements.map(wn).join(`,`)}}`:`<${e.kind} ${H(e)}>`;let t=V(e);return`(${t.domain.map((e,n)=>`${wn(e)}:${wn(t.range[n])}`).join(`,`)})`},En=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\n/g,`\\n`).replace(/\t/g,`\\t`)}"`,Dn=e=>e.reduce((e,t)=>e===0?0:e*Gt(t),1),On=e=>{if(e.kind===`Subset`)return Gt(e.base)<=6?R(e):void 0;if(e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`Union`)return R(e);if(e.kind===`FunctionSet`&&L(e.domain)&&Gt(e.domain)===0)return Re([ze([],[])]);let t=e.kind===`FunctionSet`?Gt(e.range)**Gt(e.domain):Dn(e.kind===`RecordSet`?e.sets:e.factors);return t===0?_t:t<=1999?R(e):void 0},kn=(e,t)=>{if(t)return On(e);if(L(e))try{return On(e)}catch(e){if(e instanceof f)return;throw e}},An=(e,t)=>{let n=e=>H(e,t);switch(e.kind){case`Subset`:return typeof e.base==`object`&&e.base.kind===`Interval`?`SUBSET (${n(e.base)})`:`SUBSET ${n(e.base)}`;case`FunctionSet`:return`[${n(e.domain)} -> ${n(e.range)}]`;case`RecordSet`:return`[${e.names.map((t,r)=>`${t}: ${n(e.sets[r])}`).join(`, `)}]`;case`ProductSet`:return`(${e.factors.map(n).join(` \\X `)})`;case`SetOperation`:return`${n(e.left)} ${e.operator} ${n(e.right)}`;case`FilteredSet`:return`{x \\in ${n(e.base)} : ...}`;case`Union`:return Nt(e,t)}},jn=e=>/^[\p{L}\p{Nd}_]*$/u.test(e)&&/\p{L}/u.test(e)&&(e.length<4||!/^[WS]F_/.test(e)),H=(e,t=!1,n=!1)=>{let r=e=>H(e,t,n);if(typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return En(e);switch(e.kind){case`ModelValue`:return e.name;case`Set`:return`{${e.elements.map(r).join(`, `)}}`;case`MixedSet`:return r(R(e));case`Interval`:return e.low<=e.high?`${e.low}..${e.high}`:`{}`;case`InfiniteSet`:return e.name===`Any`?`ANY`:e.name;case`Subset`:case`FunctionSet`:case`RecordSet`:case`ProductSet`:case`SetOperation`:case`FilteredSet`:case`Union`:{let n=kn(e,t);return n?r(n):An(e,t)}case`SequenceSet`:return`Seq(${r(e.base)})`;case`Function`:case`LazyFunction`:{if(e.kind===`LazyFunction`&&!L(e.domain)){let t=e.source;return t?`[${t.parameters.map(e=>`${e.name} \\in ${H(e.domain)}`).join(`, `)} |-> <expression ${t.body}>]`:`<function>`}let t=V(e);return t.domain.every((e,t)=>e===t+1)?`<<${t.range.map(r).join(`, `)}>>`:t.domain.every(e=>typeof e==`string`&&jn(e))?`[${(n||t.hash!==0||t.fingerprint!==0?t.domain.map((e,n)=>[e,t.range[n]]):ye(t)).map(e=>`${String(e[0])} |-> ${r(e[1])}`).join(`, `)}]`:`(${t.domain.map((e,n)=>`${r(e)} :> ${r(t.range[n])}`).join(` @@ `)})`}}},Mn=(e,t)=>{for(let n=0;n<e.length;n++)e[n]=t(e[n])},Nn=()=>{let e=/* @__PURE__ */ new Map,t=n=>{if(typeof n!=`object`||n.kind!==`Set`&&n.kind!==`Function`)return n;let r=hn(n),i=e.get(r);if(i!==void 0&&!Array.isArray(i)&&(i===n||He(i,n)))return i;if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(i[e]===n||He(i[e],n))return i[e]}return n.kind===`Set`?Mn(n.elements,t):(Mn(n.domain,t),Mn(n.range,t)),i===void 0?e.set(r,n):Array.isArray(i)?i.push(n):e.set(r,[i,n]),n};return e=>{for(let n=0;n<e.length;n++)e[n]=t(e[n]);return e}},Pn=/* @__PURE__ */ new Set(/* @__PURE__ */ `=,#,~,<=>,/\\,\\/,=>,\\in,\\notin,\\subseteq,\\cup,\\cap,\\,SUBSET,UNION,DOMAIN,+,-,*,^,\\div,%,..,Seq,IsFiniteSet,RandomElement`.split(`,`)),Fn=(e,t)=>Pn.has(e)?new f(t):new p(t),In=e=>typeof e==`object`&&e.kind===`Operator`,U=(e,t,n)=>{let r=e[t];if(r===void 0||In(r))throw Fn(n,`${n} expects a value as argument ${t+1}`);return r},Ln=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`number`)throw Fn(n,`${n} expects an integer but received ${H(r)}`);return r},Rn=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`boolean`)throw Fn(n,`${n} expects a boolean but received ${H(r)}`);return r},zn=(e,t,n)=>{let r=U(e,t,n);if(!k(r))throw Fn(n,`${n} expects a set but received ${H(r)}`);return r},Bn=(e,t,n)=>{let r=zn(e,t,n);if(!L(r))throw Fn(n,`${n} cannot enumerate the non-enumerable set ${H(r)}`);return r},Vn=(e,t,n)=>R(Bn(e,t,n)),Hn=(e,t,n)=>Vn(e,t,n).elements,Un=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw Fn(n,`${n} expects a sequence but received ${H(r)}`);return i},Wn=(e,t,n)=>{let r=U(e,t,n);if(!A(r))throw Fn(n,`${n} expects a function but received ${H(r)}`);return V(r)},Gn=(e,t,n)=>{let r=e[t];if(r===void 0||!In(r))throw Fn(n,`${n} expects an operator as argument ${t+1}`);return r},Kn=(e,t)=>({kind:`Builtin`,name:e,arity:0,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0}),W=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:t===1?e=>n([e]):void 0,evaluateBinary:t===2?(e,t)=>n([e,t]):void 0}),qn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0}),Jn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0,isStateLevel:!0}),Yn=(e,t)=>({kind:`Builtin`,name:e,arity:2,evaluate:n=>t(U(n,0,e),U(n,1,e)),evaluateUnary:void 0,evaluateBinary:t}),Xn=e=>e>2147483647||e<-2147483648,Zn=e=>new p(`Overflow when computing ${e}`),Qn={ModelValue:`ModelValue`,Set:`SetEnumValue`,Interval:`IntervalValue`,InfiniteSet:`UserValue`,SequenceSet:`UserValue`,Subset:`SubsetValue`,FunctionSet:`SetOfFcnsValue`,RecordSet:`SetOfRcdsValue`,ProductSet:`SetOfTuplesValue`,FilteredSet:`SetPredValue`,LazyFunction:`FcnLambdaValue`,Union:`UnionValue`,MixedSet:`SetEnumValue`},$n={"\\cup":`SetCupValue`,"\\cap":`SetCapValue`,"\\":`SetDiffValue`},er={BoolValue:`a Boolean value`,IntValue:`an integer`,StringValue:`a string`,RecordValue:`a record`,SetEnumValue:`a set of the form {e1, ... ,eN}`,SetPredValue:`a set of the form {x \\in S : expr}`,TupleValue:`a tuple`,FcnLambdaValue:`a function of the form [x \\in S |-> expr]`,FcnRcdValue:`a function of the form (d1 :> e1 @@ ... @@ dN :> eN)`,SetOfFcnsValue:`a set of the form [S -> T]`,SetOfRcdsValue:`a set of the form [d1 : S1, ... , dN : SN]`,SetOfTuplesValue:`a cartesian product`,SubsetValue:`a set of the form SUBSET S`,SetDiffValue:`a set of the form S \\ T`,SetCapValue:`a set of the form S \\cap T`,SetCupValue:`a set of the form S \\cup T`,ModelValue:`a model value`,UserValue:`a special set constant`,IntervalValue:`a set of the form i..j`,UnionValue:`a set of the form UNION S`},tr=e=>{if(typeof e==`number`)return`IntValue`;if(typeof e==`string`)return`StringValue`;if(typeof e==`boolean`)return`BoolValue`;if(e.kind===`SetOperation`)return $n[e.operator];if(e.kind!==`Function`)return Qn[e.kind];let t=e.domain;return t.every((e,t)=>e===t+1)?`TupleValue`:t.every(e=>typeof e==`string`)?`RecordValue`:`FcnRcdValue`},nr=e=>er[tr(e)],rr=(e,t)=>new f(`Attempted to apply the operator overridden by the Java method\n${e},\nbut it produced the following error:\n${t}`),ir=(e,t)=>{let n=n=>(...r)=>{try{return n(...r)}catch(n){throw n instanceof f&&(e.isLazy===!0||!(n instanceof p))?rr(t,n.message):n}};return{...e,evaluate:n(e.evaluate),evaluateUnary:e.evaluateUnary&&n(e.evaluateUnary),evaluateBinary:e.evaluateBinary&&n(e.evaluateBinary)}},ar=(e,t)=>{if(typeof e!=`number`)throw rr(t,`Cannot cast tlc2.value.impl.${tr(e)} to tlc2.value.impl.IntValue`);return e},or=(e,t,n)=>`public static tlc2.value.impl.${t} tlc2.module.Integers.${e}(${Array.from({length:n},()=>`tlc2.value.impl.IntValue`).join(`,`)})`,sr=(e,t,n)=>{let r=or(t,`IntValue`,2);return Yn(e,(t,i)=>{let a=ar(t,r),o=ar(i,r),s=n(a,o);if(Xn(s))throw Zn(`${a}${e}${o}`);return s})},cr=(e,t,n)=>{if(typeof e!=`number`)throw new p(`The ${t} argument of ${n} should be an integer, but instead it is:\n${H(e)}`);return e},lr=(e,t)=>Yn(e,(n,r)=>t(cr(n,`first`,e),cr(r,`second`,e))),ur=(e,t,n)=>({...Jn(e,t,n),isLazy:!0}),dr=(e,t,n)=>{let r=Gn(e,t,n);return()=>r.call([])},fr=/* @__PURE__ */ new Set([`Apply`,`And`,`Or`,`If`,`FunctionApplication`,`FieldAccess`,`Record`,`Tuple`,`SetEnumeration`,`Prime`,`Unchanged`,`Forall`,`Exists`]),pr=()=>({bool:qa,condition:(e,t)=>{if(typeof e!=`boolean`)throw Ia(t,e);return e},conjunct:(e,t,n)=>{if(typeof e!=`boolean`)throw La(t,n,e);return e},apply:rn,tuple:I,set:gt,record:ze,writtenRecord:be,equal:Be,enumerate:$a,unassigned:(e,t)=>{throw new f(`The variable ${e} is not assigned at ${q(t)}`)},primeOutsideAction:e=>{throw new f(`A primed expression appears outside an action at ${q(e)}`)},prime:e=>({environment:e.environment,scope:e.scope,state:e.next,next:void 0}),extend:(e,t,n)=>({environment:e.environment,scope:t.reduce((e,t,r)=>Wa(e,t,n[r]),e.scope),state:e.state,next:e.next})}),mr={value:void 0},hr=(e,t)=>(e.references.push(t),`reference${e.references.length-1}`),gr=e=>`local${e.counter++}`,_r=(e,t=/* @__PURE__ */ new Set)=>(e.kind===`Identifier`&&t.add(e.name),e.kind===`Apply`&&t.add(e.operator),Ja(e).forEach(e=>_r(e,t)),t),vr=(e,t,n)=>{let r=hr(e,Y(t,e.environment)),i=_r(t),a=[...n.locals].filter(([e])=>i.has(e));if(a.length===0)return`${r}(${n.context})`;let o=hr(e,a.map(([e])=>e));return`${r}(extend(${n.context}, ${o}, [${a.map(([,e])=>e).join(`, `)}]))`},yr=(e,t,n)=>{let r=t.kind===`Forall`,i=JSON.stringify(r?`the body of \\A`:`the body of \\E`),a=`quantifier${e.counter++}`,o=[...n.locals.values()],s={context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:new Map(n.locals)},c=t.bounds.map(()=>gr(e)),l=t.bounds.map((t,n)=>`const ${c[n]} = enumerate(${xr(e,t.set,s)}, ${hr(e,t.set)});`),u=t.bounds.map(t=>{let n=gr(e);return t.pattern.kind===`Name`&&s.locals.set(t.pattern.name,n),n}),d=`if (bool(${xr(e,t.body,s)}, ${i}) !== ${r}) return ${!r};`,f=u.reduce((t,n,r)=>{let i=gr(e);return`for (let ${i} = 0; ${i} < ${c[r]}.length; ${i}++) { const ${n} = ${c[r]}[${i}]; ${t} }`},d),p=o.map(e=>`, ${e}`).join(``);return e.helpers.push(`function ${a}(context, state, next${p}) { let primed; ${l.join(` `)} ${f} return ${r}; }`),`${a}(${n.context}, ${n.state}, ${n.isPrimed?`undefined`:n.next}${p})`},br=(e,t,n)=>{let r=t.args;if(t.operator===`=>`)return`(bool(${xr(e,r[0],n)}, "the left side of =>") ? bool(${xr(e,r[1],n)}, "the right side of =>") : true)`;if(J(t))return vr(e,t,n);let i=mo(t.operator,e.environment);if(i?.kind!==`Builtin`)return vr(e,t,n);if(i.name===`DOMAIN`)return`${hr(e,za(t))}(${xr(e,r[0],n)})`;if(i.name===`TLCEval`)return vr(e,t,n);if(i.name===`\\subseteq`&&r.length===2)return`${hr(e,Ba(t,i))}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`;let a=e.environment;if(i.evaluateUnary&&r.length===1&&rs(r[0],a))return`${hr(e,i.evaluateUnary)}(${xr(e,r[0],n)})`;let o=r.length===2&&rs(r[0],a)&&rs(r[1],a);return i.evaluateBinary&&o?`${hr(e,i.evaluateBinary)}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`:vr(e,t,n)},xr=(e,t,n)=>{let r=(t,r=n)=>xr(e,t,r);if(qo(t)&&Ho(t,e.environment))return vr(e,t,n);switch(t.kind){case`Number`:return Mo(t.value)?String(t.value):vr(e,t,n);case`String`:return JSON.stringify(t.value);case`Identifier`:{let r=n.locals.get(t.name);if(r)return r;if(J(t))return vr(e,t,n);let i=wo(t.name,e.environment);if(i?.kind===`Variable`){let r=JSON.stringify(t.name),a=hr(e,t);return`(${n.state}?.[${i.index}] ?? unassigned(${r}, ${a}))`}return i?.kind===`Value`?hr(e,i.value):vr(e,t,n)}case`Apply`:return br(e,t,n);case`And`:{let n=hr(e,t);return`(${t.operands.map((e,t)=>`conjunct(${r(e)}, ${n}, ${t})`).join(` && `)})`}case`Or`:return`(${t.operands.map(e=>`bool(${r(e)}, "a disjunct")`).join(` || `)})`;case`If`:return`(condition(${r(t.condition)}, ${hr(e,t)}) ? ${r(t.consequent)} : ${r(t.alternative)})`;case`FunctionApplication`:{_s(t.function);let e=r(t.function);return t.args.length===1?`apply(${e}, ${r(t.args[0])})`:`apply(${e}, tuple([${t.args.map(e=>r(e)).join(`, `)}]))`}case`FieldAccess`:return`apply(${r(t.record)}, ${JSON.stringify(t.field)}, ${hr(e,Ra(t))})`;case`Record`:{let i=[...t.fields].sort((e,t)=>F(e.name,t.name));if(i.some((e,t)=>t>0&&i[t-1].name===e.name))return vr(e,t,n);let a=hr(e,i.map(e=>e.name)),o=`[${i.map(e=>r(e.value)).join(`, `)}]`,s=t.fields.map(e=>e.name);return s.every((e,t)=>e===i[t].name)?`record(${a}, ${o})`:`writtenRecord(${a}, ${o}, ${hr(e,s)})`}case`Tuple`:return`tuple([${t.elements.map(e=>r(e)).join(`, `)}])`;case`SetEnumeration`:return`set([${t.elements.map(e=>r(e)).join(`, `)}])`;case`Prime`:{let i=hr(e,t);if(n.isPrimed)return`primeOutsideAction(${i})`;let a={context:`(primed ??= prime(${n.context}))`,state:n.next,next:`undefined`,isPrimed:!0,locals:n.locals};return`(${n.next} === undefined ? primeOutsideAction(${i}) : ${r(t.expression,a)})`}case`Unchanged`:return`equal(${r({kind:`Prime`,expression:t.expression,location:t.location})}, ${r(t.expression)})`;case`Forall`:case`Exists`:return t.bounds.every(e=>e.pattern.kind===`Name`)?yr(e,t,n):vr(e,t,n);default:return vr(e,t,n)}},Sr=(e,t)=>{if(!fr.has(e.kind))return;let n={environment:t,references:[],helpers:[],counter:0},r=xr(n,e,{context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:/* @__PURE__ */ new Map}),i=n.references.map((e,t)=>`reference${t}`),a=`${n.helpers.join(`
|
|
18
|
+
`).length-1,n.index+=e+2;continue}let a=/^\d+(?![A-Za-z_])/.exec(r)?.[0];if(a){t.push({kind:`Number`,text:a,line:n.line}),n.index+=a.length;continue}let o=/^[A-Za-z0-9_!]+/.exec(r)?.[0];if(o){t.push({kind:`Word`,text:o,line:n.line}),n.index+=o.length;continue}let s=/^"((?:[^"\\]|\\.)*)"/.exec(r);if(s){t.push({kind:`String`,text:s[1],line:n.line}),n.index+=s[0].length;continue}let c=D.find(e=>r.startsWith(e));if(c){t.push({kind:`Symbol`,text:c,line:n.line}),n.index+=c.length;continue}let l=ae(e,n.index);if(!l)throw new d(`Unexpected character ${JSON.stringify(r[0])} at line ${n.line}`);t.push({kind:`Word`,text:l.text,line:n.line}),n.index+=l.length}return t.push({kind:`End`,text:``,line:n.line}),t},O=e=>{let t=ce(e),n={index:0},r={init:void 0,next:void 0,specification:void 0,invariants:[],properties:[],constraints:[],actionConstraints:[],constants:[],substitutions:[],checkDeadlock:!0,symmetry:void 0,view:void 0,alias:void 0,postconditions:[],possible:[],periodic:void 0,rlReward:void 0},i={isSet:!1},a=()=>t[n.index],o=()=>t[n.index++],s=e=>e.kind===`Word`&&E.has(e.text),c=e=>{let t=o();if(t.text!==e)throw new d(`Expected ${JSON.stringify(e)} but found ${JSON.stringify(t.text)} at line ${t.line}`)},l=()=>{let e=o();if(e.kind!==`Word`||s(e))throw new d(`Expected a name but found ${JSON.stringify(e.text)} at line ${e.line}`);return e.text},u=()=>a().kind===`Word`&&!s(a()),f=()=>{let e=[];for(;u();)e.push(o().text);return e},p=(e,t)=>{if(r[e]!==void 0)throw new d(`The keyword ${t} appears twice`);r[e]=l()},m=()=>{let e=o();if(e.kind===`Number`)return{kind:`Number`,value:Number(e.text)};if(e.kind===`String`)return{kind:`String`,value:e.text};if(e.text===`TRUE`||e.text===`FALSE`)return{kind:`Boolean`,value:e.text===`TRUE`};if(e.text===`{`){let e=[];for(a().text!==`}`&&e.push(m());a().text===`,`;)o(),e.push(m());return c(`}`),{kind:`Set`,elements:e}}if(e.kind===`Word`&&!s(e))return{kind:`ModelValue`,name:e.text};throw new d(`Expected a value but found ${JSON.stringify(e.text)} at line ${e.line}`)},h=()=>{if(a().text!==`[`)return;o();let e=l();return c(`]`),e},g=()=>{for(;u();){let e=o().text;if(a().text===`(`){o();let t=[];for(;a().text!==`)`;)t.push(m()),a().text!==`)`&&c(`,`);o(),c(`=`);let n=h();r.constants.push({name:e,value:m(),args:t,...n&&{module:n}});continue}if(a().text===`<-`){o();let t=h();r.substitutions.push({name:e,target:l(),...t&&{module:t}});continue}c(`=`);let t=h();r.constants.push({name:e,value:m(),...t&&{module:t}})}};for(;a().kind!==`End`;){let e=o();switch(e.text){case`CONSTANT`:case`CONSTANTS`:g();break;case`INIT`:p(`init`,e.text);break;case`NEXT`:p(`next`,e.text);break;case`SPECIFICATION`:p(`specification`,e.text);break;case`SYMMETRY`:p(`symmetry`,e.text);break;case`VIEW`:p(`view`,e.text);break;case`INVARIANT`:case`INVARIANTS`:r.invariants.push(...f());break;case`PROPERTY`:case`PROPERTIES`:r.properties.push(...f());break;case`CONSTRAINT`:case`CONSTRAINTS`:r.constraints.push(...f());break;case`ACTION_CONSTRAINT`:case`ACTION_CONSTRAINTS`:r.actionConstraints.push(...f());break;case`ALIAS`:p(`alias`,e.text);break;case`POSTCONDITION`:case`POSTCONDITIONS`:r.postconditions.push(...f());break;case`_POSSIBLE`:r.possible.push(...f());break;case`_PERIODIC`:p(`periodic`,e.text);break;case`_RL_REWARD`:p(`rlReward`,e.text);break;case`CHECK_DEADLOCK`:{if(i.isSet)throw new d(`The keyword CHECK_DEADLOCK appears twice`);i.isSet=!0;let e=o().text;if(e!==`TRUE`&&e!==`FALSE`)throw new d(`CHECK_DEADLOCK expects TRUE or FALSE but found ${JSON.stringify(e)}`);r.checkDeadlock=e===`TRUE`;break}default:throw new d(`Unexpected ${JSON.stringify(e.text)} at line ${e.line}`)}}if(r.specification!==void 0&&(r.init!==void 0||r.next!==void 0))throw new d(`SPECIFICATION cannot be combined with INIT or NEXT`);return r},le={Set:{open:`{ `,close:` }`,pad:` `,separator:`,`,divider:``,dividerPad:``},Sequence:{open:`<< `,close:` >>`,pad:` `,separator:`,`,divider:``,dividerPad:``},Subset:{open:`SUBSET `,close:` `,pad:` `,separator:`,`,divider:``,dividerPad:``},Function:{open:`( `,close:` )`,pad:` `,separator:` @@`,divider:` :>`,dividerPad:` `},Record:{open:`[ `,close:` ]`,pad:` `,separator:`,`,divider:` |->`,dividerPad:` `}},ue=e=>{if(e===void 0)return!1;let t=e.charCodeAt(0);return t>=9&&t<=13||t>=28&&t<=32||t===5760||t>=8192&&t<=8202&&t!==8199||t===8232||t===8233||t===8287||t===12288},de=e=>e!==void 0&&/^\p{Nd}$/u.test(e),fe=e=>e!==void 0&&/^[\p{L}\p{Nd}]$/u.test(e),pe=e=>{let t=t=>{let n=C(e,t,ue);return e[n]===void 0?void 0:n},n=(n,r,i,a,o,s)=>{let c={kind:n,first:r,last:r,children:[]},l={index:t(i)};for(;l.index!==void 0&&e[l.index]!==a;){let n=o(l.index);if(!n)return;c.children.push(n);let r=t(n.last+1);if(r===void 0)return;let i=e.startsWith(s,r)?r+s.length:r;l.index=t(i)}if(l.index!==void 0)return c.last=l.index,c},r=(n,r)=>{let i=o(n);if(!i)return;let a=t(i.last+1);if(a===void 0||!e.startsWith(r,a))return;let s=t(a+r.length),c=s===void 0?void 0:o(s);if(c)return{kind:`Pair`,first:n,last:c.last,children:[i,c]}},i=t=>{let n=C(e,t,de);if(e.startsWith(`..`,n)&&de(e[n+2]))return{kind:`Constant`,first:t,last:C(e,n+2,de)-1,children:[]}},a=t=>{let n=e[t];if(n===`"`){let n=e.indexOf(`"`,t+1);return n===-1?void 0:{kind:`Constant`,first:t,last:n,children:[]}}let r=de(n)?i(t):void 0;if(r)return r;if(n===`-`)return t+1>=e.length?void 0:{kind:`Constant`,first:t,last:C(e,t+1,de)-1,children:[]};if(fe(n))return{kind:`Constant`,first:t,last:C(e,t,fe)-1,children:[]}},o=i=>{let s=t(i);if(s!==void 0)switch(e[s]){case`{`:return n(`Set`,s,s+1,`}`,o,`,`);case`<`:{let t=n(`Sequence`,s,s+2,`>`,o,`,`);return!t||t.last+1>=e.length?void 0:{...t,last:t.last+1}}case`[`:return n(`Record`,s,s+1,`]`,e=>r(e,`|->`),`,`);case`(`:return n(`Function`,s,s+1,`)`,e=>r(e,`:>`),`@@`);default:{if(!e.startsWith(`SUBSET`,s))return a(s);let n=t(s+6),r=n===void 0?void 0:o(n);return r?{kind:`Subset`,first:s,last:r.last,children:[r]}:void 0}}};return o(0)},me=e=>{let t=e.length===0?void 0:pe(e);if(!t||t.last<e.length-1)return e;let n=t=>e.slice(t.first,t.last+1),r=e=>e.last-e.first+1,i=(e,t,i,s)=>{if(r(e)<=t-i||e.kind===`Constant`)return n(e);if(e.kind===`Pair`)return;let c=le[e.kind],l=t-Math.max(c.open.length,c.pad.length),u=i+c.close.length,d=s+c.pad,f=e.kind===`Function`||e.kind===`Record`?o(e.children,l,u,d,c):a(e.children,l,u,d,c.separator);return f===void 0?void 0:c.open+f+c.close},a=(e,t,n,r,a)=>{let o=e.map((o,s)=>{let c=s===e.length-1,l=i(o,t,c?n:a.length,r);return l===void 0||c?l:`${l}${a}\n${r}`});return o.includes(void 0)?void 0:o.join(``)},o=(e,t,a,o,s)=>{let c=e.map((c,l)=>{let u=l===e.length-1,d=c.children[0],f=c.children[1],p=u?``:`${s.separator}\n${o}`,m=r(d)+s.divider.length+1+r(f);if(u?m<=t-a:m+s.separator.length<=t)return`${n(d)}${s.divider} ${n(f)}${p}`;let h=r(d)+s.divider.length<=t?n(d):i(d,t,a+s.divider.length,o),g=i(f,t-s.dividerPad.length,u?a:s.separator.length,o+s.dividerPad);return h===void 0||g===void 0?void 0:`${h}${s.divider}\n${o}${s.dividerPad}${g}${p}`});return c.includes(void 0)?void 0:c.join(``)};return i(t,80,0,``)??e},k=e=>typeof e==`object`&&e.kind!==`ModelValue`&&e.kind!==`Function`&&e.kind!==`LazyFunction`,A=e=>typeof e==`object`&&(e.kind===`Function`||e.kind===`LazyFunction`),j=e=>typeof e==`object`&&e.kind===`ModelValue`,he=e=>typeof e==`boolean`?`boolean`:typeof e==`number`?`integer`:typeof e==`string`?`string`:e.kind===`ModelValue`?`model value`:k(e)?`set`:`function`,ge=e=>{if(!Number.isInteger(e)||e>2147483647||e<-2147483648)throw new p(`Integer overflow: ${e} is outside TLC's 32-bit range`);return e},_e={isUsed:!1},ve=(e,t)=>(_e.isUsed=!0,e.writtenKeys=t,e),ye=e=>(e.writtenKeys??e.domain).map(t=>[t,e.range[Jt(e.domain,t)]]),be=(e,t,n)=>ve(ze(e,t),n),xe=e=>{if(!(typeof e!=`object`||e.kind!==`Function`&&e.kind!==`Set`)&&e.hash===0&&e.fingerprint===0){if(e.kind===`Set`)return e.elements.forEach(xe);e.writtenKeys=void 0,e.range.forEach(xe)}},Se=e=>e.every(e=>typeof e==`string`),Ce=(e,t)=>e.length>0&&t.length>0&&Se(e)!==Se(t),we=(e,t)=>{_e.isUsed&&(e.writtenKeys=void 0,t.writtenKeys=void 0);let n=e.domain,r=t.domain;if(n.length!==r.length)return Ce(n,r)?at(e,t):n.length-r.length;if(n!==r)for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}let i=e.range,a=t.range;if(i===a)return 0;for(let e=0;e<i.length;e++){let t=F(i[e],a[e]);if(t!==0)return t}return 0},M=(e,t)=>{let n=e.elements,r=t.elements;if(n.length!==r.length)return n.length-r.length;if(n===r)return 0;for(let e=0;e<n.length;e++){let t=F(n[e],r[e]);if(t!==0)return t}return 0},Te=e=>j(e)?e.type:void 0,N=(e,t,n)=>{let r=Te(e),i=Te(t);if(r===void 0&&i===void 0)return;let a=n?`check equality of`:`compare`;if(j(e)&&j(t)){if(r===void 0||i===void 0||r===i)return;throw new f(`Attempted to ${a} the differently-typed model values ${H(e)} and ${H(t)}`)}throw r===void 0?new f(`Attempted to ${a} the typed model value ${H(t)} and the non-model value\n${H(e)}`):new f(`Attempted to ${a}${n?``:` the`} typed model value ${H(e)} and non-model value\n${H(t)}`)},Ee={ranks:Object.create(null),size:0},De=e=>{Ee.ranks=Object.create(null),Ee.size=0,Ie.clear();for(let t of e)Oe(t)},Oe=e=>(Ee.ranks[e]===void 0&&(Ee.ranks[e]=Ee.size++),e),ke=()=>Ee.size,Ae=e=>Ee.ranks[Oe(e)],je=(e,t)=>{if(e===t)return 0;let n=Ee.ranks,r=n[e],i=n[t];return r!==void 0&&i!==void 0?r-i:r===void 0?i===void 0&&e<t?-1:1:-1},P=e=>typeof e==`object`&&(e.kind===`InfiniteSet`||e.kind===`SequenceSet`),Me=(e,t)=>(P(e)||P(t))&&(typeof e!=`object`||e.kind!==`SequenceSet`||typeof t!=`object`||t.kind!==`SequenceSet`),Ne=(e,t,n)=>{if(!P(e))throw new f(`Attempted to ${n} the set ${H(L(e)?R(e):e,!0)} with the value:\n${H(t,!0)}`);if(!P(t))throw new f(`Attempted to compare overridden value ${H(e,!0)} with non-overridden value:\n${H(t,!0)}`);let r=e.kind===`InfiniteSet`?e.name:void 0,i=t.kind===`InfiniteSet`?t.name:void 0;if(r!==void 0&&r===i)return 0;if(r===`Nat`&&i===`Int`||r===`Int`&&i===`Nat`)return r===`Nat`?-1:1;throw new f(`Attempted to compare ${H(e,!0)} with the value\n${H(t,!0)}`)},Pe={kind:`InfiniteSet`,name:`Any`},Fe=e=>{throw new f(`Attempted to compare ANY with the value\n${H(e)}`)},F=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e===Pe?Fe(e):0;if(typeof e==`object`&&typeof t==`object`){let n=e.kind,r=t.kind;if(n===`Function`&&r===`Function`)return we(e,t);if(n===`Set`&&r===`Set`)return M(e,t);if(n===`Interval`&&r===`Interval`){let n=Math.max(0,e.high-e.low+1),r=Math.max(0,t.high-t.low+1);return n!==r||n===0?n-r:e.low-t.low}if(n===`ModelValue`&&r===`ModelValue`)return e.type!==void 0&&t.type!==void 0&&N(e,t,!1),e.rank-t.rank;if(n===`ModelValue`||r===`ModelValue`)return N(e,t,!1),n===`ModelValue`?-1:1;if(e===Pe||t===Pe)return Fe(e===Pe?t:e);if(k(e)&&k(t)&&Me(e,t))return Ne(e,t,`compare`);let i=k(e);if(i!==k(t))throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`);return i?M(R(e),R(t)):we(V(e),V(t))}if(typeof e==`number`&&typeof t==`number`)return e-t;if(typeof e==`string`&&typeof t==`string`)return je(e,t);if(typeof e==`boolean`&&typeof t==`boolean`)return e<t?-1:1;if(N(e,t,!1),j(e))return-1;if(j(t))return 1;throw new f(`Attempted to compare ${he(e)} ${H(e)} with ${he(t)} ${H(t)}`)},Ie=/* @__PURE__ */ new Map,Le=e=>{let t=Ie.get(e);if(t)return t;let n={kind:`ModelValue`,name:e,type:e.length>2&&e[1]===`_`?e[0]:void 0,rank:Ae(e)};return Ie.set(e,n),n},Re=e=>({kind:`Set`,elements:e,hash:0,fingerprint:0}),ze=(e,t)=>({kind:`Function`,domain:e,range:t,hash:0,fingerprint:0,writtenKeys:void 0}),Be=(e,t)=>{if(e===t)return _e.isUsed&&xe(e),e!==Pe||Fe(e);if(typeof e!=`object`||typeof t!=`object`)return typeof e!=typeof t&&((typeof e==`object`||typeof t==`object`)&&N(e,t,!0),F(e,t)===0);if((e.kind===`Set`||e.kind===`Function`)&&(t.kind===`Set`||t.kind===`Function`)&&e.hash!==0&&t.hash!==0&&e.hash!==t.hash)return!1;if(e.kind===`Function`&&t.kind===`Function`)return we(e,t)===0;if(e.kind===`Set`&&t.kind===`Set`)return M(e,t)===0;if(j(e)||j(t))return N(e,t,!0),j(e)&&j(t)&&e.name===t.name;if(e.kind===`Subset`&&t.kind===`Subset`)return Be(e.base,t.base);if(e.kind===`FunctionSet`&&t.kind===`FunctionSet`){let n=z(e.domain),r=z(t.domain);if(n||r)return n===r;let i=z(e.range),a=z(t.range);return i||a?i===a:Be(e.domain,t.domain)&&Be(e.range,t.range)}if(e.kind===`RecordSet`&&t.kind===`RecordSet`){if(z(e))return z(t);if(z(t))return!1;let n=e=>e.names.map((t,n)=>[t,e.sets[n]]).sort((e,t)=>e[0]<t[0]?-1:1),r=n(t);return e.names.length===t.names.length&&n(e).every((e,t)=>e[0]===r[t][0]&&Be(e[1],r[t][1]))}if(e.kind===`ProductSet`&&t.kind===`ProductSet`)return z(e)?z(t):!z(t)&&e.factors.length===t.factors.length&&e.factors.every((e,n)=>Be(e,t.factors[n]));let n=k(e)&&k(t)&&!(L(e)&&L(t));if(n&&Me(e,t))return Ne(e,t,`check equality of`)===0;if(n){if(!P(e)){let n=R(e);if(!P(t))return M(n,R(t))===0}return wn(e)===wn(t)}return F(e,t)===0},Ve=(e,t)=>e===t||e.length===t.length&&e.every((e,n)=>He(e,t[n])),He=(e,t)=>e===t?!0:typeof e!=`object`||typeof t!=`object`?!1:e.kind===`Set`&&t.kind===`Set`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.elements,t.elements):e.kind===`Function`&&t.kind===`Function`?(e.hash===0||t.hash===0||e.hash===t.hash)&&Ve(e.domain,t.domain)&&Ve(e.range,t.range):wn(e)===wn(t),Ue=e=>{let t=e.length===0?1:e[0];return typeof t==`number`&&e.every((e,n)=>e===t+n)?t:void 0},We=e=>{if(!A(e))return;let t=V(e);return{domain:t.domain,range:t.range,low:Ue(t.domain)}},Ge=e=>{if(!A(e))return;let t=V(e);return t.domain.every(e=>typeof e==`string`)?t:void 0},Ke=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to compare the typed model value ${H(e)} and the non-model value\n${H(t)}`);return 1},qe=(e,t)=>{if(Te(e)!==void 0)throw new f(`Attempted to check equality of the typed model value ${H(e)} and the non-model value\n${H(t)}`);return!1},Je=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)?e.rank-t.rank:-1;if(!j(t))throw new f(`Attempted to compare the typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to compare the differently-typed model values ${H(e)} and ${H(t)}`);return e.rank-t.rank},Ye=(e,t)=>{let n=Te(e);if(n===void 0)return j(t)&&e.name===t.name;if(!j(t))throw new f(`Attempted to check equality of typed model value ${H(e)} and non-model value\n${H(t)}`);let r=Te(t);if(r!==void 0&&r!==n)throw new f(`Attempted to check equality of the differently-typed model values ${H(e)} and ${H(t)}`);return e.name===t.name},Xe={number:{name:`integer`,other:`non-integer`,equality:`check equality of`},string:{name:`string`,other:`non-string`,equality:`check equality of`},boolean:{name:`boolean`,other:`non-boolean`,equality:`compare equality of`}},Ze=(e,t,n)=>{let r=Xe[typeof e==`number`?`number`:typeof e==`string`?`string`:`boolean`];return`Attempted to ${n?r.equality:`compare`} ${r.name} ${H(e)} with ${r.other}:\n${H(t)}`},Qe=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return Ke(n,t);throw new f(`Attempted to compare the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return e.range.length-r.range.length;let i=()=>$e(e.range,r.range);if(e.low!==void 0&&e.range.length===0)return 0;if(e.low!==void 0&&r.low!==void 0)return e.low===r.low?i():e.low-r.low;let a=e.low??r.low;if(a===void 0)return $e(e.domain,r.domain)||i();let o=e.low===void 0?e.domain:r.domain;for(let t=0;t<o.length;t++){let n=o[t];if(typeof n!=`number`)throw new f(`Attempted to compare integer with non-integer${e.low===void 0?``:`:`}\n${H(n)}.`);let r=e.low===void 0?n-(a+t):a+t-n;if(r!==0)return r}return i()},$e=(e,t)=>{for(let n=0;n<e.length;n++){let r=at(e[n],t[n]);if(r!==0)return r}return 0},et=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length-r.length||$e(n.range,r):Qe({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return Ke(t,e);throw new f(`Attempted to compare record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length-r.domain.length||$e(n.domain,r.domain)||$e(n.range,r.range)}return Qe({...n,low:Ue(n.domain)},e,t)},tt=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`),nt=(e,t)=>P(e)||P(t)||typeof t==`object`&&e.kind===t.kind&&(e.kind===`Interval`||e.kind===`Subset`||e.kind===`FunctionSet`||e.kind===`RecordSet`||e.kind===`ProductSet`),rt=(e,t)=>{let n=tt(t)?t:R(t);return{elements:R(e).elements,otherElements:R(n).elements}},it=(e,t)=>{if(nt(e,t))return F(e,t);if(!tt(e))return it(R(e),t);if(!k(t)){if(j(t))return Ke(t,e);throw new f(`Attempted to compare the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length-n.otherElements.length||$e(n.elements,n.otherElements)},at=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return F(e,t);if(j(t))return Ke(t,e);throw new f(Ze(e,t,!1))}return e.kind===`ModelValue`?Je(e,t):A(e)?et(e,t):it(e,t)},ot=(e,t)=>e.every((e,n)=>ut(e,t[n])),st=(e,t,n)=>{let r=We(n);if(!r){if(j(n))return qe(n,t);throw new f(`Attempted to check equality of the function ${H(t)} with the value:\n${H(n)}`)}if(e.range.length!==r.range.length)return!1;if(e.low!==void 0&&r.low!==void 0)return(e.range.length===0||e.low===r.low)&&ot(e.range,r.range);let i=e.low??r.low;return i===void 0?ot(e.domain,r.domain)&&ot(e.range,r.range):(e.low===void 0?e.domain:r.domain).every((e,t)=>{if(typeof e!=`number`)throw new f(`Attempted to compare an integer with non-integer:\n${H(e)}.`);return e===i+t})&&ot(e.range,r.range)},ct=(e,t)=>{let n=V(e);if(e.kind===`Function`&&Yt(n)!==void 0){let r=A(t)?Yt(t):void 0;return r?n.range.length===r.length&&ot(n.range,r):st({...n,low:1},e,t)}if(e.kind===`Function`&&n.domain.every(e=>typeof e==`string`)){let r=Ge(t);if(!r){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of record:\n${H(e)}\nwith non-record\n${H(t)}`)}return n.domain.length===r.domain.length&&ot(n.domain,r.domain)&&ot(n.range,r.range)}return st({...n,low:Ue(n.domain)},e,t)},lt=(e,t)=>{if(nt(e,t))return Be(e,t);if(!tt(e))return lt(R(e),t);if(!k(t)){if(j(t))return qe(t,e);throw new f(`Attempted to check equality of the set ${H(e)} with the value:\n${H(t)}`)}let n=rt(e,t);return n.elements.length===n.otherElements.length&&ot(n.elements,n.otherElements)},ut=(e,t)=>{if(typeof e!=`object`){if(typeof t==typeof e)return e===t;if(j(t))return qe(t,e);throw new f(Ze(e,t,!0))}return e.kind===`ModelValue`?Ye(e,t):A(e)?ct(e,t):lt(e,t)},dt=e=>{let t=[];for(let n of e){let e={low:0,high:t.length,comparison:1};for(;e.low<e.high;){let r=e.low+(e.high-e.low>>1);if(e.comparison=at(n,t[r]),e.comparison===0)break;e.comparison<0?e.high=r:e.low=r+1}e.comparison!==0&&t.splice(e.low,0,n)}return t},ft=(e,t)=>t.some(t=>ut(t,e)),pt=(e,t)=>{try{return Be(e,t)}catch(n){if(!(n instanceof f))throw n;return ut(e,t)}},mt=e=>{for(let t=1;t<e.length;t++)if(F(e[t-1],e[t])>=0)return!1;return!0},ht=e=>{if(e.length<2||mt(e))return Re(e);let t=[...e].sort(F),n=[t[0]];for(let e=1;e<t.length;e++)F(n[n.length-1],t[e])!==0&&n.push(t[e]);return Re(n)},gt=e=>{try{return ht(e)}catch(t){if(!(t instanceof f))throw t;return{kind:`MixedSet`,elements:e}}},_t=Re([]),vt=(e,t)=>{if(e.elements.length===0||t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0||i.push(t)}return i.length===n.length?e:Re(i)},yt=(e,t)=>{let n=e.elements,r=t.elements,i=[],a=0;for(let e=0;e<n.length;e++){let t=n[e];for(;a<r.length&&F(r[a],t)<0;)a++;a<r.length&&F(r[a],t)===0&&i.push(t)}return i.length===n.length?e:Re(i)},bt=(e,t)=>{if(e.elements.length===0)return t;if(t.elements.length===0)return e;let n=e.elements,r=t.elements,i=[],a=[],o=0,s=0;for(;o<n.length&&s<r.length;){let e=F(n[o],r[s]);e<0?i.push(n[o++]):e>0?(a.push(r[s]),i.push(r[s++])):(i.push(n[o++]),s++)}for(;o<n.length;)i.push(n[o++]);for(;s<r.length;)a.push(r[s]),i.push(r[s++]);if(a.length===0)return e;let c=Re(i);if(e.hash!==0){let t=e.hash;for(let e=0;e<a.length;e++)t=t+fn(a[e])|0;c.hash=t}if(e.fingerprint!==0){let t=e.fingerprint;for(let e=0;e<a.length;e++)t=t+yn(a[e])|0;c.fingerprint=t}return c},xt=e=>{let t=e.length<2?e:[...e].sort((e,t)=>F(e[0],t[0])),n=[],r=[];for(let e of t)n.length>0&&F(n[n.length-1],e[0])===0||(n.push(e[0]),r.push(e[1]));return ze(n,r)},St=e=>{let t=xt(e);return t.domain.length!==e.length||e.some(e=>typeof e[0]!=`string`)||e.every((e,n)=>e[0]===t.domain[n])?t:ve(t,e.map(e=>e[0]))},Ct=[],wt=[],Tt=/* @__PURE__ */ new WeakMap,Et=e=>{let t=Ct[e];if(t)return t;let n=Array.from({length:e},(e,t)=>t+1);return Ct[e]=n,n},Dt=e=>{if(Gt(e),e.low===1&&e.high>=1)return Et(e.high);let t=[];for(let n=e.low;n<=e.high;n++)t.push(n);return t},Ot=e=>e.length>0&&(e===Ct[e.length]||Tt.has(e)),kt=e=>{let t=R(e).elements;return Ot(t)&&(typeof e!=`object`||e.kind!==`Interval`)?[...t]:t},At=e=>{let t=wt[e];if(t)return t;let n={kind:`Interval`,low:1,high:e};return wt[e]=n,n},I=e=>ze(Et(e.length),e),jt=e=>xt(e),Mt=e=>k(e)&&!P(e),Nt=(e,t=!1)=>`UNION(${H(e.base,t)})`,Pt=e=>{if(!Mt(e.base))throw new f(`Attempted to enumerate the nonenumerable set:\n${Nt(e)}`);return R(e.base).elements},Ft=(e,t,n)=>{if(Mt(e))return e;throw new f(t===0?`Attempted to enumerate UNION(s), but some element of s is nonenumerable.`:`Attempted to enumerate the nonenumerable set:\n${H(e)}\nwhen enumerating:\n${Nt(n)}`)},L=e=>{if(typeof e!=`object`)return!1;switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:return!0;case`InfiniteSet`:case`SequenceSet`:return!1;case`Subset`:case`FilteredSet`:return L(e.base);case`FunctionSet`:return L(e.domain)&&L(e.range)||It(e.domain)===!0||It(e)===!0;case`RecordSet`:return e.sets.every(L)||It(e)===!0;case`ProductSet`:return e.factors.every(L)||It(e)===!0;case`Union`:return L(e.base)&&R(e.base).elements.every(L);case`SetOperation`:return e.operator===`\\cup`?L(e.left)&&L(e.right):e.operator===`\\cap`?L(e.left)||L(e.right):L(e.left);default:return!1}},It=e=>{if(typeof e==`object`)switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:return e.name===`Any`&&void 0;case`Subset`:case`SequenceSet`:return!1;case`FunctionSet`:{let t=It(e.domain);return t===void 0?void 0:!t&&It(e.range)}case`RecordSet`:case`ProductSet`:for(let t of e.kind===`RecordSet`?e.sets:e.factors){let e=It(t);if(e!==!1)return e}return!1;case`SetOperation`:case`FilteredSet`:case`Union`:return L(e)?R(e).elements.length===0:void 0;default:return}},Lt=e=>{let t=e.reduce((e,t)=>e*t.length,1),n=[],r=e.map(()=>0);for(let i=0;i<t;i++){n.push(e.map((e,t)=>e[r[t]]));for(let t=e.length-1;t>=0&&(r[t]++,!(r[t]<e[t].length));t--)r[t]=0}return n},Rt=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(e[n]<t-e.length+n){e[n]++;for(let t=n+1;t<e.length;t++)e[t]=e[t-1]+1;return!0}return!1},zt=e=>{let t=[];for(let n=0;n<=e.length;n++){let r=Array.from({length:n},(e,t)=>t);do t.push(Re(r.map(t=>e[t])));while(Rt(r,e.length))}return t},Bt=e=>{if(typeof e!=`object`)throw new f(`Expected a set but found ${H(e)}`);switch(e.kind){case`Set`:return e.elements;case`MixedSet`:return dt(e.elements);case`Interval`:{let t=Dt(e);return t!==Ct[t.length]&&Tt.set(t,e),t}case`Subset`:{P(e.base)&&Gt(e.base);let t=R(e.base).elements;if(t.length>30)throw new f(`SUBSET of a set with ${t.length} elements is too large to enumerate`);return zt(t)}case`FunctionSet`:{if(z(e))return[];if(P(e.domain))throw new f(`Attempted to enumerate a set of the form [D -> R],but the domain D:\n${H(e.domain)}\ncannot be enumerated.`);let t=kt(e.domain);if(t.length>0&&P(e.range))throw new f(`Attempted to enumerate a set of the form [D -> R],but the range R:\n${H(e.range)}\ncannot be enumerated.`);let n=t.length===0?[]:R(e.range).elements;return Lt(t.map(()=>n)).map(e=>ze(t,e))}case`RecordSet`:{if(z(e))return[];let t=e.sets.map((t,n)=>{if(P(t))throw new f(`Attempted to enumerate a set of the form [l1 : v1, ..., ln : vn],\nbut can't enumerate the value of the \`${e.names[n]}' field:\n${H(t)}`);return R(t).elements});return Lt(t).map(t=>jt(e.names.map((e,n)=>[e,t[n]])))}case`ProductSet`:{if(z(e))return[];let t=e.factors.map((e,t)=>{if(P(e))throw new f(`Attempted to enumerate a set of the form s1 \\X s2 ... \\X sn,\nbut can't enumerate s${t}:\n${H(e)}`);return R(e).elements});return Lt(t).map(I)}case`FilteredSet`:if(P(e.base))throw new f(`Attempted to enumerate { x \\in S : p(x) } when S:\n${H(e.base)}\nis not enumerable`);return R(e.base).elements.filter(e.test);case`Union`:{let t=Pt(e).flatMap((t,n)=>R(Ft(t,n,e)).elements);return R(gt(t)).elements}case`SetOperation`:{if(e.operator===`\\cup`&&(P(e.left)||P(e.right)))throw new f(`Attempted to enumerate S \\cup T when S:\n${H(e.left)}\nand T:\n${H(e.right)}\nare not both enumerable`);if(e.operator===`\\cap`&&P(e.left)&&P(e.right))throw new f(`Attempted to enumerate S \\cap T when neither S:\n${H(e.left)}\nnor T:\n${H(e.right)}\nis enumerable`);if(e.operator===`\\`&&P(e.left))throw new f(`Attempted to enumerate S \\ T when S:\n${H(e.left)}\nis not enumerable.`);if(e.operator===`\\cup`)return bt(R(e.left),R(e.right)).elements;let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return R(n).elements.filter(t=>B(t,r)===(e.operator===`\\cap`))}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to enumerate the non-enumerable set ${H(e)}`);default:throw new f(`Expected a set but found ${H(e)}`)}},Vt=/* @__PURE__ */ new WeakMap,R=e=>{if(typeof e==`object`&&e.kind===`Set`)return e;if(typeof e==`object`&&e.kind===`Interval`)return Re(Bt(e));let t=typeof e==`object`?Vt.get(e):void 0;if(t)return t;let n=Bt(e),r=typeof e==`object`&&(e.kind===`MixedSet`||e.kind===`Union`||e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`ProductSet`||e.kind===`FunctionSet`||e.kind===`Subset`)?Re(n):ht(n);return typeof e==`object`&&Vt.set(e,r),r},Ht=e=>{if(typeof e!=`object`||Vt.has(e))return R(e).elements;if(e.kind===`Union`)return Pt(e).flatMap((t,n)=>Ht(Ft(t,n,e)));if(e.kind===`FilteredSet`&&!P(e.base))return Ht(e.base).filter(e.test);if(e.kind!==`SetOperation`)return R(e).elements;if(e.operator===`\\cup`)return P(e.left)||P(e.right)?R(e).elements:[...Ht(e.left),...Ht(e.right)];let t=e.operator===`\\`||L(e.left),n=t?e.left:e.right,r=t?e.right:e.left;return P(n)?R(e).elements:Ht(n).filter(t=>B(t,r)===(e.operator===`\\cap`))},z=e=>{if(typeof e!=`object`||!k(e))throw new f(`Shouldn't call isEmpty() on value ${H(e)}`);switch(e.kind){case`Set`:case`MixedSet`:return e.elements.length===0;case`Interval`:return e.low>e.high;case`InfiniteSet`:if(e.name===`Any`)throw new f(`Shouldn't call isEmpty() on value ANY`);return!1;case`Subset`:case`SequenceSet`:return!1;case`ProductSet`:return e.factors.some(z);case`RecordSet`:return e.sets.some(z);case`FunctionSet`:return!z(e.domain)&&z(e.range);case`Union`:return Pt(e).every((t,n)=>z(Ft(t,n,e)));default:return R(e).elements.length===0}},Ut=(e,t)=>e.reduce((e,n)=>{let r=e*Gt(n);if(r>2147483647)throw new f(t());return r},1),Wt=e=>`Overflow when computing the number of elements in:\n${H(e)}`,Gt=e=>{if(typeof e!=`object`)return R(e).elements.length;switch(e.kind){case`Interval`:{let t=Math.max(0,e.high-e.low+1);if(t>2147483647)throw new f(`Size of interval value exceeds the maximum representable size (32bits): ${e.low}..${e.high}.`);return t}case`InfiniteSet`:case`SequenceSet`:throw new f(`Attempted to compute the number of elements in the overridden value ${H(e)}.`);case`Subset`:{let t=Gt(e.base);if(t>=31)throw new f(Wt(e));return 2**t}case`FunctionSet`:{if(z(e.domain))return 1;if(z(e.range))return 0;let t=Gt(e.range);if(t===1)return 1;let n=Gt(e.domain),r={value:1};for(let i=0;i<n;i++)if(r.value*=t,r.value>2147483647)throw new f(Wt(e));return r.value}case`RecordSet`:return z(e)?0:Ut(e.sets,()=>Wt(e));case`ProductSet`:return z(e)?0:Ut(e.factors,()=>`Overflow when computing the number of elements in ${H(e)}`);default:return R(e).elements.length}},Kt=e=>`Attempted to check if the set ${H(e)}is finite.`,qt=e=>{if(typeof e!=`object`||e.kind===`ModelValue`)throw new f(`Attempted to check if the ${he(e)} ${H(e)} is a finite set.`);switch(e.kind){case`Set`:case`MixedSet`:case`Interval`:case`Function`:return!0;case`LazyFunction`:throw new f(`Attempted to check if the function:\n${H(e)}\nis a finite set.`);case`InfiniteSet`:return!1;case`SequenceSet`:return qt(e.base)&&z(e.base);case`Subset`:return qt(e.base);case`FunctionSet`:{let t=qt(e.domain);if(t&&z(e.domain))return!0;let n=qt(e.range);return n&&z(e.range)?!0:n&&(t||Gt(e.range)===1)}case`RecordSet`:case`ProductSet`:{let t=e.kind===`RecordSet`?e.sets:e.factors,n={isAllFinite:!0};for(let e of t)if(!qt(e))n.isAllFinite=!1;else if(z(e))return!0;return n.isAllFinite}case`Union`:if(!Mt(e.base))throw new f(`Attempted to check if the nonenumerable set:\n${Nt(e)}\nis a finite set.`);return R(e.base).elements.every(qt);case`SetOperation`:if(e.operator===`\\cup`)return qt(e.left)&&qt(e.right);if(e.operator===`\\cap`){if(!qt(e.left)&&!qt(e.right))throw new f(Kt(e));return!0}if(qt(e.left))return!0;if(!qt(e.right))throw new f(Kt(e));return!1;case`FilteredSet`:if(!qt(e.base))throw new f(`Attempted to check if expression of form {x \\in S : p(x)} is a finite set, but cannot check if S:\n${H(e.base)}\nis finite.`);return!0}},Jt=(e,t)=>{let n={low:0,high:e.length-1};for(;n.low<=n.high;){let r=n.low+n.high>>1,i=F(e[r],t);if(i===0)return r;i<0?n.low=r+1:n.high=r-1}return-1},Yt=e=>{if(typeof e!=`object`||!A(e))return;let t=V(e);return t.domain.every((e,t)=>e===t+1)?t.range:void 0},Xt=(e,t)=>`Attempted to check if the value ${H(e)} is an element of ${H(t)}`,Zt=(e,t)=>{let n=`Attempted to check if the value:\n${H(e)}\nis an element of the`;if(!A(t))return`${n} ${he(t)} ${H(t)}`;let r=t.kind===`Function`||L(t.domain)?V(t).domain:[];return r.length>0&&r.every(e=>typeof e==`string`)?`Attempted to check if element:\n${H(e)}\nis in the record:\n${H(t)}`:r.every((e,t)=>e===t+1)?`Attempted to check set membership in a tuple value.`:`${n} function ${H(t)}`},B=(e,t)=>{if(!k(t))throw new f(Zt(e,t));switch(t.kind){case`Set`:try{return Jt(t.elements,e)!==-1}catch(n){if(!(n instanceof f))throw n;return ft(e,t.elements)}case`MixedSet`:return ft(e,t.elements);case`Interval`:if(typeof e==`number`)return e>=t.low&&e<=t.high;if(t.low<=t.high&&!j(e))throw new f(`Attempted to check if the value:\n${H(e)}\nis in the integer interval ${H(t)}`);return!1;case`InfiniteSet`:if(t.name===`Any`)return!0;if(j(e))return!1;if(!(t.name===`STRING`?typeof e==`string`:typeof e==`number`))throw new f(`Attempted to check if the value:\n${H(e)}\nis an element of ${t.name}.`);return t.name!==`Nat`||typeof e==`number`&&e>=0;case`Subset`:if(!k(e))throw new f(Xt(e,t));return R(e).elements.every(e=>B(e,t.base));case`FunctionSet`:{if(!A(e)){if(j(e))return!1;throw new f(Xt(e,t))}let n=V(e),r=Ue(n.domain);return(r===void 0?pt(t.domain,Re(n.domain)):pt({kind:`Interval`,low:r,high:r+n.domain.length-1},t.domain))&&n.range.every(e=>B(e,t.range))}case`RecordSet`:{let n=A(e)?V(e):void 0;if(!n||!Se(n.domain)){if(j(e))return!1;throw new f(`Attempted to check if non-record\n${H(e)}\nis in the set of records:\n${H(t)}`)}return n.domain.length===t.names.length&&t.names.every((e,r)=>{let i=Jt(n.domain,e);return i!==-1&&B(n.range[i],t.sets[r])})}case`ProductSet`:{let n=A(e)?Yt(e):void 0;if(n===void 0){if(A(e)&&V(e).domain.every(e=>typeof e==`number`)||j(e))return!1;throw new f(`Attempted to check if non-tuple\n${H(e)}\nis in the set of tuples:\n${H(t)}`)}return n.length===t.factors.length&&n.every((e,n)=>B(e,t.factors[n]))}case`FilteredSet`:return B(e,t.base)&&t.test(e);case`Union`:if(!Mt(t.base))throw new f(`Attempted to check if:\n ${H(e)}\nis an element of the non-enumerable set:\n ${Nt(t)}`);return R(t.base).elements.some(t=>B(e,t));case`SetOperation`:return t.operator===`\\cup`?B(e,t.left)||B(e,t.right):B(e,t.left)&&B(e,t.right)===(t.operator===`\\cap`);case`SequenceSet`:{let n=Yt(e);if(n===void 0){if(j(e))return!1;throw new f(Xt(e,t))}return n.every(e=>B(e,t.base))}default:throw new f(Zt(e,t))}},Qt=(e,t,n)=>e===t?!0:typeof e!=`object`||typeof t!=`object`||typeof n!=`object`||e.kind!==`Function`||t.kind!==`Function`||n.kind!==`FunctionSet`||e.domain!==t.domain?B(e,n):e.range.every((e,r)=>Qt(e,t.range[r],n.range)),V=e=>{if(typeof e==`object`&&e.kind===`Function`)return e;if(typeof e==`object`&&e.kind===`LazyFunction`){L(e.domain)||Gt(e.domain);let t=kt(e.domain);return ze(t,t.map(t=>e.apply(t)))}throw new f(`Expected a function but found ${H(e)}`)},$t=/* @__PURE__ */ new WeakSet,en=e=>($t.add(e),e),tn=(e,t)=>typeof e==`object`&&$t.has(e)?`In applying the function\n${me(H(e))},\nthe first argument is:\n${me(H(t))}\nwhich is not in its domain.\n`:`Attempted to apply function ${H(e)} to ${H(t)}, which is not in its domain`,nn=(e,t)=>{let n=e[0];if(typeof t==`number`&&typeof n==`number`){let r=t-n;if(e[r]===t)return r}if(e.length<=8){for(let n=0;n<e.length;n++)if(e[n]===t)return n}return Jt(e,t)},rn=(e,t,n)=>{if(typeof e==`object`&&e.kind===`LazyFunction`){if(!B(t,e.domain))throw new f($t.has(e)?tn(e,t):`Attempted to apply a function to ${H(t)}, which is not in its domain`);return e.apply(t)}if(typeof e!=`object`||e.kind!==`Function`)throw new f(`Attempted to apply ${H(e)}, which is not a function`);let r=nn(e.domain,t);if(r===-1)throw new f(n?.(e)??tn(e,t));return e.range[r]},an=e=>Ot(e)?Tt.get(e)??At(e.length):void 0,on=e=>{if(typeof e==`object`&&e.kind===`LazyFunction`)return e.domain;let t=V(e).domain;return an(t)??Re(t)},sn=(e,t,n,r=!1)=>{if(typeof e==`object`&&e.kind===`LazyFunction`&&(r||!L(e.domain))){if(!B(t,e.domain))return e;let r=n(e.apply(t));return{kind:`LazyFunction`,domain:e.domain,apply:n=>pt(t,n)?r:e.apply(n),source:e.source}}let i=V(e),a=nn(i.domain,t);if(a===-1)return i;let o=[...i.range],s=i.range[a],c=n(s);o[a]=c;let l=ze(i.domain,o);if(l.writtenKeys=i.writtenKeys,i.hash!==0){let e=i.domain[a];l.hash=s===c?i.hash:i.hash-pn(e,s)+pn(e,c)|0}if(i.fingerprint!==0){let e=i.domain[a];l.fingerprint=s===c?i.fingerprint:i.fingerprint-bn(e,s)+bn(e,c)|0}return l},cn=/* @__PURE__ */ new WeakMap,ln=e=>{let t=Math.imul(e^e>>>16,2246822507),n=Math.imul(t^t>>>13,3266489909);return n^n>>>16},un=(e,t)=>Math.imul(e^t,16777619),dn=e=>{let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return ln(t)},fn=e=>ln(hn(e)+2654435769|0),pn=(e,t)=>ln(Math.imul(hn(e),668265261)+hn(t)|0),mn=e=>{if(e.kind===`ModelValue`)return ln(un(dn(e.name),109));if(k(e)){if(!L(e))return dn(wn(e));let t=R(e).elements,n=1940243425;for(let e=0;e<t.length;e++)n=n+fn(t[e])|0;return n}let t=V(e),n=1725019383;for(let e=0;e<t.domain.length;e++)n=n+pn(t.domain[e],t.range[e])|0;return n},hn=e=>{if(typeof e==`number`)return ln(e^1540483477);if(typeof e==`boolean`)return e?729683222:682545830;if(typeof e==`string`)return dn(e);if(e.kind===`Set`||e.kind===`Function`)return e.hash===0&&(e.hash=mn(e)),e.hash;let t=cn.get(e);if(t!==void 0)return t;let n=mn(e);return cn.set(e,n),n},gn=/* @__PURE__ */ new WeakMap,_n=e=>{let t=Math.imul(e^e>>>15,739982445),n=Math.imul(t^t>>>12,695872825);return n^n>>>15},vn=e=>{let t=2538058380;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),1540483477);return _n(t)},yn=e=>_n(Sn(e)+2135587861|0),bn=(e,t)=>_n(Math.imul(Sn(e),374761393)+Sn(t)|0),xn=e=>{if(e.kind===`ModelValue`)return _n(vn(e.name)^60);if(k(e)){if(!L(e))return vn(wn(e));let t=R(e).elements,n=461845907;for(let e=0;e<t.length;e++)n=n+yn(t[e])|0;return n}let t=V(e),n=1291169091;for(let e=0;e<t.domain.length;e++)n=n+bn(t.domain[e],t.range[e])|0;return n},Sn=e=>{if(typeof e==`number`)return _n(e^1759714724);if(typeof e==`boolean`)return e?1000000007:521288629;if(typeof e==`string`)return vn(e);if(e.kind===`Set`||e.kind===`Function`)return e.fingerprint===0&&(e.fingerprint=xn(e)),e.fingerprint;let t=gn.get(e);if(t!==void 0)return t;let n=xn(e);return gn.set(e,n),n},Cn=/* @__PURE__ */ new WeakMap,wn=e=>{if(typeof e==`boolean`)return e?`T`:`F`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return JSON.stringify(e);let t=Cn.get(e);if(t!==void 0)return t;let n=Tn(e);return Cn.set(e,n),n},Tn=e=>{if(e.kind===`ModelValue`)return`@${e.name}`;if(e.kind===`InfiniteSet`)return`<${e.name}>`;if(e.kind===`SequenceSet`)return`<Seq ${wn(e.base)}>`;if(e.kind===`FilteredSet`&&!L(e))throw new f(`Attempted to compare the non-enumerable set ${H(e)} with another value`);if(k(e))return L(e)?`{${R(e).elements.map(wn).join(`,`)}}`:`<${e.kind} ${H(e)}>`;let t=V(e);return`(${t.domain.map((e,n)=>`${wn(e)}:${wn(t.range[n])}`).join(`,`)})`},En=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/\n/g,`\\n`).replace(/\t/g,`\\t`)}"`,Dn=e=>e.reduce((e,t)=>e===0?0:e*Gt(t),1),On=e=>{if(e.kind===`Subset`)return Gt(e.base)<=6?R(e):void 0;if(e.kind===`SetOperation`||e.kind===`FilteredSet`||e.kind===`Union`)return R(e);if(e.kind===`FunctionSet`&&L(e.domain)&&Gt(e.domain)===0)return Re([ze([],[])]);let t=e.kind===`FunctionSet`?Gt(e.range)**Gt(e.domain):Dn(e.kind===`RecordSet`?e.sets:e.factors);return t===0?_t:t<=1999?R(e):void 0},kn=(e,t)=>{if(t)return On(e);if(L(e))try{return On(e)}catch(e){if(e instanceof f)return;throw e}},An=(e,t)=>{let n=e=>H(e,t);switch(e.kind){case`Subset`:return typeof e.base==`object`&&e.base.kind===`Interval`?`SUBSET (${n(e.base)})`:`SUBSET ${n(e.base)}`;case`FunctionSet`:return`[${n(e.domain)} -> ${n(e.range)}]`;case`RecordSet`:return`[${e.names.map((t,r)=>`${t}: ${n(e.sets[r])}`).join(`, `)}]`;case`ProductSet`:return`(${e.factors.map(n).join(` \\X `)})`;case`SetOperation`:return`${n(e.left)} ${e.operator} ${n(e.right)}`;case`FilteredSet`:return`{x \\in ${n(e.base)} : ...}`;case`Union`:return Nt(e,t)}},jn=e=>/^[\p{L}\p{Nd}_]*$/u.test(e)&&/\p{L}/u.test(e)&&(e.length<4||!/^[WS]F_/.test(e)),H=(e,t=!1,n=!1)=>{let r=e=>H(e,t,n);if(typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return String(e);if(typeof e==`string`)return En(e);switch(e.kind){case`ModelValue`:return e.name;case`Set`:return`{${e.elements.map(r).join(`, `)}}`;case`MixedSet`:return r(R(e));case`Interval`:return e.low<=e.high?`${e.low}..${e.high}`:`{}`;case`InfiniteSet`:return e.name===`Any`?`ANY`:e.name;case`Subset`:case`FunctionSet`:case`RecordSet`:case`ProductSet`:case`SetOperation`:case`FilteredSet`:case`Union`:{let n=kn(e,t);return n?r(n):An(e,t)}case`SequenceSet`:return`Seq(${r(e.base)})`;case`Function`:case`LazyFunction`:{if(e.kind===`LazyFunction`&&!L(e.domain)){let t=e.source;return t?`[${t.parameters.map(e=>`${e.name} \\in ${H(e.domain)}`).join(`, `)} |-> <expression ${t.body}>]`:`<function>`}let t=V(e);return t.domain.every((e,t)=>e===t+1)?`<<${t.range.map(r).join(`, `)}>>`:t.domain.every(e=>typeof e==`string`&&jn(e))?`[${(n||t.hash!==0||t.fingerprint!==0?t.domain.map((e,n)=>[e,t.range[n]]):ye(t)).map(e=>`${String(e[0])} |-> ${r(e[1])}`).join(`, `)}]`:`(${t.domain.map((e,n)=>`${r(e)} :> ${r(t.range[n])}`).join(` @@ `)})`}}},Mn=(e,t)=>{for(let n=0;n<e.length;n++)e[n]=t(e[n])},Nn=()=>{let e=/* @__PURE__ */ new Map,t=n=>{if(typeof n!=`object`||n.kind!==`Set`&&n.kind!==`Function`)return n;let r=hn(n),i=e.get(r);if(i!==void 0&&!Array.isArray(i)&&(i===n||He(i,n)))return i;if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(i[e]===n||He(i[e],n))return i[e]}return n.kind===`Set`?Mn(n.elements,t):(Mn(n.domain,t),Mn(n.range,t)),i===void 0?e.set(r,n):Array.isArray(i)?i.push(n):e.set(r,[i,n]),n};return e=>{for(let n=0;n<e.length;n++)e[n]=t(e[n]);return e}},Pn=/* @__PURE__ */ new Set(/* @__PURE__ */ `=,#,~,<=>,/\\,\\/,=>,\\in,\\notin,\\subseteq,\\cup,\\cap,\\,SUBSET,UNION,DOMAIN,+,-,*,^,\\div,%,..,Seq,IsFiniteSet,RandomElement`.split(`,`)),Fn=(e,t)=>Pn.has(e)?new f(t):new p(t),In=e=>typeof e==`object`&&e.kind===`Operator`,U=(e,t,n)=>{let r=e[t];if(r===void 0||In(r))throw Fn(n,`${n} expects a value as argument ${t+1}`);return r},Ln=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`number`)throw Fn(n,`${n} expects an integer but received ${H(r)}`);return r},Rn=(e,t,n)=>{let r=U(e,t,n);if(typeof r!=`boolean`)throw Fn(n,`${n} expects a boolean but received ${H(r)}`);return r},zn=(e,t,n)=>{let r=U(e,t,n);if(!k(r))throw Fn(n,`${n} expects a set but received ${H(r)}`);return r},Bn=(e,t,n)=>{let r=zn(e,t,n);if(!L(r))throw Fn(n,`${n} cannot enumerate the non-enumerable set ${H(r)}`);return r},Vn=(e,t,n)=>R(Bn(e,t,n)),Hn=(e,t,n)=>Vn(e,t,n).elements,Un=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw Fn(n,`${n} expects a sequence but received ${H(r)}`);return i},Wn=(e,t,n)=>{let r=U(e,t,n);if(!A(r))throw Fn(n,`${n} expects a function but received ${H(r)}`);return V(r)},Gn=(e,t,n)=>{let r=e[t];if(r===void 0||!In(r))throw Fn(n,`${n} expects an operator as argument ${t+1}`);return r},Kn=(e,t)=>({kind:`Builtin`,name:e,arity:0,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0}),W=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:t===1?e=>n([e]):void 0,evaluateBinary:t===2?(e,t)=>n([e,t]):void 0}),qn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0}),Jn=(e,t,n)=>({kind:`Builtin`,name:e,arity:t,evaluate:n,evaluateUnary:void 0,evaluateBinary:void 0,isStateLevel:!0}),Yn=(e,t)=>({kind:`Builtin`,name:e,arity:2,evaluate:n=>t(U(n,0,e),U(n,1,e)),evaluateUnary:void 0,evaluateBinary:t}),Xn=e=>e>2147483647||e<-2147483648,Zn=e=>new p(`Overflow when computing ${e}`),Qn={ModelValue:`ModelValue`,Set:`SetEnumValue`,Interval:`IntervalValue`,InfiniteSet:`UserValue`,SequenceSet:`UserValue`,Subset:`SubsetValue`,FunctionSet:`SetOfFcnsValue`,RecordSet:`SetOfRcdsValue`,ProductSet:`SetOfTuplesValue`,FilteredSet:`SetPredValue`,LazyFunction:`FcnLambdaValue`,Union:`UnionValue`,MixedSet:`SetEnumValue`},$n={"\\cup":`SetCupValue`,"\\cap":`SetCapValue`,"\\":`SetDiffValue`},er={BoolValue:`a Boolean value`,IntValue:`an integer`,StringValue:`a string`,RecordValue:`a record`,SetEnumValue:`a set of the form {e1, ... ,eN}`,SetPredValue:`a set of the form {x \\in S : expr}`,TupleValue:`a tuple`,FcnLambdaValue:`a function of the form [x \\in S |-> expr]`,FcnRcdValue:`a function of the form (d1 :> e1 @@ ... @@ dN :> eN)`,SetOfFcnsValue:`a set of the form [S -> T]`,SetOfRcdsValue:`a set of the form [d1 : S1, ... , dN : SN]`,SetOfTuplesValue:`a cartesian product`,SubsetValue:`a set of the form SUBSET S`,SetDiffValue:`a set of the form S \\ T`,SetCapValue:`a set of the form S \\cap T`,SetCupValue:`a set of the form S \\cup T`,ModelValue:`a model value`,UserValue:`a special set constant`,IntervalValue:`a set of the form i..j`,UnionValue:`a set of the form UNION S`},tr=e=>{if(typeof e==`number`)return`IntValue`;if(typeof e==`string`)return`StringValue`;if(typeof e==`boolean`)return`BoolValue`;if(e.kind===`SetOperation`)return $n[e.operator];if(e.kind!==`Function`)return Qn[e.kind];let t=e.domain;return t.every((e,t)=>e===t+1)?`TupleValue`:t.every(e=>typeof e==`string`)?`RecordValue`:`FcnRcdValue`},nr=e=>er[tr(e)],rr=(e,t)=>new f(`Attempted to apply the operator overridden by the Java method\n${e},\nbut it produced the following error:\n${t}`),ir=(e,t)=>{let n=n=>(...r)=>{try{return n(...r)}catch(n){throw n instanceof f&&(e.isLazy===!0||!(n instanceof p))?rr(t,n.message):n}};return{...e,evaluate:n(e.evaluate),evaluateUnary:e.evaluateUnary&&n(e.evaluateUnary),evaluateBinary:e.evaluateBinary&&n(e.evaluateBinary)}},ar=(e,t)=>{if(typeof e!=`number`)throw rr(t,`Cannot cast tlc2.value.impl.${tr(e)} to tlc2.value.impl.IntValue`);return e},or=(e,t,n)=>`public static tlc2.value.impl.${t} tlc2.module.Integers.${e}(${Array.from({length:n},()=>`tlc2.value.impl.IntValue`).join(`,`)})`,sr=(e,t,n)=>{let r=or(t,`IntValue`,2);return Yn(e,(t,i)=>{let a=ar(t,r),o=ar(i,r),s=n(a,o);if(Xn(s))throw Zn(`${a}${e}${o}`);return s})},cr=(e,t,n)=>{if(typeof e!=`number`)throw new p(`The ${t} argument of ${n} should be an integer, but instead it is:\n${H(e)}`);return e},lr=(e,t)=>Yn(e,(n,r)=>t(cr(n,`first`,e),cr(r,`second`,e))),ur=(e,t,n)=>({...Jn(e,t,n),isLazy:!0}),dr=(e,t,n)=>{let r=Gn(e,t,n);return()=>r.call([])},fr=/* @__PURE__ */ new Set([`Apply`,`And`,`Or`,`If`,`FunctionApplication`,`FieldAccess`,`Record`,`Tuple`,`SetEnumeration`,`Prime`,`Unchanged`,`Forall`,`Exists`]),pr=()=>({bool:qa,condition:(e,t)=>{if(typeof e!=`boolean`)throw Ia(t,e);return e},conjunct:(e,t,n)=>{if(typeof e!=`boolean`)throw La(t,n,e);return e},apply:rn,tuple:I,set:gt,record:ze,writtenRecord:be,equal:Be,enumerate:$a,unassigned:(e,t)=>{throw new f(`The variable ${e} is not assigned at ${q(t)}`)},primeOutsideAction:e=>{throw new f(`A primed expression appears outside an action at ${q(e)}`)},prime:e=>({environment:e.environment,scope:e.scope,state:e.next,next:void 0}),extend:(e,t,n)=>({environment:e.environment,scope:t.reduce((e,t,r)=>Wa(e,t,n[r]),e.scope),state:e.state,next:e.next})}),mr={value:void 0},hr=(e,t)=>(e.references.push(t),`reference${e.references.length-1}`),gr=e=>`local${e.counter++}`,_r=(e,t=/* @__PURE__ */ new Set)=>(e.kind===`Identifier`&&t.add(e.name),e.kind===`Apply`&&t.add(e.operator),Ja(e).forEach(e=>_r(e,t)),t),vr=(e,t,n)=>{let r=hr(e,Y(t,e.environment)),i=_r(t),a=[...n.locals].filter(([e])=>i.has(e));if(a.length===0)return`${r}(${n.context})`;let o=hr(e,a.map(([e])=>e));return`${r}(extend(${n.context}, ${o}, [${a.map(([,e])=>e).join(`, `)}]))`},yr=(e,t,n)=>{let r=t.kind===`Forall`,i=JSON.stringify(r?`the body of \\A`:`the body of \\E`),a=`quantifier${e.counter++}`,o=[...n.locals.values()],s={context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:new Map(n.locals)},c=t.bounds.map(()=>gr(e)),l=t.bounds.map((t,n)=>`const ${c[n]} = enumerate(${xr(e,t.set,s)}, ${hr(e,t.set)});`),u=t.bounds.map(t=>{let n=gr(e);return t.pattern.kind===`Name`&&s.locals.set(t.pattern.name,n),n}),d=`if (bool(${xr(e,t.body,s)}, ${i}) !== ${r}) return ${!r};`,f=u.reduce((t,n,r)=>{let i=gr(e);return`for (let ${i} = 0; ${i} < ${c[r]}.length; ${i}++) { const ${n} = ${c[r]}[${i}]; ${t} }`},d),p=o.map(e=>`, ${e}`).join(``);return e.helpers.push(`function ${a}(context, state, next${p}) { let primed; ${l.join(` `)} ${f} return ${r}; }`),`${a}(${n.context}, ${n.state}, ${n.isPrimed?`undefined`:n.next}${p})`},br=(e,t,n)=>{let r=t.args;if(t.operator===`=>`)return`(bool(${xr(e,r[0],n)}, "the left side of =>") ? bool(${xr(e,r[1],n)}, "the right side of =>") : true)`;if(J(t))return vr(e,t,n);let i=mo(t.operator,e.environment);if(i?.kind!==`Builtin`)return vr(e,t,n);if(i.name===`DOMAIN`)return`${hr(e,za(t))}(${xr(e,r[0],n)})`;if(i.name===`TLCEval`)return vr(e,t,n);if(i.name===`\\subseteq`&&r.length===2)return`${hr(e,Ba(t,i))}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`;let a=e.environment;if(i.evaluateUnary&&r.length===1&&rs(r[0],a))return`${hr(e,i.evaluateUnary)}(${xr(e,r[0],n)})`;let o=r.length===2&&rs(r[0],a)&&rs(r[1],a);return i.evaluateBinary&&o?`${hr(e,i.evaluateBinary)}(${xr(e,r[0],n)}, ${xr(e,r[1],n)})`:vr(e,t,n)},xr=(e,t,n)=>{let r=(t,r=n)=>xr(e,t,r);if(qo(t)&&Ho(t,e.environment))return vr(e,t,n);switch(t.kind){case`Number`:return Mo(t.value)?String(t.value):vr(e,t,n);case`String`:return JSON.stringify(t.value);case`Identifier`:{let r=n.locals.get(t.name);if(r)return r;if(J(t))return vr(e,t,n);let i=wo(t.name,e.environment);if(i?.kind===`Variable`){let r=JSON.stringify(t.name),a=hr(e,t);return`(${n.state}?.[${i.index}] ?? unassigned(${r}, ${a}))`}return i?.kind===`Value`?hr(e,i.value):vr(e,t,n)}case`Apply`:return br(e,t,n);case`And`:{let n=hr(e,t);return`(${t.operands.map((e,t)=>`conjunct(${r(e)}, ${n}, ${t})`).join(` && `)})`}case`Or`:return`(${t.operands.map(e=>`bool(${r(e)}, "a disjunct")`).join(` || `)})`;case`If`:return`(condition(${r(t.condition)}, ${hr(e,t)}) ? ${r(t.consequent)} : ${r(t.alternative)})`;case`FunctionApplication`:{_s(t.function);let e=r(t.function);return t.args.length===1?`apply(${e}, ${r(t.args[0])})`:`apply(${e}, tuple([${t.args.map(e=>r(e)).join(`, `)}]))`}case`FieldAccess`:return`apply(${r(t.record)}, ${JSON.stringify(t.field)}, ${hr(e,Ra(t))})`;case`Record`:{let i=[...t.fields].sort((e,t)=>F(e.name,t.name));if(i.some((e,t)=>t>0&&i[t-1].name===e.name))return vr(e,t,n);let a=hr(e,i.map(e=>e.name)),o=`[${i.map(e=>r(e.value)).join(`, `)}]`,s=t.fields.map(e=>e.name);return s.every((e,t)=>e===i[t].name)?`record(${a}, ${o})`:`writtenRecord(${a}, ${o}, ${hr(e,s)})`}case`Tuple`:return`tuple([${t.elements.map(e=>r(e)).join(`, `)}])`;case`SetEnumeration`:return`set([${t.elements.map(e=>r(e)).join(`, `)}])`;case`Prime`:{let i=hr(e,t);if(n.isPrimed)return`primeOutsideAction(${i})`;let a={context:`(primed ??= prime(${n.context}))`,state:n.next,next:`undefined`,isPrimed:!0,locals:n.locals};return`(${n.next} === undefined ? primeOutsideAction(${i}) : ${r(t.expression,a)})`}case`Unchanged`:return`equal(${r({kind:`Prime`,expression:t.expression,location:t.location})}, ${r(t.expression)})`;case`Forall`:case`Exists`:return t.bounds.every(e=>e.pattern.kind===`Name`)?yr(e,t,n):vr(e,t,n);default:return vr(e,t,n)}},Sr=(e,t)=>{if(!fr.has(e.kind))return;let n={environment:t,references:[],helpers:[],counter:0},r=xr(n,e,{context:`context`,state:`state`,next:`next`,isPrimed:!1,locals:/* @__PURE__ */ new Map}),i=n.references.map((e,t)=>`reference${t}`),a=`${n.helpers.join(`
|
|
19
19
|
`)}\nreturn (context) => { const state = context.state; const next = context.next; let primed; return ${r}; };`;mr.value??=pr();let o=mr.value,s=Object.keys(o);return Function(...s,...i,a)(...Object.values(o),...n.references)},Cr={kind:`Local`},wr=/* @__PURE__ */ new WeakMap,Tr=e=>{let t=e.lastIndexOf(`@`);return t>0&&t<e.length-1},Er=new Map([`~>`,`-+->`,`\\cdot`].map(e=>[e,{key:e,arity:2}])),Dr=(e,t)=>e.line<t.line||e.line===t.line&&e.column<t.column,Or=e=>e.kind===`Operator`?e.params.length:0,kr=e=>e.name.includes(`!`),Ar=(e,t)=>{for(let n=e;n;n=n.parent)if(n.name===t)return n},jr=(e,t,n=0)=>t.reduce((e,t)=>({name:t,arity:n,parent:e}),e),Mr=(e,t)=>t.reduce((e,t)=>({name:t.name,arity:t.arity,parent:e}),e),Nr=e=>e.kind===`Name`?[e.name]:e.names,Pr=e=>e.flatMap(e=>Nr(e.pattern)),Fr=(e,t)=>{let n=t.definitions.get(e);return n!==void 0&&(n===t.self?n.kind===`Function`||n.isRecursive:n.isRecursive||Dr(n.location,t.location))?n:void 0},Ir=(e,t)=>{let n=Fr(e,t);return n?{key:t.getKey(n),arity:Or(n)}:t.imported.get(e)},Lr=e=>e[0].toLowerCase()===e[0].toUpperCase()&&e[0]!==`_`&&(e[0]<`0`||e[0]>`9`),Rr=e=>e.startsWith(`<`)&&(e[1]>=`0`&&e[1]<=`9`||e[1]===`*`),zr=(e,t,n,r)=>{let i=e.location,a=wr.get(e);if(a!==void 0)return a;if(Tr(t))return e.kind===`Apply`?e.args.length:0;if(Rr(t))return 0;let o=Ar(n,t);if(o&&e.kind!==`OperatorReference`&&(e.resolution=Cr),o)return o.arity;let s=Ir(t,r);if(s)return e.kind===`Identifier`?e.name=s.key:e.operator=s.key,wr.set(e,s.arity),s.arity;let c=t.slice(0,t.indexOf(`!`));if(c!==``&&(Ar(n,c)!==void 0||Ir(c,r)!==void 0||r.facts.has(c)))return e.kind===`Apply`?e.args.length:0;let l=`at line ${i.line}, column ${i.column}`;throw new u(Lr(t)?`Could not find declaration or definition of symbol '${t}' ${l}`:`Unknown operator: \`${t}' ${l}`)},Br=(e,t,n)=>(e.forEach(e=>G(e.set,t,n)),e.reduce((e,t)=>jr(e,Nr(t.pattern)),t)),Vr=(e,t)=>e.kind===`Identifier`&&e.name===t&&J(e)||Ja(e).some(e=>Vr(e,t)),Hr=(e,t)=>{e.kind===`FunctionConstruction`&&Vr(e.body,t)&&(e.isRecursive=!0),Ja(e).forEach(e=>Hr(e,t))},Ur=(e,t,n)=>{let r=jr(t,e.kind===`Function`?[e.name]:[]);e.kind===`Function`?(G(e.body,Br(e.bounds,r,n),n),Hr(e.body,e.name)):G(e.body,Mr(r,e.params),n)},Wr=(e,t,n)=>{let r=e.filter(e=>e.isRecursive).reduce((e,t)=>({name:t.name,arity:Or(t),parent:e}),t);return e.reduce((e,t)=>(kr(t)||Ur(t,e,n),{name:t.name,arity:Or(t),parent:e}),r)},Gr=(e,t,n,r,i)=>{let a=e.kind===`Operator`?e.params[t]:void 0,o=n.location;if(a?.arity===0&&r>0)throw new u(`Operator used in argument number ${t+1} has incorrect number of arguments at line ${o.line}, column ${o.column}`);let s=i?.kind===`Operator`&&i.params.some(e=>e.arity>0);if(a!==void 0&&a.arity>0&&(r!==a.arity||s))throw new u(`Argument number ${t+1} to operator '${e.name}' should be a ${a.arity}-parameter operator at line ${o.line}, column ${o.column}`)},Kr=e=>e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:void 0,qr=(e,t,n)=>{let r=Ar(t,e.operator)?void 0:Fr(e.operator,n),i=zr(e,e.operator,t,n);if(i!==e.args.length)throw new u(`The operator ${e.operator} requires ${i} arguments at line ${e.location.line}, column ${e.location.column}`);e.args.forEach((e,i)=>{let a=Kr(e),o=a===void 0||Ar(t,a)?void 0:Fr(a,n),s=Jr(e,t,n);r&&Gr(r,i,e,s,o)})},Jr=(e,t,n)=>e.kind===`Identifier`?zr(e,e.name,t,n):e.kind===`OperatorReference`?zr(e,e.operator,t,n):(G(e,t,n),e.kind===`Lambda`?e.params.length:0),G=(e,t,n)=>{let r=e=>e.forEach(e=>G(e,t,n));switch(e.kind){case`Number`:case`Decimal`:case`String`:case`ExceptAt`:return;case`Identifier`:{let r=zr(e,e.name,t,n);if(r>0)throw new u(`The operator ${e.name} requires ${r} arguments at line ${e.location.line}, column ${e.location.column}`);return}case`OperatorReference`:zr(e,e.operator,t,n);return;case`Apply`:qr(e,t,n);return;case`Lambda`:G(e.body,jr(t,e.params),n);return;case`And`:case`Or`:r(e.operands);return;case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:G(e.expression,t,n);return;case`If`:r([e.condition,e.consequent,e.alternative]);return;case`Case`:r(e.arms.flatMap(e=>[e.condition,e.body])),e.other&&G(e.other,t,n);return;case`Let`:G(e.body,Wr(e.definitions,t,n),n);return;case`Forall`:case`Exists`:case`FunctionConstruction`:G(e.body,Br(e.bounds,t,n),n);return;case`UnboundedQuantifier`:G(e.body,jr(t,e.names),n);return;case`Choose`:e.set&&G(e.set,t,n),G(e.body,jr(t,Nr(e.pattern)),n);return;case`SetEnumeration`:case`Tuple`:r(e.elements);return;case`SetFilter`:G(e.predicate,Br([e.bound],t,n),n);return;case`SetMap`:G(e.expression,Br(e.bounds,t,n),n);return;case`FunctionSet`:r([e.domain,e.range]);return;case`Record`:case`RecordSet`:if(new Set(e.fields.map(e=>e.name)).size<e.fields.length)throw new u(`Non-unique fields in constructor at line ${e.location.line}, column ${e.location.column}`);r(e.fields.map(e=>e.value));return;case`Except`:r([e.function,...e.updates.flatMap(e=>[...e.path.flatMap(e=>e.kind===`Index`?e.args:[]),e.value])]);return;case`FunctionApplication`:r([e.function,...e.args]);return;case`FieldAccess`:G(e.record,t,n);return;case`Product`:r(e.factors);return;case`BoxAction`:case`AngleAction`:r([e.action,e.subscript]);return;case`WeakFairness`:case`StrongFairness`:r([e.subscript,e.action]);return;case`Label`:G(e.body,t,n);return;case`Subexpression`:e.selectors.flatMap(e=>`args`in e?e.args:[]).forEach(e=>Jr(e,t,n))}},Yr=(e,t,n)=>(e.set&&G(e.set,t,n),{name:e.name,arity:e.arity,parent:t}),Xr=(e,t,n)=>{let r=e.assumptions.reduce((e,t)=>t.kind===`NewSymbol`?Yr(t,e,n):(t.kind===`AssumeProve`?Xr(t,e,n):G(t,e,n),e),t);return G(e.conclusion,r,n),r},Zr=(e,t,n)=>e.kind===`AssumeProve`?Xr(e,t,n):(G(e,t,n),t),Qr=(e,t,n)=>{e?.kind===`Steps`&&e.steps.reduce((e,t)=>$r(t,e,n),t)},$r=(e,t,n)=>{let r=e.body;switch(r.kind){case`Assert`:{let i=Zr(r.statement,t,n);return Qr(e.proof,i,n),r.isSuffices?i:t}case`Define`:return Wr(r.definitions.flatMap(e=>e.kind===`Instance`?[]:[e]),t,n);case`Have`:case`Case`:return G(r.expression,t,n),Qr(e.proof,t,n),t;case`Witness`:return r.expressions.forEach(e=>G(e,t,n)),t;case`Take`:return jr(Br(r.bounds,t,n),r.names);case`Pick`:{let i=jr(Br(r.bounds,t,n),r.names);return G(r.body,i,n),Qr(e.proof,t,n),i}default:return Qr(e.proof,t,n),t}},ei=(e,t)=>{let n=e.name!==void 0&&e.statement.kind!==`AssumeProve`?void 0:Zr(e.statement,void 0,t);Qr(e.proof,n,t)},ti=(e,t)=>new u(`Multiply-defined symbol '${e}' at line ${t.line}, column ${t.column}`),ni=(e,t,n,r)=>t.reduce((e,t)=>{if(Ar(e,t)||n(t))throw ti(t,r);return{name:t,arity:0,parent:e}},e),ri=(e,t,n,r)=>(e.forEach(e=>ai(e.set,t,n)),e.reduce((e,t)=>ni(e,Nr(t.pattern),n,r),t)),ii=(e,t,n)=>{if(e.kind===`Function`){let r=jr(t,[e.name]),i=ri(e.bounds,r,n,e.location);ai(e.body,i,n);return}let r=ni(t,e.params.map(e=>e.name),n,e.location);ai(e.body,r,n)},ai=(e,t,n)=>{let r=e.location;switch(e.kind){case`Lambda`:ai(e.body,ni(t,e.params,n,r),n);return;case`Let`:{let i=e.definitions.filter(e=>e.isRecursive).map(e=>e.name),a=e.definitions.reduce((e,t)=>{if(Ar(e,t.name)||n(t.name))throw ti(t.name,t.location);return ii(t,jr(e,i),n),jr(e,[t.name])},t);ai(e.body,ni(a,(e.instances??[]).flatMap(e=>e.name===void 0?[]:[e.name]),n,r),n);return}case`Forall`:case`Exists`:case`FunctionConstruction`:ai(e.body,ri(e.bounds,t,n,r),n);return;case`SetFilter`:ai(e.predicate,ri([e.bound],t,n,r),n);return;case`SetMap`:ai(e.expression,ri(e.bounds,t,n,r),n);return;case`UnboundedQuantifier`:ai(e.body,ni(t,e.names,n,r),n);return;case`Choose`:e.set&&ai(e.set,t,n),ai(e.body,ni(t,Nr(e.pattern),n,r),n);return;default:Ja(e).forEach(e=>ai(e,t,n))}},oi=e=>[...e.definitions.map(e=>({name:e.name,kind:`Definition`,location:e.location,isRecursive:e.isRecursive})),...e.instances.flatMap(e=>e.name===void 0?[]:[{name:e.name,kind:`Definition`,location:e.location,isRecursive:!1}]),...e.constants.map(e=>({name:e.name,kind:`Constant`,location:e.location,isRecursive:!1})),...e.variables.map(e=>({name:e.name,kind:`Variable`,location:e.location,isRecursive:!1}))],si=(e,t)=>{let n=/* @__PURE__ */ new Map;oi(e).sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>n.set(e.name,[...n.get(e.name)??[],e]));let r=(e,n)=>{if(!t.imported.has(e)&&!Er.has(e))return!1;let r=t.importedAt.get(e);return r===void 0||Dr(r,n)};n.forEach(e=>e.forEach((n,i)=>{let a=e.slice(0,i).some(e=>e.kind===`Definition`||n.kind===`Definition`||e.kind!==n.kind),o=t.imported.get(n.name)?.declaration===n.kind;if(a||!o&&r(n.name,n.location))throw ti(n.name,n.location)}));let i=e=>t=>(n.get(t)??[]).some(t=>t.isRecursive||Dr(t.location,e))||r(t,e);e.definitions.forEach(e=>ii(e,void 0,i(e.location))),e.assumptions.forEach(e=>ai(e.expression,void 0,i(e.location))),e.instances.forEach(e=>{let t=i(e.location),n=ni(void 0,e.params.map(e=>e.name),t,e.location);e.substitutions.forEach(e=>ai(e.expression,n,t))})},ci=(e,t)=>{let n=new Map([...Er,...t]);return e.constants.forEach(e=>n.set(e.name,{key:e.name,arity:e.arity})),e.variables.forEach(e=>n.set(e.name,{key:e.name,arity:0})),n},li=(e,t,n,r)=>{let i=Mr(void 0,e.params),a={imported:ci(n,r.imported),definitions:r.definitions,getKey:r.getKey,location:e.location,self:void 0,facts:/* @__PURE__ */ new Set},o=new Map(e.substitutions.map(e=>[e.name,e.expression])),s=`in the instance of ${e.module} at line ${e.location.line}, column ${e.location.column}`;return o.forEach((e,n)=>{if(t.every(e=>e.name!==n))throw new u(`Identifier '${n}' is not a legal target of a substitution ${s}`)}),new Map(t.map(t=>{let n=t.name;if(!o.has(n)&&!Ar(i,n)&&!Ir(n,a))throw new u(`Substitution missing for symbol ${n} ${s}`);let r=o.get(n)??{kind:`Identifier`,name:n,location:e.location};if(t.arity===0||r.kind!==`Identifier`)return G(r,i,a),[n,r];if(zr(r,r.name,i,a)!==t.arity)throw new u(`An operator must be substituted for symbol '${n}', and it must have arity ${t.arity} ${s}`);return[n,r]}))},ui=(e,t)=>{let n=ci(e,t.imported),r=new Set([...e.theorems,...e.assumptions].flatMap(e=>e.name??[])),i=(e,i)=>({imported:n,definitions:t.definitions,getKey:t.getKey,location:e,self:i,facts:r});e.definitions.forEach(e=>Ur(e,void 0,i(e.location,e))),e.assumptions.forEach(e=>G(e.expression,void 0,i(e.location,void 0))),e.theorems.forEach(e=>ei(e,i(e.location,void 0)))},di=/* @__PURE__ */ new WeakSet,fi=/* @__PURE__ */ new WeakSet,pi=(e,t,n=/* @__PURE__ */ new Set)=>{let r=yi(e,(e,r)=>pi(e,t,r.length===0?n:/* @__PURE__ */ new Set([...n,...r])));return r.kind===`Identifier`&&J(r)&&!n.has(r.name)?{...r,name:t.get(r.name)??r.name}:r.kind===`Apply`&&J(r)&&!n.has(r.operator)?{...r,operator:t.get(r.operator)??r.operator}:r},mi=(e,t)=>e.map(e=>({pattern:e.pattern,set:t(e.set)})),hi=/* @__PURE__ */ new WeakMap,gi=e=>hi.get(e)??e.name,_i=(e,t)=>(gi(t)!==e.name&&hi.set(e,gi(t)),e),vi=(e,t)=>_i(e.kind===`Function`?{...e,bounds:mi(e.bounds,e=>t(e,[])),body:t(e.body,Pr(e.bounds))}:{...e,body:t(e.body,e.params.map(e=>e.name))},e),yi=(e,t)=>{let n=e=>t(e,[]);switch(e.kind){case`Number`:case`Decimal`:case`String`:case`Identifier`:case`OperatorReference`:case`ExceptAt`:return e;case`Apply`:return{...e,args:e.args.map(n)};case`Lambda`:return{...e,body:t(e.body,e.params)};case`And`:case`Or`:return{...e,operands:e.operands.map(n)};case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:return{...e,expression:n(e.expression)};case`If`:return{...e,condition:n(e.condition),consequent:n(e.consequent),alternative:n(e.alternative)};case`Case`:return{...e,arms:e.arms.map(e=>({condition:n(e.condition),body:n(e.body)})),other:e.other?n(e.other):void 0};case`Let`:{let n=e.definitions.map(e=>e.name);return{...e,definitions:e.definitions.map(e=>vi(e,(e,r)=>t(e,[...n,...r]))),body:t(e.body,n)}}case`Forall`:case`Exists`:case`FunctionConstruction`:return{...e,bounds:mi(e.bounds,n),body:t(e.body,Pr(e.bounds))};case`UnboundedQuantifier`:return{...e,body:t(e.body,e.names)};case`Choose`:return{...e,set:e.set?n(e.set):void 0,body:t(e.body,Nr(e.pattern))};case`SetEnumeration`:case`Tuple`:return{...e,elements:e.elements.map(n)};case`SetFilter`:return{...e,bound:{pattern:e.bound.pattern,set:n(e.bound.set)},predicate:t(e.predicate,Nr(e.bound.pattern))};case`SetMap`:return{...e,bounds:mi(e.bounds,n),expression:t(e.expression,Pr(e.bounds))};case`FunctionSet`:return{...e,domain:n(e.domain),range:n(e.range)};case`Record`:case`RecordSet`:return{...e,fields:e.fields.map(e=>({name:e.name,value:n(e.value)}))};case`Except`:return{...e,function:n(e.function),updates:e.updates.map(e=>({path:e.path.map(e=>e.kind===`Index`?{kind:`Index`,args:e.args.map(n)}:e),value:n(e.value)}))};case`FunctionApplication`:return{...e,function:n(e.function),args:e.args.map(n)};case`FieldAccess`:return{...e,record:n(e.record)};case`Product`:return{...e,factors:e.factors.map(n)};case`BoxAction`:case`AngleAction`:return{...e,action:n(e.action),subscript:n(e.subscript)};case`WeakFairness`:case`StrongFairness`:return{...e,subscript:n(e.subscript),action:n(e.action)};case`Label`:return{...e,body:n(e.body)};case`Subexpression`:return{...e,selectors:e.selectors.map(e=>`args`in e?{...e,args:e.args.map(n)}:e)}}},bi=`LAMBDA`,xi=(e,t=/* @__PURE__ */ new Set)=>{let n=e.kind===`Identifier`?e.name:e.kind===`Apply`||e.kind===`OperatorReference`?e.operator:void 0,r=n===void 0||t.has(n)?[]:[n];return yi(e,(e,n)=>(r.push(...xi(e,n.length===0?t:/* @__PURE__ */ new Set([...t,...n]))),e)),r},Si=e=>{let t=/* @__PURE__ */ new Map;return n=>{if(!e.substitutedNames.has(n))return n;let r=t.get(n)??e.instantiation.createName(n);return t.set(n,r),r}},Ci=(e,t,n)=>new Map([...e,...t.map(e=>[e,n(e)])]),wi=(e,t)=>e.kind===`Name`?{kind:`Name`,name:t(e.name)}:{kind:`Tuple`,names:e.names.map(t)},Ti=(e,t)=>e.map(e=>({pattern:wi(e.pattern,t),set:e.set})),Ei=(e,t)=>e.kind===`Function`?{...e,bounds:Ti(e.bounds,t)}:{...e,params:e.params.map(e=>({name:t(e.name),arity:e.arity}))},Di=(e,t,n)=>{let r=e=>t.get(e)??e;switch(e.kind){case`Identifier`:return{...e,name:r(e.name)};case`Apply`:case`OperatorReference`:return{...e,operator:r(e.operator)};case`Label`:return{...e,params:e.params.map(r)};case`Lambda`:return{...e,params:e.params.map(n)};case`Let`:return{...e,definitions:e.definitions.map(e=>_i({...Ei(e,n),name:n(e.name)},e))};case`Forall`:case`Exists`:case`FunctionConstruction`:case`SetMap`:return{...e,bounds:Ti(e.bounds,n)};case`UnboundedQuantifier`:return{...e,names:e.names.map(n)};case`Choose`:return{...e,pattern:wi(e.pattern,n)};case`SetFilter`:return{...e,bound:{pattern:wi(e.bound.pattern,n),set:e.bound.set}};default:return e}},Oi=e=>`${e}@ENABLED`,ki=(e,t)=>e.modes.get(t)??e,Ai=(e,t,n)=>e.kind===`Identifier`&&!n.has(e.name)&&!J(e)&&t.instantiation.variables.has(e.name),ji=(e,t,n)=>{if(e.kind===`Tuple`){let r=e.elements.map(e=>ji(e,t,n));return r.every(e=>e!==void 0)?r.flat():void 0}if(e.kind!==`Identifier`)return;if(Ai(e,t,n))return[e.name];let r=J(e)?void 0:t.instantiation.getDefinition(e.name);return r?.kind===`Operator`&&r.params.length===0?ji(r.body,t,/* @__PURE__ */ new Map):void 0},Mi=(e,t,n)=>{if(t.mode===`Normal`)return;if(t.mode===`Primed`)return Ai(e,t,n)&&e.kind===`Identifier`?{kind:`Identifier`,name:Oi(e.name),location:e.location}:void 0;if(e.kind===`Prime`)return{...e,expression:Li(e.expression,ki(t,`Primed`),n)};if(e.kind===`AngleAction`){let r=e.location;return{kind:`And`,operands:[Li(e.action,t,n),{kind:`Apply`,operator:`#`,args:[{kind:`Prime`,expression:Li(e.subscript,ki(t,`Primed`),n),location:r},Li(e.subscript,t,n)],location:r}],location:r}}if(e.kind!==`Unchanged`)return;let r=ji(e.expression,t,n);if(r!==void 0)return{kind:`And`,operands:r.map(r=>({kind:`Apply`,operator:`=`,args:[{kind:`Prime`,expression:{kind:`Identifier`,name:Oi(r),location:e.location},location:e.location},Li({kind:`Identifier`,name:r,location:e.location},t,n)],location:e.location})),location:e.location}},Ni=(e,t)=>({kind:`Identifier`,name:e,location:t,resolution:{kind:`Local`}}),Pi=(e,t)=>e.map(e=>Ni(e.name,t)),Fi=(e,t,n,r)=>{let i=Array.from({length:n},(e,t)=>`argument${t}`);return{kind:`Lambda`,params:i,body:{kind:`Apply`,operator:e,args:[...Pi(t,r),...i.map(e=>Ni(e,r))],location:r},location:r}},Ii=(e,t)=>e.instantiation.isParameterized(t)?zi(e,t):void 0,Li=(e,t,n)=>{let r=e=>Li(e,t,n),i=t.instantiation,a=i.params,o=t=>!n.has(t)&&!J(e);if(e.kind===`Enabled`&&t.mode===`Normal`)return{...e,expression:Li(e.expression,ki(t,`Enabled`),n)};if((e.kind===`WeakFairness`||e.kind===`StrongFairness`)&&t.mode===`Normal`)return{...e,subscript:r(e.subscript),action:r(e.action),enabled:Li(e.enabled??{kind:`AngleAction`,action:e.action,subscript:e.subscript,location:e.location},ki(t,`Enabled`),n)};let s=Mi(e,t,n);if(s)return s;if(e.kind===`Identifier`&&o(e.name)){let n=i.substitutions.get(e.name);if(n)return di.add(n),n;let r=Ii(t,e.name);if(r===void 0)return e;if(a.length===0)return{...e,name:r};let o=i.getDefinition(e.name);return o&&Or(o)>0?Fi(r,a,Or(o),e.location):{kind:`Apply`,operator:r,args:Pi(a,e.location),location:e.location}}if(e.kind===`Apply`&&o(e.operator)){let n=e.args.map(r),o=i.substitutions.get(e.operator),s=i.substitutions.size>0||a.length>0||fi.has(e),c=e=>(s&&fi.add(e),e);if(o?.kind===`Identifier`||o?.kind===`OperatorReference`){let t=o.kind===`Identifier`?o.name:o.operator;return c({...e,operator:t,args:n,resolution:o.kind===`Identifier`?o.resolution:void 0})}if(o?.kind===`Apply`)return c({...e,operator:o.operator,args:[...o.args,...n],resolution:o.resolution});if(o?.kind===`Lambda`)return{kind:`Let`,definitions:[{kind:`Operator`,name:bi,params:o.params.map(e=>({name:e,arity:0})),body:o.body,isLocal:!0,isRecursive:!1,location:o.location}],body:{...e,operator:bi,args:n,resolution:{kind:`Local`}},location:e.location};if(o)throw new u(`The operator ${e.operator} can only be substituted by an operator at line ${e.location.line}, column ${e.location.column}`);let l=Ii(t,e.operator);return l===void 0?c({...e,args:n}):{...e,operator:l,args:[...Pi(a,e.location),...n]}}if(e.kind===`OperatorReference`&&o(e.operator)){let n=Ii(t,e.operator);if(n===void 0)return e;let r=i.getDefinition(e.operator);return a.length>0&&r?Fi(n,a,Or(r),e.location):{...e,operator:n}}let c=Si(t),l=yi(e,(e,i)=>i.length===0?r(e):Li(e,t,Ci(n,i,c)));return Di(l,n,c)},Ri=(e,t,n)=>t.length===0?e:e.kind===`Operator`?{...e,params:[...t,...e.params]}:{kind:`Operator`,name:e.name,params:t,body:{kind:`Let`,definitions:[e],body:Ni(e.name,n),location:n},isLocal:e.isLocal,isRecursive:!1,location:e.location},zi=(e,t)=>{let n=e.copies.get(t);if(n!==void 0)return n;let r=e.instantiation,i=r.getDefinition(t);return i?r.addDefinition(i.name,n=>{e.copies.set(t,n);let a=Si(e),o=Ei(vi(i,(t,n)=>Li(t,e,Ci(/* @__PURE__ */ new Map,n,a))),a);return Ri(o,r.params,i.location)}):t},Bi=e=>{let t=/* @__PURE__ */ new Map,n=new Set([...e.substitutions.values()].flatMap(e=>xi(e))),r=r=>{let i={instantiation:e,substitutedNames:n,copies:/* @__PURE__ */ new Map,mode:r,modes:t};return t.set(r,i),i},i=r(`Normal`);return r(`Enabled`),r(`Primed`),{getKey:e=>Ii(i,e)??e,getQualifiedKey:t=>{let n=Ii(i,t);if(n!==void 0)return n;let r=e.getDefinition(t);return r?e.addDefinition(r.name,()=>Ri(r,e.params,r.location)):t}}},Vi=e=>e.kind===`Let`&&e.instances!==void 0||Ja(e).some(Vi),Hi=(e,t,n)=>{let r=e.kind===`Let`?[...n,...e.definitions]:n,i=yi(e,e=>Hi(e,t,r));return i.kind!==`Let`||!i.instances?i:{kind:`Let`,definitions:i.instances.reduce((e,n)=>{let i=e.findIndex(e=>Dr(n.location,e.location)),a=i===-1?e.length:i;return[...e.slice(0,a),...t(n,r),...e.slice(a)]},i.definitions),body:i.body,location:i.location}},Ui=e=>e.name===void 0&&e.statement.kind!==`AssumeProve`?e.statement:void 0,Wi=(e,t)=>e.definitions.some(e=>Vi(e.body))||e.assumptions.some(e=>Vi(e.expression))||e.theorems.some(e=>{let t=Ui(e);return t!==void 0&&Vi(t)})?{...e,definitions:e.definitions.map(e=>vi(e,e=>Hi(e,t,[]))),assumptions:e.assumptions.map(e=>({...e,expression:Hi(e.expression,t,[])})),theorems:e.theorems.map(e=>{let n=Ui(e);return n===void 0?e:{...e,statement:Hi(n,t,[])}})}:e,Gi=/* @__PURE__ */ new WeakMap,Ki=/* @__PURE__ */ new WeakMap,K=(e,t,n)=>e.isInit?{environment:e.environment,scope:t,state:n,next:void 0}:{environment:e.environment,scope:t,state:e.current,next:n},qi=(e,t,n)=>{let r=e.slice();return r[t]=n,r},Ji=(t,n)=>{let r=X(t,n);if(typeof r==`boolean`)return r;try{return qa(r,`the action at ${q(t)}`)}catch(t){throw n.next===void 0?t:a(t,e.error)}},Yi=e=>e===`=`||e===`\\in`||e===`\\subseteq`,Xi=(e,t,n)=>{let r=n?Gi:Ki,i=r.get(e);if(i)return i;let a=wa(e,t,n);return r.set(e,a),a},Zi=(e,t)=>{if(t.constants.has(e))return;let n=Ya(e,t);return n?.kind===`Operator`&&n.params.length===0?n:void 0},Qi=(e,t,n,r=/* @__PURE__ */ new Set)=>{if(e.kind===`Prime`&&n)return Qi(e.expression,t,!1,r);if(e.kind!==`Identifier`||J(e))return;let i=t.variableIndex.get(e.name);if(i!==void 0)return n?void 0:i;let a=Zi(e.name,t);if(a&&!r.has(a))return r.add(a),Qi(a.body,t,n,r)},$i=(e,t,n)=>Qi(e,t,!n),ea=(e,t,n,r,i)=>{if(e.kind===`Prime`&&i)return ea(e.expression,t,n,r,!1);if(e.kind===`Let`){let a=Ao(e.definitions,K(r,t,n));return ea(e.body,a,n,r,i)}if(e.kind!==`Identifier`)return;let a=Ua(t,e.name);if(a?.kind===`Thunk`)return ea(a.expression,a.scope,n,r,i);if(a)return;let o=r.environment.variableIndex.get(e.name);if(o!==void 0)return i?void 0:o;let s=Zi(e.name,r.environment);if(s)return ea(s.body,void 0,n,r,i)},ta=(e,t)=>e.kind===`Let`||e.kind===`Identifier`&&(t||J(e))||!t&&e.kind===`Prime`,na=(e,t,n=/* @__PURE__ */ new Set)=>{if(e.kind===`Tuple`){let r=e.elements.map(e=>na(e,t,n));return r.every(e=>e!==void 0)?r.flat():void 0}if(e.kind!==`Identifier`||n.has(e.name))return;let r=t.variableIndex.get(e.name);if(r!==void 0)return[r];let i=Zi(e.name,t);if(i)return n.add(e.name),na(i.body,t,n)},ra=/* @__PURE__ */ new Set([`Label`,`And`,`Or`,`Exists`,`Forall`,`If`,`Case`,`Let`,`Unchanged`,`BoxAction`,`AngleAction`,`FunctionApplication`]),ia=(e,t,n)=>ra.has(e.kind)?!1:e.kind===`Identifier`?t.variableIndex.has(e.name)||t.constants.has(e.name):e.kind===`Apply`?e.operator===`=>`||Yi(e.operator)&&(ta(e.args[0],n)||$i(e.args[0],t,n)!==void 0)||J(e)?!1:t.definitions.get(t.substitutions.get(e.operator)??e.operator)===void 0&&t.builtins.has(e.operator):!0,aa=/* @__PURE__ */ new Set,oa=(e,t)=>{if(J(e))return e.kind===`Identifier`?t.has(e.name)?[]:[e.name]:void 0;let n=[],r={isReadOnly:!0};return yi(e,(e,i)=>{let a=r.isReadOnly?oa(e,i.length===0?t:/* @__PURE__ */ new Set([...t,...i])):[];return a?n.push(...a):r.isReadOnly=!1,e}),r.isReadOnly?n:void 0},sa=(e,t,n)=>{if(e.kind===`Or`||e.kind===`Exists`)return!0;let r=e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,i=r===void 0||J(e)?void 0:Ya(r,t);return i&&!n.has(i)&&(n.add(i),sa(i.body,t,n))?!0:Ja(e).some(e=>sa(e,t,n))},ca=(e,t,n)=>{if(e.kind===`Apply`&&e.operator===`=`){let r=$i(e.args[0],t,n);if(r!==void 0)return{kind:`Assign`,expression:e,index:r,value:e.args[1]}}if(!n&&e.kind===`Unchanged`){let n=na(e.expression,t);if(n)return{kind:`Unchanged`,expression:e,indices:n}}return ia(e,t,n)?{kind:`Guard`,expression:e}:{kind:`Branch`,expression:e,runner:Xi(e,t,n)}},la=(e,t,n)=>{let r=e.map(e=>ca(e,t,n)),i=(e,t,n,a,o,s)=>{let c=a,l;for(let a=e;a<r.length;a++){if(a>0&&t.isInit&&Oa(c)){l??=K(t,n,c);for(let e=a;e<r.length;e++)if(!ua(r[e].expression,l))return;s(c,o);return}let e=r[a];if(e.kind===`Guard`){if(l??=K(t,n,c),!Ji(e.expression,l))return;continue}if(e.kind===`Assign`){l??=K(t,n,c);let r=X(e.value,l),i=c[e.index];if(i===void 0)c=qi(c,e.index,r),l=void 0;else if(!Be(i,r))return;continue}if(e.kind===`Unchanged`){let n=t.current;if(!n)return;for(let t of e.indices){let e=c[t];if(e===void 0)c=qi(c,t,n[t]),l=void 0;else if(!Be(e,n[t]))return}continue}let u=a+1;e.runner(t,n,c,o,!0,(e,r)=>i(u,t,n,e,r,s));return}s(c,o)};return(e,t,n,r,a,o)=>i(0,e,t,n,r,o)},ua=(e,t)=>qa(X(e,t),`the initial predicate at ${q(e)}`),da=e=>(t,n,r,i,a,o)=>{Ji(e,K(t,n,r))&&o(r,i)},fa=(e,t)=>{let n=e.args[1];return(r,i,a,o,s,c)=>{let l=t(r,i,a),u=K(r,i,a);if(a[l]!==void 0){Ji(e,u)&&c(a,o);return}let d=X(n,u),p=e.operator===`\\subseteq`?{kind:`Subset`,base:d}:d;if(!L(p))throw new f(`In computing next states, the right side of \\in is not enumerable: ${H(p)} at ${q(e)}`);let m=Ht(p);for(let e=0;e<m.length&&!r.isStopped;e++)c(qi(a,l,m[e]),o)}},pa=/* @__PURE__ */ new WeakMap,ma=e=>{let t=pa.get(e);if(t)return t;let n=e.kind===`Tuple`?{kind:`And`,operands:e.elements.map(ma),location:e.location}:{kind:`Unchanged`,expression:e,location:e.location};return pa.set(e,n),n},ha=(e,t)=>{let n=e.args[0],r=da(e),i=(e,r,i)=>ea(n,r,i,e,!t)??-1,a=fa(e,i);return(t,n,o,s,c,l)=>{let u=i(t,n,o);if(u===-1||o[u]!==void 0){r(t,n,o,s,c,l);return}if(e.operator!==`=`){a(t,n,o,s,c,l);return}let d=X(e.args[1],K(t,n,o));l(qi(o,u,d),s)}},ga=(e,t,n,r)=>{if(e.kind===`FunctionConstruction`)return{bounds:e.bounds,body:e.body,scope:t};if(e.kind!==`Identifier`)return;let i=Ua(t,e.name);if(i?.kind===`Thunk`)return ga(i.expression,i.scope,n,r);let a=i?void 0:Ya(e.name,r.environment);if(a?.kind!==`Function`)return;let o=X(e,K(r,void 0,n));return{bounds:a.bounds,body:a.body,scope:Wa(void 0,a.name,o)}},_a=(e,t,n)=>{let r=da(e);return(i,a,o,s,c,l)=>{let u=ga(e.function,a,o,i);if(!u){r(i,a,o,s,c,l);return}let d=K(i,a,o),p=e.args.map(e=>X(e,d)),m=p.length===1?p[0]:I(p),h=to(u.bounds,K(i,u.scope,o));if(!B(m,h))throw new f(`Attempted to apply a function to ${H(m)}, which is not in its domain at ${q(e)}`);Xi(u.body,t,n)(i,no(u.bounds,u.scope,m),o,s,c,l)}},va=(e,t)=>{if(na(e,t))return la([ma(e)],t,!1);if(e.kind===`Tuple`)return Xi(ma(e),t,!1);let n=ma(e);return(r,i,a,o,s,c)=>{let l=e.kind===`Identifier`?Ua(i,e.name):void 0;l?.kind===`Thunk`?Xi(ma(l.expression),t,!1)(r,l.scope,a,o,s,c):Ji(n,K(r,i,a))&&c(a,o)}},ya=(e,t,n)=>{let r=e.operator,i=da(e),a=J(e)?void 0:mo(r,t);if(a?.kind===`Builtin`)return i;if(a?.kind===`Closure`){let i=os(a,e.args,t),o={body:void 0};return(e,s,c,l,u,d)=>{o.body??=Xi(a.body,t,n),o.body(e,i(K(e,s,c)),c,u?l:r,u,d)}}return(a,o,s,c,l,u)=>{let d=K(a,o,s),f=go(e,d);f?.kind===`Closure`?Xi(f.body,t,n)(a,Oo(f,e.args,d),s,l?c:r,l,u):i(a,o,s,c,l,u)}},ba=(e,t,n)=>{let r=da(e),i=J(e)?void 0:Zi(e.name,t),a={body:void 0};return(o,s,c,l,u,d)=>{let f=Ua(s,e.name);f?.kind===`Thunk`?Xi(f.expression,t,n)(o,f.scope,c,l,u,d):f||!i?r(o,s,c,l,u,d):(a.body??=Xi(i.body,t,n),a.body(o,void 0,c,u?l:i.name,u,d))}},xa=(e,t,n)=>{if(n.has(e))return;if(n.add(e),e.kind===`And`){let n=e.operands[0];if(n.kind!==`Apply`||n.operator!==`=`||J(n))return;let r=n.args[0],i=n.args[1];if(r.kind!==`FunctionApplication`||i.kind!==`String`)return;let a=r.args.length===1?r.args[0]:void 0;if(a?.kind!==`Identifier`||!J(a))return;let o=Qi(r.function,t,!1);return o===void 0?void 0:{variable:o,argument:a.name,labels:/* @__PURE__ */ new Set([i.value])}}if(e.kind===`Or`){let r=e.operands.map(e=>xa(e,t,n)),i=r[0],a=r.every(e=>e!==void 0&&e.variable===i?.variable&&e.argument===i.argument);if(!i||!a)return;let o=new Set(r.flatMap(e=>[...e?.labels??[]]));return{variable:i.variable,argument:i.argument,labels:o}}if(e.kind!==`Apply`||J(e))return;let r=mo(e.operator,t);if(r?.kind!==`Closure`||r.scope!==void 0)return;let i=xa(r.body,t,n),a=r.params.findIndex(e=>e.arity===0&&e.name===i?.argument),o=e.args[a];if(i&&o?.kind===`Identifier`&&J(o))return{variable:i.variable,argument:o.name,labels:i.labels}},Sa=(e,t,n)=>{let r=Ua(t,n.argument),i=e.current?.[n.variable];if(r?.kind!==`Value`||typeof i!=`object`||i.kind!==`Function`)return;let a=i.domain.indexOf(r.value),o=a===-1?void 0:i.range[a];return typeof o==`string`?o:void 0},Ca=(e,t,n)=>{let r=e.map(e=>Xi(e,t,n)),i=n?[]:e.map(e=>xa(e,t,/* @__PURE__ */ new Set)),a=i.find(e=>e!==void 0),o=i.map(e=>e?.variable===a?.variable&&e?.argument===a?.argument?e?.labels:void 0);return(e,t,n,i,s,c)=>{let l=a&&Sa(e,t,a);for(let a=0;a<r.length&&!e.isStopped;a++)(l===void 0||o[a]?.has(l)!==!1)&&r[a](e,t,n,i,s,c)}},wa=(e,t,n)=>{let r=e=>Xi(e,t,n);switch(e.kind){case`And`:return la(e.operands,t,n);case`Or`:return Ca(e.operands,t,n);case`Exists`:{let t=r(e.body),n=e.bounds[0];if(e.bounds.length===1&&n.pattern.kind===`Name`){let e=n.pattern.name;return(r,i,a,o,s,c)=>{let l=$a(X(n.set,K(r,i,a)),n.set);for(let n=0;n<l.length&&!r.isStopped;n++)t(r,Wa(i,e,l[n]),a,o,s,c)}}return(n,r,i,a,o,s)=>{eo(e.bounds,K(n,r,i),e=>(t(n,e,i,a,o,s),n.isStopped))}}case`Forall`:{let i=r(e.body),a=!n&&Ts(e,t)!==void 0&&!sa(e.body,t,/* @__PURE__ */ new Set)?oa(e,aa):void 0;return(t,n,r,o,s,c)=>{let l=[];eo(e.bounds,K(t,n,r),e=>(l.push(e),!1));let u=[...l.slice(0,1),...l.slice(1).reverse()];if(a?.every(e=>Ua(n,e)?.kind===`Value`)){u.every(n=>Ji(e.body,K(t,n,r)))&&c(r,o);return}let d=(n,r,a)=>{n===u.length?c(r,a):n>0&&t.isInit&&Oa(r)?u.slice(n).every(n=>ua(e.body,K(t,n,r)))&&c(r,a):i(t,u[n],r,a,!0,(e,t)=>d(n+1,e,t))};d(0,r,o)}}case`If`:{let t=r(e.consequent),n=r(e.alternative);return(r,i,a,o,s,c)=>{let l=X(e.condition,K(r,i,a));(qa(l,`an IF condition`)?t:n)(r,i,a,o,s,c)}}case`Case`:{let t=e.arms.map(e=>({condition:e.condition,body:r(e.body)})),n=e.other?r(e.other):void 0;return(r,i,a,o,s,c)=>{let l=K(r,i,a),u=t.find(e=>qa(X(e.condition,l),`a CASE guard`))?.body??n;if(!u)throw new f(`No CASE guard is true at ${q(e)}`);u(r,i,a,o,s,c)}}case`Let`:{let n=r(e.body),i=zo(e.definitions,t);return(t,r,a,o,s,c)=>n(t,Ao(e.definitions,K(t,r,a),i),a,o,s,c)}case`Unchanged`:return n?()=>{throw new f(`UNCHANGED appears in an initial predicate at ${q(e)}`)}:va(e.expression,t);case`AngleAction`:{let t=r(e.action),n=ma(e.subscript);return(e,r,i,a,o,s)=>t(e,r,i,a,o,(t,i)=>{Ji(n,K(e,r,t))||s(t,i)})}case`BoxAction`:return r({kind:`Or`,operands:[e.action,ma(e.subscript)],location:e.location});case`Label`:return r(e.body);case`Identifier`:return ba(e,t,n);case`FunctionApplication`:return _a(e,t,n);case`Apply`:{let i=e.args;if(Yi(e.operator)){let r=$i(i[0],t,n);if(r!==void 0)return e.operator===`=`?la([e],t,n):fa(e,()=>r);if(ta(i[0],n))return ha(e,n)}if(e.operator===`=>`){let e=r(i[1]);return(t,n,r,a,o,s)=>{let c=X(i[0],K(t,n,r));(typeof c==`boolean`?c:qa(c,`the left side of => at ${q(i[0])}`))?e(t,n,r,a,o,s):s(r,a)}}return ya(e,t,n)}default:return da(e)}},Ta=/* @__PURE__ */ new WeakMap,Ea=e=>{let t=Ta.get(e);if(t)return t;let n=e.variables.map(()=>void 0);return Ta.set(e,n),n},Da=(e,t)=>t.variables.filter((t,n)=>e[n]===void 0),Oa=e=>{for(let t=0;t<e.length;t++)if(e[t]===void 0)return!1;return!0},ka=(e,t)=>{let n=t.state;if(!n||!Oa(n))throw new f(`ENABLED needs a complete state at ${q(e)}`);let r=t.environment,i={value:!1};return Xi(e,r,!1)({environment:r,isInit:!1,current:n,isStopped:!1},t.scope,Ea(r),void 0,!1,()=>{i.value=!0}),i.value},Aa=(t,n,r,i)=>{let o={environment:n,isInit:!0,current:void 0,isStopped:!1};Xi(t,n,!0)(o,i,Ea(n),void 0,!1,t=>{if(!o.isStopped){if(!Oa(t))throw a(new f(`The initial predicate does not assign ${Da(t,n).join(`, `)}`),e.error);o.isStopped=r(t)}})},ja=(e,t,n)=>{let r=[];return Aa(e,t,e=>(r.push(e),!1),n),r},Ma=(e,t,n,r,i)=>{let a={environment:n,isInit:!1,current:t,isStopped:!1},o={successors:0};return Xi(e,n,!1)(a,i,Ea(n),void 0,!1,(e,t)=>{if(!a.isStopped){if(!Oa(e))throw new f(`Successor state is not completely specified by action ${t??`Next`}. The following variables are not assigned: ${Da(e,n).join(`, `)}`);o.successors++,a.isStopped=r({state:e,action:t})}}),o.successors},Na=(e,t,n,r)=>{let i=[];return Ma(e,t,n,e=>(i.push(e),!1),r),i},q=e=>`line ${e.location.line}, column ${e.location.column}`,Pa=e=>`line ${e.start.line}, col ${e.start.column} to line ${e.end.line}, col ${e.end.column} of module ${e.module}`,Fa=e=>{let t=e.location.range;return t?Pa(t):q(e)},Ia=(e,t)=>new f(`A non-boolean expression (${nr(t)}) was used as the condition of an IF.\n${Fa(e)}`),La=(e,t,n)=>{let r=e.location.range;if(r?.start.line===e.location.line&&r.start.column===e.location.column||!r){let r=e.operands[t],i=r.kind===`Number`?String(r.value):Fa(r);return new f(`A non-boolean expression (${nr(n)}) was used as a formula in a conjunction.\n${i}`)}let i=e.operands[Math.max(t,1)].location.range?.end??r.end;return new f(`Attempted to evaluate an expression of form P /\\ Q when ${t===0?`P`:`Q`} was\n${nr(n)}.\n${Fa({...e,location:{...e.location,range:{...r,end:i}}})}`)},Ra=e=>t=>`Attempted to select nonexistent field "${e.field}" from the record\n${H(t)}\n${Fa(e)}`,za=e=>t=>{if(!A(t))throw new f(`Attempted to apply the operator DOMAIN to a non-function\n(${nr(t)})\n${Fa(e)}`);return on(t)},Ba=(e,t)=>(n,r)=>{if(!k(n)||P(n))throw new f(`Attempted to evaluate an expression of form S \\subseteq T, but S was not enumerable.\n${Fa(e)}`);return t.evaluate([n,r])},Va=t=>a(new f(`TLC can't handle real numbers: ${t.text} at ${q(t)}`),e.configParseError),Ha=t=>a(new f(`TLC can't handle a number this big: ${t.text??t.value} at ${q(t)}`),e.error),Ua=(e,t)=>{for(let n=e;n;n=n.parent)if(n.name===t)return n.binding},Wa=(e,t,n)=>({name:t,binding:{kind:`Value`,value:n},parent:e}),Ga=(e,t,n)=>{if(t.kind===`Name`)return Wa(e,t.name,n);let r=Yt(n);if(!r||r.length!==t.names.length)throw new f(`Cannot bind <<${t.names.join(`, `)}>> to ${H(n)}, which is not a tuple of that length`);return t.names.reduce((e,t,n)=>Wa(e,t,r[n]),e)},Ka=(e,t)=>({environment:e.environment,scope:t,state:e.state,next:e.next}),qa=(e,t)=>{if(typeof e!=`boolean`)throw new f(`Expected ${t} to be a boolean but found ${H(e)}`);return e},Ja=e=>{switch(e.kind){case`Number`:case`Decimal`:case`String`:case`Identifier`:case`OperatorReference`:case`ExceptAt`:return[];case`Apply`:return e.args;case`Lambda`:return[e.body];case`And`:case`Or`:return e.operands;case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:return[e.expression];case`If`:return[e.condition,e.consequent,e.alternative];case`Case`:return[...e.arms.flatMap(e=>[e.condition,e.body]),...e.other?[e.other]:[]];case`Let`:return[...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),e.body];case`Forall`:case`Exists`:return[...e.bounds.map(e=>e.set),e.body];case`UnboundedQuantifier`:return[e.body];case`Choose`:return[...e.set?[e.set]:[],e.body];case`SetEnumeration`:case`Tuple`:return e.elements;case`SetFilter`:return[e.bound.set,e.predicate];case`SetMap`:return[e.expression,...e.bounds.map(e=>e.set)];case`FunctionConstruction`:return[...e.bounds.map(e=>e.set),e.body];case`FunctionSet`:return[e.domain,e.range];case`Record`:case`RecordSet`:return e.fields.map(e=>e.value);case`Except`:return[e.function,...e.updates.flatMap(e=>[...e.path.flatMap(e=>e.kind===`Index`?e.args:[]),e.value])];case`FunctionApplication`:return[e.function,...e.args];case`FieldAccess`:return[e.record];case`Product`:return e.factors;case`BoxAction`:case`AngleAction`:return[e.action,e.subscript];case`WeakFairness`:case`StrongFairness`:return[e.subscript,e.action];case`Label`:return[e.body];case`Subexpression`:return e.selectors.flatMap(e=>`args`in e?e.args:[])}},J=e=>(e.kind===`Identifier`||e.kind===`Apply`)&&e.resolution?.kind===`Local`,Ya=(e,t)=>t.definitions.get(t.substitutions.get(e)??e),Xa=(e,t)=>{if(e.kind===`Prime`||e.kind===`Unchanged`||e.kind===`Enabled`)return!0;let n=e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0;if(n!==void 0){if(t.variableIndex.has(n)||t.builtins.get(n)?.isStateLevel)return!0;let e=Ya(n,t);if(e&&!t.constants.has(n)&&!Za(e,t))return!0}return Ja(e).some(e=>Xa(e,t))},Za=(e,t)=>{let n=t.constantLevels.get(e);if(n!==void 0)return n;t.constantLevels.set(e,!0);let r=!Xa(e.body,t)&&(e.kind===`Operator`||!e.bounds.some(e=>Xa(e.set,t)));return t.constantLevels.set(e,r),r},Qa=(e,t)=>{let n=`universally (\\A) or existentially (\\E) quantify over ${t}, because this would require checking an\ninfinite number of cases.`;if(typeof e==`object`&&e.kind===`SequenceSet`)return`In TLA+, Seq(S) represents the set of all finite sequences whose elements come from the set S. Even when S\nis a finite set, the number of possible sequences in Seq(S) is unbounded because sequences can have any\nfinite length (e.g., length 0, 1, 2, and so on). As a result, TLC cannot evaluate expressions that\n${n} Note that for a finite set of sequences s, TLC handles s \\subseteq Seq(S).\nSee https://explain.tlapl.us/seq-unenumerable for additional details.`;if(typeof e==`object`&&e.kind===`InfiniteSet`&&e.name!==`STRING`&&e.name!==`Any`)return`The set ${e.name} contains infinitely many elements. As a result, TLC cannot evaluate expressions that\n${n} Note that TLC handles set membership like T \\subseteq ${e.name} for any finite set T.`},$a=(e,t)=>{if(!k(e)||P(e)){let n=H(e),r=Qa(e,n);throw new f(r===void 0?`TLC encountered a non-enumerable quantifier bound\n${n}.\n${Fa(t)}`:`TLC encountered the non-enumerable quantifier bound\n${n}\n${Fa(t)}\n${r}`)}return typeof e==`object`&&e.kind===`Interval`?Dt(e):R(e).elements},eo=(e,t,n)=>{let r=e.map(e=>$a(X(e.set,t),e.set)),i=(t,a)=>t<0?n(a):r[t].some(n=>i(t-1,Ga(a,e[t].pattern,n)));return i(e.length-1,t.scope)},to=(e,t)=>{let n=e.map(e=>X(e.set,t));return n.length===1?n[0]:{kind:`ProductSet`,factors:n}},no=(e,t,n)=>{if(e.length===1)return Ga(t,e[0].pattern,n);let r=Yt(n)??[];return e.reduce((e,t,n)=>Ga(e,t.pattern,r[n]),t)},ro=/* @__PURE__ */ new WeakMap,io=(e,t)=>{let n=ro.get(t);if(n)return n;let r=t.location.range;if(!r)return;let i={parameters:e.flatMap((t,n)=>n>0&&e[n-1].set===t.set?[]:[{index:n,name:t.pattern.kind===`Name`?t.pattern.name:`<<${t.pattern.names.join(`, `)}>>`}]),body:Pa(r)};return ro.set(t,i),i},ao=(e,t,n)=>{let r=io(e,t);if(!r)return;let i=e.length>1&&typeof n==`object`&&n.kind===`ProductSet`?n.factors:[n];return{parameters:r.parameters.map(e=>({name:e.name,domain:i[e.index]})),body:r.body}},oo=(e,t,n)=>{let r=/* @__PURE__ */ new Map,i={kind:`LazyFunction`,domain:e,source:n,apply:e=>{let n=hn(e),a=r.get(n);if(a!==void 0){for(let t=0;t<a.length;t+=2)if(He(a[t],e))return a[t+1]}let o=t(e,i),s=r.get(n);return s===void 0?r.set(n,[e,o]):s.push(e,o),o}};return i},so=(e,t)=>{let n=to(e.bounds,t),r=oo(n,(n,r)=>X(e.body,Ka(t,no(e.bounds,Wa(void 0,e.name,r),n))),ao(e.bounds,e.body,n));return e.bounds.length===1?en(r):r},co=(e,t)=>e.kind===`Function`?so(e,t):X(e.body,t),lo=(e,t)=>{let n=Za(e,t.environment),r=n?t.environment.definitionValues.get(e):void 0;if(r!==void 0)return r;if(e.kind===`Operator`&&e.params.length>0)throw new f(`Operator ${e.name} requires ${e.params.length} arguments`);let i=Ka(t,void 0);if(!n)return co(e,i);let a=t.environment.runtime.evaluateAtStartup(()=>co(e,i));return t.environment.definitionValues.set(e,a),a},uo=(e,t)=>{let n=e.state===t.state&&e.next===t.next;if(n&&e.cache!==void 0)return e.cache;let r=X(e.expression,Ka(t,e.scope));return n&&(e.cache=r),r},fo=/* @__PURE__ */ new WeakMap,po=e=>{let t=fo.get(e);if(t)return t;let n={kind:`Closure`,name:e.name,params:e.params,body:e.body,scope:void 0};return fo.set(e,n),n},mo=(e,t)=>{let n=t.substitutions.get(e);if(n!==void 0)return mo(n,t);let r=t.definitions.get(e);return r?.kind===`Operator`?po(r):t.builtins.get(e)},ho=/* @__PURE__ */ new WeakMap,go=(e,t)=>{if(J(e))return _o(e.operator,t);let n=ho.get(e),r=n===void 0?mo(e.operator,t.environment)??null:n;return n===void 0&&ho.set(e,r),r??_o(e.operator,t)},_o=(e,t)=>{let n=Ua(t.scope,e);if(n?.kind===`Operator`)return n.operator;if(!n)return mo(e,t.environment)},vo=e=>e.kind===`Closure`?e.params.length:e.arity,yo=(e,t)=>{if(e.kind===`Lambda`)return{kind:`Closure`,name:`LAMBDA`,params:e.params.map(e=>({name:e,arity:0})),body:e.body,scope:t.scope};let n=e.kind===`OperatorReference`?e.operator:e.kind===`Identifier`?e.name:void 0,r=n===void 0?void 0:_o(n,t);if(!r)throw new f(`Expected an operator argument at ${q(e)}`);return r},bo=(e,t,n)=>{if(e.kind===`Builtin`)return e.evaluate(t,n);if(e.kind===`Operator`)return e.call(t);let r=e.params.reduce((e,n,r)=>Wa(e,n.name,t[r]),e.scope);return X(e.body,Ka(n,r))},xo=(e,t)=>e.kind===`Operator`?e:{kind:`Operator`,name:e.name,arity:vo(e),call:n=>bo(e,n,t),literalBody:e.kind===`Closure`&&(e.body.kind===`Number`||e.body.kind===`String`)?e.body.value:void 0},So=(e,t)=>{if(e.kind===`Lambda`||e.kind===`OperatorReference`)return!0;if(e.kind!==`Identifier`)return!1;let n=_o(e.name,t);return n!==void 0&&vo(n)>0},Co=(e,t)=>({kind:`Thunk`,expression:e,scope:t.scope,state:t.state,next:t.next,cache:void 0}),wo=(e,t)=>{let n=t.variableIndex.get(e);if(n!==void 0)return{kind:`Variable`,index:n};let r=t.constants.get(e);if(r!==void 0)return{kind:`Value`,value:r};let i=t.substitutions.get(e);if(i!==void 0)return wo(i,t);let a=t.definitions.get(e);if(a)return{kind:`Definition`,definition:a};let o=t.builtins.get(e);if(o&&o.arity===0&&!o.isStateLevel)return{kind:`Value`,value:o.evaluate([])}},To=(e,t)=>{if(e.kind===`String`||e.kind===`Number`&&Mo(e.value)){let t={kind:`Value`,value:e.value};return()=>t}if(e.kind===`Identifier`){let n=J(e)?void 0:wo(e.name,t);if(n?.kind===`Value`){let e={kind:`Value`,value:n.value};return()=>e}if(n===void 0)return t=>{let n=Ua(t.scope,e.name);return n?.kind===`Value`||n?.kind===`Thunk`?n:Co(e,t)}}return t=>Co(e,t)},Eo=/* @__PURE__ */ new WeakMap,Do=(e,t)=>{let n=Eo.get(e);if(n)return n;let r=To(e,t);return Eo.set(e,r),r},Oo=(e,t,n)=>{if(t.length!==e.params.length)throw new f(`Operator ${e.name} expects ${e.params.length} arguments but received ${t.length}`);let r=e.scope;for(let i=0;i<t.length;i++){let a=e.params[i],o=a.arity>0?{kind:`Operator`,operator:yo(t[i],n)}:Do(t[i],n.environment)(n);r={name:a.name,binding:o,parent:r}}return r},ko=(e,t,n)=>e.kind===`Closure`?X(e.body,Ka(n,Oo(e,t,n))):e.kind===`Operator`?e.call(t.map(e=>X(e,n))):e.isLazy?e.evaluate(is(t,n),n):e.evaluate(t.map(e=>So(e,n)?xo(yo(e,n),n):X(e,n)),n),Ao=(e,t,n)=>e.reduce((e,r)=>{let i={name:r.name,binding:{kind:`Value`,value:!1},parent:e};return r.kind===`Function`?(i.binding={kind:`Thunk`,expression:{kind:`FunctionConstruction`,bounds:r.bounds,body:r.body,location:r.location,isRecursive:!0},scope:i,state:t.state,next:t.next,cache:void 0},i):r.params.length>0||n?.has(r)?(i.binding={kind:`Operator`,operator:{kind:`Closure`,name:r.name,params:r.params,body:r.body,scope:i}},i):(i.binding={kind:`Thunk`,expression:r.body,scope:i,state:t.state,next:t.next,cache:void 0},i)},t.scope),jo=(e,t,n)=>{let r=Ua(n.scope,e);if(r?.kind===`Value`)return r.value;if(r?.kind===`Thunk`)return uo(r,n);if(r?.kind===`Operator`){if(vo(r.operator)===0)return bo(r.operator,[],n);throw new f(`Operator ${e} is used without arguments`)}let i=wo(e,n.environment);if(i?.kind===`Variable`){let r=n.state?.[i.index];if(r===void 0)throw new f(`The variable ${e} is not assigned at ${q(t)}`);return r}if(i?.kind===`Value`)return i.value;if(i?.kind===`Definition`)return lo(i.definition,n);let a=n.environment.builtins.get(e);if(a?.arity===0)return a.evaluate([],n);throw new f(`Unknown identifier ${e} at ${q(t)}`)},Mo=e=>Number.isInteger(e)&&e<=2147483647&&e>=-2147483648,No=/* @__PURE__ */ new Set([`Print`,`PrintT`,`Assert`,`JavaTime`,`RandomElement`,`TLCGet`,`TLCSet`]),Po=(e,t)=>No.has(e)||t.builtins.get(e)?.isStateLevel===!0,Fo=/* @__PURE__ */ new WeakMap,Io=(e,t)=>e.kind===`Operator`&&e.params.length===0&&Za(e,t),Lo=(e,t)=>{let n=e.kind===`Identifier`?e.name:e.kind===`Apply`||e.kind===`OperatorReference`?e.operator:void 0;if(n!==void 0&&!J(e)){let e=Ya(n,t);if(!e&&Po(n,t)||e&&!Io(e,t)&&Ro(e,t))return!0}return Ja(e).some(e=>Lo(e,t))},Ro=(e,t)=>{let n=Fo.get(e);if(n!==void 0)return n;Fo.set(e,!1);let r=Lo(e.body,t)||e.kind===`Function`&&e.bounds.some(e=>Lo(e.set,t));return Fo.set(e,r),r},zo=(e,t)=>new Set(e.filter(e=>Ro(e,t))),Bo=e=>[...e.definitions.values()].some(t=>Ro(t,e)),Vo=/* @__PURE__ */ new WeakMap,Ho=(e,t)=>{let n=Vo.get(e);if(n!==void 0)return n;let r=Ko(e,t,Wo);return Vo.set(e,r),r},Uo=/* @__PURE__ */ new Set([`Number`,`String`,`Identifier`,`Apply`,`And`,`Or`,`If`,`Case`,`SetEnumeration`,`Tuple`,`FunctionSet`,`Record`,`RecordSet`,`FunctionApplication`,`FieldAccess`,`Product`,`SetFilter`,`SetMap`,`Forall`,`Exists`,`Choose`,`FunctionConstruction`,`Let`]),Wo=/* @__PURE__ */ new Set,Go=(e,t,n)=>n.size===0?Ho(e,t):Ko(e,t,n),Ko=(e,t,n)=>{if(!Uo.has(e.kind))return!1;if(e.kind===`Identifier`&&J(e))return n.has(e.name);if(J(e))return!1;if(e.kind===`Identifier`){let n=wo(e.name,t);return n?.kind===`Value`||n?.kind===`Definition`&&Io(n.definition,t)}if(e.kind===`Apply`){if(Po(e.operator,t)||e.operator===`~>`)return!1;let r=mo(e.operator,t);if(r?.kind!==`Builtin`&&r?.kind!==`Closure`)return!1;if(r.kind===`Closure`){let n=Ya(e.operator,t);if(!n||!Za(n,t)||Ro(n,t))return!1}return!(r.kind===`Closure`?r.params:[]).some(e=>e.arity>0)&&e.args.every(e=>e.kind!==`Lambda`&&e.kind!==`OperatorReference`&&Go(e,t,n))}let r={value:!0};return yi(e,(e,i)=>(r.value&&=Go(e,t,i.length===0?n:/* @__PURE__ */ new Set([...n,...i])),e)),r.value},qo=e=>e.kind!==`Number`&&e.kind!==`String`&&e.kind!==`Identifier`,Jo=e=>{let t={value:void 0};return n=>{if(t.value!==void 0)return t.value;let r=e(n);return t.value=r,r}},Yo=(e,t)=>{if(e.kind===`Identifier`&&J(e))return!t.has(e.name);if(J(e))return!0;let n={value:!1};return yi(e,(e,r)=>(n.value||=Yo(e,r.length===0?t:/* @__PURE__ */ new Set([...t,...r])),e)),n.value},Xo=(e,t)=>di.has(e)&&qo(e)&&Ts(e,t)!==void 0&&!Yo(e,Wo),Y=(e,t)=>{let n=t.evaluators.get(e);if(n)return n;let r=Ss(e,t),i=qo(e)&&Ho(e,t)?Jo(r):Xo(e,t)?ts(r):r;return t.evaluators.set(e,i),i},Zo=/* @__PURE__ */ new WeakMap,Qo=(e,t)=>{let n=Zo.get(e);if(n)return n;let r=(qo(e)&&Ho(e,t)?void 0:Sr(e,t))??Y(e,t);return Zo.set(e,r),r},X=(e,t)=>Qo(e,t.environment)(t),$o=(e,t)=>{let n=e.name,r=J(e)?void 0:wo(n,t);if(r?.kind===`Variable`){let t=r.index;return r=>{let i=r.state?.[t];if(i===void 0)throw new f(`The variable ${n} is not assigned at ${q(e)}`);return i}}if(r?.kind===`Value`){let e=r.value;return()=>e}if(r?.kind===`Definition`&&r.definition.kind===`Operator`){let e=r.definition;if(e.params.length===0&&Za(e,t))return t=>lo(e,t);if(e.params.length===0){let n={body:void 0},r=r=>(n.body??=Qo(e.body,t),n.body(Ka(r,void 0)));return es(e,t)?ts(r):r}return t=>lo(e,t)}if(r?.kind===`Definition`){let e=r.definition,n=t=>lo(e,t);return Za(e,t)||!es(e,t)?n:ts(n)}return t=>jo(n,e,t)},es=(e,t)=>Ts(e.body,t)!==void 0&&(e.kind===`Operator`||e.bounds.every(e=>Ts(e.set,t)!==void 0)),ts=e=>{let t={recent:void 0,recentValue:void 0,previous:void 0,previousValue:void 0};return n=>{let r=n.state;if(r!==void 0&&t.recent===r&&t.recentValue!==void 0)return t.recentValue;if(r!==void 0&&t.previous===r&&t.previousValue!==void 0)return t.previousValue;let i=e(n);return t.previous=t.recent,t.previousValue=t.recentValue,t.recent=r,t.recentValue=i,i}},ns=(e,t)=>{let n=mo(e,t);return n!==void 0&&vo(n)>0},rs=(e,t)=>e.kind!==`Lambda`&&e.kind!==`OperatorReference`&&!(e.kind===`Identifier`&&!J(e)&&ns(e.name,t)),is=(e,t)=>e.map(e=>({kind:`Operator`,name:`argument`,arity:0,call:()=>X(e,t),expression:e})),as=(e,t,n)=>{if(e.isLazy)return n=>e.evaluate(is(t,n),n);let r=e.evaluateUnary;if(r&&t.length===1&&rs(t[0],n)){let e=Y(t[0],n);return t=>r(e(t))}let i=e.evaluateBinary,a=t.length===2&&rs(t[0],n)&&rs(t[1],n);if(i&&a){let e=Y(t[0],n),r=Y(t[1],n);return t=>i(e(t),r(t))}return n=>e.evaluate(t.map(e=>So(e,n)?xo(yo(e,n),n):X(e,n)),n)},os=(e,t,n)=>{if(t.length!==e.params.length)return()=>{throw new f(`Operator ${e.name} expects ${e.params.length} arguments but received ${t.length}`)};let r=e.params,i=t.map((e,t)=>r[t].arity>0?void 0:Do(e,n));return n=>{let a=e.scope;for(let e=0;e<t.length;e++){let o=i[e],s=o?o(n):{kind:`Operator`,operator:yo(t[e],n)};a={name:r[e].name,binding:s,parent:a}}return a}},ss=/* @__PURE__ */ new WeakMap,cs=e=>{let t=ss.get(e);if(t)return t;let n={calls:/* @__PURE__ */ new Map,size:0};return ss.set(e,n),n},ls=(e,t)=>{let n=[];for(let r=e;n.length<t;r=r?.parent){if(r?.binding.kind!==`Value`)return;n.push(r.binding.value)}return n},us=(e,t)=>e.every((e,n)=>He(e,t[n])),ds=(e,t)=>{let n=Ya(e.operator,t);return n?.kind===`Operator`&&n.params.length>0&&n.params.every(e=>e.arity===0)&&Za(n,t)&&!Ro(n,t)},fs=(e,t,n,r)=>{let i=os(e,t,n),a={body:void 0},o=(t,r)=>(a.body??=Qo(e.body,n),a.body({environment:n,scope:t,state:r.state,next:r.next}));if(!r)return e=>o(i(e),e);let s=cs(e);return e=>{let n=i(e),r=ls(n,t.length);if(!r)return o(n,e);let a=r.length;for(let e of r)a=un(a,hn(e));let c=s.calls.get(a),l=c?.find(e=>us(e.args,r));if(l)return l.value;let u=o(n,e);return s.size<65536&&(s.size++,c?c.push({args:r,value:u}):s.calls.set(a,[{args:r,value:u}])),u}},ps=(e,t)=>{let n=e.args;if(e.operator===`=>`){let e=Y(n[0],t),r=Y(n[1],t);return t=>!qa(e(t),`the left side of =>`)||qa(r(t),`the right side of =>`)}if(e.operator===`~>`)return()=>{throw new f(`TLC cannot evaluate a temporal formula such as ~> in a state`)};let r=J(e)?void 0:mo(e.operator,t);if(r?.kind===`Closure`)return fs(r,n,t,ds(e,t));if(r?.kind===`Builtin`&&r.name===`DOMAIN`){let r=Y(n[0],t),i=za(e);return e=>i(r(e))}if(r?.kind===`Builtin`&&r.name===`TLCEval`&&n.length===1){let i=Y(n[0],t);return fi.has(e)||Xa(n[0],t)?i:e=>e.scope===void 0?r.evaluate([i(e)]):i(e)}if(r?.kind===`Builtin`&&r.name===`\\subseteq`&&n.length===2){let i=Y(n[0],t),a=Y(n[1],t),o=Ba(e,r);return e=>o(i(e),a(e))}return r?.kind===`Builtin`?as(r,n,t):r=>{let i=_o(e.operator,r);if(i)return ko(i,n,r);throw t.definitions.get(e.operator)?.kind===`Function`?new f(`${e.operator} is a function; apply it with brackets`):new f(`Unknown operator ${e.operator} at ${q(e)}`)}},ms=(e,t)=>{let n=e.kind===`Forall`,r=n?`the body of \\A`:`the body of \\E`,i=Y(e.body,t),a=e.bounds[0];if(e.bounds.length===1&&a.pattern.kind===`Name`){let e=a.pattern.name,o=Y(a.set,t);return t=>{let s=$a(o(t),a.set);for(let a=0;a<s.length;a++){let o=qa(i(Ka(t,Wa(t.scope,e,s[a]))),r);if(o!==n)return o}return n}}let o=e.bounds;if(o.every(e=>e.pattern.kind===`Name`)){let e=o.map(e=>e.pattern.kind===`Name`?e.pattern.name:``),a=o.map(e=>Y(e.set,t));return t=>{let s=a.map((e,n)=>$a(e(t),o[n].set)),c=(a,o)=>{if(a<0)return qa(i(Ka(t,o)),r)!==n;let l=s[a];for(let t=0;t<l.length;t++)if(c(a-1,Wa(o,e[a],l[t])))return!0;return!1};return c(o.length-1,t.scope)?!n:n}}return e=>eo(o,e,t=>qa(i(Ka(e,t)),r)!==n)?!n:n},hs=(e,t)=>{if(e.kind===`Tuple`)return I(e.names.map(e=>{let n=Ua(t,e);return n?.kind===`Value`&&n.value}));let n=Ua(t,e.name);return n?.kind===`Value`?n.value:void 0},gs=/* @__PURE__ */ new WeakSet,_s=e=>{(e.kind===`FunctionConstruction`||e.kind===`Except`)&&gs.add(e)},vs=(e,t)=>{let n=gs.has(e),r=Y(e.body,t),i=e.bounds,a=i[0],o=i.length===1&&a.pattern.kind===`Name`,s=Y(a.set,t);return t=>{let c=o?s(t):to(i,t);if(e.isRecursive||n||!L(c)){let n=oo(c,e=>r(Ka(t,no(i,t.scope,e))),ao(i,e.body,c));return i.length===1?en(n):n}if(o&&a.pattern.kind===`Name`){let e=a.pattern.name,n=kt(c);return en(ze(n,n.map(n=>r(Ka(t,Wa(t.scope,e,n))))))}let l=[];return eo(i,t,e=>{let n=i.length===1?hs(a.pattern,e)??!1:I(i.map(t=>hs(t.pattern,e)??!1));return l.push([n,r(Ka(t,e))]),!1}),xt(l)}},ys=(e,t)=>{let n=gs.has(e);n&&_s(e.function);let r=Y(e.function,t),i=e.updates.map(e=>({path:e.path.map(e=>e.kind===`Field`?{kind:`Field`,name:e.name,args:[]}:{kind:`Index`,name:``,args:e.args.map(e=>Y(e,t))}),value:Y(e.value,t)})),a=(e,t)=>e.kind===`Field`?e.name:e.args.length===1?e.args[0](t):I(e.args.map(e=>e(t))),o=(e,t,r,i,s)=>r===t.length?s(Ka(i,Wa(i.scope,`@`,e))):sn(e,a(t[r],i),e=>o(e,t,r+1,i,s),n&&r===0);return e=>{let t=r(e);for(let n of i)t=o(t,n.path,0,e,n.value);return t}},bs=(e,t)=>{if(e.kind===`SetFilter`){let n=Y(e.predicate,t),r=Y(e.bound.set,t),i=e.bound.pattern;return t=>{let a=r(t),o=e=>qa(n(Ka(t,Ga(t.scope,i,e))),`a set filter predicate`);if(typeof a!=`object`||a.kind!==`Set`&&a.kind!==`MixedSet`&&a.kind!==`Interval`){if(k(a))return{kind:`FilteredSet`,base:a,test:o};throw new f(`TLC encountered a non-enumerable quantifier bound ${H(a)} at ${q(e.bound.set)}`)}return Re(R(a).elements.filter(o))}}if(e.kind===`SetMap`){let n=Y(e.expression,t);return t=>{let r=[];return eo(e.bounds,t,e=>(r.push(n(Ka(t,e))),!1)),gt(r)}}let n=e.set;if(!n)return()=>{throw new f(`TLC cannot evaluate an unbounded CHOOSE at ${q(e)}`)};let r=Y(e.body,t),i={pattern:e.pattern,set:n};return t=>{let n={value:void 0};if(eo([i],t,i=>qa(r(Ka(t,i)),`the body of CHOOSE`)?(n.value=hs(e.pattern,i),!0):!1),n.value===void 0)throw new f(`Attempted to compute the value of an expression of form\nCHOOSE x \\in S: P, but no element of S satisfied P.\n${Fa(e)}`);return n.value}},xs=(e,t)=>{let n=[...e].sort((e,t)=>F(e.name,t.name)),r=n.some((e,t)=>t>0&&n[t-1].name===e.name),i=n.map(e=>Y(e.value,t));if(r)return e=>xt(n.map((t,n)=>[t.name,i[n](e)]));let a=n.map(e=>e.name),o=e.map(e=>e.name);return o.some((e,t)=>e!==a[t])?e=>be(a,i.map(t=>t(e)),o):e=>ze(a,i.map(t=>t(e)))},Ss=(e,t)=>{let n=e=>Y(e,t);switch(e.kind){case`Number`:{let t=e.value;return Mo(t)?()=>t:()=>{throw Ha(e)}}case`Decimal`:return()=>{throw Va(e)};case`String`:{let t=e.value;return()=>t}case`Identifier`:return $o(e,t);case`Apply`:return ps(e,t);case`OperatorReference`:case`Lambda`:return()=>{throw new f(`An operator cannot be used as a value at ${q(e)}`)};case`And`:{let t=e.operands.map(n);return n=>{for(let r=0;r<t.length;r++){let i=t[r](n);if(typeof i!=`boolean`)throw La(e,r,i);if(!i)return!1}return!0}}case`Or`:{let t=e.operands.map(n);return e=>{for(let n=0;n<t.length;n++)if(qa(t[n](e),`a disjunct`))return!0;return!1}}case`Prime`:{let t=n(e.expression);return n=>{if(!n.next)throw new f(`A primed expression appears outside an action at ${q(e)}`);return t({environment:n.environment,scope:n.scope,state:n.next,next:void 0})}}case`Unchanged`:{let t=n({kind:`Prime`,expression:e.expression,location:e.location}),r=n(e.expression);return e=>Be(t(e),r(e))}case`If`:{let t=n(e.condition),r=n(e.consequent),i=n(e.alternative);return n=>{let a=t(n);if(typeof a!=`boolean`)throw Ia(e,a);return a?r(n):i(n)}}case`Case`:{let t=e.arms.map(e=>({condition:n(e.condition),body:n(e.body)})),r=e.other?n(e.other):void 0;return n=>{for(let e of t)if(qa(e.condition(n),`a CASE guard`))return e.body(n);if(r)return r(n);throw new f(`No CASE guard is true at ${q(e)}`)}}case`Let`:{let t=n(e.body);return n=>t(Ka(n,Ao(e.definitions,n)))}case`Forall`:case`Exists`:return ms(e,t);case`UnboundedQuantifier`:return()=>{throw new f(`TLC cannot evaluate an unbounded quantifier at ${q(e)}`)};case`Choose`:case`SetFilter`:case`SetMap`:return bs(e,t);case`SetEnumeration`:{let t=e.elements.map(n);return e=>gt(t.map(t=>t(e)))}case`Tuple`:{let t=e.elements.map(n);return e=>I(t.map(t=>t(e)))}case`FunctionConstruction`:return vs(e,t);case`FunctionSet`:{let t=n(e.domain),r=n(e.range);return e=>({kind:`FunctionSet`,domain:t(e),range:r(e)})}case`Record`:return xs(e.fields,t);case`RecordSet`:{let t=[...e.fields].sort((e,t)=>F(e.name,t.name)),r=t.map(e=>e.name),i=t.map(e=>n(e.value));return e=>({kind:`RecordSet`,names:r,sets:i.map(t=>t(e))})}case`Except`:return ys(e,t);case`ExceptAt`:return t=>{let n=Ua(t.scope,`@`);if(n?.kind!==`Value`)throw new f(`@ appears outside an EXCEPT at ${q(e)}`);return n.value};case`FunctionApplication`:{_s(e.function);let t=n(e.function),r=e.args.map(n);if(r.length===1){let e=r[0];return n=>rn(t(n),e(n))}return e=>rn(t(e),I(r.map(t=>t(e))))}case`FieldAccess`:{let t=n(e.record),r=e.field,i=Ra(e);return e=>rn(t(e),r,i)}case`Product`:{let t=e.factors.map(n);return e=>({kind:`ProductSet`,factors:t.map(t=>t(e))})}case`BoxAction`:case`AngleAction`:{let t=n(e.action),r=n({kind:`Unchanged`,expression:e.subscript,location:e.location}),i=e.kind===`BoxAction`;return e=>i?qa(t(e),`an action`)||r(e):qa(t(e),`an action`)&&!r(e)}case`Enabled`:{let t=e.expression;return e=>ka(t,e)}case`Label`:return n(e.body);case`Subexpression`:return()=>{throw new f(`The subexpression reference at ${q(e)} does not name a subexpression`)};case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return()=>{throw new f(`TLC cannot evaluate a temporal formula in a state at ${q(e)}`)}}},Cs=/* @__PURE__ */ new Set([`Prime`,`Unchanged`,`Enabled`,`Always`,`Eventually`,`BoxAction`,`AngleAction`,`WeakFairness`,`StrongFairness`]),ws=e=>{if(e.kind===`Identifier`)return e.name;if(e.kind===`Apply`||e.kind===`OperatorReference`)return e.operator},Ts=(e,t)=>{let n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Set,i=e=>{if(Cs.has(e.kind))return!1;let a=ws(e),o=(e.kind===`Identifier`||e.kind===`Apply`)&&e.resolution?.kind===`Local`;if(a!==void 0&&!o&&!t.constants.has(a)){let e=t.substitutions.get(a)??a,o=t.definitions.get(e);if(!o&&Po(e,t))return!1;let s=t.variableIndex.get(a);if(s!==void 0&&n.add(s),o&&!r.has(o)&&(r.add(o),!i(o.body)||o.kind!==`Operator`&&!o.bounds.every(e=>i(e.set))))return!1}return Ja(e).every(i)};return i(e)?[...n]:void 0},Es=/* @__PURE__ */ new Map([[`Reals`,`-------------------------------- MODULE Reals -------------------------------
|
|
20
20
|
(***************************************************************************)
|
|
21
21
|
(* This module provides dummy definitions of the operators that are *)
|
|
@@ -403,7 +403,7 @@ _CheckName(name) ==
|
|
|
403
403
|
_PrintCounts == PrintT(_Counts)
|
|
404
404
|
=============================================================================
|
|
405
405
|
`]]),du=/* @__PURE__ */ new Map([[`FiniteSets`,/* @__PURE__ */ new Map([[`IsFiniteSet`,`public static tlc2.value.IBoolValue tlc2.module.FiniteSets.IsFiniteSet(tlc2.value.impl.Value)`],[`Cardinality`,`public static tlc2.value.impl.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.impl.Value)`]])],[`Sequences`,/* @__PURE__ */ new Map([[`Seq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Seq(tlc2.value.impl.Value)`],[`Len`,`public static tlc2.value.impl.IntValue tlc2.module.Sequences.Len(tlc2.value.impl.Value)`],[`Head`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Head(tlc2.value.impl.Value)`],[`Tail`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Tail(tlc2.value.impl.Value)`],[`Append`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Append(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`\\o`,`public static tlc2.value.impl.Value tlc2.module.Sequences.Concat(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SubSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SubSeq(tlc2.value.impl.Value,tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SelectSeq`,`public static tlc2.value.impl.Value tlc2.module.Sequences.SelectSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`]])],[`TLC`,/* @__PURE__ */ new Map([[`Print`,`public static tlc2.value.impl.Value tlc2.module.TLC.Print(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`PrintT`,`public static tlc2.value.impl.Value tlc2.module.TLC.PrintT(tlc2.value.impl.Value)`],[`ToString`,`public static tlc2.value.impl.Value tlc2.module.TLC.ToString(tlc2.value.impl.Value)`],[`Assert`,`public static tlc2.value.impl.Value tlc2.module.TLC.Assert(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`:>`,`public static tlc2.value.impl.Value tlc2.module.TLC.MakeFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`@@`,`public static tlc2.value.impl.Value tlc2.module.TLC.CombineFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`SortSeq`,`public static tlc2.value.impl.Value tlc2.module.TLC.SortSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)`],[`Permutations`,`public static tlc2.value.impl.Value tlc2.module.TLC.Permutations(tlc2.value.impl.Value)`],[`RandomElement`,`public static tlc2.value.impl.Value tlc2.module.TLC.RandomElement(tlc2.value.impl.Value)`],[`TLCEval`,`public static tlc2.value.impl.Value tlc2.module.TLCEval.tlcEval(tlc2.tool.impl.Tool,tla2sany.semantic.ExprOrOpArgNode[],tlc2.util.Context,tlc2.tool.TLCState,tlc2.tool.TLCState,int,tlc2.tool.coverage.CostModel)`]])]]),fu=(e,t)=>e.every(e=>B(e,t)),pu=ht([!1,!0]),mu=(e,t,n)=>{if(n-t===1)return e[t];let r=t+n>>1;return bt(mu(e,t,r),mu(e,r,n))},hu=[`\\cup`,`\\cap`,`\\`],gu=e=>typeof e==`object`&&(e.kind===`Set`||e.kind===`MixedSet`||e.kind===`Interval`),_u=e=>typeof e==`object`&&e.kind===`MixedSet`,vu=e=>e.kind===`Interval`?R(e).elements:e.elements,yu=(e,t,n)=>{let r=vu(t);if(e!==`\\cup`){let t=e===`\\cap`;return gt(r.filter(e=>B(e,n)===t))}if(r.length===0)return n;if(!gu(n))return{kind:`SetOperation`,operator:e,left:t,right:n};let i=R(n).elements.filter(e=>!B(e,t));return gt([...r,...i])},bu=[Kn(`TRUE`,!0),Kn(`FALSE`,!1),Kn(`BOOLEAN`,pu),Kn(`STRING`,{kind:`InfiniteSet`,name:`STRING`}),Yn(`=`,pt),Yn(`#`,(e,t)=>!pt(e,t)),W(`~`,1,e=>!Rn(e,0,`~`)),W(`<=>`,2,e=>Rn(e,0,`<=>`)===Rn(e,1,`<=>`)),W(`/\\`,2,e=>Rn(e,0,`/\\`)&&Rn(e,1,`/\\`)),W(`\\/`,2,e=>Rn(e,0,`\\/`)||Rn(e,1,`\\/`)),W(`=>`,2,e=>!Rn(e,0,`=>`)||Rn(e,1,`=>`)),W(`\\in`,2,e=>B(U(e,0,`\\in`),U(e,1,`\\in`))),W(`\\notin`,2,e=>!B(U(e,0,`\\notin`),U(e,1,`\\notin`))),W(`\\subseteq`,2,e=>{let t=zn(e,0,`\\subseteq`),n=zn(e,1,`\\subseteq`);return typeof t==`object`&&t.kind===`Subset`&&typeof n==`object`&&n.kind===`Subset`&&L(t.base)?fu(R(t.base).elements,n.base):fu(R(t).elements,n)}),...hu.map(e=>W(e,2,t=>{let n=zn(t,0,e),r=zn(t,1,e);return gu(n)&&gu(r)&&!_u(n)&&!_u(r)?e===`\\cup`&&z(n)?r:(e===`\\cup`?bt:e===`\\cap`?yt:vt)(R(n),R(r)):gu(n)?yu(e,n,r):e!==`\\`&&gu(r)?yu(e,r,n):{kind:`SetOperation`,operator:e,left:n,right:r}})),W(`SUBSET`,1,e=>({kind:`Subset`,base:zn(e,0,`SUBSET`)})),W(`UNION`,1,e=>{let t=zn(e,0,`UNION`),n=tt(t)?t.elements.filter(tt):[];if(!tt(t)||n.length!==t.elements.length)return{kind:`Union`,base:t};if(_u(t)||n.some(_u)){let e={kind:`MixedSet`,elements:[]};return n.forEach(t=>t.elements.forEach(t=>{B(t,e)||e.elements.push(t)})),gt(e.elements)}return n.length===0?_t:mu(n.map(R),0,n.length)}),W(`DOMAIN`,1,e=>{let t=U(e,0,`DOMAIN`);if(!A(t))throw new f(`DOMAIN expects a function but received ${H(t)}`);return on(t)})],xu=or(`DotDot`,`IntervalValue`,2),Su=or(`Neg`,`IntValue`,1),Cu=[Kn(`Nat`,{kind:`InfiniteSet`,name:`Nat`}),sr(`+`,`Plus`,(e,t)=>e+t),sr(`-`,`Minus`,(e,t)=>e-t),sr(`*`,`Times`,(e,t)=>e*t),sr(`^`,`Expt`,(e,t)=>{if(t<0)throw new p(`The second argument of ^ should be a natural number, but instead it is:\n${t}`);if(e===0&&t===0)throw new p(`0^0 is undefined.`);return e**t}),sr(`\\div`,`Divide`,(e,t)=>{if(t===0)throw new p(`The second argument of \\div is 0.`);let n=Math.floor(e/t);if(Xn(n))throw Zn(`${e} \\div ${t}`);return n}),sr(`%`,`Mod`,(e,t)=>{if(t<=0)throw new p(`The second argument of % should be a positive number, but instead it is:\n${t}`);return(e%t+t)%t}),lr(`<`,(e,t)=>e<t),lr(`>`,(e,t)=>e>t),lr(`<=`,(e,t)=>e<=t),lr(`>=`,(e,t)=>e>=t),W(`..`,2,e=>({kind:`Interval`,low:ar(U(e,0,`..`),xu),high:ar(U(e,1,`..`),xu)}))],wu=[Kn(`Int`,{kind:`InfiniteSet`,name:`Int`}),W(`-.`,1,e=>{let t=ar(U(e,0,`-`),Su);if(Xn(-t))throw Zn(`-${t}`);return-t})],Tu=(e,t,n)=>{let r=U(e,t,n),i=Yt(r);if(!i)throw new p(`${n}\n${H(r)}`);return i},Eu=(e,t,n)=>{let r=U(e,t,n);return typeof r==`string`?r:Tu(e,t,n)},Du=(e,t,n)=>typeof e==`string`?Oe(e.slice(t,n)):I(e.slice(t,n)),Ou=(e,t)=>`The ${e}argument of ${t} should be a sequence, but instead it is:`,ku=(e,t)=>`Evaluating an expression of the form ${e} when s is not a ${t}:`,Au=(e,t)=>{let n=du.get(e);return n?t.map(e=>{let t=n.get(e.name);return t?ir(e,t):e}):t},ju=Au(`Sequences`,[W(`Seq`,1,e=>({kind:`SequenceSet`,base:U(e,0,`Seq`)})),W(`Len`,1,e=>Eu(e,0,Ou(``,`Len`)).length),W(`\\o`,2,e=>{let t=Eu(e,0,ku(`s \\o t`,`sequence`));if(typeof t!=`string`){let n=Tu(e,1,ku(`t \\o s`,`sequence`));return I([...t,...n])}let n=U(e,1,`\\o`);if(typeof n!=`string`)throw new p(`${ku(`t \\o s`,`string`)}\n${H(n)}`);return Oe(t+n)}),W(`Append`,2,e=>I([...Tu(e,0,ku(`Append(s, v)`,`sequence`)),U(e,1,`Append`)])),W(`Head`,1,e=>{let t=Tu(e,0,Ou(``,`Head`));if(t.length===0)throw new p(`Attempted to apply Head to the empty sequence.`);return t[0]}),W(`Tail`,1,e=>{let t=Eu(e,0,Ou(``,`Tail`));if(t.length===0)throw new p(`Attempted to apply Tail to the empty sequence.`);return Du(t,1)}),W(`SubSeq`,3,e=>{let t=Eu(e,0,Ou(`first `,`SubSeq`)),n=Ln(e,1,`SubSeq`),r=Ln(e,2,`SubSeq`);if(n>r)return Du(t,0,0);let i=n<1?{position:`second`,value:n}:r>t.length?{position:`third`,value:r}:void 0;if(i)throw new p(`The ${i.position} argument of SubSeq must be in the domain of its first argument:\n${H(U(e,0,`SubSeq`))}\n, but instead it is\n${i.value}`);return Du(t,n-1,r)}),qn(`SelectSeq`,2,e=>{let t=Gn(e,1,`SelectSeq`);return I(Tu(e,0,Ou(`first `,`SelectSeq`)).filter(e=>{let n=t.call([e]);if(typeof n!=`boolean`)throw new p(`The second argument of SelectSeq should be a operator, but instead it is:\n${H(n)}`);return n}))})]),Mu=Au(`FiniteSets`,[W(`IsFiniteSet`,1,e=>{let t=U(e,0,`IsFiniteSet`);if(k(t))return qt(t);if(typeof t==`object`&&t.kind===`Function`)return!0;throw new f(typeof t==`object`&&t.kind===`LazyFunction`?`Attempted to check if the function:\n${H(t)}\nis a finite set.`:`Attempted to check if the ${he(t)} ${H(t)} is a finite set.`)}),W(`Cardinality`,1,e=>{let t=U(e,0,`Cardinality`);if(!k(t)||typeof t==`object`&&(t.kind===`InfiniteSet`||t.kind===`SequenceSet`))throw new p(`Attempted to compute cardinality of the value\n${H(t)}`);return Gt(t)})]),Nu=/* @__PURE__ */ new Map([[`Integers`,[`Naturals`]],[`Sequences`,[`Naturals`]],[`FiniteSets`,[`Naturals`,`Sequences`]],[`TLC`,[`Naturals`,`Sequences`,`FiniteSets`]],[`Randomization`,[`Naturals`,`FiniteSets`,`Sequences`]],[`_Possible`,[`TLC`,`TLCExt`,`Naturals`,`Sequences`,`FiniteSets`,`Integers`]],[`Json`,[`Sequences`,`FiniteSets`,`TLC`,`Naturals`]],[`Bags`,[`Naturals`]],[`TLCExt`,[`TLC`,`Integers`,`Naturals`,`Sequences`,`FiniteSets`]]]),Pu=(e,t,n,r)=>{switch(e){case`Naturals`:return{extends:[],operators:Cu};case`Integers`:return{extends:[`Naturals`],operators:wu};case`Sequences`:return{extends:[],operators:ju};case`FiniteSets`:return{extends:[],operators:Mu};case`TLC`:return{extends:[],operators:Au(`TLC`,iu(t,n))};case`Randomization`:return{extends:[],operators:Il(n)};case`_Possible`:return{extends:[],operators:Zl(t,n)};case`Json`:return{extends:[],operators:Al(r)};case`Bags`:return{extends:[],operators:ll};case`TLCExt`:return{extends:[],operators:Xl(t,n)};default:return}},Fu=`$subexpression`,Iu=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Lu=e=>e.filter((t,n)=>n===0||e[n-1].set!==t.set).map(e=>e.set),Ru=(e,t)=>typeof e==`number`?e>=1&&e<=t?e-1:-1:e===`<<`?t>0?0:-1:t===2?1:-1,zu=e=>{switch(e.kind){case`Apply`:return e.args;case`And`:case`Or`:return e.operands;case`If`:return[e.condition,e.consequent,e.alternative];case`Tuple`:case`SetEnumeration`:return e.elements;case`Record`:case`RecordSet`:return e.fields.map(e=>e.value);case`FunctionApplication`:return[e.function,e.args.length===1?e.args[0]:{kind:`Tuple`,elements:e.args,location:e.location}];case`FieldAccess`:return[e.record,{kind:`String`,value:e.field,location:e.location}];case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:return[e.expression];case`BoxAction`:case`AngleAction`:return[e.action,e.subscript];case`WeakFairness`:case`StrongFairness`:return[e.subscript,e.action];case`FunctionSet`:return[e.domain,e.range];case`Product`:return e.factors;case`Except`:return[e.function];default:return}},Bu=e=>{switch(e.kind){case`Forall`:case`Exists`:case`FunctionConstruction`:return{names:Pr(e.bounds),body:e.body,sets:Lu(e.bounds)};case`SetMap`:return{names:Pr(e.bounds),body:e.expression,sets:Lu(e.bounds)};case`SetFilter`:return{names:Nr(e.bound.pattern),body:e.predicate,sets:[e.bound.set]};case`Choose`:return{names:Nr(e.pattern),body:e.body,sets:e.set?[e.set]:[]};case`UnboundedQuantifier`:case`Lambda`:return{names:e.kind===`Lambda`?e.params:e.names,body:e.body,sets:[]};default:return}},Vu=(e,t,n)=>{if(e.kind===`Label`)return e.name===t?{label:e,lets:n}:void 0;if(e.kind===`Let`)return Vu(e.body,t,[...n,e.definitions]);if(e.kind!==`Lambda`)for(let r of Ja(e)){let e=Vu(r,t,n);if(e)return e}},Hu=(e,t,n)=>e.length===0&&n.length>0?n.splice(0,t):e,Uu=(e,t,n)=>t.reduceRight((e,t)=>({kind:`Let`,definitions:t,body:e,location:n}),e),Wu=(e,t)=>{let n=e.location,r=Uu(t,e.lets,n);if(e.params.length===0)return r;if(e.args.length===0){if(e.params.some(e=>e.arity>0))throw Iu(`Selected an operator with operator parameters as an argument`,n);return{kind:`Lambda`,params:e.params.map(e=>e.name),body:r,location:n}}if(e.args.length!==e.params.length)throw Iu(`The subexpression requires ${e.params.length} arguments but received ${e.args.length}`,n);return{kind:`Let`,definitions:[{kind:`Operator`,name:Fu,params:e.params,body:r,isLocal:!0,isRecursive:!1,location:n}],body:{kind:`Apply`,operator:Fu,args:e.args,location:n,resolution:Cr},location:n}},Gu=(e,t)=>{let n=t.location,r=e.kind===`Operator`?e.params.map((e,n)=>({name:`${e.name}$${t.params.length+n}`,arity:e.arity})):[],i=r.map(e=>({kind:`Identifier`,name:e.name,location:n,resolution:Cr})),a=i.length===0?{kind:`Identifier`,name:e.name,location:n,resolution:Cr}:{kind:`Apply`,operator:e.name,args:i,location:n,resolution:Cr};return Wu({...t,params:[...t.params,...r]},a)},Ku=(e,t,n,r)=>{let i={params:[],args:[],lets:[],location:n},a={index:0,current:void 0},o=i=>{let o=[],s=[];for(;a.index<e.length;){let c=e[a.index];if(c.kind!==`Name`)throw Iu(`Expected an operator name`,n);o.push(c.name),s.push(...c.args);let l=o.join(`!`),u=i?i.find(e=>gi(e)===l):t(l);if(u)return{definition:u,args:Hu(s,Or(u),r)};a.index++}throw Iu(`Unknown operator ${o.join(`!`)}`,n)},s=t=>{let r=o(t),s=r.definition,c=Or(s),l=a.index===e.length-1;if(r.args.length!==c&&r.args.length!==0)throw Iu(`The operator ${s.name} requires ${c} arguments`,n);if(l)return{definition:s,args:r.args};if(s.kind!==`Operator`)throw Iu(`Cannot select a subexpression of ${s.name}`,n);i.params.push(...s.params),i.args.push(...r.args),a.current=s.body,a.index++},c=()=>{for(;a.index<e.length;){let t=e[a.index];if(t.kind!==`Name`)return;let o=a.current&&Vu(a.current,t.name,[]);if(!o)throw Iu(`Cannot find label ${t.name}`,n);i.lets.push(...o.lets),i.params.push(...o.label.params.map(e=>({name:e,arity:0}))),i.args.push(...Hu(t.args,o.label.params.length,r)),a.current=o.label.body,a.index++}},l=t=>{let o=a.current;if(!o)throw Iu(`Subexpression selection failed`,n);if(t.kind===`Colon`)return;if(o.kind===`Label`){a.current=o.body,l(t);return}if(o.kind===`Let`){if(t.kind!==`Operand`||Ru(t.operand,1)!==0)throw Iu(`A LET/IN expression has only one operand`,n);i.lets.push(o.definitions),a.current=o.body;return}let s=Bu(o);if(s&&(t.kind===`Bound`||t.kind===`At`)){i.params.push(...s.names.map(e=>({name:e,arity:0}))),t.kind===`Bound`&&i.args.push(...Hu(t.args,s.names.length,r)),a.current=s.body;return}if(o.kind===`Case`&&t.kind===`Operand`){let r=[...o.arms,...o.other?[{condition:void 0,body:o.other}]:[]],i=r[Ru(t.operand,r.length)],s=e[a.index+1];if(!i||s?.kind!==`Operand`)throw Iu(`A subexpression of CASE must have the form !i!j`,n);a.index++;let c=Ru(s.operand,2),l=c===0?i.condition:c===1?i.body:void 0;if(!l)throw Iu(`Nonexistent CASE operand`,n);a.current=l;return}if(t.kind!==`Operand`)throw Iu(`Unexpected subexpression selector`,n);let c=s?s.sets:zu(o),u=c?.[Ru(t.operand,c.length)];if(!u)throw Iu(`Nonexistent operand specified by the selector`,n);a.current=u},u=s(void 0);if(u)return Gu(u.definition,{...i,args:u.args});for(c();a.index<e.length;){let t=e[a.index];if(t.kind===`Name`){for(;a.current?.kind===`Label`;)a.current=a.current.body;if(a.current?.kind!==`Let`)throw Iu(`A name selector here must be from a LET clause`,n);i.lets.push(a.current.definitions);let e=s(a.current.definitions);if(e)return Gu(e.definition,{...i,args:[...i.args,...e.args]});c()}else l(t),a.index++}if(!a.current)throw Iu(`Subexpression selection failed`,n);return Wu(i,a.current)},qu=(e,t)=>{if(!e.includes(`!`)||t(e))return;let n=e.split(`!`),r=n.findIndex((e,r)=>t(n.slice(0,r+1).join(`!`)));if(r!==-1)return[{kind:`Name`,name:n.slice(0,r+1).join(`!`),args:[]},...n.slice(r+1).map(e=>({kind:`Name`,name:e,args:[]}))]},Ju=e=>e.kind===`Subexpression`||e.kind===`Identifier`&&e.name.includes(`!`)||e.kind===`Apply`&&e.operator.includes(`!`)||Ja(e).some(Ju),Yu=(e,t)=>{if(!Ju(e))return e;if(e.kind===`Let`){let n=n=>e.definitions.find(e=>e.name===n)??t(n);return yi(e,e=>Yu(e,n))}let n=yi(e,e=>Yu(e,t));if(n.kind===`Subexpression`)return Ku(n.selectors,t,n.location,[]);let r=n.kind===`Identifier`?n.name:n.kind===`Apply`?n.operator:``,i=qu(r,t);if(!i)return n;let a=n.kind===`Apply`?[...n.args]:[],o=Ku(i,t,n.location,a);if(a.length>0)throw Iu(`Too many arguments for ${r}`,n.location);return o},Xu=e=>{let t=new Map(e.map(e=>[e.name,e]));return e=>t.get(e)},Zu=(e,t)=>{let n=Xu(t.definitions);return{...e,substitutions:e.substitutions.map(e=>({name:e.name,expression:Yu(e.expression,n)}))}},Qu=(e,t)=>{let n=Xu([...t,...e.definitions]);return e.definitions.some(e=>Ju(e.body))||e.assumptions.some(e=>Ju(e.expression))?{...e,definitions:e.definitions.map(e=>vi(e,e=>Yu(e,n))),assumptions:e.assumptions.map(e=>({...e,expression:Yu(e.expression,n)}))}:e},$u=new Map([[`Nat`,0,[],[],[]],[`+`,0,[0,0],[2,2],[1,1]],[`-`,0,[0,0],[2,2],[1,1]],[`*`,0,[0,0],[3,3],[0,0]],[`^`,0,[0,0],[2,2],[1,1]],[`<`,0,[0,0],[2,2],[1,1]],[`>`,0,[0,0],[2,2],[1,1]],[`<=`,0,[0,0],[2,2],[1,1]],[`>=`,0,[0,0],[2,2],[1,1]],[`%`,0,[0,0],[2,2],[1,1]],[`\\div`,0,[0,0],[2,2],[1,1]],[`..`,0,[0,0],[2,2],[1,1]],[`Int`,0,[],[],[]],[`-.`,0,[0],[2],[1]],[`Seq`,0,[0],[2],[1]],[`Len`,0,[0],[2],[1]],[`\\o`,0,[0,0],[2,2],[1,1]],[`Append`,0,[0,0],[2,2],[1,1]],[`Head`,0,[0],[2],[1]],[`Tail`,0,[0],[2],[1]],[`SubSeq`,0,[0,0,0],[2,2,2],[1,1,1]],[`SelectSeq`,0,[0,1],[2,2],[1,1],[],[`1,0,0`]],[`IsFiniteSet`,0,[0],[2],[1]],[`Cardinality`,0,[0],[2],[1]],[`IsABag`,0,[0],[2],[1]],[`BagToSet`,0,[0],[2],[1]],[`SetToBag`,0,[0],[3],[1]],[`BagIn`,0,[0,0],[2,2],[1,1]],[`EmptyBag`,0,[],[],[]],[`\\oplus`,0,[0,0],[2,2],[1,1]],[`\\ominus`,0,[0,0],[2,2],[1,1]],[`BagUnion`,0,[0],[2],[1]],[`\\sqsubseteq`,0,[0,0],[2,2],[1,1]],[`SubBag`,0,[0],[2],[1]],[`BagOfAll`,0,[1,0],[2,2],[1,1]],[`BagCardinality`,0,[0],[2],[1]],[`CopiesIn`,0,[0,0],[2,2],[1,1]],[`Print`,0,[0,0],[3,3],[0,1]],[`PrintT`,0,[0],[3],[0]],[`Assert`,0,[0,0],[2,3],[1,0]],[`JavaTime`,0,[],[],[]],[`TLCGet`,0,[0],[3],[0]],[`TLCSet`,0,[0,0],[3,3],[0,0]],[`:>`,0,[0,0],[2,3],[1,1]],[`@@`,0,[0,0],[2,2],[1,1]],[`Permutations`,0,[0],[2],[1]],[`SortSeq`,0,[0,2],[2,2],[1,1],[],[`1,0,0`,`1,0,1`]],[`RandomElement`,0,[0],[3],[1]],[`Any`,0,[],[],[]],[`ToString`,0,[0],[2],[1]],[`TLCEval`,0,[0],[3],[1]],[`AssertEq`,0,[0,0],[2,2],[1,1]],[`AssertError`,0,[0,0],[2,3],[1,0]],[`TLCGetOrDefault`,0,[0,0],[3,3],[0,0]],[`TLCGetAndSet`,0,[0,2,0,0],[3,3,3,3],[0,0,0,0],[],[`1,2,1`]],[`Trace`,0,[],[],[]],[`CounterExample`,0,[],[],[]],[`ToTrace`,0,[0],[3],[0]],[`TLCModelValue`,0,[0],[2],[1]],[`TLCDefer`,0,[0],[3],[0]],[`TLCNoOp`,0,[0],[3],[1]],[`PickSuccessor`,0,[0],[3],[1]],[`TLCCache`,0,[0,0],[3,3],[1,0]],[`TLCFP`,0,[0],[3],[0]],[`TLCEvalDefinition`,0,[0],[3],[0]],[`ToJson`,0,[0],[2],[1]],[`ToJsonArray`,0,[0],[2],[1]],[`ToJsonObject`,0,[0],[2],[1]],[`JsonSerialize`,0,[0,0],[3,3],[0,0]],[`JsonDeserialize`,0,[0],[3],[0]],[`ndJsonSerialize`,0,[0,0],[3,3],[0,0]],[`ndJsonDeserialize`,0,[0],[3],[0]],[`RandomSubset`,0,[0,0],[2,2],[1,1]],[`RandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]],[`TestRandomSetOfSubsets`,0,[0,0,0],[2,3,2],[1,0,1]]].map(e=>[e[0],{name:e[0],level:e[1],params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set,formals:e[2].map((e,t)=>({name:`$${t}`,arity:e})),maxLevels:e[3],weights:e[4],minMaxLevels:e[5]??[],conditions:new Set(e[6]),nonLeibniz:/* @__PURE__ */ new Set}])),ed=(e,t)=>`${e}${t}`,td=(e,t,n)=>`${e}${t}${n}`,nd=e=>{let t=e.split(`\0`);return{operator:t[0],index:Number(t[1]),param:t[2]}},rd=(e,t,n)=>`${e},${t},${n}`,id=(e=0)=>({level:e,params:/* @__PURE__ */ new Set,constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set}),ad=(e,t,n)=>e.set(t,Math.min(n,e.get(t)??3)),od=(e,t,n)=>e.set(t,Math.max(n,e.get(t)??0)),sd=(e,t,n,r)=>({...id(t),name:e,formals:[],maxLevels:n,weights:r,minMaxLevels:[],conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set}),cd=(e,t)=>e.formals.length===0&&e.maxLevels.length>0?e.maxLevels[Math.min(t,e.maxLevels.length-1)]:e.maxLevels[t]??3,ld=(e,t)=>e.formals.length===0&&e.weights.length>0?e.weights[Math.min(t,e.weights.length-1)]:e.weights[t]??1,ud=new Map([[`=`,0,[2,2],[1,1]],[`#`,0,[2,2],[1,1]],[`\\in`,0,[2,2],[1,1]],[`\\notin`,0,[2,2],[1,1]],[`\\subseteq`,0,[2,2],[1,1]],[`\\cup`,0,[2,2],[1,1]],[`\\cap`,0,[2,2],[1,1]],[`\\`,0,[2,2],[1,1]],[`=>`,0,[3,3],[1,1]],[`<=>`,0,[3,3],[1,1]],[`/\\`,0,[3,3],[1,1]],[`\\/`,0,[3,3],[1,1]],[`~`,0,[3],[1]],[`SUBSET`,0,[2],[1]],[`UNION`,0,[2],[1]],[`DOMAIN`,0,[2],[1]],[`~>`,3,[3,3],[0,0]],[`-+->`,3,[3,3],[0,0]],[`\\cdot`,2,[2,2],[0,0]],[`TRUE`,0,[],[]],[`FALSE`,0,[],[]],[`BOOLEAN`,0,[],[]],[`STRING`,0,[],[]]].map(([e,t,n,r])=>[e,{...sd(e,t,[...n],[...r]),nonLeibniz:new Set(t>1?[0,1]:[])}])),dd=sd(`$Set`,0,[2],[1]),fd=sd(`$Junction`,0,[3],[1]),pd=sd(`$Choose`,0,[2],[1]),md=sd(`$Function`,0,[3],[1]),hd=sd(`$FcnApply`,0,[2,2],[1,1]),gd=sd(`$RcdSelect`,0,[2,0],[1,1]),_d=sd(`'`,2,[1],[0]),vd=sd(`ENABLED`,1,[2],[0]),yd=sd(`[]`,3,[3],[0]),bd=sd(`$SquareAct`,2,[2,1],[0,0]),xd=sd(`$WF`,3,[1,2],[0,0]),Sd=sd(`$TemporalExists`,3,[3],[0]),Cd=(e,t)=>t.length===0?e:new Map([...e,...t.map(e=>[e.name,{kind:`Formal`,arity:e.arity}])]),wd=e=>e.map(e=>({name:e,arity:0})),Td=(e,t)=>new u(`${e} at line ${t.line}, column ${t.column}`),Ed=/* @__PURE__ */ new Set([`/\\`,`\\/`,`=>`,`<=>`]),Dd=e=>e.kind!==`Let`&&e.kind!==`Label`,Od=e=>{let t=/* @__PURE__ */ new Map,n=(t,n)=>{let r=n.get(t);if(r?.kind===`Formal`)return{kind:`Declared`,name:t,level:0,arity:r.arity};if(r?.kind===`Let`)return{kind:`Defined`,levels:_(r.definition,r.scope)};if(e.constants.has(t))return{kind:`Declared`,name:t,level:0,arity:0};if(e.variables.has(t))return{kind:`Declared`,name:t,level:1,arity:0};let i=e.getDefinition(t);if(i)return{kind:`Defined`,levels:_(i,/* @__PURE__ */ new Map)};let a=ud.get(t)??$u.get(t);return a?{kind:`Defined`,levels:a}:{kind:`Declared`,name:t,level:0,arity:0}},r=(e,t,n)=>{let r=id(Math.max(t,...n.map(e=>e.data.level)));return r.params.add(e),n.forEach((t,n)=>{t.data.params.forEach(t=>{r.params.add(t),r.argParams.add(td(e,n,t))}),t.data.constraints.forEach((e,t)=>ad(r.constraints,t,e)),od(r.argConstraints,ed(e,n),t.data.level),t.data.argConstraints.forEach((e,t)=>od(r.argConstraints,t,e)),t.data.argParams.forEach(e=>r.argParams.add(e))}),r},i=(e,t,n=[],r=[])=>{let i=e=>r.includes(e);if(t.forEach((t,n)=>{if(!(t.operator||t.declared)&&t.data.level>cd(e,n))throw new u(`Level error in applying operator ${e.name}: The level of argument ${n+1} exceeds the maximum level allowed by the operator.`)}),n.some(e=>e.level>2))throw new u(`Level error in applying operator ${e.name}: The level of the range for a bounded variable exceeds the maximum level allowed by the operator.`);let a=n=>{let r=e.formals.findIndex(e=>e.name===n);return r===-1?void 0:t[r]},o=(t,n,r)=>e.conditions.has(rd(t,n,r)),s=id(Math.max(e.level,...t.filter((t,n)=>ld(e,n)===1).map(e=>e.data.level),...n.map(e=>e.level)));return e.params.forEach(e=>s.params.add(e)),t.forEach((t,n)=>{ld(e,n)===1&&t.data.params.forEach(e=>s.params.add(e))}),n.forEach(e=>e.params.forEach(e=>s.params.add(e))),r.forEach(e=>s.params.delete(e)),e.constraints.forEach((e,t)=>ad(s.constraints,t,e)),t.forEach(e=>e.data.constraints.forEach((e,t)=>{i(t)||ad(s.constraints,t,e)})),n.forEach(e=>e.constraints.forEach((e,t)=>ad(s.constraints,t,e))),t.forEach((t,n)=>t.data.params.forEach(t=>{i(t)||ad(s.constraints,t,cd(e,n))})),t.forEach((e,n)=>{let r=e.operator;r&&t.forEach((e,t)=>r.formals.forEach((i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>ad(s.constraints,e,cd(r,a)))}))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator)?.operator;n&&ad(s.constraints,t.param,cd(n,t.index))}),[e.argConstraints,...t.map(e=>e.data.argConstraints),...n.map(e=>e.argConstraints)].forEach(e=>e.forEach((e,t)=>od(s.argConstraints,t,e))),t.forEach((n,r)=>{let i=n.declared;i&&(Array.from({length:i.arity},(t,n)=>od(s.argConstraints,ed(i.name,n),e.minMaxLevels[r]?.[n]??0)),t.forEach((e,t)=>Array.from({length:i.arity},(n,a)=>{o(r,t,a)&&od(s.argConstraints,ed(i.name,a),e.data.level)})))}),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);n&&od(s.argConstraints,ed(t.operator,t.index),n.data.level)}),t.forEach(e=>e.data.argParams.forEach(e=>{i(nd(e).param)||s.argParams.add(e)})),n.forEach(e=>e.argParams.forEach(e=>s.argParams.add(e))),e.argParams.forEach(e=>{let t=nd(e),n=a(t.operator);if(n)n.declared&&s.argParams.add(td(n.declared.name,t.index,t.param));else{let n=a(t.param);if(!n){s.argParams.add(e);return}n.data.params.forEach(e=>s.argParams.add(td(t.operator,t.index,e)))}}),t.forEach((e,n)=>{let r=e.declared;r&&t.forEach((e,t)=>Array.from({length:r.arity},(i,a)=>{o(n,t,a)&&e.data.params.forEach(e=>s.argParams.add(td(r.name,a,e)))}))}),s},a=(e,t)=>{if(e.kind===`Lambda`){let n=g(`LAMBDA`,wd(e.params),e.body,t);return{data:n,operator:n}}let r=e.kind===`OperatorReference`?e.operator:e.kind===`Identifier`?e.name:void 0;if(r!==void 0){let i=n(r,t);if(i.kind===`Defined`&&(i.levels.formals.length>0||e.kind===`OperatorReference`))return{data:i.levels,operator:i.levels};if(i.kind===`Declared`&&i.arity>0){let e=id();return e.params.add(r),{data:e,declared:{name:r,arity:i.arity}}}}return{data:m(e,t)}},o=(e,t)=>e.map(e=>a(e,t)),s=(e,t,n,r=[],a=[])=>{let s=Cd(n,wd(a));return i(e,o(t,s),r.map(e=>m(e,n)),a)},c=(e,t)=>e.kind===`Declared`?r(e.name,e.level,t):i(e.levels,t),l=(e,t)=>{let n=e.map(e=>e.data.level);if(n.includes(2)&&n.includes(3))throw Td(`Formula has both temporal formula and action as arguments`,t)},d=(e,t)=>{if((e.operator===`~>`||e.operator===`-+->`)&&t.some(e=>e.data.level===2))throw Td(`Action used where only temporal formula or state predicate allowed`,e.location);Ed.has(e.operator)&&l(t,e.location)},f=(e,t)=>{let n=e.expression,r=e.kind===`Always`?`BoxAction`:`AngleAction`;if(t===2&&Dd(n)&&n.kind!==r)throw Td(e.kind===`Always`?`[] followed by action not of form [A]_v`:`<> followed by action not of form <<A>>_v`,e.location)},p=(e,t)=>{let n=new Map(t);e.definitions.forEach(e=>n.set(e.name,{kind:`Let`,definition:e,scope:n}));let r=m(e.body,n),i={level:r.level,params:new Set(r.params),constraints:new Map(r.constraints),argConstraints:new Map(r.argConstraints),argParams:new Set(r.argParams)};return e.definitions.forEach(e=>{let t=_(e,n);t.constraints.forEach((e,t)=>ad(i.constraints,t,e)),t.argConstraints.forEach((e,t)=>od(i.argConstraints,t,e)),t.argParams.forEach(e=>i.argParams.add(e))}),i},m=(e,t)=>{switch(e.kind){case`Number`:case`Decimal`:case`String`:case`ExceptAt`:return id();case`Identifier`:return c(n(e.name,t),[]);case`Apply`:{let r=o(e.args,t);return d(e,r),c(n(e.operator,t),r)}case`OperatorReference`:case`Lambda`:return a(e,t).data;case`And`:case`Or`:{let n=o(e.operands,t);return l(n,e.location),i(fd,n)}case`Prime`:case`Unchanged`:return s(_d,[e.expression],t);case`Enabled`:return s(vd,[e.expression],t);case`Always`:case`Eventually`:{let n=a(e.expression,t);return f(e,n.data.level),i(yd,[n])}case`If`:return s(fd,[e.condition,e.consequent,e.alternative],t);case`Case`:return s(fd,[...e.arms.flatMap(e=>[e.condition,e.body]),...e.other?[e.other]:[]],t);case`Let`:return p(e,t);case`Forall`:case`Exists`:{let n=s(fd,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));if(n.level===3&&e.bounds.some(e=>m(e.set,t).level===2))throw Td(`Action-level bound of quantified temporal formula`,e.location);return n}case`UnboundedQuantifier`:return s(e.isTemporal?Sd:fd,[e.body],t,[],e.names);case`Choose`:return s(pd,[e.body],t,e.set?[e.set]:[],Nr(e.pattern));case`SetEnumeration`:case`Tuple`:case`FunctionSet`:case`Product`:return s(dd,e.kind===`FunctionSet`?[e.domain,e.range]:e.kind===`Product`?e.factors:e.elements,t);case`SetFilter`:return s(dd,[e.predicate],t,[e.bound.set],Nr(e.bound.pattern));case`SetMap`:return s(dd,[e.expression],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`FunctionConstruction`:return s(md,[e.body],t,e.bounds.map(e=>e.set),Pr(e.bounds));case`Record`:return s(md,e.fields.map(e=>e.value),t);case`RecordSet`:return s(dd,e.fields.map(e=>e.value),t);case`Except`:return s(dd,[e.function,...e.updates.flatMap(e=>[...e.path.flatMap(e=>e.kind===`Index`?e.args:[]),e.value])],t);case`FunctionApplication`:return i(hd,[a(e.function,t),e.args.length===1?a(e.args[0],t):{data:s(dd,e.args,t)}]);case`FieldAccess`:return i(gd,[a(e.record,t),{data:id()}]);case`BoxAction`:case`AngleAction`:return s(bd,[e.action,e.subscript],t);case`WeakFairness`:case`StrongFairness`:return s(xd,[e.subscript,e.action],t);case`Label`:return m(e.body,t);case`Subexpression`:return id()}},h=(e,t,r=!1,i=/* @__PURE__ */ new Set)=>{let a=(e,n=r,a=t)=>h(e,a,n,i),o=(e,o)=>{let s=n(e,t);s.kind===`Declared`?(r&&i.add(e),o.forEach(e=>a(e))):o.forEach((e,t)=>a(e,r||s.levels.nonLeibniz.has(t)))};switch(e.kind){case`Identifier`:return o(e.name,[]),i;case`Apply`:return o(e.operator,e.args),i;case`Lambda`:case`Let`:return i;case`Prime`:case`Unchanged`:case`Enabled`:case`Always`:case`Eventually`:case`BoxAction`:case`AngleAction`:case`WeakFairness`:case`StrongFairness`:return Ja(e).forEach(e=>a(e,!0)),i;case`UnboundedQuantifier`:return a(e.body,r||e.isTemporal===!0,Cd(t,wd(e.names))),i;default:return yi(e,(e,n)=>(a(e,r,Cd(t,wd(n))),e)),i}},g=(e,t,n,r)=>{let i=Cd(r,t),a=m(n,i),o=e=>t.some(t=>t.name===e),s=h(n,i),c={...id(a.level),name:e,formals:t,nonLeibniz:new Set(t.flatMap((e,t)=>s.has(e.name)?[t]:[])),maxLevels:t.map(e=>Math.min(3,a.constraints.get(e.name)??3)),weights:t.map(e=>+!!a.params.has(e.name)),minMaxLevels:t.map(e=>Array.from({length:e.arity},(t,n)=>a.argConstraints.get(ed(e.name,n))??0)),conditions:new Set(t.flatMap((e,n)=>t.flatMap((t,r)=>Array.from({length:e.arity},(e,t)=>t).filter(n=>a.argParams.has(td(e.name,n,t.name))).map(e=>rd(n,r,e)))))};return a.params.forEach(e=>{o(e)||c.params.add(e)}),a.constraints.forEach((e,t)=>{o(t)||c.constraints.set(t,e)}),a.argConstraints.forEach((e,t)=>{o(nd(t).operator)||c.argConstraints.set(t,e)}),a.argParams.forEach(e=>{let t=nd(e);o(t.operator)&&o(t.param)||c.argParams.add(e)}),c},_=(e,n)=>{let r=t.get(e);if(r)return r;let i=e.kind===`Operator`?e.params:[];t.set(e,{...id(),name:e.name,formals:i,maxLevels:i.map(()=>3),weights:i.map(()=>0),minMaxLevels:i.map(()=>[]),conditions:/* @__PURE__ */ new Set,nonLeibniz:/* @__PURE__ */ new Set});let a=e.kind===`Function`?{kind:`FunctionConstruction`,bounds:e.bounds,body:e.body,location:e.location}:e.body,o=g(e.name,i,a,n);return t.set(e,o),o};return{analyze:m,analyzeDefinition:_,toOperand:a}},kd=(e,t,n)=>{let r=new Map(t);e.assumptions.forEach(e=>{e.kind===`NewSymbol`?(e.set&&n.analyze(e.set,r),r.set(e.name,{kind:`Formal`,arity:e.arity})):e.kind===`AssumeProve`?kd(e,r,n):n.analyze(e,r)}),n.analyze(e.conclusion,r)},Ad=(e,t)=>{let n=Od(t);e.definitions.filter(e=>!e.name.includes(`!`)).forEach(e=>n.analyzeDefinition(e,/* @__PURE__ */ new Map)),e.assumptions.forEach(e=>n.analyze(e.expression,/* @__PURE__ */ new Map)),e.theorems.forEach(e=>e.statement.kind===`AssumeProve`?kd(e.statement,/* @__PURE__ */ new Map,n):n.analyze(e.statement,/* @__PURE__ */ new Map))},jd=(e,t)=>e.maxLevels[t]??3,Md=(e,t)=>{let n=/* @__PURE__ */ new Map,r=e=>{let r=n.get(e);if(r)return r;let i=t(e),a=Od({constants:new Set(i.constants.map(e=>e.name)),variables:new Set(i.variables),getDefinition:i.getDefinition});return n.set(e,a),a},i=/* @__PURE__ */ new Map,a=e=>{let n=i.get(e);if(n)return n;let a=t(e),o=r(e),s=a.definitions.map(e=>o.analyzeDefinition(e,/* @__PURE__ */ new Map)),c={isConstant:a.variables.length===0&&s.every(e=>e.level===0),constraints:/* @__PURE__ */ new Map,argConstraints:/* @__PURE__ */ new Map,argParams:/* @__PURE__ */ new Set};c.isConstant||a.constants.forEach(e=>ad(c.constraints,e.name,0));let l=(e,t)=>{e.constraints.forEach((e,t)=>ad(c.constraints,t,e)),e.argConstraints.forEach((e,t)=>od(c.argConstraints,t,e)),e.argParams.forEach(e=>{let n=nd(e);t(n.operator,n.param)&&c.argParams.add(e)})};return s.forEach(e=>l(e,(t,n)=>e.formals.every(e=>e.name!==t&&e.name!==n))),a.assumptions.forEach(e=>l(o.analyze(e,/* @__PURE__ */ new Map),()=>!0)),i.set(e,c),c},o=/* @__PURE__ */ new Set;if(e.forEach(e=>{let n=`at line ${e.location.line}, column ${e.location.column}`,i=e=>o.add(`${e} ${n}`),s=t(e.module),c=a(e.module),l=r(e.instancer),u=/* @__PURE__ */ new Map;e.lets.forEach(e=>u.set(e.name,{kind:`Let`,definition:e,scope:u}));let d=[...s.constants.map(e=>({...e,maximumLevel:0})),...s.variables.map(e=>({name:e,arity:0,maximumLevel:1}))].flatMap(t=>{let n=e.substitutions.get(t.name);if(!n)return[];if(t.arity===0){let e=l.analyze(n,u);return[{...t,level:e.level,operator:void 0,isLeibniz:!0}]}let r=l.toOperand(n,u);return[{...t,level:r.data.level,operator:r.operator,isLeibniz:r.operator===void 0||r.operator.nonLeibniz.size===0}]}),f=(t,n)=>`Level error in instantiating module '${e.module}': the level of the expression or operator substituted for '${t}' must be at most ${n}`;d.forEach(t=>{!c.isConstant&&t.level>t.maximumLevel&&i(f(t.name,t.maximumLevel)),t.isLeibniz||i(`Error in instantiating module '${e.module}': a non-Leibniz operator substituted for '${t.name}'`)}),d.forEach(t=>{let n=c.constraints.get(t.name);n!==void 0&&t.level>n&&i(f(t.name,n));let r=t.operator;r&&Array.from({length:t.arity},(n,a)=>{let o=c.argConstraints.get(ed(t.name,a));o!==void 0&&jd(r,a)<o&&i(`Level error in instantiating module '${e.module}': the level of the argument ${a+1} of the operator ${r.name} must be at least ${o}`)})}),c.argParams.forEach(t=>{let n=nd(t),r=d.find(e=>e.name===n.operator)?.operator,a=d.find(e=>e.name===n.param);if(!r||!a)return;let o=jd(r,n.index);a.level>o&&i(`Level error when instantiating module '${e.module}': the level of the argument ${n.index} of the operator ${n.operator}' must be at most ${o}`)})}),o.size>0)throw new u([...o].join(`
|
|
406
|
-
`))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t);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?``:`
|
|
406
|
+
`))},Nd=t=>{switch(t.kind){case`Number`:try{return ge(t.value)}catch(t){throw a(t,e.error)}case`String`:case`Boolean`:return t.value;case`ModelValue`:return Le(t.name);case`Set`:return ht(t.elements.map(Nd))}},Pd=e=>[...e.constants,...e.variables.map(e=>({name:e,arity:0}))],Fd=e=>new u(`Multiply-defined module '${e.name}' at line ${e.location.line}, column ${e.location.column}`),Id=(e,t)=>({kind:`Operator`,name:t,params:[],body:{kind:`Let`,definitions:[e],body:{kind:`Identifier`,name:e.name,location:e.location,resolution:Cr},location:e.location},isLocal:!0,isRecursive:!1,location:e.location}),Ld=(e,t,n)=>{let r=`{ ${n.map(e=>`<${[...e[0],e[1]].map(e=>H(e)).join(`, `)}>`).join(`, `)}}`;return{kind:`Builtin`,name:e,arity:t,evaluate:e=>{let t=n.find(t=>{if(t[0].length!==e.length)throw new f(`Attempted to apply the operator ${r}\nwith wrong number of arguments.`);return t[0].every((t,n)=>{let r=e[n];return(typeof r!=`object`||r.kind!==`Operator`)&&Be(t,r)})});if(t)return t[1];throw new f(`Attempted to apply operator:\n${r}\nto arguments (${e.map(e=>typeof e==`object`&&e.kind===`Operator`?e.name:H(e)).join(`, `)}), which is undefined.`)},evaluateUnary:void 0,evaluateBinary:void 0}},Rd=(e,t)=>e.kind===`Identifier`&&t.has(e.name)||e.kind===`Apply`&&t.has(e.operator)||Ja(e).some(e=>Rd(e,t)),zd=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return new Set(t).forEach(e=>n.set(Oi(e),n.get(e)??n.size)),n},Bd=e=>e.flatMap(e=>e.substitutions.map(e=>e.expression)),Vd=e=>e.forEach(e=>{if(e.kind===`Decimal`)throw Va(e);if(e.kind===`Number`&&!Mo(e.value))throw Ha(e);Vd(e.kind===`Let`?[...Ja(e),...Bd(e.instances??[])]:Ja(e))}),Hd=(e,t)=>{let n=ac(t.source),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map,a=new Map(bu.map(e=>[e.name,e])),o=/* @__PURE__ */ new Map,s=Bc(e.checkDeadlock,t.seed),c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,f=[],p=/* @__PURE__ */ new Map,m=[],h=[],g=(e,t)=>m.forEach(n=>{n.add(e),[...t].forEach(e=>n.add(e))}),_={value:0},v=e=>`${e}#${_.value++}`,y=[],b=/* @__PURE__ */ new Map,ee=e=>{let n=o.get(e);if(n)return n;let r=Pu(e,t.print,s,t.files);if(!r)return;let i=/* @__PURE__ */ new Map;return r.extends.forEach(e=>ee(e)?.forEach((e,t)=>i.set(t,e))),r.operators.forEach(e=>{a.set(e.name,e),i.set(e.name,{key:e.name,arity:e.arity})}),o.set(e,i),i},x=e=>{let t=ee(e);return t&&g(e,Nu.get(e)??[]),t},te=e=>(Vd([...e.definitions.flatMap(e=>e.kind===`Function`?[...e.bounds.map(e=>e.set),e.body]:[e.body]),...e.assumptions.map(e=>e.expression),...e.theorems.flatMap(e=>e.statement.kind===`AssumeProve`?[]:[e.statement]),...Bd(e.instances)]),e.modules.forEach(te),e);te(n);let ne=(e,n)=>{let r=t.loadModule?.(e)??Es.get(e)??rc(t.source,e);if(r===void 0)throw new u(`Cannot find source file for module ${e} imported in module ${n}.`);let i=ac(r);if(i.name!==e)throw new u(`File name '${e}' does not match the name '${i.name}' of the top level module it contains.`);return te(i)},re=e=>{let t=h.indexOf(e.name);if(t!==-1)throw new u(`Circular dependency among .tla files; dependency cycle is: ${[...h.slice(t),e.name].map(e=>`${e}.tla`).join(` --> `)}`);let n=/* @__PURE__ */ new Set,r=[];h.push(e.name),m.push(n);let i=E(e,{id:e.name,symbols:/* @__PURE__ */ new Map,modules:/* @__PURE__ */ new Map,nested:r});m.pop(),h.pop();let a=r.find(e=>n.has(e.name));if(a)throw Fd(a);return{linked:i,closure:n}},S=(e,t)=>{let n=c.get(e);if(n)return g(e,p.get(e)??[]),n;let r=re(ne(e,t));return c.set(e,r.linked),p.set(e,r.closure),g(e,r.closure),r.linked},ie=(e,t,n,a,o)=>{let s=o?void 0:x(e.module);if(s)return e.name===void 0?s:new Map([...s].map(([t,n])=>[`${e.name}!${t}`,n]));let c=o??S(e.module,t.name),l=Pd(c),u=`#${_.value++}`,d=new Map(e.params.map(e=>[e.name,`${e.name}${u}`])),f=li(Zu(e,t),l,t,n);y.push({module:e.module,instancer:t.name,lets:[],substitutions:f,location:e.location});let p=Bi({params:e.params.map(e=>({...e,name:`${e.name}${u}`})),substitutions:new Map([...f].map(([e,t])=>[e,pi(t,d)])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(e,n)=>{let o=v(`${e}@${t.name}`);return r.set(o,n(o)),i.set(o,!a),o},createName:v}),m=new Set(l.map(e=>e.name)),h=/* @__PURE__ */ new Map;return c.exported.forEach((t,n)=>{if(m.has(n))return;if(e.name===void 0){let r=p.getKey(t.key);l.length>0&&b.set(r,{name:n,location:e.location}),h.set(n,{key:r,arity:t.arity});return}let r=p.getQualifiedKey(t.key);l.length>0&&b.set(r,{name:`${e.name}!${n}`,location:e.location}),h.set(`${e.name}!${n}`,{key:r,arity:t.arity+e.params.length})}),h},ae=(e,t)=>e.map(e=>({kind:`Identifier`,name:e.name,location:t,resolution:Cr})),oe=(e,t,n,r,i)=>({kind:`Operator`,name:e,params:n,body:r.length===0?{kind:`Identifier`,name:t,location:i}:{kind:`Apply`,operator:t,args:ae(r,i),location:i},isLocal:!0,isRecursive:!1,location:i}),C=e=>Array.from({length:e},(e,t)=>({name:`argument${t}`,arity:0})),w=(e,t,n)=>{if(t.arity===0)return{params:[],body:e};if(e.kind===`Lambda`)return{params:e.params.map(e=>({name:e,arity:0})),body:e.body};let r=C(t.arity);return{params:r,body:{kind:`Apply`,operator:e.kind===`Identifier`?e.name:e.kind===`OperatorReference`?e.operator:t.name,args:ae(r,n),location:n}}},T=(e,t,n,a)=>{let o=e.location,s=a?void 0:x(e.module);if(s)return e.name===void 0?[]:[...s].map(([t,n])=>{let r=C(n.arity);return oe(`${e.name}!${t}`,n.key,[...e.params,...r],r,o)});let c=a??S(e.module,n),l=`#${_.value++}`,u=new Map(e.substitutions.map(e=>[e.name,e.expression])),d=Pd(c),f=e=>u.get(e.name)??{kind:`Identifier`,name:e.name,location:o};y.push({module:e.module,instancer:n,lets:t,substitutions:new Map(d.map(e=>[e.name,f(e)])),location:o});let p=new Set(e.params.map(e=>e.name)),m=e=>Rd(f(e),p),h=d.map(t=>{let n=w(f(t),t,o);return{kind:`Operator`,name:`${t.name}${l}`,params:[...m(t)?e.params:[],...n.params],body:n.body,isLocal:!0,isRecursive:!1,location:o}}),g=[],b=Bi({params:e.params,substitutions:new Map(d.map(t=>[t.name,m(t)?{kind:`Apply`,operator:`${t.name}${l}`,args:ae(e.params,o),location:o,resolution:Cr}:{kind:`Identifier`,name:`${t.name}${l}`,location:o,resolution:Cr}])),variables:new Set(c.variables),getDefinition:e=>r.get(e),isParameterized:e=>i.get(e)===!0,addDefinition:(t,n)=>{let r=`${t}@${e.module}${l}.${g.length}`,i=n(r);return g.push(i.kind===`Operator`?{...i,name:r}:Id(i,r)),r},createName:v}),ee=new Set(d.map(e=>e.name)),te=[...c.exported].filter(([e])=>!ee.has(e)).map(([t,n])=>{let r=b.getKey(n.key),i=C(n.arity),a=[...e.params,...i];return oe(e.name===void 0?t:`${e.name}!${t}`,r,a,r===n.key?i:a,o)});return[...h,...g,...te]},se=e=>[...e].flatMap(([e,t])=>{let n=r.get(t.key);return n?[{...n,name:e}]:[]}),E=(e,a)=>{let o=Ps(e,t.loadClass?.(e.name)),s=new Map([...bu.map(e=>[e.name,{key:e.name,arity:e.arity}]),...a.symbols]),c=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],p=[...o.constants],m=o.variables.map(e=>e.name),h=o.variables.map(e=>e.location),g=(e,t)=>e.forEach((e,n)=>{s.set(n,e),t&&c.set(n,e)});o.extends.forEach(e=>{let t=a.modules.get(e),n=t?void 0:x(e);if(n){g(n,!0);return}let r=t??S(e,o.name);p.push(...r.constants.filter(e=>p.every(t=>t.name!==e.name))),r.variables.forEach((e,t)=>{m.includes(e)||(m.push(e),h.push(r.variableLocations[t]))}),g(r.exported,!0),r.modules.forEach((e,t)=>u.set(t,e)),d.push(r)}),o.constants.forEach(e=>c.set(e.name,{key:e.name,arity:e.arity,declaration:`Constant`})),o.variables.forEach(e=>c.set(e.name,{key:e.name,arity:0,declaration:`Variable`}));let _=p.length===0&&m.length===0,v=e=>o===n?e.name:`${e.name}@${a.id}`,y=/* @__PURE__ */ new Map,b=e=>({imported:s,importedAt:y,definitions:new Map(e.definitions.map(e=>[e.name,e])),getKey:v}),ee=()=>new Map([...a.modules,...u]),te=e=>new Map([...s,...[...o.constants.map(e=>({...e,kind:`Constant`})),...o.variables.map(e=>({...e,kind:`Variable`}))].filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:e.name,arity:e.arity,declaration:e.kind}]),...o.definitions.filter(t=>Dr(t.location,e)).map(e=>[e.name,{key:v(e),arity:Or(e)}])]),ne=e=>{let t=ee();if(t.has(e.name))throw Fd(e);a.nested.push(e);let n=E(e,{id:`${a.id}/${e.name}`,symbols:te(e.location),modules:t,nested:a.nested});u.set(e.name,n),l.has(e.name)||l.set(e.name,n)};[...o.instances.map(e=>({location:e.location,link:()=>{let t=ie(e,o,b(o),_,ee().get(e.module));t.forEach((t,n)=>{s.has(n)||y.set(n,e.location)}),g(t,!e.isLocal)}})),...o.modules.map(e=>({location:e.location,link:()=>ne(e)}))].sort((e,t)=>Dr(e.location,t.location)?-1:1).forEach(e=>e.link()),si(o,b(o));let re=e=>{let t=o.instances.find(t=>t.module===e.name);return t!==void 0&&Dr(e.location,t.location)},ae=e=>{let t=o.modules.find(t=>t.name===e.module);return t?re(t)?u.get(t.name):void 0:ee().get(e.module)},oe=Qu(Wi(o,(e,t)=>T(e,t,o.name,ae(e))),se(s));ui(oe,b(oe)),oe.definitions.forEach(e=>{let t=v(e);r.set(t,e),i.set(t,!_);let n={key:t,arity:Or(e)};s.set(e.name,n),e.isLocal||c.set(e.name,n)}),Ad(oe,{constants:new Set(p.map(e=>e.name)),variables:new Set(m),getDefinition:e=>r.get(s.get(e)?.key??e)});let C={module:oe,constants:p,variables:m,variableLocations:h,visible:s,exported:c,modules:u,extended:d};return f.push(C),C},D=re(n).linked,ce=e=>D.visible.get(e)?.key??e;D.visible.forEach((e,t)=>{let n=r.get(e.key);n&&e.key!==t&&r.set(t,n)});let O=[],le=(e,t)=>{t.has(e)||(t.add(e),e.extended.forEach(e=>le(e,t)),O.push(...e.module.assumptions))};le(D,/* @__PURE__ */ new Set);let ue=D.constants.map(e=>e.name),de=D.variables,fe=e=>e.module===void 0?[e.name,ce(e.name)]:e.module===n.name||ue.includes(e.name)?[]:[(c.get(e.module)??l.get(e.module))?.visible.get(e.name)?.key??e.name],pe=e=>{let t=r.get(e);return t?.kind===`Operator`?t.params.length:D.constants.find(t=>t.name===e)?.arity??0},me=/* @__PURE__ */ new Map,k=/* @__PURE__ */ new Set,A=(e,t)=>{a.set(e,t),r.delete(e),me.delete(e),k.add(e)};e.constants.filter(e=>e.args===void 0).forEach(e=>{let t=Nd(e.value);fe(e).forEach(e=>{let n=pe(e);n===0?me.set(e,t):A(e,{kind:`Builtin`,name:e,arity:n,evaluate:()=>t,evaluateUnary:void 0,evaluateBinary:void 0,isLazy:!0})})});let j=/* @__PURE__ */ new Map;e.constants.forEach(e=>{if(e.args===void 0)return;let t=`${e.module??``}!${e.name}`,n=j.get(t)??{name:e.name,module:e.module,rows:[]};if(n.rows.length>0&&n.rows[0][0].length!==e.args.length)throw new d(`The arity of the operator ${e.name} is inconsistent in the configuration file.`);n.rows.push([e.args.map(Nd),Nd(e.value)]),j.set(t,n)}),j.forEach(e=>fe(e).forEach(t=>A(t,Ld(e.name,pe(t)||e.rows[0][0].length,e.rows))));let he=new Map(e.substitutions.flatMap(e=>fe(e).map(t=>[t,ce(e.target)])));e.substitutions.filter(e=>e.module===void 0).forEach(t=>{let n=t.name,i=t.target;if(!ue.includes(n)&&!D.visible.has(n))throw new d(`In the configuration file, the identifier ${n} does not appear in the specification.`);if(e.substitutions.some(e=>e.name===i))throw new d(`In the configuration file, the identifier ${i} appears\non the right-hand side of a <- after already appearing on the\nleft-hand side of one.`);let o=ce(i),s=r.get(o);if(!(s!==void 0||a.has(o)||me.has(o)||ue.includes(i)||de.includes(i)))throw new d(`The configuration file substitutes for ${n} with the undefined identifier ${i}.`);if(s?.kind===`Operator`&&s.params.length!==(D.constants.find(e=>e.name===n)?.arity??D.visible.get(n)?.arity))throw new d(`The configuration file substitutes for ${n} with ${i} of different number of arguments.`)}),ue.forEach(e=>{if(!me.has(e)&&!he.has(e)&&!k.has(e))throw new d(`The constant ${e} is not assigned a value by the configuration`)});let ge={runtime:s,definitions:r,builtins:a,constants:me,substitutions:he,variables:de,variableIndex:zd(de,f.flatMap(e=>e.module.variables.map(e=>e.name))),definitionValues:/* @__PURE__ */ new Map,constantLevels:/* @__PURE__ */ new Map,evaluators:/* @__PURE__ */ new WeakMap};return Md(y,e=>{let t=c.get(e)??l.get(e)??D;return{constants:t.constants,variables:t.variables,definitions:[...new Set([...t.visible.values()].flatMap(e=>r.get(e.key)??[]))],assumptions:t.module.assumptions.map(e=>e.expression),getDefinition:e=>r.get(t.visible.get(e)?.key??e)}}),he.forEach((e,t)=>{let n=r.get(e);if(ue.includes(t)&&n&&!Za(n,ge))throw new d(`The configuration file substitutes constant ${t} with non-constant ${e}`)}),{environment:ge,assumptions:O,variableLocations:D.variableLocations,instanceActions:b}},Ud={kind:`Boolean`,value:!0},Wd={kind:`Boolean`,value:!1},Gd=e=>e?Ud:Wd,Kd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Action`,qd=e=>e.kind===`State`||e.kind===`Enabled`||e.kind===`Boolean`,Q=(e,t)=>({kind:e,body:t}),Jd=(e,t,n)=>({kind:e,operands:[t,n]}),Yd=(e,t)=>({kind:e,operands:t.flatMap(t=>t.kind===e?Yd(e,t.operands).operands:[t])}),Xd=e=>{switch(e.kind){case`Boolean`:return 0;case`State`:case`Enabled`:return 1;case`Action`:case`Next`:return 2;case`Not`:return Xd(e.body);case`Always`:case`Eventually`:return 3;case`And`:case`Or`:return e.operands.reduce((e,t)=>Math.max(e,Xd(t)),0)}},Zd=e=>{switch(e.kind){case`Action`:return!0;case`Boolean`:case`State`:case`Enabled`:return!1;case`Not`:case`Always`:case`Eventually`:case`Next`:return Zd(e.body);case`And`:case`Or`:return e.operands.some(Zd)}},Qd=(e,t)=>e.kind===t.kind?e.kind===`Boolean`&&t.kind===`Boolean`?e.value===t.value:Kd(e)?e===t:`body`in e&&`body`in t?Qd(e.body,t.body):`operands`in e&&`operands`in t&&e.operands.length===t.operands.length&&e.operands.every((e,n)=>Qd(e,t.operands[n])):!1,$d=(e,t)=>e.some(e=>Qd(e,t)),ef=e=>e===`And`?`Or`:`And`,tf=(e,t)=>{switch(e.kind){case`Boolean`:return t?Gd(!e.value):e;case`State`:case`Enabled`:case`Action`:case`Next`:return t?Q(`Not`,e):e;case`Not`:return tf(e.body,!t);case`And`:case`Or`:return Yd(t?ef(e.kind):e.kind,e.operands.map(e=>tf(e,t)));case`Always`:case`Eventually`:{let n=t===(e.kind===`Always`)?`Eventually`:`Always`;return Q(n,tf(e.body,t))}}},nf=e=>{switch(e.kind){case`Boolean`:return Gd(!e.value);case`Not`:return e.body;case`And`:case`Or`:return Yd(ef(e.kind),e.operands.map(nf));case`Always`:return Q(`Eventually`,nf(e.body));case`Eventually`:return Q(`Always`,nf(e.body));default:return Q(`Not`,e)}},rf=e=>{switch(e.kind){case`And`:case`Or`:{let t=e.kind===`Or`,n=[];for(let r of e.operands){let e=rf(r);if(e.kind!==`Boolean`)n.push(e);else if(e.value===t)return Gd(t)}return n.length===0?Gd(!t):n.length===1?n[0]:Yd(e.kind,n)}case`Not`:{let t=rf(e.body);return t.kind===`Boolean`?Gd(!t.value):Q(`Not`,t)}case`Always`:case`Eventually`:{let t=rf(e.body);return Q(e.kind,t.kind===e.kind?t.body:t)}default:return e}},af=e=>e.kind===`Always`&&e.body.kind===`Eventually`?e.body.body:void 0,of=e=>{switch(e.kind){case`And`:{let t=[],n={value:1};for(let r of e.operands){let e=of(r);if(e.kind===`And`)t.push(...e.operands);else{if(e.kind===`Or`&&(n.value*=e.operands.length,n.value>2147483647))throw new f(`TLC cannot handle the temporal formula because it exceeds the maximum supported size in disjunctive normal form`);t.push(e)}}if(n.value===1)return{kind:`And`,operands:t};let r=Array.from({length:n.value},()=>[]),i={groups:1,repeat:n.value};for(let e of t){if(e.kind!==`Or`){r.forEach(t=>t.push(e));continue}i.repeat/=e.operands.length;let t={value:0};for(let n=0;n<i.groups;n++)for(let n of e.operands)for(let e=0;e<i.repeat;e++)r[t.value++].push(n);i.groups*=e.operands.length}return{kind:`Or`,operands:r.map(e=>Yd(`And`,e))}}case`Or`:{let t=[],n=[];for(let r of e.operands){let e=of(r);for(let r of e.kind===`Or`?e.operands:[e]){let e=af(r);e?t.push(e):n.push(r)}}if(t.length>0){let e=t.length===1?t[0]:Yd(`Or`,t);n.push(Q(`Always`,Q(`Eventually`,e)))}return Yd(`Or`,n)}case`Not`:return Kd(e.body)?e:of(nf(e.body));default:return e}},sf=e=>{switch(e.kind){case`And`:case`Or`:return e.operands.length===1?sf(e.operands[0]):Yd(e.kind,e.operands.map(sf));case`Not`:return e.body.kind===`Not`?sf(e.body.body):Q(`Not`,sf(e.body));case`Always`:case`Eventually`:case`Next`:return Q(e.kind,sf(e.body));default:return e}},cf=e=>{switch(e.kind){case`And`:case`Or`:{if(e.operands.length===1)return cf(e.operands[0]);let t=Math.floor(e.operands.length/2);return Jd(e.kind,cf(Yd(e.kind,e.operands.slice(0,t))),cf(Yd(e.kind,e.operands.slice(t))))}case`Not`:case`Always`:case`Eventually`:case`Next`:return Q(e.kind,cf(e.body));default:return e}},lf=(e,t)=>{e.kind===`Eventually`&&!$d(t,e)&&t.push(e),`body`in e&&lf(e.body,t),`operands`in e&&e.operands.forEach(e=>lf(e,t))},uf=e=>{let t=e.filter(qd),n=e.flatMap(e=>e.kind===`Not`&&qd(e.body)?[e.body]:[]);return!t.some(e=>$d(n,e))},df=e=>{let t=[...e],n=[];for(;t.length>0;){let e=t.pop();if(!e)break;switch(e.kind){case`Not`:t.push(e.body);break;case`Next`:n.push(e),t.push(e.body);break;case`Always`:case`Eventually`:n.push(e,Q(`Next`,e)),t.push(e.body);break;case`And`:case`Or`:t.push(...e.operands),n.push(e);break;case`Action`:throw new f(`TLC encountered actions while constructing the tableau`);default:n.push(e)}}return n},ff=(e,t,n)=>{if(e.kind===t&&`body`in e)return{first:e.body,second:Q(`Next`,e)};if(e.kind===n&&`operands`in e)return{first:e.operands[0],second:e.operands[1]}},pf=(e,t,n)=>e.flatMap(e=>{let r=ff(e,t,n);return r?[{whole:e,first:r.first,second:r.second}]:[]}),mf=(e,t)=>e.every(e=>$d(t,e))&&t.every(t=>$d(e,t)),hf=(e,t)=>[...e.filter(e=>!t.some(t=>mf(e,t))),...t],gf=e=>{let t=df(e),n=pf(t,`Always`,`And`),r=pf(t,`Eventually`,`Or`),i=e=>{for(let t of e){let n=ff(t,`Eventually`,`Or`);if(n&&!($d(e,n.first)||$d(e,n.second)))return hf(a([...e,n.first]),a([...e,n.second]))}let t=r.find(t=>($d(e,t.first)||$d(e,t.second))&&!$d(e,t.whole));return t?a([...e,t.whole]):[e]},a=e=>{if(!uf(e))return[];let t=[...e];for(let e=0;e<t.length;e++){let n=ff(t[e],`Always`,`And`);n&&($d(t,n.first)||t.push(n.first),$d(t,n.second)||t.push(n.second))}let r={isChanged:!0};for(;r.isChanged;){r.isChanged=!1;for(let e of n)$d(t,e.first)&&$d(t,e.second)&&!$d(t,e.whole)&&(t.push(e.whole),r.isChanged=!0)}return t.length>e.length&&!uf(t)?[]:i(t)};return a(e)},_f=e=>({particle:e,successors:[],statePredicates:e.filter(e=>Xd(e)<=1)}),vf=e=>{let t=gf([e]).map(_f),n=t.length;for(let e=0;e<t.length;e++){let n=t[e].particle.flatMap(e=>e.kind===`Next`?[e.body]:[]);for(let r of gf(n)){let n=t.findIndex(e=>mf(e.particle,r));n===-1&&t.push(_f(r)),t[e].successors.push(n===-1?t.length-1:n)}}return{nodes:t,initialCount:n}},yf=(e,t)=>!$d(e,t)||$d(e,t.body),bf=(e,t)=>{if(e.kind===`Eventually`&&e.body.kind===`Always`&&Xd(e.body.body)<3){t.eventuallyAlways.push(e.body.body);return}let n=af(e);if(n){let e=Xd(n);if(e<=1){t.infinitelyOftenStates.push(n);return}if(e===2){t.infinitelyOftenActions.push(n);return}}if(Zd(e))throw new f(`TLC cannot handle the temporal formula: actions may only appear as []<>A or <>[]A`);t.formulas.push(e)},xf=(e,t)=>{let n=e.findIndex(e=>Qd(e,t));return n===-1?(e.push(t),e.length-1):n},Sf=e=>{let t=of(rf(tf(e,!1)));if(t.kind===`Boolean`&&!t.value)return[];let n=[];for(let e of t.kind===`Or`?t.operands:[t]){let t=sf(e),r={eventuallyAlways:[],infinitelyOftenStates:[],infinitelyOftenActions:[],formulas:[]};for(let e of t.kind===`And`?t.operands:[t])bf(e,r);let i=r.formulas,a=i.length===0?void 0:i.length===1?i[0]:Yd(`And`,i),o=n.find(e=>e.formula===void 0||a===void 0?e.formula===a:Qd(e.formula,a));o?o.classifications.push(r):n.push({formula:a,classifications:[r]})}return n.map(e=>{let t=e.formula&&cf(e.formula),n=[];t&&lf(t,n);let r=[],i=[],a=e.classifications.map(e=>({infinitelyOftenActions:e.infinitelyOftenActions.map(e=>xf(i,e)),infinitelyOftenStates:e.infinitelyOftenStates.map(e=>xf(r,e)),eventuallyAlways:e.eventuallyAlways.map(e=>xf(i,e))}));return{tableau:t&&vf(t),promises:n,stateChecks:r,actionChecks:i,models:a}})},Cf=/* @__PURE__ */ new Set([`~>`,`-+->`]),wf=/* @__PURE__ */ new WeakMap,Tf=/* @__PURE__ */ new WeakSet,Ef=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Df=e=>new f(`TLC cannot handle the temporal formula at ${q(e)}`),$=(e,t,n,r=/* @__PURE__ */ new Set)=>{let i=e=>{let r=Ua(t,e);if(!r)return;if(r.kind===`Value`)return 0;if(r.kind===`Thunk`)return $(r.expression,r.scope,n);let i=r.operator;return i.kind===`Closure`?$(i.body,i.scope,n):0},a=e=>{if(n.variableIndex.has(e))return 1;if(n.constants.has(e))return 0;let t=Ya(e,n);if(t)return Of(t,n);let r=n.builtins.get(n.substitutions.get(e)??e);return r?+!!r.isStateLevel:void 0},o=(e,t)=>r.has(e)?0:J(t)?i(e)??a(e)??0:a(e)??i(e)??0,s=e=>{let i={value:0};return yi(e,(e,a)=>(i.value=Math.max(i.value,$(e,t,n,a.length===0?r:/* @__PURE__ */ new Set([...r,...a]))),e)),i.value};switch(e.kind){case`Prime`:case`Unchanged`:case`BoxAction`:case`AngleAction`:return 2;case`Enabled`:return 1;case`Always`:case`Eventually`:case`WeakFairness`:case`StrongFairness`:return 3;case`UnboundedQuantifier`:return e.isTemporal?3:s(e);case`Identifier`:return o(e.name,e);case`OperatorReference`:return o(e.operator,e);case`Apply`:return Cf.has(e.operator)?3:e.operator===`\\cdot`?2:Math.max(o(e.operator,e),s(e));default:return s(e)}},Of=(e,t)=>{let n=wf.get(e);if(n!==void 0)return n;wf.set(e,0);let r=e.kind===`Function`?e.bounds:[],i=Math.max($(e.body,void 0,t),...r.map(e=>$(e.set,void 0,t)));return wf.set(e,i),i},kf=(e,t,n,r,i=/* @__PURE__ */ new Set)=>{let a=(e,t,a=i)=>kf(e,t,n,r,a);if(e.kind===`And`)return e.operands.flatMap(e=>a(e,t));if(e.kind===`Label`)return a(e.body,t);if(e.kind===`Let`)return a(e.body,Af(e,t,n));if(e.kind===`Identifier`){let r=J(e)?Ua(t,e.name):void 0;if(r?.kind===`Thunk`)return a(r.expression,r.scope);let o=n.constants.has(e.name)?void 0:Ya(e.name,n);if(!r&&o?.kind===`Operator`&&o.params.length===0&&Of(o,n)>0){if(i.has(o))throw new d(`The definition of ${e.name} refers to itself`);return a(o.body,void 0,/* @__PURE__ */ new Set([...i,o]))}}let o=Ef(n,t);if(e.kind===`Apply`&&$(e,t,n)===3){let t=go(e,o),r=J(e)?void 0:Ya(e.operator,n);if(t?.kind===`Closure`&&!r?.isRecursive)return a(t.body,Oo(t,e.args,o))}if(r&&e.kind===`Forall`&&$(e.body,t,n)===3&&e.bounds.every(e=>$(e.set,t,n)===0)){let t=[];return eo(e.bounds,o,n=>(t.push(...a(e.body,n)),!1)),t}return[{expression:e,scope:t}]},Af=(e,t,n)=>{let r=Ao(e.definitions,Ef(n,t));for(let e=r;e&&e!==t;e=e.parent)e.binding.kind===`Thunk`&&Tf.add(e.binding);return r},jf=(e,t)=>({kind:`AngleAction`,action:e,subscript:t,location:e.location}),Mf=(e,t,n)=>{let r=(e,t,r)=>{let i=r===0?$(e,t,n):r;if(i===0){let r=X(e,Ef(n,t));if(typeof r!=`boolean`)throw new f(`TLC expected a boolean in the temporal formula at ${q(e)}`);return Gd(r)}return i===1?{kind:`State`,expression:e,scope:t}:{kind:`Action`,expression:e,unchanged:void 0,scope:t}},i={depth:0},a=(e,t,n,a)=>{if(i.depth>=100)throw new f(`TLC overflowed the stack while expanding the temporal formula at ${q(n)}`);i.depth++;let o=c(e,t);i.depth--;let s=Xd(o);return s>2?o:r(n,a,s)},o=(e,t)=>{let r=e.kind===`Identifier`?e.name:e.operator,i=Ef(n,t),o=J(e)||Ya(r,n)===void 0?Ua(t,r):void 0;if(o?.kind===`Thunk`&&Tf.has(o))return a(o.expression,o.scope,e,t);let s=o?.kind===`Operator`?o.operator:o?void 0:J(e)?_o(r,i):mo(r,n);if(s?.kind!==`Closure`)throw Df(e);let c=e.kind===`Apply`?e.args:[];return a(s.body,Oo(s,c,i),e,t)},s=(e,t)=>{if(!e.bounds.every(e=>$(e.set,t,n)===0))throw Df(e);let i=[];eo(e.bounds,Ef(n,t),t=>(i.push(c(e.body,t)),!1));let a=e.kind===`Forall`;if(i.length===0)return Gd(a);let o=Yd(a?`And`:`Or`,i),s=Xd(o);return s>2?o:r(e,t,s)},c=(e,t)=>{let i=$(e,t,n);if(i<=2)return r(e,t,i);switch(e.kind){case`Label`:return c(e.body,t);case`Let`:return c(e.body,Af(e,t,n));case`Identifier`:return o(e,t);case`Apply`:{let n=e.args;return e.operator===`~>`?Q(`Always`,Jd(`Or`,Q(`Not`,c(n[0],t)),Q(`Eventually`,c(n[1],t)))):e.operator===`~`&&!J(e)?Q(`Not`,c(n[0],t)):e.operator===`=>`?Jd(`Or`,Q(`Not`,c(n[0],t)),c(n[1],t)):o(e,t)}case`And`:case`Or`:return Yd(e.kind,e.operands.map(e=>c(e,t)));case`Forall`:case`Exists`:return s(e,t);case`If`:{if($(e.condition,t,n)===0){let r=X(e.condition,Ef(n,t));if(typeof r==`boolean`)return c(r?e.consequent:e.alternative,t)}let r=c(e.condition,t);return Jd(`Or`,Jd(`And`,r,c(e.consequent,t)),Jd(`And`,Q(`Not`,r),c(e.alternative,t)))}case`Always`:case`Eventually`:return Q(e.kind,c(e.expression,t));case`WeakFairness`:case`StrongFairness`:{let n=jf(e.action,e.subscript),r={kind:`Enabled`,step:e.enabled??n,scope:t},i=Q(`Not`,r),a={kind:`Action`,expression:e.action,unchanged:{kind:`Unchanged`,expression:e.subscript,location:n.location},scope:t,enabled:r};return e.kind===`WeakFairness`?Q(`Always`,Q(`Eventually`,Jd(`Or`,i,a))):Jd(`Or`,Q(`Eventually`,Q(`Always`,i)),Q(`Always`,Q(`Eventually`,a)))}default:throw Df(e)}};return c(e,t)},Nf=(e,t,n,r,i)=>{let a=e=>Nf(e,t,n,r,i);switch(e.kind){case`Boolean`:return e.value;case`State`:case`Enabled`:{let n=i.get(e);if(n!==void 0)return n;let a={environment:r,scope:e.scope,state:t,next:void 0},o=e.kind===`State`?qa(X(e.expression,a),`a temporal property predicate`):ka(e.step,a);return i.set(e,o),o}case`Action`:{if(e.enabled&&i.get(e.enabled)===!1)return!1;let a={environment:r,scope:e.scope,state:t,next:n};return e.unchanged&&qa(X(e.unchanged,a),`a subscript`)?!1:qa(X(e.expression,a),`an action predicate`)}case`Not`:return!a(e.body);case`And`:return e.operands.every(a);case`Or`:return e.operands.some(a);case`Next`:return Nf(e.body,n??t,void 0,r,/* @__PURE__ */ new Map);case`Always`:case`Eventually`:throw new f(`TLC cannot evaluate a temporal formula in a single step`)}},Pf=(e,t,n,r,i)=>{let a=e=>e+1<t.length?e+1:n,o=e=>t.map((e,t)=>t).filter(t=>t>=Math.min(e,n)),s=(e,a=r)=>Pf(e,t,n,a,i);switch(e.kind){case`Not`:return!s(e.body);case`And`:return e.operands.every(e=>s(e));case`Or`:return e.operands.some(e=>s(e));case`Next`:return s(e.body,a(r));case`Always`:return o(r).every(t=>s(e.body,t));case`Eventually`:return o(r).some(t=>s(e.body,t));default:return Nf(e,t[r],t[a(r)],i,/* @__PURE__ */ new Map)}},Ff=/* @__PURE__ */ new WeakMap,If={value:0},Lf=e=>{let t=Ff.get(e);if(t!==void 0)return t;let n=e.kind===`Boolean`?String(e.value):`body`in e?`${e.kind}(${Lf(e.body)})`:`operands`in e?`${e.kind}(${e.operands.map(Lf).join(`,`)})`:`${e.kind}#${If.value++}`;return Ff.set(e,n),n},Rf=(e,t)=>e.every((e,n)=>He(e,t[n])),zf=(e,t,n)=>{let r=new Int32Array(e).fill(-1),i=new Int32Array(e),a=new Uint8Array(e),o=[],s={value:0},c=/* @__PURE__ */ new Map,l=e=>{let n=c.get(e);if(n)return n;let r=t(e);return c.set(e,r),r};for(let t=0;t<e;t++){if(r[t]!==-1)continue;let e=[],u=t=>{r[t]=s.value,i[t]=s.value++,o.push(t),a[t]=1,e.push({node:t,position:0})};for(u(t);e.length>0;){let t=e[e.length-1],s=l(t.node);if(t.position<s.length){let e=s[t.position++];r[e]===-1?u(e):a[e]&&(i[t.node]=Math.min(i[t.node],r[e]));continue}e.pop();let d=e[e.length-1];if(d&&(i[d.node]=Math.min(i[d.node],i[t.node])),i[t.node]!==r[t.node])continue;let f=[];for(;;){let e=o.pop();if(e===void 0||(a[e]=0,f.push(e),e===t.node))break}let p=n(f,l);if(f.forEach(e=>c.delete(e)),p)return}}},Bf=(e,t,n,r)=>{if(e===t)return[e];let i=/* @__PURE__ */ new Map([[e,-1]]),a=[e];for(let e=0;e<a.length;e++)for(let o of r(a[e]))if(!i.has(o)&&n.has(o)){if(i.set(o,a[e]),o===t){let e=[];for(let n=t;n!==-1;n=i.get(n)??-1)e.push(n);return e.reverse()}a.push(o)}return[e]},Vf=e=>e.filter((t,n)=>n===0||e[n-1]!==t),Hf=(e,t,n)=>{if(e.length===0)return;let r=t.map(e=>Mf(e.expression,e.scope,n)),i=e.map(e=>Q(`Not`,Mf(e.expression,e.scope,n))),a=i.length===1?i[0]:Yd(`Or`,i),o=r.length===0?a:Yd(`And`,[...r,a]),s=Sf(o);if(s.length===0)throw new f(`Temporal formula is a tautology (its negation is unsatisfiable)`);let c=s.map(e=>({solution:e,stateResults:[],actionResults:[],consistency:[],product:e.tableau&&{states:[],tableauNodes:[],edges:[],initial:[],parents:[]},productNodes:/* @__PURE__ */ new Map,nodesByState:/* @__PURE__ */ new Map})),l=/* @__PURE__ */ new Map,u=c.map(e=>e.solution.actionChecks.map(e=>{let t=Lf(e),n=l.get(t);return n===void 0?(l.set(t,l.size),l.size-1):n})),d=[],p=[],m=[],h=[],g=(e,t,r)=>e.every(e=>Nf(e,t,void 0,n,r)),_=(e,t,n,r,i)=>{let a=n*(e.solution.tableau?.nodes.length??1)+r,o=e.productNodes.get(a);if(o!==void 0)return{node:o,isNew:!1};let s=t.states.length;e.productNodes.set(a,s),t.states.push(n),t.tableauNodes.push(r),t.edges.push([]),t.parents.push(i);let c=e.nodesByState.get(n);return c?c.push(s):e.nodesByState.set(n,[s]),{node:s,isNew:!0}},v=(t,r)=>{let a=t.map(e=>d[e]);return(e.find((e,t)=>!Pf(i[t].body,a,r,0,n))??e[0]).name},y=(e,t,n,r)=>{let i=e.solution.models.some(e=>e.eventuallyAlways.length===0&&e.infinitelyOftenStates.length===0&&e.infinitelyOftenActions.length===0),a=n.nodes.length,o=(e.nodesByState.get(r)??[]).map(e=>({node:e,isDone:!1}));for(;o.length>0;){let r=o.pop();if(!r)break;let s=t.states[r.node],c=n.nodes[t.tableauNodes[r.node]].successors;if(r.isDone&&i&&c.some(e=>{let t=n.nodes[e];return t.particle.length===0&&t.successors.every(t=>t===e)})){let e=Vf(re(t,r.node).map(e=>t.states[e]));return{name:v(e,e.length-1),path:e}}let l=e.consistency[s];p[s].forEach((n,i)=>{for(let s of c){if(!l[i*a+s])continue;let c=_(e,t,n,s,r.node);t.edges[r.node].push(c.node,i),c.isNew&&p[n]!==void 0&&o.push({node:c.node,isDone:!0})}})}},b=(e,t)=>{h.push(e),d[e]=t;for(let n of c){let r=n.solution.tableau,i=n.product;if(!r||!i)continue;let a=/* @__PURE__ */ new Map;for(let o=0;o<r.initialCount;o++)g(r.nodes[o].statePredicates,t,a)&&i.initial.push(_(n,i,e,o,-1).node)}},ee=(e,t,r)=>{n.runtime.setLivenessSource(e),d[e]=t;let i=[],a=/* @__PURE__ */ new Map;for(let n of[...r,{index:e,state:t}]){let t=a.get(n.index);t!==void 0&&(n.index<e||t.some(e=>Rf(e.state,n.state)))||(i.push(n),t?t.push(n):a.set(n.index,[n]))}p[e]=i.map(e=>e.index),m[e]=i.map(e=>e.state);let o=/* @__PURE__ */ new Map,s=i.map(()=>/* @__PURE__ */ new Map);for(let r of c){let a=r.solution;r.stateResults[e]=Uint8Array.from(a.stateChecks,e=>+!!Nf(e,t,void 0,n,o));let c=a.tableau,l=r.product;if(!c||!l)continue;let u=c.nodes.length,d=new Uint8Array(i.length*u);i.forEach((e,t)=>{c.nodes.forEach((n,r)=>{let i=g(n.statePredicates,e.state,s[t]);d[t*u+r]=+!!i})}),r.consistency[e]=d;let f=y(r,l,c,e);if(f)return f}},x=e=>{n.runtime.setLivenessSource(e);let t=d[e],r=m[e],i=r.map(()=>new Int8Array(l.size).fill(-1));c.forEach((a,o)=>{let s=a.solution,c=u[o],l=a.stateResults[e],d=new Map(s.stateChecks.map((e,t)=>[e,l[t]===1])),f=s.actionChecks.length,p=new Uint8Array(r.length*f);r.forEach((e,r)=>{let a=i[r];for(let i=0;i<f;i++){let o=c[i];if(a[o]===-1){let r=s.actionChecks[i];a[o]=+!!Nf(r,t,e,n,d)}p[r*f+i]=a[o]}}),a.actionResults[e]=p})},te=(e,t)=>(e.actionResults[t]===void 0&&x(t),e.actionResults[t]),ne=e=>e.product??{states:d.map((e,t)=>t),tableauNodes:d.map(()=>-1),edges:Array.from({length:d.length},(e,t)=>(p[t]??[]).flatMap((e,t)=>[e,t])),initial:h,parents:[]},re=(e,t)=>{if(e.parents.length>0){let n=[];for(let r=t;r!==-1;r=e.parents[r])n.push(r);return n.reverse()}let n=new Map(e.initial.map(e=>[e,-1])),r=[...e.initial];for(let i=0;i<r.length&&!n.has(t);i++){let t=e.edges[r[i]];for(let e=0;e<t.length;e+=2)n.has(t[e])||(n.set(t[e],r[i]),r.push(t[e]))}let i=[];for(let e=t;e!==-1;e=n.get(e)??-1)i.push(e);return i.reverse()},S=e=>{let t=e.solution,n=t.tableau,r=ne(e),i=t.actionChecks.length,a=(t,n,a)=>te(e,r.states[t])[n*i+a]===1;for(let i of t.models){let o=(e,t)=>i.eventuallyAlways.every(n=>a(e,t,n)),s=e=>{let t=r.edges[e],n=[];for(let r=0;r<t.length;r+=2)o(e,t[r+1])&&n.push(t[r]);return n},c={value:void 0};if(zf(r.states.length,s,(s,l)=>{let u=new Set(s);if(s.length===1&&!l(s[0]).includes(s[0]))return!1;let d=i.infinitelyOftenStates.map(t=>s.find(n=>e.stateResults[r.states[n]][t]===1)),f=i.infinitelyOftenActions.map(e=>{for(let t of s){let n=r.edges[t];for(let r=0;r<n.length;r+=2)if(u.has(n[r])&&o(t,n[r+1])&&a(t,n[r+1],e))return[t,n[r]]}}),p=t.promises.map(e=>s.find(t=>n!==void 0&&yf(n.nodes[r.tableauNodes[t]].particle,e)));if(!(d.every(e=>e!==void 0)&&f.every(e=>e!==void 0)&&p.every(e=>e!==void 0)))return!1;let m=s[s.length-1],h=[...d.flatMap(e=>e??[]),...f.flatMap(e=>e??[]),...p.flatMap(e=>e??[])],g=[m];for(let e of h)g.push(...Bf(g[g.length-1],e,u,l).slice(1));g.length===1&&!l(m).includes(m)&&g.push(l(m).find(e=>u.has(e))??m);let _=Bf(g[g.length-1],m,u,l);g.push(..._.slice(1,-1));let y=Vf(re(r,m).map(e=>r.states[e])),b=Vf(g.map(e=>r.states[e]));return b.length>1&&b[b.length-1]===b[0]&&b.pop(),y.pop(),c.value={name:v([...y,...b],y.length),prefix:y,cycle:b},!0}),c.value)return c.value}};return{addInitialState:b,addState:ee,findViolation:()=>{for(let e of c){let t=S(e);if(t)return t}}}},Uf=`UnnamedAction`,Wf={module:`--TLA+ BUILTINS--`,start:{line:0,column:0},end:{line:0,column:0}},Gf=e=>{let t=e.range??Wf;return jt([[`beginLine`,t.start.line],[`beginColumn`,t.start.column],[`endLine`,t.end.line],[`endColumn`,t.end.column],[`module`,t.module]])},Kf=e=>{let t=[[`name`,e.name],[`location`,Gf(e.location)]];return e.parameters.length===0?jt(t):jt([...t,[`context`,jt(e.parameters)],[`parameters`,I(e.parameters.map(e=>e[0]))]])},qf=(e,t)=>({name:e,location:t.location,parameters:[],expression:t,scope:void 0}),Jf=(e,t)=>({environment:e,scope:t,state:void 0,next:void 0}),Yf=e=>e.kind===`Identifier`?e.name:e.kind===`Apply`?e.operator:void 0,Xf=e=>e.kind===`Apply`?e.args:[],Zf=(e,t,n)=>{let r=Yf(e);if(r===void 0)return;if(J(e)){let e=Ua(t,r);return e?.kind===`Operator`&&e.operator.kind===`Closure`?e.operator:void 0}if(n.constants.has(r)||n.variableIndex.has(r))return;let i=mo(r,n);return i?.kind===`Closure`?i:void 0},Qf=(e,t)=>{try{return X(e,Jf(t,void 0)),!0}catch(e){if(e instanceof l)return!1;throw e}},$f=(e,t)=>e?.kind===`Operator`&&e.params.length===0&&e.body.kind!==`Number`&&e.body.kind!==`String`&&Za(e,t)&&Qf(e.body,t),ep=(e,t)=>{let n=Ya(e.name,t);return n?.body===e.body&&$f(n,t)},tp=(e,t)=>{if(e.kind!==`Identifier`||!J(e))return;let n=Ua(t,e.name);return n?.kind===`Thunk`?n:void 0},np=(e,t)=>(e?.params??[]).flatMap(e=>{let n=Ua(t,e.name);return n?.kind===`Value`?[[e.name,n.value]]:[]}),rp=(e,t)=>{try{return e()}catch(e){if(e instanceof l)return t();throw e}},ip=(e,t,n,r,i)=>{let a=Xf(t),o=()=>[{name:e.name,location:t.location,parameters:[],expression:t,scope:n}];return!r||a.length===0?[{...e,parameters:[],expression:t,scope:n}]:a.some(e=>$(e,n,i)!==0)?o():rp(()=>[{...e,parameters:a.map((e,t)=>[r.params[t].name.replace(/#\d+$/,``),X(e,Jf(i,n))]),expression:t,scope:n}],o)},ap=(e,t,n,r,i)=>{let a=()=>({name:n?.name??Uf,location:e.location,parameters:np(n,t),expression:e,scope:t});switch(e.kind){case`Let`:return ap(e.body,Ao(e.definitions,Jf(r,t)),n,r,i);case`Label`:return ap(e.body,t,n,r,i);case`Or`:return e.operands.flatMap(e=>ap(e,t,n,r,i));case`Exists`:return rp(()=>{let o=[];return eo(e.bounds,Jf(r,t),t=>(o.push(...ap(e.body,t,n,r,i)),!1)),o.length===0?[a()]:o},()=>[a()])}let o=J(e)?void 0:i.get(Yf(e)??``),s=Zf(e,t,r);if(o)return ip(o,e,t,s,r);if(!s)return[a()];let c=Xf(e),l=()=>[{name:s.name,location:e.location,parameters:[],expression:e,scope:t}];return ep(s,r)||c.some(e=>$(e,t,r)!==0)?l():rp(()=>{let e=c.reduce((e,n,i)=>({name:s.params[i].name,binding:{kind:`Value`,value:X(n,Jf(r,t))},parent:e}),s.scope);return ap(s.body,e,s,r,i)},l)},op=(e,t,n,r,i)=>{let a=(e,t)=>op(e,t,n,r,i);if(e.kind===`Let`){a(e.body,Ao(e.definitions,Jf(n,t)));return}let o=tp(e,t);if(o){a(o.expression,o.scope);return}let s=Zf(e,t,n);if(s&&ep(s,n))return;if(s&&s.params.length===0){if($(s.body,s.scope,n)===1){r.inits.push(qf(s.name,s.body));return}a(s.body,s.scope);return}if(s&&e.kind===`Apply`&&s.params.length===e.args.length){a(s.body,Oo(s,e.args,Jf(n,t)));return}if(e.kind===`And`){e.operands.forEach(e=>a(e,t));return}if(e.kind===`Always`){if(e.expression.kind===`BoxAction`){i.push({expression:e.expression.action,scope:t});return}r.temporals.push(qf(Uf,e));return}let c=$(e,t,n);c<=1?r.inits.push(qf(Uf,e)):c===3&&r.temporals.push(qf(Uf,e))},sp=(e,t,n,r,i)=>{let a=(t,n)=>sp(e,t,n,r,i);if(t.kind===`Let`){a(t.body,Ao(t.definitions,Jf(r,n)));return}let o=tp(t,n);if(o){a(o.expression,o.scope);return}let s=Zf(t,n,r);if(s&&ep(s,r))return;if(s&&s.params.length===Xf(t).length){a(s.body,t.kind===`Apply`?Oo(s,t.args,Jf(r,n)):s.scope);return}if(t.kind===`Forall`&&rp(()=>(eo(t.bounds,Jf(r,n),e=>(a(t.body,e),!1)),!0),()=>!1))return;if(t.kind===`And`){t.operands.forEach(e=>a(e,n));return}if(t.kind===`Always`){let a=t.expression;a.kind===`BoxAction`?i.impliedActions.push(qf(e,a)):$(a,n,r)<2?i.invariants.push(qf(e,a)):i.impliedTemporals.push(qf(e,t));return}let c=$(t,n,r);c<=1?i.impliedInits.push(qf(e,t)):c===3&&i.impliedTemporals.push(qf(e,t))},cp=(e,t)=>{let n=Ya(e,t);return n?.kind===`Operator`&&!$f(n,t)?n:void 0},lp=e=>jt([[`name`,e.name],[`location`,Gf(e.location)]]),up=(e,t,n)=>{let r={inits:[],actions:[],temporals:[],invariants:[],impliedInits:[],impliedActions:[],impliedTemporals:[]},i=[],a=e.specification===void 0?void 0:cp(e.specification,t);a&&(op(a.body,void 0,t,r,i),i.forEach(e=>r.actions.push(...ap(e.expression,e.scope,void 0,t,n))));let o=e.init===void 0?void 0:mo(e.init,t);o?.kind===`Closure`&&r.inits.push(qf(e.init??``,o.body));let s=e.next===void 0?void 0:mo(e.next,t);return s?.kind===`Closure`&&r.actions.push(...ap(s.body,s.scope,s,t,n)),e.invariants.forEach(e=>{let n=cp(e,t);n&&r.invariants.push(qf(e,n.body))}),e.properties.forEach(e=>{let n=cp(e,t);n&&sp(e,n.body,void 0,t,r)}),r},dp=(e,t,n)=>up(e,t,n).actions,fp=e=>{let t=e.parameters.map(e=>H(e[1]));return`${e.name===Uf?`Action`:e.name}${t.length===0?``:`(${t.join(`,`)})`} ${Pa(e.location.range??Wf)}`},pp=(e,t,n,r)=>{let i=up(e,t,r),a=e=>ht(e.map(Kf)),o=e=>ht(e.flatMap(e=>{let n=cp(e,t);return n?[lp(n)]:[]}));return jt([[`inits`,a(i.inits)],[`actions`,a(i.actions)],[`temporals`,a(i.temporals)],[`invariants`,a(i.invariants)],[`impliedinits`,a(i.impliedInits)],[`impliedactions`,a(i.impliedActions)],[`impliedtemporals`,a(i.impliedTemporals)],[`variables`,ht(t.variables.map((e,t)=>jt([[`name`,e],[`location`,Gf(n[t])]])))],[`actionconstraints`,o(e.actionConstraints)],[`constraints`,o(e.constraints)]])},mp=e=>[...e].map(([e,t])=>`${e}>${t.name}`).sort().join(`,`),hp=(e,t)=>{let n=/* @__PURE__ */ new Map;return(/* @__PURE__ */ new Set([...e.keys(),...t.keys()])).forEach(r=>{let i=e.get(r),a=i?t.get(i.name)??i:t.get(r);a&&a.name!==r&&n.set(r,a)}),n},gp=(e,t)=>{if(!A(e))throw new d(`The symmetry values of ${t} must be functions`);let n=V(e),r=/* @__PURE__ */ new Map;return n.domain.forEach((e,t)=>{let i=n.range[t];if(!j(e)||!j(i))throw new d(`Symmetry function must have model values as domain and range`);e.name!==i.name&&r.set(e.name,i)}),r},_p=(e,t)=>{let n=t.definitions.get(e);if(n?.kind!==`Operator`||n.params.length>0)throw new d(`The symmetry function ${e} must specify a set of permutations`);let r=X(n.body,{environment:t,scope:void 0,state:void 0,next:void 0});if(!k(r)||!L(r))throw new d(`The symmetry operator must specify a set of functions`);let i=R(r).elements.map(t=>gp(t,e));if(n.body.kind===`Apply`&&n.body.args.length>=i.length)return[];let a=/* @__PURE__ */ new Map;i.forEach(e=>{e.size>0&&a.set(mp(e),e)});let o=[...a.values()],s={start:0};for(;s.start<a.size;){let e=[...a.values()],t=e.length;o.forEach(n=>e.slice(s.start,t).forEach(e=>{let t=hp(n,e),r=mp(t);t.size>0&&!a.has(r)&&a.set(r,t)})),s.start=t}let c=Math.max(256,Math.floor(4194304/a.size));return[...a.values()].map(e=>({images:e,cache:/* @__PURE__ */ new WeakMap,cacheSize:0,cacheLimit:c}))},vp=(e,t)=>{for(let n=0;n<e.length;n++){let r=e[n],i=xp(r,t);if(i===r)continue;let a=e.slice(0,n);a.push(i);for(let r=n+1;r<e.length;r++)a.push(xp(e[r],t));return a}},yp=(e,t)=>{let n=[],r=[];for(let i of e){let e=xp(i,t);e===i?n.push(i):r.push(e)}if(r.length===0)return;r.sort(F);let i=[],a=0,o=0;for(;a<n.length&&o<r.length;)i.push(F(n[a],r[o])<0?n[a++]:r[o++]);for(;a<n.length;)i.push(n[a++]);for(;o<r.length;)i.push(r[o++]);return i},bp=e=>e.kind===`Set`?e.elements.length:e.kind===`Function`?e.domain.length:0,xp=(e,t)=>{if(typeof e!=`object`)return e;if(e.kind===`ModelValue`)return t.images.get(e.name)??e;let n=bp(e);if(n===0||n>64)return Sp(e,t);let r=t.cache.get(e);if(r!==void 0)return r;let i=Sp(e,t),a=i!==e&&He(i,e)?e:i;return t.cacheSize>=t.cacheLimit&&(t.cache=/* @__PURE__ */ new WeakMap,t.cacheSize=0),t.cache.set(e,a),t.cacheSize++,a},Sp=(e,t)=>{let n=e.kind;if(n===`Set`){let n=yp(e.elements,t);return n?Re(n):e}if(n===`Function`||n===`LazyFunction`&&L(e.domain)){let n=V(e),r=vp(n.domain,t),i=vp(n.range,t)??n.range;if(r){let e=xt(r.map((e,t)=>[e,i[t]]));return e.domain.every((e,t)=>e===n.domain[t])?ze(n.domain,e.range):e}return i===n.range?n:ze(n.domain,i)}if(n===`Interval`||!k(e)||!L(e))return e;let r=R(e),i=vp(r.elements,t);return i?ht(i):r},Cp=(e,t,n)=>{for(let r=t.length;r<e.length;r++)t.push(xp(e[r],n));return t},wp=(e,t,n,r)=>{let i=[];for(let a=0;a<e.length;a++){let o=r?r[a]:a,s=xp(e[o],n),c=F(s,t[o]);if(c>0)return;if(r||i.push(s),c<0)return r?e.map(e=>xp(e,n)):Cp(e,i,n)}},Tp=(e,t,n)=>t.reduce((t,r)=>wp(e,t,r,n)??t,e),Ep=[`LAMBDA`,`$$InAssume`,`nullODN`,`nullOpArg`,`nullLabelNode`],Dp=/* @__PURE__ */ new Set([`THEOREM`,`LEMMA`,`COROLLARY`,`PROPOSITION`]),Op=new Map(ou.flatMap(e=>e.map(t=>[t,e[0]]))),kp=e=>Op.get(e)??e,Ap=e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(t,31)+e.charCodeAt(n)|0;return t},jp=()=>{let e={buckets:Array.from({length:11},()=>[]),threshold:8},t=/* @__PURE__ */ new Set,n=[],r=(e,t)=>(Ap(e.name)&2147483647)%t,i=()=>{let t=e.buckets.length*2+1,n=Array.from({length:t},()=>[]);for(let i=e.buckets.length-1;i>=0;i--)for(let a of e.buckets[i])n[r(a,t)].unshift(a);e.buckets=n,e.threshold=Math.floor(t*.75)};return{put:a=>{t.has(a.key)||(n.length>=e.threshold&&i(),e.buckets[r(a,e.buckets.length)].unshift(a),t.add(a.key),n.push(a))},inserted:n,enumerate:()=>e.buckets.toReversed().flat()}},Mp=(e,t,n)=>({key:t===`module`?`module ${e}`:e,name:e,kind:t,isLocal:n}),Np=(e,t)=>{let n=e[t],r=e[t+1];if(n.text===`_`&&r.kind===`Operator`)return e[t+2]?.text===`_`?{name:kp(r.text),end:t+3}:{name:r.text,end:t+2};if(n.kind===`Operator`)return{name:n.text===`-`?`-.`:kp(n.text),end:t+2};if(r?.text!==`(`)return{name:n.text,end:t+1};let i=e.findIndex((e,n)=>n>t&&e.text===`)`);return{name:n.text,end:i+1}},Pp=(e,t)=>{let n=[];for(let r=t;;){let t=Np(e,r);if(n.push(t.name),e[t.end]?.text!==`,`)return n;r=t.end+1}},Fp=e=>({line:e.line,column:e.column}),Ip=(e,t,n)=>{let r=/* @__PURE__ */ new Set,i=(a,o)=>{let s={key:o,unit:t,extends:[],instances:[],inner:[],allExtends:r};for(let t=a+1;t<e.length;t++){let a=e[t];if(a.kind===`ModuleEnd`)return{references:s,end:t};if(a.kind===`Separator`&&e[t+1]?.text===`MODULE`){let r=e[t+2].text,a=i(t,`${o}/${r}`);n.set(r,a.references),s.inner.push(a.references),t=a.end}else if(a.text===`EXTENDS`){let n=Pp(e,t+1);s.extends.push(...n),n.forEach(e=>r.add(e))}else a.text===`INSTANCE`&&e[t+1]?.kind===`Identifier`&&s.instances.push(e[t+1].text)}return{references:s,end:e.length}};return i(0,t??``).references},Lp=(e,t)=>t!==void 0&&t.line===e.line&&t.column===e.column+e.text.length,Rp=e=>{let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.text===`<`&&Lp(r,e[n+1])&&/^(\d+|\*|\+)$/.test(e[n+1].text)&&e[n+2]?.text===`>`&&Lp(e[n+1],e[n+2])){n+=Lp(e[n+2],e[n+3])?3:2;continue}let i=r.text===`MODULE`&&e[n-1]?.kind===`Separator`;r.kind!==`String`&&!i&&t.push(r.text)}return t},zp=e=>{let t=/* @__PURE__ */ new Map,n=[];return e.forEach((r,i)=>{r.kind===`Separator`&&e[i+1]?.text===`MODULE`&&n.push({name:e[i+2].text,start:i});let a=r.kind===`ModuleEnd`?n.pop():void 0;a&&!t.has(a.name)&&t.set(a.name,{start:a.start,end:i+1})}),t},Bp=(e,t)=>e.find(e=>e.name===t)??e.map(e=>Bp(e.modules,t)).find(Boolean),Vp=(e,t)=>{let n=/* @__PURE__ */ new Map,r=/* @__PURE__ */ new Map,i=i=>{let a=n.get(i??``);if(a)return a;let o=i===void 0?e:uu.get(i)??t?.(i)??rc(e,i),s=o===void 0?[]:se(o),c=zp(s),l=c.get(s[2]?.text??``)??{start:0,end:0},u={module:void 0},d={tokens:s,...l,getModule:()=>u.module??=ac(o??``)};return n.set(i??``,d),c.forEach((e,t)=>{e.start===l.start||r.has(t)||r.set(t,{tokens:s,...e,getModule:()=>Bp(d.getModule().modules,t)??d.getModule()})}),d};return i(void 0),e=>(e===void 0?void 0:r.get(e))??i(e)},Hp=(e,t)=>{let n=Vp(e,t),r=e=>{let t=e.tokens,n=e.getModule(),r=[],i=[],o=(e,n)=>{let i=Pp(t,e+1);r.push({location:Fp(t[e]),apply:e=>i.forEach(t=>e.put(Mp(t,n,!1)))})},s=new Set(n.definitions.filter(e=>e.isRecursive).map(e=>e.name)),c={value:0};t.slice(e.start,e.end).forEach((n,a)=>{let l=e.start+a,u=t[l];if(u.kind===`Separator`&&t[l+1]?.text===`MODULE`){if(c.value++,c.value===2){let e=t[l+2].text;r.push({location:Fp(u),apply:t=>t.put(Mp(e,`module`,!1))})}}else u.kind===`ModuleEnd`&&c.value--,c.value===1&&u.kind===`Keyword`&&((u.text===`CONSTANT`||u.text===`CONSTANTS`)&&o(l,`constant`),(u.text===`VARIABLE`||u.text===`VARIABLES`)&&o(l,`variable`),u.text===`RECURSIVE`&&Pp(t,l+1).every(e=>s.has(e))&&o(l,`definition`),Dp.has(u.text)&&t[l+1]?.kind===`Identifier`&&t[l+2]?.text===`==`&&(i.push(Fp(u)),r.push({location:Fp(u),apply:e=>e.put(Mp(t[l+1].text,`theorem`,!1))})))}),n.assumptions.forEach(e=>{i.push(e.location);let t=e.name;t!==void 0&&r.push({location:e.location,apply:e=>e.put(Mp(t,`theorem`,!1))})});let l=e=>i.some(t=>t.line===e.line&&t.column===e.column);return n.definitions.forEach(e=>{if(l(e.location))return;let t=kp(e.name);r.push({location:e.location,apply:n=>n.put(Mp(t,`definition`,e.isLocal))})}),n.instances.forEach(e=>{r.push({location:e.location,apply:t=>{let n=a(e.module).enumerate(),r=e.name===void 0?``:`${e.name}!`,i=n.filter(e=>e.kind===`definition`),o=n.filter(e=>e.kind===`theorem`);[...i,...o].forEach(n=>{n.isLocal||t.put(Mp(`${r}${n.name}`,n.kind,e.isLocal))}),e.name!==void 0&&t.put(Mp(e.name,`definition`,e.isLocal))}})}),r.sort((e,t)=>Dr(e.location,t.location)?-1:+!!Dr(t.location,e.location))},i=/* @__PURE__ */ new Map,a=e=>{let t=i.get(e??``);if(t)return t;let o=jp();i.set(e??``,o),au.toReversed().forEach(e=>o.put(Mp(e,`builtin`,!1)));let s=n(e);return s.getModule().extends.forEach(e=>a(e).inserted.forEach(e=>{e.isLocal||o.put(e)})),r(s).forEach(e=>e.apply(o)),o};return a(void 0).enumerate().filter(e=>e.kind===`variable`).map(e=>e.name).reverse()},Up=(e,t,n)=>{let r=Vp(e,n),i=/* @__PURE__ */ new Set,a=e=>{i.add(e)},o=e=>{e.kind===`ModelValue`&&a(e.name),e.kind===`String`&&a(e.value),e.kind===`Set`&&e.elements.forEach(o)};t.constants.forEach(e=>{e.args?.forEach(o),o(e.value)}),su.forEach(a);let s=e=>{let t=r(e);return t.tokens.slice(t.start,t.end)},c=/* @__PURE__ */ new Map,l=/* @__PURE__ */ new Map,u=e=>{let t=l.get(e);if(t)return t;let n=Ip(s(e),e,c);return l.set(e,n),n},d=e=>c.get(e)??u(e),f=/* @__PURE__ */ new Set,p=(e,t)=>c.has(t)||f.has(`${e.key}>${t}`),m=(e,t,n)=>{let r=[...e.extends.map(d),...e.instances.filter(t=>p(e,t)).map(d),...e.inner];for(let e of r){let r=n(e,t);if(r)return r}},h=e=>{let t=(n,r)=>{if(r.has(n.key))return;r.add(n.key);let i=e(n).find(e=>!p(n,e));return i===void 0?m(n,r,t):[n,i]};return t},g=h(e=>e.extends),_=h(e=>e.instances),v=/* @__PURE__ */ new Set([void 0]),y=/* @__PURE__ */ new Map;Rp(s(void 0)).forEach((e,t)=>{t===3&&lu.forEach(a),a(e)});let b=u(void 0);for(;;){let e=g(b,/* @__PURE__ */ new Set)??_(b,/* @__PURE__ */ new Set);if(!e)break;let[t,n]=e;f.add(`${t.key}>${n}`),y.set(t.unit,[...y.get(t.unit)??[],n]),!v.has(n)&&(v.add(n),Rp(s(n)).forEach(a))}Ep.forEach(a);let ee=/* @__PURE__ */ new Set,x=e=>{if(ee.has(e))return;ee.add(e);let t=y.get(e)??[],n=u(e).allExtends;[...t.filter(e=>n.has(e)),...t.filter(e=>!n.has(e))].forEach(x),s(e).forEach(e=>{e.kind===`String`&&a(e.text)})};return x(void 0),cu.forEach(a),[...i]},Wp=(e,t)=>e*((t-e)/2**64),Gp=e=>e.includes(`.`)?e:`${e}.0`,Kp=e=>{let t=Math.abs(e);if(t>=.001&&t<1e7)return Gp(String(e));let[n,r]=e.toExponential().split(`e`);return`${Gp(n)}E${r.replace(`+`,``)}`},qp=e=>e!==void 0&&e>=`0`&&e<=`9`,Jp=e=>{if(e===0)return`0.0`;let t=Kp(e),n={next:0,digits:0,result:``};for(;t[n.next]===`0`;)n.next++;for(;qp(t[n.next]);)n.result+=t[n.next++],n.digits++;if(n.next===t.length)return n.result;if(t[n.next]!==`.`)return t;if(n.next++,n.digits>=2)for(;qp(t[n.next]);)n.next++;else{if(n.result+=`.`,n.digits===0)for(;t[n.next]===`0`;)n.result+=t[n.next++];for(;qp(t[n.next])&&n.digits<2;)n.result+=t[n.next++],n.digits++;for(qp(t[n.next])&&Number(t[n.next])>=5&&(n.result=Yp(n.result));qp(t[n.next]);)n.next++}return n.next>=t.length?n.result:t[n.next]===`E`?`${n.result}${t.slice(n.next)}`:t},Yp=e=>{let t=e.length-1;if(t<0)return`1`;let n=e[t],r=e.slice(0,t);return n===`.`?`${Yp(r)}.`:n===`9`?`${Yp(r)}0`:`${r}${Number(n)+1}`},Xp=e=>{let t={value:0};for(;10n**BigInt(t.value+1)<e*10n;)t.value++;let n=10n**BigInt(t.value+1),r=n/e,i=n%e*2n>=e;return Number(`${r+(i?1n:0n)}e-${t.value+1}`)},Zp=(e,t,n)=>{if(Wp(e,t)<1e-10)return;let r=n().sort();return r.reduce((e,t,n)=>{let i=r[n-1];return n>0&&i<0n==t<0n&&t-i<e?t-i:e},9223372036854775807n)},Qp=e=>{let t=e.reduce((e,t)=>e+t,0);if(t===0)return;let n=e.flatMap((e,t)=>e>0?[t]:[]),r=e.reduce((e,t,n)=>e+t*n,0),i=Math.floor(t*.95),a={count:0},o=n.find(t=>(a.count+=e[t],a.count>i));return`The average outdegree of the complete state graph is ${Math.round(r/t)} (minimum is ${n[0]}, the maximum ${n[n.length-1]} and the 95th percentile is ${o}).`},$p={line:0,column:0},em=`Failed to recover the initial state from its fingerprint.`,tm=`Failed to recover the next state from its fingerprint.`,nm=e=>({kind:`Identifier`,name:e,location:$p}),rm=/* @__PURE__ */ new Set([`name`,`property`]),im=(e,t,n)=>{let r=Ya(t,n);if(!r)throw new d(`The ${e} ${t} specified in the configuration file\nis not defined in the specification.`);if(r.kind===`Operator`&&r.params.length>0)throw new d(rm.has(e)?`TLC requires ${t} not to take any argument.`:`TLC requires ${e} not to take any argument, but one was given: ${t}`);return r},am=(e,t,n)=>{let r=im(e,t,n);if(Za(r,n))throw new d(`The ${e} ${t} cannot be a constant.`);return r},om=(e,t,n)=>{if(Za(t,n)&&t.body.kind!==`Number`&&t.body.kind!==`String`)try{return X(nm(e),Tm(n,void 0,void 0))}catch(e){if(e instanceof f)return;throw e}},sm=(e,t,n)=>{let r=im(e,t,n),i=om(t,r,n);if(i!==void 0&&i!==!0)throw new d(`The ${e} of ${t} is equal to ${H(i)}`);return i===void 0?r:void 0},cm=(e,t)=>{let n=Od({constants:new Set(t.constants.keys()),variables:new Set(t.variables),getDefinition:e=>Ya(e,t)});return e.flatMap(e=>{let r=sm(`invariant`,e,t);if(!r)return[];let i=n.analyzeDefinition(r,/* @__PURE__ */ new Map);if(i.level>=2)throw new d(`The invariant ${e} is not a state predicate (one with no primes or temporal operators).${i.params.size===0?``:`
|
|
407
407
|
Note that a bug can cause TLC to incorrectly report this error.
|
|
408
408
|
If you believe your TLA+ or PlusCal specification to be correct,
|
|
409
|
-
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};
|