@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
@@ -16,11 +16,12 @@ import * as beliefRevision from '../reasoning/belief-revision';
16
16
  import * as abduction from '../reasoning/abduction';
17
17
  import * as markovLogic from '../reasoning/markov-logic';
18
18
  import * as bayesian from '../reasoning/bayesian';
19
+ import * as probabilistic from '../reasoning/probabilistic';
19
20
  import * as citationReasoning from '../reasoning/citation-reasoning';
20
21
  import * as hyperreal from '../reasoning/hyperreal';
21
22
  import * as antiUnification from '../runtime/anti-unification';
22
23
  import * as termRewriting from '../runtime/term-rewriting';
23
- export { argumentation, beliefRevision, abduction, markovLogic, bayesian, citationReasoning, hyperreal, antiUnification, termRewriting, };
24
+ export { argumentation, beliefRevision, abduction, markovLogic, bayesian, probabilistic, citationReasoning, hyperreal, antiUnification, termRewriting, };
24
25
  export { TheoremCache, tryReuseProof } from '../runtime/theorem-cache';
25
26
  export type { CachedTheorem, CacheOptions as TheoremCacheOptions, CacheStats as TheoremCacheStats, ReuseResult as TheoremReuseResult, } from '../runtime/theorem-cache';
26
27
  //# sourceMappingURL=reasoning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../src/namespaces/reasoning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,iBAAiB,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,GACd,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,YAAY,EACV,aAAa,EACb,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,WAAW,IAAI,kBAAkB,GAClC,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"reasoning.d.ts","sourceRoot":"","sources":["../../src/namespaces/reasoning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,iBAAiB,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,WAAW,EACX,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,eAAe,EACf,aAAa,GACd,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,YAAY,EACV,aAAa,EACb,YAAY,IAAI,mBAAmB,EACnC,UAAU,IAAI,iBAAiB,EAC/B,WAAW,IAAI,kBAAkB,GAClC,MAAM,0BAA0B,CAAC"}
@@ -46,7 +46,7 @@ var __importStar = (this && this.__importStar) || (function () {
46
46
  };
47
47
  })();
48
48
  Object.defineProperty(exports, "__esModule", { value: true });
49
- exports.tryReuseProof = exports.TheoremCache = exports.termRewriting = exports.antiUnification = exports.hyperreal = exports.citationReasoning = exports.bayesian = exports.markovLogic = exports.abduction = exports.beliefRevision = exports.argumentation = void 0;
49
+ exports.tryReuseProof = exports.TheoremCache = exports.termRewriting = exports.antiUnification = exports.hyperreal = exports.citationReasoning = exports.probabilistic = exports.bayesian = exports.markovLogic = exports.abduction = exports.beliefRevision = exports.argumentation = void 0;
50
50
  const argumentation = __importStar(require("../reasoning/argumentation"));
51
51
  exports.argumentation = argumentation;
52
52
  const beliefRevision = __importStar(require("../reasoning/belief-revision"));
@@ -57,6 +57,8 @@ const markovLogic = __importStar(require("../reasoning/markov-logic"));
57
57
  exports.markovLogic = markovLogic;
58
58
  const bayesian = __importStar(require("../reasoning/bayesian"));
59
59
  exports.bayesian = bayesian;
60
+ const probabilistic = __importStar(require("../reasoning/probabilistic"));
61
+ exports.probabilistic = probabilistic;
60
62
  const citationReasoning = __importStar(require("../reasoning/citation-reasoning"));
61
63
  exports.citationReasoning = citationReasoning;
62
64
  const hyperreal = __importStar(require("../reasoning/hyperreal"));
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../src/namespaces/reasoning.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,0EAA4D;AAW1D,sCAAa;AAVf,6EAA+D;AAW7D,wCAAc;AAVhB,kEAAoD;AAWlD,8BAAS;AAVX,uEAAyD;AAWvD,kCAAW;AAVb,gEAAkD;AAWhD,4BAAQ;AAVV,mFAAqE;AAWnE,8CAAiB;AAVnB,kEAAoD;AAWlD,8BAAS;AAVX,6EAA+D;AAW7D,0CAAe;AAVjB,yEAA2D;AAWzD,sCAAa;AAGf,+EAA+E;AAC/E,0DAAuE;AAA9D,6GAAA,YAAY,OAAA;AAAE,8GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../../src/namespaces/reasoning.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,0EAA4D;AAY1D,sCAAa;AAXf,6EAA+D;AAY7D,wCAAc;AAXhB,kEAAoD;AAYlD,8BAAS;AAXX,uEAAyD;AAYvD,kCAAW;AAXb,gEAAkD;AAYhD,4BAAQ;AAXV,0EAA4D;AAY1D,sCAAa;AAXf,mFAAqE;AAYnE,8CAAiB;AAXnB,kEAAoD;AAYlD,8BAAS;AAXX,6EAA+D;AAY7D,0CAAe;AAXjB,yEAA2D;AAYzD,sCAAa;AAGf,+EAA+E;AAC/E,0DAAuE;AAA9D,6GAAA,YAAY,OAAA;AAAE,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,105 @@
1
+ export interface ImpartialGame<S> {
2
+ readonly initial: S;
3
+ readonly moves: (state: S) => S[];
4
+ readonly isTerminal: (state: S) => boolean;
5
+ readonly key?: (state: S) => string;
6
+ }
7
+ /**
8
+ * Minimum Excludant: menor entero ≥ 0 que no está en el conjunto.
9
+ * mex(∅) = 0, mex({0,1,3}) = 2, mex({1,2}) = 0.
10
+ */
11
+ export declare function mex(set: Set<number>): number;
12
+ /**
13
+ * Valor de Grundy del estado dado bajo el juego imparcial.
14
+ * Define: G(terminal) = 0; G(s) = mex { G(s') : s' ∈ moves(s) }.
15
+ * Usa caché (compartido entre llamadas) keyed por la clave canónica del estado.
16
+ */
17
+ export declare function grundyValue<S>(game: ImpartialGame<S>, state: S, cache?: Map<string, number>): number;
18
+ /**
19
+ * El jugador a mover gana sii grundy ≠ 0 (juego imparcial con convención
20
+ * normal: el que no puede mover, pierde).
21
+ */
22
+ export declare function isWinning<S>(game: ImpartialGame<S>, state: S): boolean;
23
+ /**
24
+ * Nim-sum: XOR bit a bit de los valores. Identidad del monoide de Grundy
25
+ * bajo suma disjunta de juegos imparciales.
26
+ */
27
+ export declare function nimSum(values: number[]): number;
28
+ /**
29
+ * Grundy de la suma disjunta de juegos imparciales independientes:
30
+ * G(G1 + G2 + ... + Gn)(s1,...,sn) = G1(s1) ⊕ G2(s2) ⊕ ... ⊕ Gn(sn).
31
+ * Requiere games.length === states.length.
32
+ */
33
+ export declare function multiGameGrundy<S>(games: Array<ImpartialGame<S>>, states: S[]): number;
34
+ /**
35
+ * Nim clásico: varios montones de piedras, un movimiento = sacar ≥1
36
+ * piedras de un único montón. Pierde quien no puede mover (todos los
37
+ * montones a 0). Estado: vector de tamaños (normalizado, sin ceros y
38
+ * ordenado descendente para que el caché sea efectivo entre simetrías).
39
+ */
40
+ export declare function nim(piles: number[]): ImpartialGame<number[]>;
41
+ /**
42
+ * Nim 1D: una sola pila de `stones` piedras; sacar 1..stones. Equivale
43
+ * a `nim([stones])` pero con estado más compacto (un número).
44
+ */
45
+ export declare function nim1d(stones: number): ImpartialGame<number>;
46
+ /**
47
+ * Chomp: tablero rows×cols de "chocolate". Cada movida elige una casilla
48
+ * viva (true) y "muerde" todo el rectángulo abajo-derecha desde ella. La
49
+ * casilla (0,0) es veneno: quien la come pierde (convención misère
50
+ * implementada como: estado terminal cuando solo queda (0,0)).
51
+ *
52
+ * Estado: matriz booleana rows×cols con true = casilla viva.
53
+ *
54
+ * Nota: Chomp tiene posición ganadora conocida para el primer jugador
55
+ * en todo tablero ≥ 2×2 (argumento de robo de estrategia), pero la
56
+ * estrategia explícita es desconocida en general. Para 1×1 (sólo el
57
+ * veneno) el jugador a mover pierde, así que grundy = 0.
58
+ */
59
+ export declare function chompGame(rows: number, cols: number): ImpartialGame<boolean[][]>;
60
+ export interface SurrealNumber {
61
+ readonly left: SurrealNumber[];
62
+ readonly right: SurrealNumber[];
63
+ }
64
+ /** 0 = { | } — sin opciones para ninguno; "second player wins". */
65
+ export declare const ZERO: SurrealNumber;
66
+ /** 1 = { 0 | }. */
67
+ export declare const ONE: SurrealNumber;
68
+ /** -1 = { | 0 }. */
69
+ export declare const MINUS_ONE: SurrealNumber;
70
+ /** * (star) = { 0 | 0 } — primer jugador gana, no comparable a 0 (fuzzy). */
71
+ export declare const STAR: SurrealNumber;
72
+ /**
73
+ * Construye el surreal correspondiente al entero `n`.
74
+ * 0 = { | }
75
+ * n = { n-1 | } (n > 0)
76
+ * -n = { | -(n-1) } (n < 0)
77
+ */
78
+ export declare function fromInt(n: number): SurrealNumber;
79
+ /**
80
+ * Negación: -G = { -GR | -GL }.
81
+ */
82
+ export declare function negate(s: SurrealNumber): SurrealNumber;
83
+ /**
84
+ * Suma de juegos: G + H = { GL+H, G+HL | GR+H, G+HR }.
85
+ */
86
+ export declare function add(a: SurrealNumber, b: SurrealNumber): SurrealNumber;
87
+ export declare function compare(a: SurrealNumber, b: SurrealNumber): -1 | 0 | 1;
88
+ /**
89
+ * G es fuzzy con 0 sii no satisface G ≤ 0 ni 0 ≤ G — es decir, el
90
+ * primer jugador gana. * es el ejemplo canónico.
91
+ */
92
+ export declare function isFuzzy(s: SurrealNumber): boolean;
93
+ /**
94
+ * Simplificación parcial: elimina opciones dominadas en cada lado.
95
+ *
96
+ * En la lista Left, una opción L1 domina a L2 si L1 ≥ L2 (entonces
97
+ * L2 puede borrarse: el jugador Left preferirá L1).
98
+ * En la lista Right, una opción R1 domina a R2 si R1 ≤ R2.
99
+ *
100
+ * No hace eliminación reversible ("bypass") — eso podría requerirse
101
+ * para canonicalización completa Conway. Para nuestros tests es
102
+ * suficiente.
103
+ */
104
+ export declare function simplify(s: SurrealNumber): SurrealNumber;
105
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reasoning/combinatorial-games/index.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;IAE3C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;CACrC;AAMD;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EACR,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAA6B,GACrD,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAYtF;AAID;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAuB5D;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAc3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAsDhF;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;CACjC;AAMD,mEAAmE;AACnE,eAAO,MAAM,IAAI,EAAE,aAAmC,CAAC;AAEvD,mBAAmB;AACnB,eAAO,MAAM,GAAG,EAAE,aAAuC,CAAC;AAE1D,oBAAoB;AACpB,eAAO,MAAM,SAAS,EAAE,aAAuC,CAAC;AAEhE,6EAA6E;AAC7E,eAAO,MAAM,IAAI,EAAE,aAA2C,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAKhD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAKtD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAQrE;AAwBD,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAOtE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAEjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAqCxD"}
@@ -0,0 +1,377 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST Combinatorial Games — Sprague-Grundy + Surreal numbers
4
+ // ============================================================
5
+ // Dos puntas complementarias del análisis de juegos combinatorios:
6
+ //
7
+ // 1. Juegos imparciales (mismas movidas para ambos jugadores) →
8
+ // Sprague-Grundy theorem: cada estado tiene un único valor
9
+ // grundy ∈ ℕ. Una posición es perdedora para el jugador a mover
10
+ // sii grundy = 0. Para juegos compuestos (suma disjunta), el
11
+ // valor se obtiene como XOR (nim-sum) de los componentes.
12
+ //
13
+ // 2. Juegos partisanos (movidas asimétricas Left/Right) → números
14
+ // surreales de Conway. Cada juego es un par { L | R } donde L y R
15
+ // son conjuntos de juegos (sus opciones). De aquí emergen los
16
+ // enteros, fracciones diádicas, ω, ε, *, ↑, etc.
17
+ //
18
+ // Convenciones:
19
+ // • Los juegos imparciales se modelan como una interfaz genérica
20
+ // `ImpartialGame<S>` con función de movidas y predicado terminal.
21
+ // • Los estados deben ser serializables a string (clave del caché);
22
+ // se exige una función `key` opcional; default = JSON.stringify.
23
+ // • Los surreales son recursivos. Sólo soportamos comparación y
24
+ // aritmética básica (add, negate, compare). Suficiente para
25
+ // verificar identidades como 1 + 1 = 2, *‖0, etc.
26
+ // • La simplificación de surreales aquí elimina opciones dominadas
27
+ // (Left domina a otra Left si es ≥; Right domina si es ≤). No
28
+ // hacemos "número simplicity" completo — sí suficiente para que
29
+ // los tests de identidad pasen sin explosión de tamaño.
30
+ // ============================================================
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.STAR = exports.MINUS_ONE = exports.ONE = exports.ZERO = void 0;
33
+ exports.mex = mex;
34
+ exports.grundyValue = grundyValue;
35
+ exports.isWinning = isWinning;
36
+ exports.nimSum = nimSum;
37
+ exports.multiGameGrundy = multiGameGrundy;
38
+ exports.nim = nim;
39
+ exports.nim1d = nim1d;
40
+ exports.chompGame = chompGame;
41
+ exports.fromInt = fromInt;
42
+ exports.negate = negate;
43
+ exports.add = add;
44
+ exports.compare = compare;
45
+ exports.isFuzzy = isFuzzy;
46
+ exports.simplify = simplify;
47
+ function stateKey(game, state) {
48
+ return game.key ? game.key(state) : JSON.stringify(state);
49
+ }
50
+ /**
51
+ * Minimum Excludant: menor entero ≥ 0 que no está en el conjunto.
52
+ * mex(∅) = 0, mex({0,1,3}) = 2, mex({1,2}) = 0.
53
+ */
54
+ function mex(set) {
55
+ let n = 0;
56
+ while (set.has(n))
57
+ n += 1;
58
+ return n;
59
+ }
60
+ /**
61
+ * Valor de Grundy del estado dado bajo el juego imparcial.
62
+ * Define: G(terminal) = 0; G(s) = mex { G(s') : s' ∈ moves(s) }.
63
+ * Usa caché (compartido entre llamadas) keyed por la clave canónica del estado.
64
+ */
65
+ function grundyValue(game, state, cache = new Map()) {
66
+ const k = stateKey(game, state);
67
+ const cached = cache.get(k);
68
+ if (cached !== undefined)
69
+ return cached;
70
+ if (game.isTerminal(state)) {
71
+ cache.set(k, 0);
72
+ return 0;
73
+ }
74
+ const successors = game.moves(state);
75
+ const values = new Set();
76
+ for (const next of successors) {
77
+ values.add(grundyValue(game, next, cache));
78
+ }
79
+ const g = mex(values);
80
+ cache.set(k, g);
81
+ return g;
82
+ }
83
+ /**
84
+ * El jugador a mover gana sii grundy ≠ 0 (juego imparcial con convención
85
+ * normal: el que no puede mover, pierde).
86
+ */
87
+ function isWinning(game, state) {
88
+ return grundyValue(game, state) !== 0;
89
+ }
90
+ /**
91
+ * Nim-sum: XOR bit a bit de los valores. Identidad del monoide de Grundy
92
+ * bajo suma disjunta de juegos imparciales.
93
+ */
94
+ function nimSum(values) {
95
+ let acc = 0;
96
+ for (const v of values)
97
+ acc ^= v;
98
+ return acc;
99
+ }
100
+ /**
101
+ * Grundy de la suma disjunta de juegos imparciales independientes:
102
+ * G(G1 + G2 + ... + Gn)(s1,...,sn) = G1(s1) ⊕ G2(s2) ⊕ ... ⊕ Gn(sn).
103
+ * Requiere games.length === states.length.
104
+ */
105
+ function multiGameGrundy(games, states) {
106
+ if (games.length !== states.length) {
107
+ throw new Error(`multiGameGrundy: games (${games.length}) y states (${states.length}) deben tener igual longitud`);
108
+ }
109
+ const xs = [];
110
+ for (let i = 0; i < games.length; i += 1) {
111
+ // Cada juego tiene su propio caché.
112
+ xs.push(grundyValue(games[i], states[i]));
113
+ }
114
+ return nimSum(xs);
115
+ }
116
+ // ── Juegos pre-construidos ──────────────────────────────────
117
+ /**
118
+ * Nim clásico: varios montones de piedras, un movimiento = sacar ≥1
119
+ * piedras de un único montón. Pierde quien no puede mover (todos los
120
+ * montones a 0). Estado: vector de tamaños (normalizado, sin ceros y
121
+ * ordenado descendente para que el caché sea efectivo entre simetrías).
122
+ */
123
+ function nim(piles) {
124
+ if (piles.some((p) => p < 0 || !Number.isInteger(p))) {
125
+ throw new Error('nim: cada pila debe ser entero ≥ 0');
126
+ }
127
+ const canon = (s) => s.filter((x) => x > 0).sort((a, b) => b - a);
128
+ const initial = canon(piles);
129
+ return {
130
+ initial,
131
+ isTerminal: (s) => s.length === 0,
132
+ moves: (s) => {
133
+ const out = [];
134
+ for (let i = 0; i < s.length; i += 1) {
135
+ const v = s[i];
136
+ for (let take = 1; take <= v; take += 1) {
137
+ const next = s.slice();
138
+ next[i] = v - take;
139
+ out.push(canon(next));
140
+ }
141
+ }
142
+ return out;
143
+ },
144
+ key: (s) => s.join(','),
145
+ };
146
+ }
147
+ /**
148
+ * Nim 1D: una sola pila de `stones` piedras; sacar 1..stones. Equivale
149
+ * a `nim([stones])` pero con estado más compacto (un número).
150
+ */
151
+ function nim1d(stones) {
152
+ if (!Number.isInteger(stones) || stones < 0) {
153
+ throw new Error('nim1d: stones debe ser entero ≥ 0');
154
+ }
155
+ return {
156
+ initial: stones,
157
+ isTerminal: (s) => s === 0,
158
+ moves: (s) => {
159
+ const out = [];
160
+ for (let take = 1; take <= s; take += 1)
161
+ out.push(s - take);
162
+ return out;
163
+ },
164
+ key: (s) => String(s),
165
+ };
166
+ }
167
+ /**
168
+ * Chomp: tablero rows×cols de "chocolate". Cada movida elige una casilla
169
+ * viva (true) y "muerde" todo el rectángulo abajo-derecha desde ella. La
170
+ * casilla (0,0) es veneno: quien la come pierde (convención misère
171
+ * implementada como: estado terminal cuando solo queda (0,0)).
172
+ *
173
+ * Estado: matriz booleana rows×cols con true = casilla viva.
174
+ *
175
+ * Nota: Chomp tiene posición ganadora conocida para el primer jugador
176
+ * en todo tablero ≥ 2×2 (argumento de robo de estrategia), pero la
177
+ * estrategia explícita es desconocida en general. Para 1×1 (sólo el
178
+ * veneno) el jugador a mover pierde, así que grundy = 0.
179
+ */
180
+ function chompGame(rows, cols) {
181
+ if (!Number.isInteger(rows) || !Number.isInteger(cols) || rows < 1 || cols < 1) {
182
+ throw new Error('chompGame: rows y cols deben ser enteros ≥ 1');
183
+ }
184
+ const buildInitial = () => {
185
+ const m = [];
186
+ for (let r = 0; r < rows; r += 1) {
187
+ const row = [];
188
+ for (let c = 0; c < cols; c += 1)
189
+ row.push(true);
190
+ m.push(row);
191
+ }
192
+ return m;
193
+ };
194
+ const isTerminal = (s) => {
195
+ // Terminal: sólo queda la casilla (0,0) viva (el veneno). El jugador
196
+ // a mover está obligado a comerla y pierde.
197
+ if (!s[0][0])
198
+ return true; // ya consumida (degenerate)
199
+ for (let r = 0; r < s.length; r += 1) {
200
+ const row = s[r];
201
+ for (let c = 0; c < row.length; c += 1) {
202
+ if (row[c] && !(r === 0 && c === 0))
203
+ return false;
204
+ }
205
+ }
206
+ return true;
207
+ };
208
+ return {
209
+ initial: buildInitial(),
210
+ isTerminal,
211
+ moves: (s) => {
212
+ const out = [];
213
+ const R = s.length;
214
+ const C = s[0].length;
215
+ for (let r = 0; r < R; r += 1) {
216
+ for (let c = 0; c < C; c += 1) {
217
+ if (!s[r][c])
218
+ continue;
219
+ if (r === 0 && c === 0 && !isTerminal(s)) {
220
+ // Comer el veneno es legal sólo si es la única opción (terminal).
221
+ // No lo ofrecemos como movida si hay otras casillas.
222
+ continue;
223
+ }
224
+ // Comer (r,c) elimina toda casilla (r', c') con r' ≥ r y c' ≥ c.
225
+ const next = s.map((row) => row.slice());
226
+ for (let r2 = r; r2 < R; r2 += 1) {
227
+ for (let c2 = c; c2 < C; c2 += 1) {
228
+ next[r2][c2] = false;
229
+ }
230
+ }
231
+ out.push(next);
232
+ }
233
+ }
234
+ return out;
235
+ },
236
+ key: (s) => s.map((row) => row.map((b) => (b ? '1' : '0')).join('')).join('/'),
237
+ };
238
+ }
239
+ function makeSurreal(left, right) {
240
+ return { left, right };
241
+ }
242
+ /** 0 = { | } — sin opciones para ninguno; "second player wins". */
243
+ exports.ZERO = makeSurreal([], []);
244
+ /** 1 = { 0 | }. */
245
+ exports.ONE = makeSurreal([exports.ZERO], []);
246
+ /** -1 = { | 0 }. */
247
+ exports.MINUS_ONE = makeSurreal([], [exports.ZERO]);
248
+ /** * (star) = { 0 | 0 } — primer jugador gana, no comparable a 0 (fuzzy). */
249
+ exports.STAR = makeSurreal([exports.ZERO], [exports.ZERO]);
250
+ /**
251
+ * Construye el surreal correspondiente al entero `n`.
252
+ * 0 = { | }
253
+ * n = { n-1 | } (n > 0)
254
+ * -n = { | -(n-1) } (n < 0)
255
+ */
256
+ function fromInt(n) {
257
+ if (!Number.isInteger(n))
258
+ throw new Error('fromInt: requiere entero');
259
+ if (n === 0)
260
+ return exports.ZERO;
261
+ if (n > 0)
262
+ return makeSurreal([fromInt(n - 1)], []);
263
+ return makeSurreal([], [fromInt(n + 1)]);
264
+ }
265
+ /**
266
+ * Negación: -G = { -GR | -GL }.
267
+ */
268
+ function negate(s) {
269
+ return makeSurreal(s.right.map((r) => negate(r)), s.left.map((l) => negate(l)));
270
+ }
271
+ /**
272
+ * Suma de juegos: G + H = { GL+H, G+HL | GR+H, G+HR }.
273
+ */
274
+ function add(a, b) {
275
+ const left = [];
276
+ for (const al of a.left)
277
+ left.push(add(al, b));
278
+ for (const bl of b.left)
279
+ left.push(add(a, bl));
280
+ const right = [];
281
+ for (const ar of a.right)
282
+ right.push(add(ar, b));
283
+ for (const br of b.right)
284
+ right.push(add(a, br));
285
+ return makeSurreal(left, right);
286
+ }
287
+ // ── Comparación de surreales ────────────────────────────────
288
+ //
289
+ // Definición Conway:
290
+ // G ≤ H ⇔ ∀ GL. ¬(H ≤ GL) ∧ ∀ HR. ¬(HR ≤ G)
291
+ // Equivalentemente:
292
+ // G ≥ H ⇔ H ≤ G
293
+ // G || H (fuzzy/incomparable) ⇔ ¬(G ≤ H) ∧ ¬(H ≤ G)
294
+ //
295
+ // `compare(a, b)` devuelve -1 si a<b, 1 si a>b, 0 si a==b. Si son
296
+ // incomparables (fuzzy) lanza error explicito — usá `isFuzzy` antes o
297
+ // `leq`/`geq` directamente.
298
+ function leq(a, b) {
299
+ for (const al of a.left) {
300
+ if (leq(b, al))
301
+ return false;
302
+ }
303
+ for (const br of b.right) {
304
+ if (leq(br, a))
305
+ return false;
306
+ }
307
+ return true;
308
+ }
309
+ function compare(a, b) {
310
+ const ab = leq(a, b);
311
+ const ba = leq(b, a);
312
+ if (ab && ba)
313
+ return 0;
314
+ if (ab && !ba)
315
+ return -1;
316
+ if (!ab && ba)
317
+ return 1;
318
+ throw new Error('compare: surreales incomparables (fuzzy). Usá isFuzzy / leq / geq.');
319
+ }
320
+ /**
321
+ * G es fuzzy con 0 sii no satisface G ≤ 0 ni 0 ≤ G — es decir, el
322
+ * primer jugador gana. * es el ejemplo canónico.
323
+ */
324
+ function isFuzzy(s) {
325
+ return !leq(s, exports.ZERO) && !leq(exports.ZERO, s);
326
+ }
327
+ /**
328
+ * Simplificación parcial: elimina opciones dominadas en cada lado.
329
+ *
330
+ * En la lista Left, una opción L1 domina a L2 si L1 ≥ L2 (entonces
331
+ * L2 puede borrarse: el jugador Left preferirá L1).
332
+ * En la lista Right, una opción R1 domina a R2 si R1 ≤ R2.
333
+ *
334
+ * No hace eliminación reversible ("bypass") — eso podría requerirse
335
+ * para canonicalización completa Conway. Para nuestros tests es
336
+ * suficiente.
337
+ */
338
+ function simplify(s) {
339
+ const simplifiedLeft = s.left.map((l) => simplify(l));
340
+ const simplifiedRight = s.right.map((r) => simplify(r));
341
+ // Dominancia Left: descartar L2 si existe L1 con L1 ≥ L2 (L1 ≠ L2).
342
+ const keptLeft = [];
343
+ for (let i = 0; i < simplifiedLeft.length; i += 1) {
344
+ const li = simplifiedLeft[i];
345
+ let dominated = false;
346
+ for (let j = 0; j < simplifiedLeft.length; j += 1) {
347
+ if (i === j)
348
+ continue;
349
+ const lj = simplifiedLeft[j];
350
+ if (leq(li, lj) && !leq(lj, li)) {
351
+ dominated = true;
352
+ break;
353
+ }
354
+ }
355
+ if (!dominated)
356
+ keptLeft.push(li);
357
+ }
358
+ // Dominancia Right: descartar R2 si existe R1 con R1 ≤ R2 (R1 ≠ R2).
359
+ const keptRight = [];
360
+ for (let i = 0; i < simplifiedRight.length; i += 1) {
361
+ const ri = simplifiedRight[i];
362
+ let dominated = false;
363
+ for (let j = 0; j < simplifiedRight.length; j += 1) {
364
+ if (i === j)
365
+ continue;
366
+ const rj = simplifiedRight[j];
367
+ if (leq(rj, ri) && !leq(ri, rj)) {
368
+ dominated = true;
369
+ break;
370
+ }
371
+ }
372
+ if (!dominated)
373
+ keptRight.push(ri);
374
+ }
375
+ return makeSurreal(keptLeft, keptRight);
376
+ }
377
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reasoning/combinatorial-games/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { AuctionResult } from './types';
2
+ /**
3
+ * First-price sealed-bid: el ganador paga su propio bid.
4
+ *
5
+ * No es strategy-proof — el bidder racional shadea su bid bajo su
6
+ * valuation. Pero la regla es lo más simple del mundo.
7
+ */
8
+ export declare function firstPriceSealed(bids: Map<string, number>): AuctionResult;
9
+ /**
10
+ * Second-price sealed-bid (Vickrey): el ganador paga el segundo bid más
11
+ * alto. Es DSIC: bidding truthful es dominante.
12
+ *
13
+ * Si solo hay un bidder válido, paga 0 (no hay segundo precio). Esa es
14
+ * la convención estándar; en variantes con reserve, el reserve actúa
15
+ * como segundo precio si no hay otro bidder por encima.
16
+ */
17
+ export declare function secondPriceSealed(bids: Map<string, number>): AuctionResult;
18
+ /**
19
+ * English ascending auction: simulamos un reloj que sube en pasos de
20
+ * `increment`. Cada bidder sigue activo mientras el precio no supere
21
+ * su valuation. Cuando solo queda 1 activo, termina y paga el precio
22
+ * actual.
23
+ *
24
+ * Bajo bidders racionales (cada uno dropea exactamente en su valuation),
25
+ * el resultado es equivalente a second-price (el ganador paga ~ segundo
26
+ * valor más alto, módulo `increment`).
27
+ *
28
+ * Implementación: en vez de simular reloj, calculamos directo:
29
+ * winner = bidder con max valuation
30
+ * payment = ceil(secondHighest / increment) * increment ≈ second + un step
31
+ *
32
+ * Para los tests usamos increment=1, lo que da payment ≈ second.
33
+ */
34
+ export declare function englishAuction(bids: Map<string, number>, increment: number): AuctionResult;
35
+ /**
36
+ * Dutch descending auction: reloj baja desde `initialPrice` con pasos
37
+ * `decrement`. El primer bidder en aceptar (precio ≤ su valuation)
38
+ * gana y paga ese precio.
39
+ *
40
+ * Estratégicamente, Dutch ≡ first-price sealed: cada bidder elige a qué
41
+ * precio aceptar, equivalente a elegir su bid. Implementamos via
42
+ * simulación discreta.
43
+ *
44
+ * `bidders.get(id)` = valor máximo que el bidder está dispuesto a pagar
45
+ * (su bid efectivo en el equivalente sealed). El primero en alcanzar
46
+ * un precio ≤ a su bid gana.
47
+ */
48
+ export declare function dutchAuction(initialPrice: number, bidders: Map<string, number>, decrement: number): AuctionResult;
49
+ //# sourceMappingURL=auctions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auctions.d.ts","sourceRoot":"","sources":["../../../src/reasoning/mechanism-design/auctions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAmB7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAIzE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAsB1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAkC1F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,SAAS,EAAE,MAAM,GAChB,aAAa,CA6Bf"}