@stevenvo780/st-lang 4.7.0 → 4.8.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 (145) hide show
  1. package/dist/namespaces/reasoning.d.ts +2 -1
  2. package/dist/namespaces/reasoning.d.ts.map +1 -1
  3. package/dist/namespaces/reasoning.js +3 -1
  4. package/dist/namespaces/reasoning.js.map +1 -1
  5. package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
  6. package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
  7. package/dist/reasoning/combinatorial-games/index.js +377 -0
  8. package/dist/reasoning/combinatorial-games/index.js.map +1 -0
  9. package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
  10. package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
  11. package/dist/reasoning/mechanism-design/auctions.js +179 -0
  12. package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
  13. package/dist/reasoning/mechanism-design/index.d.ts +5 -0
  14. package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
  15. package/dist/reasoning/mechanism-design/index.js +39 -0
  16. package/dist/reasoning/mechanism-design/index.js.map +1 -0
  17. package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
  18. package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
  19. package/dist/reasoning/mechanism-design/myerson.js +253 -0
  20. package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
  21. package/dist/reasoning/mechanism-design/types.d.ts +44 -0
  22. package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
  23. package/dist/reasoning/mechanism-design/types.js +22 -0
  24. package/dist/reasoning/mechanism-design/types.js.map +1 -0
  25. package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
  26. package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
  27. package/dist/reasoning/mechanism-design/vcg.js +305 -0
  28. package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
  29. package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
  30. package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
  31. package/dist/reasoning/probabilistic/distributions.js +207 -0
  32. package/dist/reasoning/probabilistic/distributions.js.map +1 -0
  33. package/dist/reasoning/probabilistic/examples.d.ts +31 -0
  34. package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
  35. package/dist/reasoning/probabilistic/examples.js +85 -0
  36. package/dist/reasoning/probabilistic/examples.js.map +1 -0
  37. package/dist/reasoning/probabilistic/index.d.ts +6 -0
  38. package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
  39. package/dist/reasoning/probabilistic/index.js +42 -0
  40. package/dist/reasoning/probabilistic/index.js.map +1 -0
  41. package/dist/reasoning/probabilistic/inference.d.ts +45 -0
  42. package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
  43. package/dist/reasoning/probabilistic/inference.js +579 -0
  44. package/dist/reasoning/probabilistic/inference.js.map +1 -0
  45. package/dist/reasoning/probabilistic/types.d.ts +153 -0
  46. package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
  47. package/dist/reasoning/probabilistic/types.js +37 -0
  48. package/dist/reasoning/probabilistic/types.js.map +1 -0
  49. package/dist/solver/smt-z3/index.d.ts +3 -0
  50. package/dist/solver/smt-z3/index.d.ts.map +1 -0
  51. package/dist/solver/smt-z3/index.js +11 -0
  52. package/dist/solver/smt-z3/index.js.map +1 -0
  53. package/dist/solver/smt-z3/types.d.ts +52 -0
  54. package/dist/solver/smt-z3/types.d.ts.map +1 -0
  55. package/dist/solver/smt-z3/types.js +6 -0
  56. package/dist/solver/smt-z3/types.js.map +1 -0
  57. package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
  58. package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
  59. package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
  60. package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
  61. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
  62. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
  63. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
  64. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
  65. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
  66. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
  67. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
  68. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
  69. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
  70. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
  71. package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
  72. package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
  73. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
  74. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
  75. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
  76. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
  77. package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
  78. package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
  79. package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
  80. package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
  81. package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
  82. package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
  83. package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
  84. package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
  85. package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
  86. package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
  87. package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
  88. package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
  89. package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
  90. package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
  91. package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
  92. package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
  93. package/dist/tooling/proof-guidance/features.d.ts +10 -0
  94. package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
  95. package/dist/tooling/proof-guidance/features.js +97 -0
  96. package/dist/tooling/proof-guidance/features.js.map +1 -0
  97. package/dist/tooling/proof-guidance/index.d.ts +5 -0
  98. package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
  99. package/dist/tooling/proof-guidance/index.js +25 -0
  100. package/dist/tooling/proof-guidance/index.js.map +1 -0
  101. package/dist/tooling/proof-guidance/model.d.ts +42 -0
  102. package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
  103. package/dist/tooling/proof-guidance/model.js +149 -0
  104. package/dist/tooling/proof-guidance/model.js.map +1 -0
  105. package/dist/tooling/proof-guidance/search.d.ts +7 -0
  106. package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
  107. package/dist/tooling/proof-guidance/search.js +102 -0
  108. package/dist/tooling/proof-guidance/search.js.map +1 -0
  109. package/dist/tooling/proof-guidance/types.d.ts +77 -0
  110. package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
  111. package/dist/tooling/proof-guidance/types.js +8 -0
  112. package/dist/tooling/proof-guidance/types.js.map +1 -0
  113. package/dist/type-theory/cubical/equality.d.ts +4 -0
  114. package/dist/type-theory/cubical/equality.d.ts.map +1 -0
  115. package/dist/type-theory/cubical/equality.js +78 -0
  116. package/dist/type-theory/cubical/equality.js.map +1 -0
  117. package/dist/type-theory/cubical/index.d.ts +14 -0
  118. package/dist/type-theory/cubical/index.d.ts.map +1 -0
  119. package/dist/type-theory/cubical/index.js +71 -0
  120. package/dist/type-theory/cubical/index.js.map +1 -0
  121. package/dist/type-theory/cubical/infer.d.ts +18 -0
  122. package/dist/type-theory/cubical/infer.d.ts.map +1 -0
  123. package/dist/type-theory/cubical/infer.js +241 -0
  124. package/dist/type-theory/cubical/infer.js.map +1 -0
  125. package/dist/type-theory/cubical/interval.d.ts +12 -0
  126. package/dist/type-theory/cubical/interval.d.ts.map +1 -0
  127. package/dist/type-theory/cubical/interval.js +118 -0
  128. package/dist/type-theory/cubical/interval.js.map +1 -0
  129. package/dist/type-theory/cubical/normalize.d.ts +5 -0
  130. package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
  131. package/dist/type-theory/cubical/normalize.js +191 -0
  132. package/dist/type-theory/cubical/normalize.js.map +1 -0
  133. package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
  134. package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
  135. package/dist/type-theory/cubical/path-algebra.js +109 -0
  136. package/dist/type-theory/cubical/path-algebra.js.map +1 -0
  137. package/dist/type-theory/cubical/substitute.d.ts +3 -0
  138. package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
  139. package/dist/type-theory/cubical/substitute.js +109 -0
  140. package/dist/type-theory/cubical/substitute.js.map +1 -0
  141. package/dist/type-theory/cubical/types.d.ts +77 -0
  142. package/dist/type-theory/cubical/types.d.ts.map +1 -0
  143. package/dist/type-theory/cubical/types.js +258 -0
  144. package/dist/type-theory/cubical/types.js.map +1 -0
  145. package/package.json +1 -1
@@ -0,0 +1,29 @@
1
+ import type { Agent, MechanismOutcome } from './types';
2
+ /**
3
+ * VCG mechanism: allocation maximiza welfare; pago de cada agente =
4
+ * externalidad = (welfare óptimo de los demás cuando él NO participa)
5
+ * - (welfare de los demás en la allocation elegida).
6
+ *
7
+ * Devuelve allocation y payments. Payments son ≥ 0 si valuations son
8
+ * monotónicas (las nuestras lo son).
9
+ */
10
+ export declare function vcgMechanism(agents: Agent[], items: string[]): MechanismOutcome;
11
+ /**
12
+ * Welfare social bajo una allocation: suma de valuations de los agentes
13
+ * por lo que recibieron.
14
+ */
15
+ export declare function socialWelfare(outcome: MechanismOutcome, agents: Agent[]): number;
16
+ /**
17
+ * Strategy-proofness empírica: tomamos `samples` reportes aleatorios de
18
+ * un agente (manteniendo a los demás truthful), corremos el mechanism,
19
+ * y verificamos que la utilidad del agente que miente no supere la
20
+ * utilidad reportando truthfully. Si para alguna sample el misreport
21
+ * mejora estrictamente, retornamos false.
22
+ *
23
+ * Utilidad cuasi-lineal: v(allocation_i) - payment_i.
24
+ *
25
+ * Esto es probabilístico: con `samples=0` no chequeamos nada y devolvemos
26
+ * true. Útil sobretodo para testing.
27
+ */
28
+ export declare function isStrategyProof(mechanism: (agents: Agent[]) => MechanismOutcome, samples?: number): boolean;
29
+ //# sourceMappingURL=vcg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcg.d.ts","sourceRoot":"","sources":["../../../src/reasoning/mechanism-design/vcg.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA4KvD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA2B/E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAOhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,gBAAgB,EAChD,OAAO,GAAE,MAAW,GACnB,OAAO,CAyDT"}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // VCG mechanism (Vickrey-Clarke-Groves)
4
+ // ============================================================
5
+ //
6
+ // El VCG mechanism elige la allocation que maximiza social welfare
7
+ // (suma de valuations reportadas). Cobra a cada agente la
8
+ // "externalidad" que impone sobre el resto: la diferencia entre el
9
+ // welfare máximo de los OTROS agentes cuando él NO participa y el
10
+ // welfare de los OTROS en la allocation elegida.
11
+ //
12
+ // Esta implementación cubre dos regímenes:
13
+ //
14
+ // 1. Single-item per agent (caso default): cada agente puede recibir
15
+ // a lo sumo 1 item, cada item se asigna a lo sumo 1 agente.
16
+ // Resolvemos el problema de asignación máxima por enumeración
17
+ // (Hungarian sería más eficiente pero alcanza para los tamaños
18
+ // de test, n ≤ ~8).
19
+ //
20
+ // 2. Combinatorial (bundles): si las valuations incluyen claves que
21
+ // representan combinaciones — convención: outcomes "*" significa
22
+ // "todos los items" — el algoritmo enumera particiones de items
23
+ // en agentes y elige la de mayor welfare. Por simplicidad y para
24
+ // los tests, asumimos que las claves del Map son subconjuntos de
25
+ // items separados por "+" o son items individuales.
26
+ //
27
+ // Para el caso combinatorial usamos enumeración exhaustiva de
28
+ // asignaciones agente→bundle (cada item al primer agente que lo
29
+ // quiera con mayor valor o sin asignar). Esto es exponencial en items
30
+ // pero claro y suficiente para tests pequeños.
31
+ //
32
+ // Strategy-proof: VCG es DSIC (dominant-strategy incentive-compatible).
33
+ // Verificamos esta propiedad empíricamente vía `isStrategyProof`.
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.vcgMechanism = vcgMechanism;
36
+ exports.socialWelfare = socialWelfare;
37
+ exports.isStrategyProof = isStrategyProof;
38
+ const EMPTY_BUNDLE = '';
39
+ /** Junta items en una clave canónica ordenada. */
40
+ function makeBundle(items) {
41
+ if (items.length === 0)
42
+ return EMPTY_BUNDLE;
43
+ return [...items].sort().join('+');
44
+ }
45
+ /** Lectura segura: 0 si el outcome no aparece en la valuation. */
46
+ function vOf(a, outcome) {
47
+ return a.valuation.get(outcome) ?? 0;
48
+ }
49
+ /**
50
+ * Enumera todas las asignaciones agente→item para single-item case.
51
+ * Devuelve la asignación que maximiza la suma de valuations.
52
+ *
53
+ * - agentSubset = lista de agentes participantes.
54
+ * - items = lista de items disponibles.
55
+ *
56
+ * Cada agente puede quedarse sin item (item = EMPTY_BUNDLE). Cada item
57
+ * se asigna a 0 o 1 agente.
58
+ *
59
+ * Complejidad: O((|items|+1)^|agents|) en worst case; OK para tests.
60
+ */
61
+ function bestSingleItemAssignment(agentSubset, items) {
62
+ let bestWelfare = -Infinity;
63
+ let bestAllocation = new Map();
64
+ // Asignamos recursivamente. choices[i] ∈ items ∪ {EMPTY_BUNDLE},
65
+ // con restricción de unicidad de item.
66
+ const n = agentSubset.length;
67
+ const taken = new Set();
68
+ const current = new Array(n).fill(EMPTY_BUNDLE);
69
+ function recurse(idx, welfareSoFar) {
70
+ if (idx === n) {
71
+ if (welfareSoFar > bestWelfare) {
72
+ bestWelfare = welfareSoFar;
73
+ const alloc = new Map();
74
+ for (let i = 0; i < n; i++) {
75
+ if (current[i] !== EMPTY_BUNDLE) {
76
+ alloc.set(agentSubset[i].id, current[i]);
77
+ }
78
+ }
79
+ bestAllocation = alloc;
80
+ }
81
+ return;
82
+ }
83
+ const agent = agentSubset[idx];
84
+ // Opción A: agente no recibe nada.
85
+ current[idx] = EMPTY_BUNDLE;
86
+ recurse(idx + 1, welfareSoFar);
87
+ // Opción B: agente recibe alguno de los items libres.
88
+ for (const item of items) {
89
+ if (taken.has(item))
90
+ continue;
91
+ taken.add(item);
92
+ current[idx] = item;
93
+ recurse(idx + 1, welfareSoFar + vOf(agent, item));
94
+ taken.delete(item);
95
+ }
96
+ current[idx] = EMPTY_BUNDLE;
97
+ }
98
+ if (n === 0) {
99
+ return { allocation: new Map(), welfare: 0 };
100
+ }
101
+ recurse(0, 0);
102
+ if (bestWelfare === -Infinity)
103
+ bestWelfare = 0;
104
+ return { allocation: bestAllocation, welfare: bestWelfare };
105
+ }
106
+ /**
107
+ * Enumera particiones de items en bundles asignados a agentes (con
108
+ * agente "vacío" como opción) — usado cuando las valuations incluyen
109
+ * bundles compuestos ("A+B").
110
+ *
111
+ * Decisión por item: a qué agente va (o a ninguno). Luego cada agente
112
+ * obtiene el bundle canónico de los items que recibió y se consulta
113
+ * la valuation con esa clave (default 0).
114
+ */
115
+ function bestCombinatorialAssignment(agentSubset, items) {
116
+ let bestWelfare = -Infinity;
117
+ let bestAssignment = new Array(items.length).fill(-1);
118
+ const assignment = new Array(items.length).fill(-1);
119
+ function evalWelfare() {
120
+ const bundlesPerAgent = agentSubset.map(() => []);
121
+ for (let i = 0; i < items.length; i++) {
122
+ const ai = assignment[i];
123
+ if (ai >= 0)
124
+ bundlesPerAgent[ai].push(items[i]);
125
+ }
126
+ let w = 0;
127
+ for (let a = 0; a < agentSubset.length; a++) {
128
+ const bundle = makeBundle(bundlesPerAgent[a]);
129
+ if (bundle === EMPTY_BUNDLE)
130
+ continue;
131
+ w += vOf(agentSubset[a], bundle);
132
+ }
133
+ return w;
134
+ }
135
+ function recurse(idx) {
136
+ if (idx === items.length) {
137
+ const w = evalWelfare();
138
+ if (w > bestWelfare) {
139
+ bestWelfare = w;
140
+ bestAssignment = assignment.slice();
141
+ }
142
+ return;
143
+ }
144
+ // Item no asignado.
145
+ assignment[idx] = -1;
146
+ recurse(idx + 1);
147
+ // Item a cada agente.
148
+ for (let a = 0; a < agentSubset.length; a++) {
149
+ assignment[idx] = a;
150
+ recurse(idx + 1);
151
+ }
152
+ assignment[idx] = -1;
153
+ }
154
+ if (agentSubset.length === 0 || items.length === 0) {
155
+ return { allocation: new Map(), welfare: 0 };
156
+ }
157
+ recurse(0);
158
+ if (bestWelfare === -Infinity)
159
+ bestWelfare = 0;
160
+ // Reconstruir allocation: mapAgentId → bundle.
161
+ const alloc = new Map();
162
+ const bundlesPerAgent = agentSubset.map(() => []);
163
+ for (let i = 0; i < items.length; i++) {
164
+ const ai = bestAssignment[i];
165
+ if (ai >= 0)
166
+ bundlesPerAgent[ai].push(items[i]);
167
+ }
168
+ for (let a = 0; a < agentSubset.length; a++) {
169
+ const bundle = makeBundle(bundlesPerAgent[a]);
170
+ if (bundle !== EMPTY_BUNDLE)
171
+ alloc.set(agentSubset[a].id, bundle);
172
+ }
173
+ return { allocation: alloc, welfare: bestWelfare };
174
+ }
175
+ /**
176
+ * Detecta si la valuation usa bundles compuestos (claves con "+").
177
+ */
178
+ function hasCombinatorialValuations(agents) {
179
+ for (const a of agents) {
180
+ for (const key of a.valuation.keys()) {
181
+ if (key.includes('+'))
182
+ return true;
183
+ }
184
+ }
185
+ return false;
186
+ }
187
+ function bestAssignment(agentSubset, items) {
188
+ if (hasCombinatorialValuations(agentSubset)) {
189
+ return bestCombinatorialAssignment(agentSubset, items);
190
+ }
191
+ return bestSingleItemAssignment(agentSubset, items);
192
+ }
193
+ /**
194
+ * VCG mechanism: allocation maximiza welfare; pago de cada agente =
195
+ * externalidad = (welfare óptimo de los demás cuando él NO participa)
196
+ * - (welfare de los demás en la allocation elegida).
197
+ *
198
+ * Devuelve allocation y payments. Payments son ≥ 0 si valuations son
199
+ * monotónicas (las nuestras lo son).
200
+ */
201
+ function vcgMechanism(agents, items) {
202
+ if (agents.length === 0) {
203
+ return { allocation: new Map(), payments: new Map() };
204
+ }
205
+ const { allocation } = bestAssignment(agents, items);
206
+ // Welfare de los OTROS bajo la allocation elegida.
207
+ const payments = new Map();
208
+ for (const a of agents) {
209
+ const without = agents.filter((x) => x.id !== a.id);
210
+ // Welfare de los demás en la allocation actual.
211
+ let welfareOthersIn = 0;
212
+ for (const other of without) {
213
+ const got = allocation.get(other.id);
214
+ if (got !== undefined)
215
+ welfareOthersIn += vOf(other, got);
216
+ }
217
+ // Welfare óptimo si `a` no existiera (libera los items que tenía).
218
+ const { welfare: welfareOthersOut } = bestAssignment(without, items);
219
+ const payment = welfareOthersOut - welfareOthersIn;
220
+ payments.set(a.id, payment);
221
+ }
222
+ return { allocation, payments };
223
+ }
224
+ /**
225
+ * Welfare social bajo una allocation: suma de valuations de los agentes
226
+ * por lo que recibieron.
227
+ */
228
+ function socialWelfare(outcome, agents) {
229
+ let w = 0;
230
+ for (const a of agents) {
231
+ const got = outcome.allocation.get(a.id);
232
+ if (got !== undefined)
233
+ w += vOf(a, got);
234
+ }
235
+ return w;
236
+ }
237
+ /**
238
+ * Strategy-proofness empírica: tomamos `samples` reportes aleatorios de
239
+ * un agente (manteniendo a los demás truthful), corremos el mechanism,
240
+ * y verificamos que la utilidad del agente que miente no supere la
241
+ * utilidad reportando truthfully. Si para alguna sample el misreport
242
+ * mejora estrictamente, retornamos false.
243
+ *
244
+ * Utilidad cuasi-lineal: v(allocation_i) - payment_i.
245
+ *
246
+ * Esto es probabilístico: con `samples=0` no chequeamos nada y devolvemos
247
+ * true. Útil sobretodo para testing.
248
+ */
249
+ function isStrategyProof(mechanism, samples = 50) {
250
+ if (samples <= 0)
251
+ return true;
252
+ // Construimos un escenario base de 3 agentes y 2 items, con
253
+ // valuations enteras en [0, 10]. Para cada sample mutamos la
254
+ // valuation del primer agente y comparamos su utilidad con la
255
+ // reportada truthfully. El mechanism recibe solo agents (los items
256
+ // están implícitos en las valuations + closure del caller).
257
+ const baseAgents = [
258
+ {
259
+ id: 'a',
260
+ valuation: new Map([
261
+ ['x', 8],
262
+ ['y', 3],
263
+ ]),
264
+ },
265
+ {
266
+ id: 'b',
267
+ valuation: new Map([
268
+ ['x', 5],
269
+ ['y', 6],
270
+ ]),
271
+ },
272
+ {
273
+ id: 'c',
274
+ valuation: new Map([
275
+ ['x', 2],
276
+ ['y', 4],
277
+ ]),
278
+ },
279
+ ];
280
+ // Utilidad real del agente "a" si reporta `report` y los demás truthful.
281
+ function utilityOfA(report) {
282
+ const truthA = baseAgents[0].valuation;
283
+ const reported = [{ id: 'a', valuation: report }, baseAgents[1], baseAgents[2]];
284
+ const out = mechanism(reported);
285
+ const got = out.allocation.get('a');
286
+ const value = got !== undefined ? (truthA.get(got) ?? 0) : 0;
287
+ const pay = out.payments.get('a') ?? 0;
288
+ return value - pay;
289
+ }
290
+ const truthful = utilityOfA(baseAgents[0].valuation);
291
+ for (let s = 0; s < samples; s++) {
292
+ const fakeX = Math.floor(Math.random() * 11);
293
+ const fakeY = Math.floor(Math.random() * 11);
294
+ const fake = new Map([
295
+ ['x', fakeX],
296
+ ['y', fakeY],
297
+ ]);
298
+ const u = utilityOfA(fake);
299
+ // Permitimos empates (igualdad): DSIC requiere truthful ∈ argmax.
300
+ if (u > truthful + 1e-9)
301
+ return false;
302
+ }
303
+ return true;
304
+ }
305
+ //# sourceMappingURL=vcg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcg.js","sourceRoot":"","sources":["../../../src/reasoning/mechanism-design/vcg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { BernoulliDist, CategoricalDist, DiscreteDist, Distribution, NormalDist, PoissonDist, UniformDist } from './types';
2
+ /**
3
+ * Saca un valor de `dist` usando `rng` (uniforme [0,1)).
4
+ *
5
+ * Para `categorical` y `discrete`, normaliza las probs internamente
6
+ * para tolerar entradas no exactamente sumadas a 1.
7
+ *
8
+ * Las firmas overloaded dan inferencia precisa por familia.
9
+ */
10
+ export declare function sampleFrom(dist: BernoulliDist, rng: () => number): boolean;
11
+ export declare function sampleFrom(dist: UniformDist, rng: () => number): number;
12
+ export declare function sampleFrom(dist: NormalDist, rng: () => number): number;
13
+ export declare function sampleFrom(dist: PoissonDist, rng: () => number): number;
14
+ export declare function sampleFrom<T>(dist: CategoricalDist<T>, rng: () => number): T;
15
+ export declare function sampleFrom<T>(dist: DiscreteDist<T>, rng: () => number): T;
16
+ export declare function sampleFrom<T>(dist: Distribution<T>, rng: () => number): T;
17
+ /**
18
+ * Log-densidad / log-masa de `value` bajo `dist`.
19
+ *
20
+ * Para distribuciones continuas (`uniform`, `normal`) es log-pdf;
21
+ * para discretas (`bernoulli`, `poisson`, `categorical`, `discrete`)
22
+ * es log-pmf. Valores fuera del soporte devuelven `-Infinity`.
23
+ */
24
+ export declare function logPdf(dist: BernoulliDist, value: boolean): number;
25
+ export declare function logPdf(dist: UniformDist, value: number): number;
26
+ export declare function logPdf(dist: NormalDist, value: number): number;
27
+ export declare function logPdf(dist: PoissonDist, value: number): number;
28
+ export declare function logPdf<T>(dist: CategoricalDist<T>, value: T): number;
29
+ export declare function logPdf<T>(dist: DiscreteDist<T>, value: T): number;
30
+ export declare function logPdf<T>(dist: Distribution<T>, value: T): number;
31
+ /**
32
+ * Enumera el soporte de una distribución discreta como pares
33
+ * `[valor, probabilidad]`. Para distribuciones continuas o de
34
+ * soporte infinito (poisson), lanza error: no se puede enumerar.
35
+ *
36
+ * Para `poisson` se podría truncar pero la enumeración exacta no
37
+ * lo soporta — el usuario debe usar `categorical` con un soporte
38
+ * acotado si quiere enumeración.
39
+ */
40
+ export declare function enumerateSupport(dist: BernoulliDist): Array<[boolean, number]>;
41
+ export declare function enumerateSupport<T>(dist: CategoricalDist<T>): Array<[T, number]>;
42
+ export declare function enumerateSupport<T>(dist: DiscreteDist<T>): Array<[T, number]>;
43
+ export declare function enumerateSupport<T>(dist: Distribution<T>): Array<[T, number]>;
44
+ //# sourceMappingURL=distributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.d.ts","sourceRoot":"","sources":["../../../src/reasoning/probabilistic/distributions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,SAAS,CAAC;AAKjB;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC;AAC5E,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC;AACzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC;AACxE,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC;AACzE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,CAAC,CAAC;AAC9E,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,CAAC,CAAC;AAC3E,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,CAAC,CAAC;AA6C3E;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;AACpE,wBAAgB,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AACjE,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AACjE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;AACtE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;AACnE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;AA8CnE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAChF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Probabilistic Programming — Distributions
4
+ // ============================================================
5
+ //
6
+ // Muestreo y log-density para las seis familias soportadas.
7
+ // Todo función pura y RNG inyectable.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.sampleFrom = sampleFrom;
10
+ exports.logPdf = logPdf;
11
+ exports.enumerateSupport = enumerateSupport;
12
+ const TWO_PI = 2 * Math.PI;
13
+ const LOG_2PI = Math.log(TWO_PI);
14
+ function sampleFrom(dist, rng) {
15
+ switch (dist.kind) {
16
+ case 'bernoulli':
17
+ return (rng() < dist.p);
18
+ case 'uniform':
19
+ return (dist.low + rng() * (dist.high - dist.low));
20
+ case 'normal':
21
+ return sampleNormal(dist.mean, dist.std, rng);
22
+ case 'poisson':
23
+ return samplePoisson(dist.lambda, rng);
24
+ case 'categorical': {
25
+ const u = rng();
26
+ const total = dist.probs.reduce((s, x) => s + x, 0);
27
+ if (total <= 0) {
28
+ throw new Error('categorical: suma de probs <= 0');
29
+ }
30
+ let acc = 0;
31
+ for (let i = 0; i < dist.values.length; i++) {
32
+ acc += (dist.probs[i] ?? 0) / total;
33
+ if (u < acc)
34
+ return dist.values[i];
35
+ }
36
+ // Borde por float: devolver el último.
37
+ return dist.values[dist.values.length - 1];
38
+ }
39
+ case 'discrete': {
40
+ const u = rng();
41
+ let total = 0;
42
+ for (const p of dist.pmf.values())
43
+ total += p;
44
+ if (total <= 0) {
45
+ throw new Error('discrete: suma de pmf <= 0');
46
+ }
47
+ let acc = 0;
48
+ let last;
49
+ for (const [v, p] of dist.pmf) {
50
+ last = v;
51
+ acc += p / total;
52
+ if (u < acc)
53
+ return v;
54
+ }
55
+ if (last === undefined)
56
+ throw new Error('discrete: pmf vacío');
57
+ return last;
58
+ }
59
+ }
60
+ }
61
+ function logPdf(dist, value) {
62
+ switch (dist.kind) {
63
+ case 'bernoulli': {
64
+ const v = value;
65
+ if (typeof v !== 'boolean')
66
+ return -Infinity;
67
+ const p = clampProb(dist.p);
68
+ return v ? Math.log(p) : Math.log(1 - p);
69
+ }
70
+ case 'uniform': {
71
+ const x = value;
72
+ if (typeof x !== 'number' || !Number.isFinite(x))
73
+ return -Infinity;
74
+ if (x < dist.low || x >= dist.high)
75
+ return -Infinity;
76
+ if (dist.high <= dist.low)
77
+ return -Infinity;
78
+ return -Math.log(dist.high - dist.low);
79
+ }
80
+ case 'normal': {
81
+ const x = value;
82
+ if (typeof x !== 'number' || !Number.isFinite(x))
83
+ return -Infinity;
84
+ if (dist.std <= 0)
85
+ return -Infinity;
86
+ const z = (x - dist.mean) / dist.std;
87
+ return -0.5 * (z * z + LOG_2PI) - Math.log(dist.std);
88
+ }
89
+ case 'poisson': {
90
+ const k = value;
91
+ if (!Number.isInteger(k) || k < 0)
92
+ return -Infinity;
93
+ if (dist.lambda <= 0)
94
+ return k === 0 ? 0 : -Infinity;
95
+ return k * Math.log(dist.lambda) - dist.lambda - logFactorial(k);
96
+ }
97
+ case 'categorical': {
98
+ const idx = dist.values.indexOf(value);
99
+ if (idx < 0)
100
+ return -Infinity;
101
+ const total = dist.probs.reduce((s, x) => s + x, 0);
102
+ const p = (dist.probs[idx] ?? 0) / total;
103
+ return p > 0 ? Math.log(p) : -Infinity;
104
+ }
105
+ case 'discrete': {
106
+ const p = dist.pmf.get(value);
107
+ if (p === undefined || p <= 0)
108
+ return -Infinity;
109
+ let total = 0;
110
+ for (const x of dist.pmf.values())
111
+ total += x;
112
+ return Math.log(p / total);
113
+ }
114
+ }
115
+ }
116
+ function enumerateSupport(dist) {
117
+ switch (dist.kind) {
118
+ case 'bernoulli': {
119
+ const p = clampProb(dist.p);
120
+ return [
121
+ [true, p],
122
+ [false, 1 - p],
123
+ ];
124
+ }
125
+ case 'categorical': {
126
+ const total = dist.probs.reduce((s, x) => s + x, 0);
127
+ const out = [];
128
+ for (let i = 0; i < dist.values.length; i++) {
129
+ const p = (dist.probs[i] ?? 0) / total;
130
+ if (p > 0)
131
+ out.push([dist.values[i], p]);
132
+ }
133
+ return out;
134
+ }
135
+ case 'discrete': {
136
+ let total = 0;
137
+ for (const x of dist.pmf.values())
138
+ total += x;
139
+ const out = [];
140
+ for (const [v, p] of dist.pmf) {
141
+ if (p > 0)
142
+ out.push([v, p / total]);
143
+ }
144
+ return out;
145
+ }
146
+ case 'uniform':
147
+ case 'normal':
148
+ case 'poisson':
149
+ throw new Error(`enumerate: la distribución "${dist.kind}" tiene soporte continuo o infinito; ` +
150
+ 'usá categorical/discrete o cambiá a rejection/importance/MH.');
151
+ }
152
+ }
153
+ // ── Helpers privados ─────────────────────────────────────────
154
+ /**
155
+ * Box-Muller transform. Cachea el segundo gaussiano por llamada
156
+ * para no desperdiciar entropía — aunque la API permite dos
157
+ * llamadas separadas, en la práctica solo necesitamos una muestra
158
+ * por invocación, así que descartamos la segunda.
159
+ */
160
+ function sampleNormal(mean, std, rng) {
161
+ if (std <= 0) {
162
+ throw new Error('normal: std debe ser > 0');
163
+ }
164
+ let u1 = rng();
165
+ // Evitar log(0) en el caso degenerado u1 == 0.
166
+ while (u1 <= 0)
167
+ u1 = rng();
168
+ const u2 = rng();
169
+ const z = Math.sqrt(-2 * Math.log(u1)) * Math.cos(TWO_PI * u2);
170
+ return mean + std * z;
171
+ }
172
+ /**
173
+ * Algoritmo de Knuth para Poisson — eficiente para lambda chicos
174
+ * (que es el caso típico en programas de tests). Para lambda > 30
175
+ * podría usarse aproximación normal, pero no lo necesitamos aquí.
176
+ */
177
+ function samplePoisson(lambda, rng) {
178
+ if (lambda <= 0)
179
+ return 0;
180
+ const L = Math.exp(-lambda);
181
+ let k = 0;
182
+ let p = 1;
183
+ for (;;) {
184
+ k += 1;
185
+ p *= rng();
186
+ if (p <= L)
187
+ return k - 1;
188
+ // Salvaguarda anti-loop (lambda muy grande): truncar a 10 sigmas.
189
+ if (k > lambda + 50 * Math.sqrt(lambda) + 100)
190
+ return k - 1;
191
+ }
192
+ }
193
+ function logFactorial(n) {
194
+ // Tabulamos los primeros valores para precisión exacta.
195
+ let r = 0;
196
+ for (let i = 2; i <= n; i++)
197
+ r += Math.log(i);
198
+ return r;
199
+ }
200
+ function clampProb(p) {
201
+ if (p < 0)
202
+ return 0;
203
+ if (p > 1)
204
+ return 1;
205
+ return p;
206
+ }
207
+ //# sourceMappingURL=distributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.js","sourceRoot":"","sources":["../../../src/reasoning/probabilistic/distributions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type PProgram } from './types';
2
+ /** Bernoulli simétrica: prior trivial sobre {true, false}. */
3
+ export declare function coinExample(): PProgram<boolean>;
4
+ /** Bernoulli con bias arbitrario p ∈ [0,1]. */
5
+ export declare function biasedCoinExample(p: number): PProgram<boolean>;
6
+ /** AND de dos monedas Bernoulli(0.5): P(true) = 0.25 esperado. */
7
+ export declare function twoCoinsExample(): PProgram<boolean>;
8
+ /**
9
+ * Bayesian linear regression univariado:
10
+ * slope ~ Normal(0, 5)
11
+ * intercept ~ Normal(0, 5)
12
+ * yᵢ | slope, intercept ~ Normal(slope·xᵢ + intercept, 1)
13
+ *
14
+ * Devuelve la pareja (slope, intercept). Las observaciones se
15
+ * codifican como factor(logPdf(...)) sobre el residuo — equivale
16
+ * a una likelihood gaussiana, suitable para importance/MH.
17
+ */
18
+ export declare function bayesianLinearRegression(xs: number[], ys: number[]): PProgram<{
19
+ slope: number;
20
+ intercept: number;
21
+ }>;
22
+ /**
23
+ * Posterior sobre la media de una gaussiana con σ conocido.
24
+ * mu ~ Normal(0, 10)
25
+ * xᵢ | mu ~ Normal(mu, 1)
26
+ *
27
+ * Útil como caso de test analítico: el posterior verdadero es
28
+ * Normal((Σxᵢ) / (n + 1/100), 1/√(n + 1/100)).
29
+ */
30
+ export declare function gaussianMeanModel(data: number[]): PProgram<number>;
31
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../../src/reasoning/probabilistic/examples.ts"],"names":[],"mappings":"AAeA,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE3D,8DAA8D;AAC9D,wBAAgB,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,CAE/C;AAED,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAE9D;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,QAAQ,CAAC,OAAO,CAAC,CAMnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,MAAM,EAAE,EACZ,EAAE,EAAE,MAAM,EAAE,GACX,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBhD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAQlE"}