@stevenvo780/st-lang 4.5.2 → 4.6.0

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.
Files changed (185) hide show
  1. package/dist/categorical/fin-set.d.ts +39 -0
  2. package/dist/categorical/fin-set.d.ts.map +1 -0
  3. package/dist/categorical/fin-set.js +217 -0
  4. package/dist/categorical/fin-set.js.map +1 -0
  5. package/dist/categorical/free.d.ts +23 -0
  6. package/dist/categorical/free.d.ts.map +1 -0
  7. package/dist/categorical/free.js +168 -0
  8. package/dist/categorical/free.js.map +1 -0
  9. package/dist/categorical/functor.d.ts +40 -0
  10. package/dist/categorical/functor.d.ts.map +1 -0
  11. package/dist/categorical/functor.js +139 -0
  12. package/dist/categorical/functor.js.map +1 -0
  13. package/dist/categorical/index.d.ts +11 -0
  14. package/dist/categorical/index.d.ts.map +1 -0
  15. package/dist/categorical/index.js +33 -0
  16. package/dist/categorical/index.js.map +1 -0
  17. package/dist/categorical/limits.d.ts +64 -0
  18. package/dist/categorical/limits.d.ts.map +1 -0
  19. package/dist/categorical/limits.js +248 -0
  20. package/dist/categorical/limits.js.map +1 -0
  21. package/dist/categorical/monoidal.d.ts +14 -0
  22. package/dist/categorical/monoidal.d.ts.map +1 -0
  23. package/dist/categorical/monoidal.js +148 -0
  24. package/dist/categorical/monoidal.js.map +1 -0
  25. package/dist/categorical/poset.d.ts +14 -0
  26. package/dist/categorical/poset.d.ts.map +1 -0
  27. package/dist/categorical/poset.js +115 -0
  28. package/dist/categorical/poset.js.map +1 -0
  29. package/dist/categorical/types.d.ts +111 -0
  30. package/dist/categorical/types.d.ts.map +1 -0
  31. package/dist/categorical/types.js +15 -0
  32. package/dist/categorical/types.js.map +1 -0
  33. package/dist/csp-hoare/analysis.d.ts +51 -0
  34. package/dist/csp-hoare/analysis.d.ts.map +1 -0
  35. package/dist/csp-hoare/analysis.js +317 -0
  36. package/dist/csp-hoare/analysis.js.map +1 -0
  37. package/dist/csp-hoare/examples.d.ts +33 -0
  38. package/dist/csp-hoare/examples.d.ts.map +1 -0
  39. package/dist/csp-hoare/examples.js +108 -0
  40. package/dist/csp-hoare/examples.js.map +1 -0
  41. package/dist/csp-hoare/index.d.ts +6 -0
  42. package/dist/csp-hoare/index.d.ts.map +1 -0
  43. package/dist/csp-hoare/index.js +50 -0
  44. package/dist/csp-hoare/index.js.map +1 -0
  45. package/dist/csp-hoare/semantics.d.ts +49 -0
  46. package/dist/csp-hoare/semantics.d.ts.map +1 -0
  47. package/dist/csp-hoare/semantics.js +494 -0
  48. package/dist/csp-hoare/semantics.js.map +1 -0
  49. package/dist/csp-hoare/types.d.ts +60 -0
  50. package/dist/csp-hoare/types.d.ts.map +1 -0
  51. package/dist/csp-hoare/types.js +31 -0
  52. package/dist/csp-hoare/types.js.map +1 -0
  53. package/dist/hindley-milner/index.d.ts +7 -0
  54. package/dist/hindley-milner/index.d.ts.map +1 -0
  55. package/dist/hindley-milner/index.js +60 -0
  56. package/dist/hindley-milner/index.js.map +1 -0
  57. package/dist/hindley-milner/infer.d.ts +26 -0
  58. package/dist/hindley-milner/infer.d.ts.map +1 -0
  59. package/dist/hindley-milner/infer.js +278 -0
  60. package/dist/hindley-milner/infer.js.map +1 -0
  61. package/dist/hindley-milner/substitution.d.ts +21 -0
  62. package/dist/hindley-milner/substitution.d.ts.map +1 -0
  63. package/dist/hindley-milner/substitution.js +215 -0
  64. package/dist/hindley-milner/substitution.js.map +1 -0
  65. package/dist/hindley-milner/types.d.ts +84 -0
  66. package/dist/hindley-milner/types.d.ts.map +1 -0
  67. package/dist/hindley-milner/types.js +166 -0
  68. package/dist/hindley-milner/types.js.map +1 -0
  69. package/dist/hott/equality.d.ts +4 -0
  70. package/dist/hott/equality.d.ts.map +1 -0
  71. package/dist/hott/equality.js +108 -0
  72. package/dist/hott/equality.js.map +1 -0
  73. package/dist/hott/index.d.ts +13 -0
  74. package/dist/hott/index.d.ts.map +1 -0
  75. package/dist/hott/index.js +77 -0
  76. package/dist/hott/index.js.map +1 -0
  77. package/dist/hott/infer.d.ts +11 -0
  78. package/dist/hott/infer.d.ts.map +1 -0
  79. package/dist/hott/infer.js +465 -0
  80. package/dist/hott/infer.js.map +1 -0
  81. package/dist/hott/normalize.d.ts +5 -0
  82. package/dist/hott/normalize.d.ts.map +1 -0
  83. package/dist/hott/normalize.js +240 -0
  84. package/dist/hott/normalize.js.map +1 -0
  85. package/dist/hott/path-algebra.d.ts +25 -0
  86. package/dist/hott/path-algebra.d.ts.map +1 -0
  87. package/dist/hott/path-algebra.js +67 -0
  88. package/dist/hott/path-algebra.js.map +1 -0
  89. package/dist/hott/substitute.d.ts +3 -0
  90. package/dist/hott/substitute.d.ts.map +1 -0
  91. package/dist/hott/substitute.js +131 -0
  92. package/dist/hott/substitute.js.map +1 -0
  93. package/dist/hott/types.d.ts +126 -0
  94. package/dist/hott/types.d.ts.map +1 -0
  95. package/dist/hott/types.js +346 -0
  96. package/dist/hott/types.js.map +1 -0
  97. package/dist/index.d.ts +7 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +48 -3
  100. package/dist/index.js.map +1 -1
  101. package/dist/lemma-synthesis/index.d.ts +124 -0
  102. package/dist/lemma-synthesis/index.d.ts.map +1 -0
  103. package/dist/lemma-synthesis/index.js +640 -0
  104. package/dist/lemma-synthesis/index.js.map +1 -0
  105. package/dist/tactic-dsl/combinators.d.ts +6 -0
  106. package/dist/tactic-dsl/combinators.d.ts.map +1 -0
  107. package/dist/tactic-dsl/combinators.js +98 -0
  108. package/dist/tactic-dsl/combinators.js.map +1 -0
  109. package/dist/tactic-dsl/index.d.ts +39 -0
  110. package/dist/tactic-dsl/index.d.ts.map +1 -0
  111. package/dist/tactic-dsl/index.js +162 -0
  112. package/dist/tactic-dsl/index.js.map +1 -0
  113. package/dist/tactic-dsl/tactics.d.ts +21 -0
  114. package/dist/tactic-dsl/tactics.d.ts.map +1 -0
  115. package/dist/tactic-dsl/tactics.js +536 -0
  116. package/dist/tactic-dsl/tactics.js.map +1 -0
  117. package/dist/tactic-dsl/types.d.ts +54 -0
  118. package/dist/tactic-dsl/types.d.ts.map +1 -0
  119. package/dist/tactic-dsl/types.js +226 -0
  120. package/dist/tactic-dsl/types.js.map +1 -0
  121. package/dist/tests/categorical/categorical.test.d.ts +2 -0
  122. package/dist/tests/categorical/categorical.test.d.ts.map +1 -0
  123. package/dist/tests/categorical/categorical.test.js +300 -0
  124. package/dist/tests/categorical/categorical.test.js.map +1 -0
  125. package/dist/tests/csp-hoare/csp-hoare.test.d.ts +2 -0
  126. package/dist/tests/csp-hoare/csp-hoare.test.d.ts.map +1 -0
  127. package/dist/tests/csp-hoare/csp-hoare.test.js +313 -0
  128. package/dist/tests/csp-hoare/csp-hoare.test.js.map +1 -0
  129. package/dist/tests/hindley-milner/hindley-milner.test.d.ts +2 -0
  130. package/dist/tests/hindley-milner/hindley-milner.test.d.ts.map +1 -0
  131. package/dist/tests/hindley-milner/hindley-milner.test.js +327 -0
  132. package/dist/tests/hindley-milner/hindley-milner.test.js.map +1 -0
  133. package/dist/tests/hott/hott.test.d.ts +2 -0
  134. package/dist/tests/hott/hott.test.d.ts.map +1 -0
  135. package/dist/tests/hott/hott.test.js +271 -0
  136. package/dist/tests/hott/hott.test.js.map +1 -0
  137. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts +2 -0
  138. package/dist/tests/lemma-synthesis/lemma-synthesis.test.d.ts.map +1 -0
  139. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js +460 -0
  140. package/dist/tests/lemma-synthesis/lemma-synthesis.test.js.map +1 -0
  141. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts +2 -0
  142. package/dist/tests/tactic-dsl/tactic-dsl.test.d.ts.map +1 -0
  143. package/dist/tests/tactic-dsl/tactic-dsl.test.js +259 -0
  144. package/dist/tests/tactic-dsl/tactic-dsl.test.js.map +1 -0
  145. package/dist/tests/tptp/bridge.test.d.ts +2 -0
  146. package/dist/tests/tptp/bridge.test.d.ts.map +1 -0
  147. package/dist/tests/tptp/bridge.test.js +154 -0
  148. package/dist/tests/tptp/bridge.test.js.map +1 -0
  149. package/dist/tests/tptp/emitter.test.d.ts +2 -0
  150. package/dist/tests/tptp/emitter.test.d.ts.map +1 -0
  151. package/dist/tests/tptp/emitter.test.js +128 -0
  152. package/dist/tests/tptp/emitter.test.js.map +1 -0
  153. package/dist/tests/tptp/parser.test.d.ts +2 -0
  154. package/dist/tests/tptp/parser.test.d.ts.map +1 -0
  155. package/dist/tests/tptp/parser.test.js +192 -0
  156. package/dist/tests/tptp/parser.test.js.map +1 -0
  157. package/dist/tests/tptp/tokenizer.test.d.ts +2 -0
  158. package/dist/tests/tptp/tokenizer.test.d.ts.map +1 -0
  159. package/dist/tests/tptp/tokenizer.test.js +60 -0
  160. package/dist/tests/tptp/tokenizer.test.js.map +1 -0
  161. package/dist/tptp/ast.d.ts +73 -0
  162. package/dist/tptp/ast.d.ts.map +1 -0
  163. package/dist/tptp/ast.js +35 -0
  164. package/dist/tptp/ast.js.map +1 -0
  165. package/dist/tptp/bridge.d.ts +14 -0
  166. package/dist/tptp/bridge.d.ts.map +1 -0
  167. package/dist/tptp/bridge.js +146 -0
  168. package/dist/tptp/bridge.js.map +1 -0
  169. package/dist/tptp/emitter.d.ts +5 -0
  170. package/dist/tptp/emitter.d.ts.map +1 -0
  171. package/dist/tptp/emitter.js +103 -0
  172. package/dist/tptp/emitter.js.map +1 -0
  173. package/dist/tptp/index.d.ts +7 -0
  174. package/dist/tptp/index.d.ts.map +1 -0
  175. package/dist/tptp/index.js +31 -0
  176. package/dist/tptp/index.js.map +1 -0
  177. package/dist/tptp/parser.d.ts +23 -0
  178. package/dist/tptp/parser.d.ts.map +1 -0
  179. package/dist/tptp/parser.js +440 -0
  180. package/dist/tptp/parser.js.map +1 -0
  181. package/dist/tptp/tokenizer.d.ts +14 -0
  182. package/dist/tptp/tokenizer.d.ts.map +1 -0
  183. package/dist/tptp/tokenizer.js +264 -0
  184. package/dist/tptp/tokenizer.js.map +1 -0
  185. package/package.json +4 -1
@@ -0,0 +1,33 @@
1
+ import type { Process } from './types';
2
+ /**
3
+ * Máquina expendedora simple: acepta una moneda y luego ofrece al
4
+ * entorno elegir entre té y café.
5
+ *
6
+ * VM = coin → ((tea → STOP) □ (coffee → STOP))
7
+ *
8
+ * Para uso en bucle infinito, ver `vendingMachineLoop`.
9
+ */
10
+ export declare function vendingMachine(): Process;
11
+ /** Versión recursiva: tras servir, vuelve al estado inicial. */
12
+ export declare function vendingMachineLoop(): Process;
13
+ /**
14
+ * Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
15
+ * izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
16
+ *
17
+ * PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
18
+ *
19
+ * El bloqueo clásico aparece cuando todos los filósofos toman primero
20
+ * el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
21
+ * libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
22
+ */
23
+ export declare function philosopher(name: string): Process;
24
+ /**
25
+ * Composición paralela de `n` filósofos circulares con sus tenedores
26
+ * compartidos. El alfabeto de sincronización es exactamente el conjunto
27
+ * de eventos `pick.*` y `put.*` que comparten filósofo y fork.
28
+ *
29
+ * Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
30
+ * llegamos a deadlock estructural una vez todos hicieron `pick.L`.
31
+ */
32
+ export declare function diningPhilosophers(n: number): Process;
33
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AAG9C;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CA+BrD"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CSP Hoare — Ejemplos estándar del libro de Hoare (1985)
4
+ // ============================================================
5
+ // Construcciones canónicas que también sirven como tests integradores
6
+ // de la semántica.
7
+ // ============================================================
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.vendingMachine = vendingMachine;
10
+ exports.vendingMachineLoop = vendingMachineLoop;
11
+ exports.philosopher = philosopher;
12
+ exports.diningPhilosophers = diningPhilosophers;
13
+ const semantics_1 = require("./semantics");
14
+ /**
15
+ * Máquina expendedora simple: acepta una moneda y luego ofrece al
16
+ * entorno elegir entre té y café.
17
+ *
18
+ * VM = coin → ((tea → STOP) □ (coffee → STOP))
19
+ *
20
+ * Para uso en bucle infinito, ver `vendingMachineLoop`.
21
+ */
22
+ function vendingMachine() {
23
+ return (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', semantics_1.STOP), (0, semantics_1.prefix)('coffee', semantics_1.STOP)));
24
+ }
25
+ /** Versión recursiva: tras servir, vuelve al estado inicial. */
26
+ function vendingMachineLoop() {
27
+ return (0, semantics_1.recursion)('VM', (0, semantics_1.prefix)('coin', (0, semantics_1.choice)((0, semantics_1.prefix)('tea', (0, semantics_1.processVar)('VM')), (0, semantics_1.prefix)('coffee', (0, semantics_1.processVar)('VM')))));
28
+ }
29
+ /**
30
+ * Filósofo `i` (dining philosophers a la Hoare): toma su tenedor
31
+ * izquierdo (`L`), luego el derecho (`R`), come, los suelta y repite.
32
+ *
33
+ * PHIL_i = picks_up.L → picks_up.R → eats → puts_down.R → puts_down.L → STOP
34
+ *
35
+ * El bloqueo clásico aparece cuando todos los filósofos toman primero
36
+ * el izquierdo y luego intentan tomar el derecho: ya nadie lo tendrá
37
+ * libre. Lo detectamos con `isDeadlocked` sobre la composición paralela.
38
+ */
39
+ function philosopher(name) {
40
+ const pickL = `pick.${name}.L`;
41
+ const pickR = `pick.${name}.R`;
42
+ const eats = `eat.${name}`;
43
+ const putR = `put.${name}.R`;
44
+ const putL = `put.${name}.L`;
45
+ return (0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(eats, (0, semantics_1.prefix)(putR, (0, semantics_1.prefix)(putL, semantics_1.STOP)))));
46
+ }
47
+ /**
48
+ * Tenedor `i`: oscila entre "libre" y "tomado". Solo puede ser tomado o
49
+ * soltado, alternativamente.
50
+ *
51
+ * FORK_i = pick → put → FORK_i
52
+ *
53
+ * En el modelo de Hoare, los nombres de evento son compartidos entre
54
+ * filósofo y tenedor: `pick.phi.X` debe coincidir con el evento
55
+ * correspondiente del fork.
56
+ *
57
+ * Aquí codificamos el deadlock estructuralmente: la composición paralela
58
+ * de N filósofos sin recursión queda en STOP global cuando todos se
59
+ * bloquean.
60
+ */
61
+ function fork(_forkId, philLeft, philRight) {
62
+ // El tenedor es L para `philLeft` y R para `philRight`.
63
+ const pickL = `pick.${philLeft}.L`;
64
+ const putL = `put.${philLeft}.L`;
65
+ const pickR = `pick.${philRight}.R`;
66
+ const putR = `put.${philRight}.R`;
67
+ // Solo aceptamos cada movimiento UNA vez (modelado finito → deadlock visible).
68
+ return (0, semantics_1.choice)((0, semantics_1.prefix)(pickL, (0, semantics_1.prefix)(putL, semantics_1.STOP)), (0, semantics_1.prefix)(pickR, (0, semantics_1.prefix)(putR, semantics_1.STOP)));
69
+ }
70
+ /**
71
+ * Composición paralela de `n` filósofos circulares con sus tenedores
72
+ * compartidos. El alfabeto de sincronización es exactamente el conjunto
73
+ * de eventos `pick.*` y `put.*` que comparten filósofo y fork.
74
+ *
75
+ * Con `n ≥ 2` y la estrategia ingenua (todos toman primero el izquierdo)
76
+ * llegamos a deadlock estructural una vez todos hicieron `pick.L`.
77
+ */
78
+ function diningPhilosophers(n) {
79
+ if (n < 2)
80
+ throw new Error('diningPhilosophers requiere n ≥ 2');
81
+ // Construimos `n` filósofos y `n` tenedores en una mesa circular.
82
+ // Fork `i` está entre Phil `i` y Phil `(i+1) mod n`.
83
+ const phils = [];
84
+ const forks = [];
85
+ for (let i = 0; i < n; i++) {
86
+ phils.push(philosopher(`P${i}`));
87
+ }
88
+ for (let i = 0; i < n; i++) {
89
+ const left = `P${i}`;
90
+ const right = `P${(i + 1) % n}`;
91
+ forks.push(fork(i, left, right));
92
+ }
93
+ // Alfabeto: todos los `pick.*` y `put.*`.
94
+ const sync = [];
95
+ for (let i = 0; i < n; i++) {
96
+ sync.push(`pick.P${i}.L`, `pick.P${i}.R`, `put.P${i}.L`, `put.P${i}.R`);
97
+ }
98
+ // Componemos en cascada: ((Phil0 |[A]| Fork0) |[A]| Phil1) |[A]| ...
99
+ let acc = phils[0];
100
+ for (let i = 0; i < n; i++) {
101
+ acc = (0, semantics_1.parallel)(acc, forks[i], sync);
102
+ if (i + 1 < n) {
103
+ acc = (0, semantics_1.parallel)(acc, phils[i + 1], sync);
104
+ }
105
+ }
106
+ return acc;
107
+ }
108
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/csp-hoare/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { Event, Process, Trace, FailurePair } from './types';
2
+ export { TICK } from './types';
3
+ export { STOP, SKIP, prefix, choice, internal, parallel, interleave, sequence, hide, rename, recursion, processVar, alphabet, nextEvents, step, internalResolutions, } from './semantics';
4
+ export { traces, failures, isDeadlocked, isLiveLocked, refinesTraces, refinesFailures, } from './analysis';
5
+ export { vendingMachine, vendingMachineLoop, philosopher, diningPhilosophers } from './examples';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":"AAgBA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // CSP Hoare — Comunicating Sequential Processes (Hoare 1978/1985)
4
+ // ============================================================
5
+ // Cálculo de procesos basado en eventos atómicos sincronizados.
6
+ // A diferencia del π-cálculo (centrado en pasar nombres), CSP modela
7
+ // concurrencia mediante la ocurrencia coordinada de nombres de evento
8
+ // compartidos en el alfabeto del paralelo.
9
+ //
10
+ // Semánticas implementadas:
11
+ // • Traces — qué secuencias de eventos visibles pueden ocurrir.
12
+ // • Failures — pares (traza, refusal) que capturan no-determinismo.
13
+ // • Refinement — P ⊑_T Q y P ⊑_F Q según las semánticas anteriores.
14
+ //
15
+ // Ejemplos canónicos: máquina expendedora, filósofos cenando.
16
+ // ============================================================
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.diningPhilosophers = exports.philosopher = exports.vendingMachineLoop = exports.vendingMachine = exports.refinesFailures = exports.refinesTraces = exports.isLiveLocked = exports.isDeadlocked = exports.failures = exports.traces = exports.internalResolutions = exports.step = exports.nextEvents = exports.alphabet = exports.processVar = exports.recursion = exports.rename = exports.hide = exports.sequence = exports.interleave = exports.parallel = exports.internal = exports.choice = exports.prefix = exports.SKIP = exports.STOP = exports.TICK = void 0;
19
+ var types_1 = require("./types");
20
+ Object.defineProperty(exports, "TICK", { enumerable: true, get: function () { return types_1.TICK; } });
21
+ var semantics_1 = require("./semantics");
22
+ Object.defineProperty(exports, "STOP", { enumerable: true, get: function () { return semantics_1.STOP; } });
23
+ Object.defineProperty(exports, "SKIP", { enumerable: true, get: function () { return semantics_1.SKIP; } });
24
+ Object.defineProperty(exports, "prefix", { enumerable: true, get: function () { return semantics_1.prefix; } });
25
+ Object.defineProperty(exports, "choice", { enumerable: true, get: function () { return semantics_1.choice; } });
26
+ Object.defineProperty(exports, "internal", { enumerable: true, get: function () { return semantics_1.internal; } });
27
+ Object.defineProperty(exports, "parallel", { enumerable: true, get: function () { return semantics_1.parallel; } });
28
+ Object.defineProperty(exports, "interleave", { enumerable: true, get: function () { return semantics_1.interleave; } });
29
+ Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return semantics_1.sequence; } });
30
+ Object.defineProperty(exports, "hide", { enumerable: true, get: function () { return semantics_1.hide; } });
31
+ Object.defineProperty(exports, "rename", { enumerable: true, get: function () { return semantics_1.rename; } });
32
+ Object.defineProperty(exports, "recursion", { enumerable: true, get: function () { return semantics_1.recursion; } });
33
+ Object.defineProperty(exports, "processVar", { enumerable: true, get: function () { return semantics_1.processVar; } });
34
+ Object.defineProperty(exports, "alphabet", { enumerable: true, get: function () { return semantics_1.alphabet; } });
35
+ Object.defineProperty(exports, "nextEvents", { enumerable: true, get: function () { return semantics_1.nextEvents; } });
36
+ Object.defineProperty(exports, "step", { enumerable: true, get: function () { return semantics_1.step; } });
37
+ Object.defineProperty(exports, "internalResolutions", { enumerable: true, get: function () { return semantics_1.internalResolutions; } });
38
+ var analysis_1 = require("./analysis");
39
+ Object.defineProperty(exports, "traces", { enumerable: true, get: function () { return analysis_1.traces; } });
40
+ Object.defineProperty(exports, "failures", { enumerable: true, get: function () { return analysis_1.failures; } });
41
+ Object.defineProperty(exports, "isDeadlocked", { enumerable: true, get: function () { return analysis_1.isDeadlocked; } });
42
+ Object.defineProperty(exports, "isLiveLocked", { enumerable: true, get: function () { return analysis_1.isLiveLocked; } });
43
+ Object.defineProperty(exports, "refinesTraces", { enumerable: true, get: function () { return analysis_1.refinesTraces; } });
44
+ Object.defineProperty(exports, "refinesFailures", { enumerable: true, get: function () { return analysis_1.refinesFailures; } });
45
+ var examples_1 = require("./examples");
46
+ Object.defineProperty(exports, "vendingMachine", { enumerable: true, get: function () { return examples_1.vendingMachine; } });
47
+ Object.defineProperty(exports, "vendingMachineLoop", { enumerable: true, get: function () { return examples_1.vendingMachineLoop; } });
48
+ Object.defineProperty(exports, "philosopher", { enumerable: true, get: function () { return examples_1.philosopher; } });
49
+ Object.defineProperty(exports, "diningPhilosophers", { enumerable: true, get: function () { return examples_1.diningPhilosophers; } });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/csp-hoare/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,kEAAkE;AAClE,+DAA+D;AAC/D,gEAAgE;AAChE,qEAAqE;AACrE,sEAAsE;AACtE,2CAA2C;AAC3C,EAAE;AACF,4BAA4B;AAC5B,kEAAkE;AAClE,sEAAsE;AACtE,sEAAsE;AACtE,EAAE;AACF,8DAA8D;AAC9D,+DAA+D;;;AAG/D,iCAA+B;AAAtB,6FAAA,IAAI,OAAA;AAEb,yCAiBqB;AAhBnB,iGAAA,IAAI,OAAA;AACJ,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,mGAAA,MAAM,OAAA;AACN,qGAAA,QAAQ,OAAA;AACR,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,iGAAA,IAAI,OAAA;AACJ,mGAAA,MAAM,OAAA;AACN,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,qGAAA,QAAQ,OAAA;AACR,uGAAA,UAAU,OAAA;AACV,iGAAA,IAAI,OAAA;AACJ,gHAAA,mBAAmB,OAAA;AAGrB,uCAOoB;AANlB,kGAAA,MAAM,OAAA;AACN,oGAAA,QAAQ,OAAA;AACR,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,2GAAA,eAAe,OAAA;AAGjB,uCAAiG;AAAxF,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,8GAAA,kBAAkB,OAAA"}
@@ -0,0 +1,49 @@
1
+ import type { Event, Process } from './types';
2
+ export declare const STOP: Process;
3
+ export declare const SKIP: Process;
4
+ export declare function prefix(event: Event, cont: Process): Process;
5
+ export declare function choice(left: Process, right: Process): Process;
6
+ export declare function internal(left: Process, right: Process): Process;
7
+ export declare function parallel(left: Process, right: Process, alphabet: Event[]): Process;
8
+ export declare function interleave(left: Process, right: Process): Process;
9
+ export declare function sequence(left: Process, right: Process): Process;
10
+ export declare function hide(process: Process, events: Event[]): Process;
11
+ export declare function rename(process: Process, mapping: Map<Event, Event>): Process;
12
+ export declare function recursion(name: string, body: Process): Process;
13
+ export declare function processVar(name: string): Process;
14
+ /**
15
+ * Conjunto de eventos visibles mencionados sintácticamente en `p`.
16
+ * Los eventos renombrados aportan tanto la fuente como el destino
17
+ * (la fuente puede aparecer en una rama no recorrida, y el destino
18
+ * es lo que el entorno observa).
19
+ */
20
+ export declare function alphabet(p: Process): Set<Event>;
21
+ /**
22
+ * Eventos visibles que `p` puede ofrecer inmediatamente como su primer
23
+ * evento (tomando todas las resoluciones internas). No incluye τ (los
24
+ * eventos ocultos son silenciosos por construcción).
25
+ *
26
+ * Para `SKIP` reportamos el tick `✓` — termina exitosamente.
27
+ */
28
+ export declare function nextEvents(p: Process): Set<Event>;
29
+ /**
30
+ * `step(P, a)` aplica una transición visible etiquetada con `a` y devuelve
31
+ * el continuante, o `null` si `a` no está habilitado. Para procesos no-
32
+ * deterministas elegimos arbitrariamente cualquier rama que habilite `a`
33
+ * (eso es válido para análisis de trazas; para failures inspeccionamos
34
+ * todas las resoluciones aparte).
35
+ */
36
+ export declare function step(p: Process, event: Event): Process | null;
37
+ /**
38
+ * Enumera todos los estados "estables" alcanzables desde `p` resolviendo
39
+ * elecciones internas (`⊓`) y desplegando recursiones inmediatas, sin
40
+ * consumir eventos visibles. Útil para la semántica de failures, donde
41
+ * el conjunto de refusal depende de QUÉ rama interna se eligió.
42
+ *
43
+ * Devuelve procesos sin un `internal` en la raíz (después de empujarlo
44
+ * hacia adentro de operadores asociativos cuando aplica). El número de
45
+ * resoluciones es 2^(# de internals encadenados), así que limitamos a un
46
+ * número razonable para no explotar.
47
+ */
48
+ export declare function internalResolutions(p: Process, limit?: number): Process[];
49
+ //# sourceMappingURL=semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../../src/csp-hoare/semantics.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAK9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAC9C,eAAO,MAAM,IAAI,EAAE,OAA0B,CAAC;AAE9C,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE3D;AACD,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAElF;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AACD,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAE/D;AACD,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAE5E;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAE9D;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAI/C;AAiHD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAIjD;AA8GD;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAE7D;AA0HD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAIrE"}