@stevenvo780/st-lang 4.7.0 → 4.9.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 (285) hide show
  1. package/dist/logic/profiles/quantum/index.d.ts +153 -0
  2. package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
  3. package/dist/logic/profiles/quantum/index.js +788 -0
  4. package/dist/logic/profiles/quantum/index.js.map +1 -0
  5. package/dist/namespaces/reasoning.d.ts +3 -1
  6. package/dist/namespaces/reasoning.d.ts.map +1 -1
  7. package/dist/namespaces/reasoning.js +5 -1
  8. package/dist/namespaces/reasoning.js.map +1 -1
  9. package/dist/proof-systems/certificate/canonical.d.ts +18 -0
  10. package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
  11. package/dist/proof-systems/certificate/canonical.js +79 -0
  12. package/dist/proof-systems/certificate/canonical.js.map +1 -0
  13. package/dist/proof-systems/certificate/generate.d.ts +39 -0
  14. package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
  15. package/dist/proof-systems/certificate/generate.js +259 -0
  16. package/dist/proof-systems/certificate/generate.js.map +1 -0
  17. package/dist/proof-systems/certificate/index.d.ts +7 -0
  18. package/dist/proof-systems/certificate/index.d.ts.map +1 -0
  19. package/dist/proof-systems/certificate/index.js +23 -0
  20. package/dist/proof-systems/certificate/index.js.map +1 -0
  21. package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
  22. package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
  23. package/dist/proof-systems/certificate/lfsc.js +395 -0
  24. package/dist/proof-systems/certificate/lfsc.js.map +1 -0
  25. package/dist/proof-systems/certificate/rules.d.ts +8 -0
  26. package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
  27. package/dist/proof-systems/certificate/rules.js +369 -0
  28. package/dist/proof-systems/certificate/rules.js.map +1 -0
  29. package/dist/proof-systems/certificate/types.d.ts +114 -0
  30. package/dist/proof-systems/certificate/types.d.ts.map +1 -0
  31. package/dist/proof-systems/certificate/types.js +18 -0
  32. package/dist/proof-systems/certificate/types.js.map +1 -0
  33. package/dist/proof-systems/certificate/verify.d.ts +20 -0
  34. package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
  35. package/dist/proof-systems/certificate/verify.js +171 -0
  36. package/dist/proof-systems/certificate/verify.js.map +1 -0
  37. package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
  38. package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
  39. package/dist/reasoning/ban-logic/analyze.js +113 -0
  40. package/dist/reasoning/ban-logic/analyze.js.map +1 -0
  41. package/dist/reasoning/ban-logic/index.d.ts +7 -0
  42. package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
  43. package/dist/reasoning/ban-logic/index.js +66 -0
  44. package/dist/reasoning/ban-logic/index.js.map +1 -0
  45. package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
  46. package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
  47. package/dist/reasoning/ban-logic/protocols.js +219 -0
  48. package/dist/reasoning/ban-logic/protocols.js.map +1 -0
  49. package/dist/reasoning/ban-logic/rules.d.ts +83 -0
  50. package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
  51. package/dist/reasoning/ban-logic/rules.js +409 -0
  52. package/dist/reasoning/ban-logic/rules.js.map +1 -0
  53. package/dist/reasoning/ban-logic/terms.d.ts +26 -0
  54. package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
  55. package/dist/reasoning/ban-logic/terms.js +262 -0
  56. package/dist/reasoning/ban-logic/terms.js.map +1 -0
  57. package/dist/reasoning/ban-logic/types.d.ts +107 -0
  58. package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
  59. package/dist/reasoning/ban-logic/types.js +27 -0
  60. package/dist/reasoning/ban-logic/types.js.map +1 -0
  61. package/dist/reasoning/combinatorial-games/index.d.ts +105 -0
  62. package/dist/reasoning/combinatorial-games/index.d.ts.map +1 -0
  63. package/dist/reasoning/combinatorial-games/index.js +377 -0
  64. package/dist/reasoning/combinatorial-games/index.js.map +1 -0
  65. package/dist/reasoning/differential-privacy/index.d.ts +121 -0
  66. package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
  67. package/dist/reasoning/differential-privacy/index.js +417 -0
  68. package/dist/reasoning/differential-privacy/index.js.map +1 -0
  69. package/dist/reasoning/mechanism-design/auctions.d.ts +49 -0
  70. package/dist/reasoning/mechanism-design/auctions.d.ts.map +1 -0
  71. package/dist/reasoning/mechanism-design/auctions.js +179 -0
  72. package/dist/reasoning/mechanism-design/auctions.js.map +1 -0
  73. package/dist/reasoning/mechanism-design/index.d.ts +5 -0
  74. package/dist/reasoning/mechanism-design/index.d.ts.map +1 -0
  75. package/dist/reasoning/mechanism-design/index.js +39 -0
  76. package/dist/reasoning/mechanism-design/index.js.map +1 -0
  77. package/dist/reasoning/mechanism-design/myerson.d.ts +64 -0
  78. package/dist/reasoning/mechanism-design/myerson.d.ts.map +1 -0
  79. package/dist/reasoning/mechanism-design/myerson.js +253 -0
  80. package/dist/reasoning/mechanism-design/myerson.js.map +1 -0
  81. package/dist/reasoning/mechanism-design/types.d.ts +44 -0
  82. package/dist/reasoning/mechanism-design/types.d.ts.map +1 -0
  83. package/dist/reasoning/mechanism-design/types.js +22 -0
  84. package/dist/reasoning/mechanism-design/types.js.map +1 -0
  85. package/dist/reasoning/mechanism-design/vcg.d.ts +29 -0
  86. package/dist/reasoning/mechanism-design/vcg.d.ts.map +1 -0
  87. package/dist/reasoning/mechanism-design/vcg.js +305 -0
  88. package/dist/reasoning/mechanism-design/vcg.js.map +1 -0
  89. package/dist/reasoning/probabilistic/distributions.d.ts +44 -0
  90. package/dist/reasoning/probabilistic/distributions.d.ts.map +1 -0
  91. package/dist/reasoning/probabilistic/distributions.js +207 -0
  92. package/dist/reasoning/probabilistic/distributions.js.map +1 -0
  93. package/dist/reasoning/probabilistic/examples.d.ts +31 -0
  94. package/dist/reasoning/probabilistic/examples.d.ts.map +1 -0
  95. package/dist/reasoning/probabilistic/examples.js +85 -0
  96. package/dist/reasoning/probabilistic/examples.js.map +1 -0
  97. package/dist/reasoning/probabilistic/index.d.ts +6 -0
  98. package/dist/reasoning/probabilistic/index.d.ts.map +1 -0
  99. package/dist/reasoning/probabilistic/index.js +42 -0
  100. package/dist/reasoning/probabilistic/index.js.map +1 -0
  101. package/dist/reasoning/probabilistic/inference.d.ts +45 -0
  102. package/dist/reasoning/probabilistic/inference.d.ts.map +1 -0
  103. package/dist/reasoning/probabilistic/inference.js +579 -0
  104. package/dist/reasoning/probabilistic/inference.js.map +1 -0
  105. package/dist/reasoning/probabilistic/types.d.ts +153 -0
  106. package/dist/reasoning/probabilistic/types.d.ts.map +1 -0
  107. package/dist/reasoning/probabilistic/types.js +37 -0
  108. package/dist/reasoning/probabilistic/types.js.map +1 -0
  109. package/dist/solver/smt-z3/index.d.ts +3 -0
  110. package/dist/solver/smt-z3/index.d.ts.map +1 -0
  111. package/dist/solver/smt-z3/index.js +11 -0
  112. package/dist/solver/smt-z3/index.js.map +1 -0
  113. package/dist/solver/smt-z3/types.d.ts +52 -0
  114. package/dist/solver/smt-z3/types.d.ts.map +1 -0
  115. package/dist/solver/smt-z3/types.js +6 -0
  116. package/dist/solver/smt-z3/types.js.map +1 -0
  117. package/dist/solver/smt-z3/z3-wasm-backend.d.ts +88 -0
  118. package/dist/solver/smt-z3/z3-wasm-backend.d.ts.map +1 -0
  119. package/dist/solver/smt-z3/z3-wasm-backend.js +437 -0
  120. package/dist/solver/smt-z3/z3-wasm-backend.js.map +1 -0
  121. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
  122. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
  123. package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
  124. package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
  125. package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
  126. package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
  127. package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
  128. package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
  129. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
  130. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
  131. package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
  132. package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
  133. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts +2 -0
  134. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.d.ts.map +1 -0
  135. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js +203 -0
  136. package/dist/tests/reasoning/combinatorial-games/combinatorial-games.test.js.map +1 -0
  137. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
  138. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
  139. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
  140. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
  141. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts +2 -0
  142. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.d.ts.map +1 -0
  143. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js +290 -0
  144. package/dist/tests/reasoning/mechanism-design/mechanism-design.test.js.map +1 -0
  145. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts +2 -0
  146. package/dist/tests/reasoning/probabilistic/probabilistic.test.d.ts.map +1 -0
  147. package/dist/tests/reasoning/probabilistic/probabilistic.test.js +370 -0
  148. package/dist/tests/reasoning/probabilistic/probabilistic.test.js.map +1 -0
  149. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts +2 -0
  150. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.d.ts.map +1 -0
  151. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js +394 -0
  152. package/dist/tests/solver/smt-z3/z3-wasm-backend.test.js.map +1 -0
  153. package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
  154. package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
  155. package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
  156. package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
  157. package/dist/tests/tooling/proof-guidance/features.test.d.ts +2 -0
  158. package/dist/tests/tooling/proof-guidance/features.test.d.ts.map +1 -0
  159. package/dist/tests/tooling/proof-guidance/features.test.js +72 -0
  160. package/dist/tests/tooling/proof-guidance/features.test.js.map +1 -0
  161. package/dist/tests/tooling/proof-guidance/model.test.d.ts +2 -0
  162. package/dist/tests/tooling/proof-guidance/model.test.d.ts.map +1 -0
  163. package/dist/tests/tooling/proof-guidance/model.test.js +165 -0
  164. package/dist/tests/tooling/proof-guidance/model.test.js.map +1 -0
  165. package/dist/tests/tooling/proof-guidance/search.test.d.ts +2 -0
  166. package/dist/tests/tooling/proof-guidance/search.test.d.ts.map +1 -0
  167. package/dist/tests/tooling/proof-guidance/search.test.js +238 -0
  168. package/dist/tests/tooling/proof-guidance/search.test.js.map +1 -0
  169. package/dist/tests/type-theory/cubical/cubical.test.d.ts +2 -0
  170. package/dist/tests/type-theory/cubical/cubical.test.d.ts.map +1 -0
  171. package/dist/tests/type-theory/cubical/cubical.test.js +207 -0
  172. package/dist/tests/type-theory/cubical/cubical.test.js.map +1 -0
  173. package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
  174. package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
  175. package/dist/tests/type-theory/effects/effects.test.js +242 -0
  176. package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
  177. package/dist/tooling/mathlib/group.d.ts +27 -0
  178. package/dist/tooling/mathlib/group.d.ts.map +1 -0
  179. package/dist/tooling/mathlib/group.js +89 -0
  180. package/dist/tooling/mathlib/group.js.map +1 -0
  181. package/dist/tooling/mathlib/index.d.ts +8 -0
  182. package/dist/tooling/mathlib/index.d.ts.map +1 -0
  183. package/dist/tooling/mathlib/index.js +40 -0
  184. package/dist/tooling/mathlib/index.js.map +1 -0
  185. package/dist/tooling/mathlib/instances.d.ts +29 -0
  186. package/dist/tooling/mathlib/instances.d.ts.map +1 -0
  187. package/dist/tooling/mathlib/instances.js +139 -0
  188. package/dist/tooling/mathlib/instances.js.map +1 -0
  189. package/dist/tooling/mathlib/lemmas.d.ts +3 -0
  190. package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
  191. package/dist/tooling/mathlib/lemmas.js +72 -0
  192. package/dist/tooling/mathlib/lemmas.js.map +1 -0
  193. package/dist/tooling/mathlib/order.d.ts +29 -0
  194. package/dist/tooling/mathlib/order.d.ts.map +1 -0
  195. package/dist/tooling/mathlib/order.js +91 -0
  196. package/dist/tooling/mathlib/order.js.map +1 -0
  197. package/dist/tooling/mathlib/ring.d.ts +15 -0
  198. package/dist/tooling/mathlib/ring.d.ts.map +1 -0
  199. package/dist/tooling/mathlib/ring.js +91 -0
  200. package/dist/tooling/mathlib/ring.js.map +1 -0
  201. package/dist/tooling/mathlib/types.d.ts +62 -0
  202. package/dist/tooling/mathlib/types.d.ts.map +1 -0
  203. package/dist/tooling/mathlib/types.js +7 -0
  204. package/dist/tooling/mathlib/types.js.map +1 -0
  205. package/dist/tooling/proof-guidance/features.d.ts +10 -0
  206. package/dist/tooling/proof-guidance/features.d.ts.map +1 -0
  207. package/dist/tooling/proof-guidance/features.js +97 -0
  208. package/dist/tooling/proof-guidance/features.js.map +1 -0
  209. package/dist/tooling/proof-guidance/index.d.ts +5 -0
  210. package/dist/tooling/proof-guidance/index.d.ts.map +1 -0
  211. package/dist/tooling/proof-guidance/index.js +25 -0
  212. package/dist/tooling/proof-guidance/index.js.map +1 -0
  213. package/dist/tooling/proof-guidance/model.d.ts +42 -0
  214. package/dist/tooling/proof-guidance/model.d.ts.map +1 -0
  215. package/dist/tooling/proof-guidance/model.js +149 -0
  216. package/dist/tooling/proof-guidance/model.js.map +1 -0
  217. package/dist/tooling/proof-guidance/search.d.ts +7 -0
  218. package/dist/tooling/proof-guidance/search.d.ts.map +1 -0
  219. package/dist/tooling/proof-guidance/search.js +102 -0
  220. package/dist/tooling/proof-guidance/search.js.map +1 -0
  221. package/dist/tooling/proof-guidance/types.d.ts +77 -0
  222. package/dist/tooling/proof-guidance/types.d.ts.map +1 -0
  223. package/dist/tooling/proof-guidance/types.js +8 -0
  224. package/dist/tooling/proof-guidance/types.js.map +1 -0
  225. package/dist/type-theory/cubical/equality.d.ts +4 -0
  226. package/dist/type-theory/cubical/equality.d.ts.map +1 -0
  227. package/dist/type-theory/cubical/equality.js +78 -0
  228. package/dist/type-theory/cubical/equality.js.map +1 -0
  229. package/dist/type-theory/cubical/index.d.ts +14 -0
  230. package/dist/type-theory/cubical/index.d.ts.map +1 -0
  231. package/dist/type-theory/cubical/index.js +71 -0
  232. package/dist/type-theory/cubical/index.js.map +1 -0
  233. package/dist/type-theory/cubical/infer.d.ts +18 -0
  234. package/dist/type-theory/cubical/infer.d.ts.map +1 -0
  235. package/dist/type-theory/cubical/infer.js +241 -0
  236. package/dist/type-theory/cubical/infer.js.map +1 -0
  237. package/dist/type-theory/cubical/interval.d.ts +12 -0
  238. package/dist/type-theory/cubical/interval.d.ts.map +1 -0
  239. package/dist/type-theory/cubical/interval.js +118 -0
  240. package/dist/type-theory/cubical/interval.js.map +1 -0
  241. package/dist/type-theory/cubical/normalize.d.ts +5 -0
  242. package/dist/type-theory/cubical/normalize.d.ts.map +1 -0
  243. package/dist/type-theory/cubical/normalize.js +191 -0
  244. package/dist/type-theory/cubical/normalize.js.map +1 -0
  245. package/dist/type-theory/cubical/path-algebra.d.ts +12 -0
  246. package/dist/type-theory/cubical/path-algebra.d.ts.map +1 -0
  247. package/dist/type-theory/cubical/path-algebra.js +109 -0
  248. package/dist/type-theory/cubical/path-algebra.js.map +1 -0
  249. package/dist/type-theory/cubical/substitute.d.ts +3 -0
  250. package/dist/type-theory/cubical/substitute.d.ts.map +1 -0
  251. package/dist/type-theory/cubical/substitute.js +109 -0
  252. package/dist/type-theory/cubical/substitute.js.map +1 -0
  253. package/dist/type-theory/cubical/types.d.ts +77 -0
  254. package/dist/type-theory/cubical/types.d.ts.map +1 -0
  255. package/dist/type-theory/cubical/types.js +258 -0
  256. package/dist/type-theory/cubical/types.js.map +1 -0
  257. package/dist/type-theory/effects/core.d.ts +27 -0
  258. package/dist/type-theory/effects/core.d.ts.map +1 -0
  259. package/dist/type-theory/effects/core.js +79 -0
  260. package/dist/type-theory/effects/core.js.map +1 -0
  261. package/dist/type-theory/effects/exception.d.ts +18 -0
  262. package/dist/type-theory/effects/exception.d.ts.map +1 -0
  263. package/dist/type-theory/effects/exception.js +59 -0
  264. package/dist/type-theory/effects/exception.js.map +1 -0
  265. package/dist/type-theory/effects/index.d.ts +11 -0
  266. package/dist/type-theory/effects/index.d.ts.map +1 -0
  267. package/dist/type-theory/effects/index.js +50 -0
  268. package/dist/type-theory/effects/index.js.map +1 -0
  269. package/dist/type-theory/effects/reader.d.ts +20 -0
  270. package/dist/type-theory/effects/reader.d.ts.map +1 -0
  271. package/dist/type-theory/effects/reader.js +62 -0
  272. package/dist/type-theory/effects/reader.js.map +1 -0
  273. package/dist/type-theory/effects/state.d.ts +31 -0
  274. package/dist/type-theory/effects/state.d.ts.map +1 -0
  275. package/dist/type-theory/effects/state.js +91 -0
  276. package/dist/type-theory/effects/state.js.map +1 -0
  277. package/dist/type-theory/effects/types.d.ts +45 -0
  278. package/dist/type-theory/effects/types.d.ts.map +1 -0
  279. package/dist/type-theory/effects/types.js +21 -0
  280. package/dist/type-theory/effects/types.js.map +1 -0
  281. package/dist/type-theory/effects/writer.d.ts +30 -0
  282. package/dist/type-theory/effects/writer.d.ts.map +1 -0
  283. package/dist/type-theory/effects/writer.js +79 -0
  284. package/dist/type-theory/effects/writer.js.map +1 -0
  285. package/package.json +1 -1
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // ST SMT-Z3 — Backend real basado en z3-solver (WASM in-process)
4
+ // ============================================================
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Z3WasmBackend = void 0;
40
+ exports.isZ3Available = isZ3Available;
41
+ exports.detectAvailableSMT = detectAvailableSMT;
42
+ let cachedZ3Module;
43
+ let cachedInitError;
44
+ /** Carga perezosa de z3-solver. Cachea el módulo entre instancias. */
45
+ async function loadZ3() {
46
+ if (cachedZ3Module)
47
+ return cachedZ3Module;
48
+ if (cachedInitError !== undefined)
49
+ throw cachedInitError;
50
+ try {
51
+ // Import dinámico + cast a `any`: la API real de z3-solver expone
52
+ // genéricos por Context<Name> que harían el wrapper invasivo. El
53
+ // contrato externo del backend está fijado por AsyncSMTBackend, así
54
+ // que el cast queda contenido aquí.
55
+ const mod = (await Promise.resolve().then(() => __importStar(require('z3-solver'))));
56
+ cachedZ3Module = (await mod.init());
57
+ return cachedZ3Module;
58
+ }
59
+ catch (err) {
60
+ cachedInitError = err;
61
+ throw err;
62
+ }
63
+ }
64
+ /**
65
+ * `isZ3Available()` intenta inicializar z3-solver y devuelve true si
66
+ * obtiene un Context utilizable. No lanza. Útil para skip de tests y
67
+ * detección de runtime.
68
+ */
69
+ async function isZ3Available() {
70
+ try {
71
+ const z3 = await loadZ3();
72
+ // Smoke: crear y liberar un Solver. Si falla el WASM, salimos por catch.
73
+ const ctx = z3.Context('detect-' + Date.now().toString(36));
74
+ const s = new ctx.Solver();
75
+ s.release();
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ /**
83
+ * Detector unificado de runtime SMT con preferencia por el WASM in-process.
84
+ * - z3-wasm si la WASM bind carga.
85
+ * - z3-subprocess o cvc5-subprocess si hay binario en PATH.
86
+ * - 'none' si no hay nada.
87
+ */
88
+ async function detectAvailableSMT() {
89
+ if (await isZ3Available())
90
+ return 'z3-wasm';
91
+ // Fallback: importar el detector subprocess sin acoplar build target.
92
+ try {
93
+ const { detectAvailableSMTDetailed } = await Promise.resolve().then(() => __importStar(require('../smt/subprocess-backend')));
94
+ const detected = detectAvailableSMTDetailed();
95
+ if (detected.solver === 'z3')
96
+ return 'z3-subprocess';
97
+ if (detected.solver === 'cvc5')
98
+ return 'cvc5-subprocess';
99
+ }
100
+ catch {
101
+ // ignore — subprocess backend opcional
102
+ }
103
+ return 'none';
104
+ }
105
+ let contextCounter = 0;
106
+ /**
107
+ * Z3WasmBackend — wrapper sobre z3-solver con interfaz AsyncSMTBackend.
108
+ *
109
+ * Modelo de estado:
110
+ * - Mantiene un único `Solver` Z3 cuyo stack push/pop se sincroniza con
111
+ * `scopes[]` del host (espejo). Esto permite re-hidratar el solver con
112
+ * `solver.reset()` + replay de scopes si fuera necesario (no se hace
113
+ * en el flujo normal, sólo en `reset()`).
114
+ * - `assertFormula(body)` mete `(assert body)` en el solver actual,
115
+ * pero también lo registra en `scopes[top].assertions` por trazabilidad.
116
+ * - `getUnsatCore()` requiere haber usado `assertNamed(name, body)`:
117
+ * estos asserts se envuelven en `(=> <track> <body>)` y se pasan como
118
+ * assumption literals al check(). El core devuelto es la lista de
119
+ * nombres `track`.
120
+ */
121
+ class Z3WasmBackend {
122
+ name = 'z3-wasm';
123
+ z3;
124
+ ctx;
125
+ solver;
126
+ logic;
127
+ produceUnsatCore;
128
+ produceModels;
129
+ timeoutMs;
130
+ scopes = [{ decls: [], assertions: [] }];
131
+ /** Tracks declarados como Bool y usados como assumption literals. */
132
+ trackNames = new Set();
133
+ lastModel;
134
+ lastUnsatCore = [];
135
+ lastStatistics = {};
136
+ constructor(z3, ctx, options = {}) {
137
+ this.z3 = z3;
138
+ this.ctx = ctx;
139
+ this.logic = options.logic;
140
+ this.produceUnsatCore = options.produceUnsatCore ?? true;
141
+ this.produceModels = options.produceModels ?? true;
142
+ this.timeoutMs = options.timeoutMs;
143
+ this.solver = this.buildSolver();
144
+ }
145
+ /** Crea un backend nuevo. Falla si z3-solver no puede inicializarse. */
146
+ static async create(logicOrOptions) {
147
+ const options = typeof logicOrOptions === 'string' ? { logic: logicOrOptions } : (logicOrOptions ?? {});
148
+ const z3 = await loadZ3();
149
+ // Cada backend usa su propio Context Z3 para evitar cross-talk entre tests.
150
+ contextCounter += 1;
151
+ const ctx = z3.Context(`st-z3-wasm-${contextCounter}`);
152
+ return new Z3WasmBackend(z3, ctx, options);
153
+ }
154
+ /** Resetea el solver (drop all asserts y scopes). */
155
+ reset() {
156
+ try {
157
+ this.solver.release();
158
+ }
159
+ catch {
160
+ // ignore — release es best-effort
161
+ }
162
+ this.solver = this.buildSolver();
163
+ this.scopes = [{ decls: [], assertions: [] }];
164
+ this.trackNames = new Set();
165
+ this.lastModel = undefined;
166
+ this.lastUnsatCore = [];
167
+ this.lastStatistics = {};
168
+ }
169
+ push() {
170
+ this.solver.push();
171
+ this.scopes.push({ decls: [], assertions: [] });
172
+ }
173
+ pop(levels = 1) {
174
+ const target = Math.min(levels, this.scopes.length - 1);
175
+ if (target <= 0)
176
+ return;
177
+ this.solver.pop(target);
178
+ for (let i = 0; i < target; i += 1) {
179
+ this.scopes.pop();
180
+ }
181
+ }
182
+ declareConst(name, sort, bvWidth) {
183
+ const decl = { name, sort };
184
+ if (sort === 'BitVec')
185
+ decl.bvWidth = bvWidth ?? 32;
186
+ this.currentScope().decls.push(decl);
187
+ this.solver.fromString(this.formatDecl(decl));
188
+ }
189
+ /**
190
+ * Inserta una aserción directa (sin tracking). El cuerpo es SMT-LIB v2
191
+ * SIN envolver en `(assert ...)`.
192
+ */
193
+ assertFormula(smtlib) {
194
+ const body = smtlib.trim();
195
+ if (!body)
196
+ return;
197
+ this.currentScope().assertions.push({ body });
198
+ this.solver.fromString(`(assert ${body})`);
199
+ }
200
+ /**
201
+ * Aserción nombrada para participar de unsat core. El `trackName` se
202
+ * declara como Bool fresco y la aserción real se mete como
203
+ * `(=> trackName body)`. En checkSat() esos tracks se pasan como
204
+ * assumption literals.
205
+ */
206
+ assertNamed(trackName, smtlib) {
207
+ if (!this.produceUnsatCore) {
208
+ // Si el solver no produce core, degradamos a assert simple.
209
+ this.assertFormula(smtlib);
210
+ return;
211
+ }
212
+ const body = smtlib.trim();
213
+ if (!body)
214
+ return;
215
+ if (this.trackNames.has(trackName)) {
216
+ throw new Error(`[z3-wasm] trackName "${trackName}" ya fue usado en este backend`);
217
+ }
218
+ this.trackNames.add(trackName);
219
+ this.currentScope().assertions.push({ body, trackName });
220
+ this.solver.fromString(`(declare-const ${trackName} Bool)`);
221
+ this.solver.fromString(`(assert (=> ${trackName} ${body}))`);
222
+ }
223
+ async checkSat() {
224
+ const assumptions = [];
225
+ if (this.produceUnsatCore) {
226
+ for (const name of this.trackNames) {
227
+ assumptions.push(this.ctx.Bool.const(name));
228
+ }
229
+ }
230
+ let result;
231
+ try {
232
+ result =
233
+ assumptions.length > 0
234
+ ? await this.solver.check(...assumptions)
235
+ : await this.solver.check();
236
+ }
237
+ catch (err) {
238
+ // WASM throw — devolver unknown en lugar de propagar, alineado con el
239
+ // resto de backends que nunca tiran en checkSat.
240
+ this.lastModel = undefined;
241
+ this.lastUnsatCore = [];
242
+ // Bug-friendly: pegar mensaje a las statistics para diagnóstico.
243
+ this.lastStatistics = { error: 1 };
244
+ void err;
245
+ return 'unknown';
246
+ }
247
+ if (result === 'sat') {
248
+ this.lastModel = this.extractModel();
249
+ this.lastUnsatCore = [];
250
+ }
251
+ else if (result === 'unsat') {
252
+ this.lastModel = undefined;
253
+ this.lastUnsatCore = this.extractUnsatCore();
254
+ }
255
+ else {
256
+ this.lastModel = undefined;
257
+ this.lastUnsatCore = [];
258
+ }
259
+ this.lastStatistics = this.extractStatistics();
260
+ return result;
261
+ }
262
+ getModel() {
263
+ return this.lastModel ? { ...this.lastModel } : undefined;
264
+ }
265
+ getUnsatCore() {
266
+ return [...this.lastUnsatCore];
267
+ }
268
+ /**
269
+ * `setOption` envuelve `solver.set(key, value)`. Acepta los nombres
270
+ * estándar Z3 (ej. `timeout`, `random_seed`).
271
+ */
272
+ setOption(key, value) {
273
+ this.solver.set(key, value);
274
+ }
275
+ /** Devuelve la última snapshot de stats Z3 capturada en checkSat(). */
276
+ getStatistics() {
277
+ return { ...this.lastStatistics };
278
+ }
279
+ /**
280
+ * Cierra el solver liberando memoria WASM. Después de close() el
281
+ * backend no debe usarse.
282
+ */
283
+ close() {
284
+ try {
285
+ this.solver.release();
286
+ }
287
+ catch {
288
+ // ignore — release es best-effort
289
+ }
290
+ }
291
+ // --------------------------------------------------------------
292
+ // Internals
293
+ // --------------------------------------------------------------
294
+ buildSolver() {
295
+ const solver = this.logic ? new this.ctx.Solver(this.logic) : new this.ctx.Solver();
296
+ if (this.produceUnsatCore) {
297
+ solver.set('unsat_core', true);
298
+ }
299
+ if (this.produceModels) {
300
+ solver.set('model', true);
301
+ }
302
+ if (this.timeoutMs !== undefined) {
303
+ solver.set('timeout', this.timeoutMs);
304
+ }
305
+ return solver;
306
+ }
307
+ currentScope() {
308
+ const top = this.scopes[this.scopes.length - 1];
309
+ if (!top) {
310
+ const fresh = { decls: [], assertions: [] };
311
+ this.scopes.push(fresh);
312
+ return fresh;
313
+ }
314
+ return top;
315
+ }
316
+ formatDecl(decl) {
317
+ if (decl.sort === 'BitVec') {
318
+ return `(declare-const ${decl.name} (_ BitVec ${decl.bvWidth ?? 32}))`;
319
+ }
320
+ return `(declare-const ${decl.name} ${decl.sort})`;
321
+ }
322
+ extractModel() {
323
+ let model;
324
+ try {
325
+ model = this.solver.model();
326
+ }
327
+ catch {
328
+ return undefined;
329
+ }
330
+ const out = {};
331
+ const decls = model.decls();
332
+ for (const d of decls) {
333
+ const nameAst = d.name();
334
+ const name = nameAst.toString();
335
+ // Saltamos los track names usados internamente para unsat-core.
336
+ if (this.trackNames.has(name))
337
+ continue;
338
+ let raw;
339
+ try {
340
+ raw = model.get(d).toString().trim();
341
+ }
342
+ catch {
343
+ continue;
344
+ }
345
+ out[name] = parseZ3Value(raw);
346
+ }
347
+ return Object.keys(out).length > 0 ? out : undefined;
348
+ }
349
+ extractUnsatCore() {
350
+ let core;
351
+ try {
352
+ core = this.solver.unsatCore();
353
+ }
354
+ catch {
355
+ return [];
356
+ }
357
+ const names = [];
358
+ const len = core.length();
359
+ for (let i = 0; i < len; i += 1) {
360
+ try {
361
+ const lit = core.get(i);
362
+ names.push(lit.toString());
363
+ }
364
+ catch {
365
+ // ignore literal corrupto
366
+ }
367
+ }
368
+ return names;
369
+ }
370
+ extractStatistics() {
371
+ let stats;
372
+ try {
373
+ stats = this.solver.statistics();
374
+ }
375
+ catch {
376
+ return {};
377
+ }
378
+ const out = {};
379
+ try {
380
+ const iter = stats[Symbol.iterator]();
381
+ while (true) {
382
+ const step = iter.next();
383
+ if (step.done)
384
+ break;
385
+ const entry = step.value;
386
+ if (typeof entry.value === 'number' && Number.isFinite(entry.value)) {
387
+ out[entry.key] = entry.value;
388
+ }
389
+ }
390
+ }
391
+ catch {
392
+ // Si la iteración de stats falla, mantenemos el snapshot vacío.
393
+ }
394
+ return out;
395
+ }
396
+ }
397
+ exports.Z3WasmBackend = Z3WasmBackend;
398
+ /**
399
+ * Decodifica el `toString()` de un valor Z3 a una representación JS:
400
+ * - "true"/"false" → boolean
401
+ * - "#xFF" / "#b101" → number (con guard a Number.MAX_SAFE_INTEGER)
402
+ * - decimales y enteros → number (cuando entran en safe range)
403
+ * - resto → string crudo
404
+ */
405
+ function parseZ3Value(raw) {
406
+ if (raw === 'true')
407
+ return true;
408
+ if (raw === 'false')
409
+ return false;
410
+ if (raw.startsWith('#x')) {
411
+ const n = Number.parseInt(raw.slice(2), 16);
412
+ return Number.isSafeInteger(n) ? n : raw;
413
+ }
414
+ if (raw.startsWith('#b')) {
415
+ const n = Number.parseInt(raw.slice(2), 2);
416
+ return Number.isSafeInteger(n) ? n : raw;
417
+ }
418
+ // (- 5) → -5
419
+ const negMatch = /^\(-\s+(\d+(?:\.\d+)?)\)$/.exec(raw);
420
+ if (negMatch && negMatch[1] !== undefined) {
421
+ const n = Number(`-${negMatch[1]}`);
422
+ return Number.isFinite(n) ? n : raw;
423
+ }
424
+ // Racional (/ a b) → a/b
425
+ const ratMatch = /^\(\/\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)\)$/.exec(raw);
426
+ if (ratMatch && ratMatch[1] !== undefined && ratMatch[2] !== undefined) {
427
+ const a = Number(ratMatch[1]);
428
+ const b = Number(ratMatch[2]);
429
+ if (Number.isFinite(a) && Number.isFinite(b) && b !== 0)
430
+ return a / b;
431
+ }
432
+ const numeric = Number(raw);
433
+ if (!Number.isNaN(numeric) && Number.isFinite(numeric))
434
+ return numeric;
435
+ return raw;
436
+ }
437
+ //# sourceMappingURL=z3-wasm-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"z3-wasm-backend.js","sourceRoot":"","sources":["../../../src/solver/smt-z3/z3-wasm-backend.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,iEAAiE;AACjE,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmF/D,sCAWC;AAQD,gDAYC;AA3DD,IAAI,cAAoC,CAAC;AACzC,IAAI,eAAwB,CAAC;AAE7B,sEAAsE;AACtE,KAAK,UAAU,MAAM;IACnB,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAC1C,IAAI,eAAe,KAAK,SAAS;QAAE,MAAM,eAAe,CAAC;IACzD,IAAI,CAAC;QACH,kEAAkE;QAClE,iEAAiE;QACjE,oEAAoE;QACpE,oCAAoC;QACpC,MAAM,GAAG,GAAG,CAAC,wDAAa,WAAW,GAAC,CAErC,CAAC;QACF,cAAc,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAa,CAAC;QAChD,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,GAAG,GAAG,CAAC;QACtB,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;QAC1B,yEAAyE;QACzE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC,CAAC,OAAO,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB;IACtC,IAAI,MAAM,aAAa,EAAE;QAAE,OAAO,SAAS,CAAC;IAC5C,sEAAsE;IACtE,IAAI,CAAC;QACH,MAAM,EAAE,0BAA0B,EAAE,GAAG,wDAAa,2BAA2B,GAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,eAAe,CAAC;QACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,iBAAiB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB;;;;;;;;;;;;;;GAcG;AACH,MAAa,aAAa;IACf,IAAI,GAAG,SAAS,CAAC;IAET,EAAE,CAAW;IACb,GAAG,CAAY;IACxB,MAAM,CAAW;IACR,KAAK,CAAuB;IAC5B,gBAAgB,CAAU;IAC1B,aAAa,CAAU;IACvB,SAAS,CAAqB;IAEvC,MAAM,GAAc,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5D,qEAAqE;IAC7D,UAAU,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,SAAS,CAAuB;IAChC,aAAa,GAAa,EAAE,CAAC;IAC7B,cAAc,GAA2B,EAAE,CAAC;IAEpD,YAAoB,EAAY,EAAE,GAAc,EAAE,UAAgC,EAAE;QAClF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,cAAgD;QAEhD,MAAM,OAAO,GACX,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC;QAC1B,4EAA4E;QAC5E,cAAc,IAAI,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,qDAAqD;IACrD,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,IAAa,EAAE,OAAgB;QACxD,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,SAAiB,EAAE,MAAc;QAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,4DAA4D;YAC5D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,gCAAgC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,SAAS,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,MAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM;gBACJ,WAAW,CAAC,MAAM,GAAG,CAAC;oBACpB,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;oBACzC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sEAAsE;YACtE,iDAAiD;YACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,iEAAiE;YACjE,IAAI,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACnC,KAAK,GAAG,CAAC;YACT,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,GAAW,EAAE,KAAgC;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,uEAAuE;IACvE,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,YAAY;IACZ,iEAAiE;IAEzD,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACpF,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,KAAK,GAAY,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,UAAU,CAAC,IAAkB;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,kBAAkB,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC;QACzE,CAAC;QACD,OAAO,kBAAkB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IACrD,CAAC;IAEO,YAAY;QAClB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAChC,gEAAgE;YAChE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACxC,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAkD,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,iBAAiB;QACvB,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA7RD,sCA6RC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,aAAa;IACb,MAAM,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=quantum.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantum.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/logic/profiles/quantum/quantum.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const quantum_1 = require("../../../../logic/profiles/quantum");
5
+ (0, vitest_1.describe)('quantum logic — núcleo vectorial', () => {
6
+ (0, vitest_1.it)('dot de vectores ortogonales es 0; norma de e1 es 1', () => {
7
+ const e1 = (0, quantum_1.vec)([1, 0, 0]);
8
+ const e2 = (0, quantum_1.vec)([0, 1, 0]);
9
+ (0, vitest_1.expect)((0, quantum_1.dot)(e1, e2)).toBeCloseTo(0, 12);
10
+ (0, vitest_1.expect)((0, quantum_1.norm)(e1)).toBeCloseTo(1, 12);
11
+ });
12
+ (0, vitest_1.it)('normalize escala al unitario; norma de cero lanza', () => {
13
+ const v = (0, quantum_1.vec)([3, 4]);
14
+ const u = (0, quantum_1.normalize)(v);
15
+ (0, vitest_1.expect)((0, quantum_1.norm)(u)).toBeCloseTo(1, 9);
16
+ (0, vitest_1.expect)(() => (0, quantum_1.normalize)((0, quantum_1.vec)([0, 0, 0]))).toThrow();
17
+ });
18
+ (0, vitest_1.it)('isOrthogonal: e1 y e2 en R^3 son ortogonales; e1 y (1,1,0) no', () => {
19
+ (0, vitest_1.expect)((0, quantum_1.isOrthogonal)((0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0]))).toBe(true);
20
+ (0, vitest_1.expect)((0, quantum_1.isOrthogonal)((0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([1, 1, 0]))).toBe(false);
21
+ });
22
+ (0, vitest_1.it)('orthonormalBasis: 3 vectores LI en R^3 → 3 vectores ortonormales', () => {
23
+ const basis = (0, quantum_1.orthonormalBasis)([(0, quantum_1.vec)([1, 1, 0]), (0, quantum_1.vec)([0, 1, 1]), (0, quantum_1.vec)([1, 0, 1])]);
24
+ (0, vitest_1.expect)(basis).not.toBeNull();
25
+ (0, vitest_1.expect)(basis.length).toBe(3);
26
+ for (const v of basis)
27
+ (0, vitest_1.expect)((0, quantum_1.norm)(v)).toBeCloseTo(1, 9);
28
+ for (let i = 0; i < basis.length; i++)
29
+ for (let j = i + 1; j < basis.length; j++)
30
+ (0, vitest_1.expect)((0, quantum_1.dot)(basis[i], basis[j])).toBeCloseTo(0, 9);
31
+ });
32
+ (0, vitest_1.it)('orthonormalBasis: vectores LD colapsan a una dimensión inferior', () => {
33
+ const basis = (0, quantum_1.orthonormalBasis)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([2, 0, 0]), (0, quantum_1.vec)([0, 1, 0])]);
34
+ (0, vitest_1.expect)(basis).not.toBeNull();
35
+ (0, vitest_1.expect)(basis.length).toBe(2);
36
+ });
37
+ });
38
+ (0, vitest_1.describe)('quantum logic — subespacios', () => {
39
+ (0, vitest_1.it)('span de e1 y e2 tiene dimensión 2', () => {
40
+ const s = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0])]);
41
+ (0, vitest_1.expect)(s.dimension).toBe(2);
42
+ (0, vitest_1.expect)(s.ambientDim).toBe(3);
43
+ });
44
+ (0, vitest_1.it)('span de dos colineales tiene dimensión 1', () => {
45
+ const s = (0, quantum_1.span)([(0, quantum_1.vec)([1, 1, 0]), (0, quantum_1.vec)([3, 3, 0])]);
46
+ (0, vitest_1.expect)(s.dimension).toBe(1);
47
+ });
48
+ (0, vitest_1.it)('isContained: e1 ⊆ span(e1, e2); pero e3 ⊄ span(e1, e2)', () => {
49
+ const plane = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0])]);
50
+ const xLine = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0])]);
51
+ const zLine = (0, quantum_1.span)([(0, quantum_1.vec)([0, 0, 1])]);
52
+ (0, vitest_1.expect)((0, quantum_1.isContained)(xLine, plane)).toBe(true);
53
+ (0, vitest_1.expect)((0, quantum_1.isContained)(zLine, plane)).toBe(false);
54
+ });
55
+ (0, vitest_1.it)('meet de subespacios ortogonales (xy y z) es {0}', () => {
56
+ const xy = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0])]);
57
+ const z = (0, quantum_1.span)([(0, quantum_1.vec)([0, 0, 1])]);
58
+ const m = (0, quantum_1.meet)(xy, z);
59
+ (0, vitest_1.expect)(m.dimension).toBe(0);
60
+ });
61
+ (0, vitest_1.it)('meet de subespacios solapados (xy y xz) es la línea x', () => {
62
+ const xy = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0])]);
63
+ const xz = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 0, 1])]);
64
+ const m = (0, quantum_1.meet)(xy, xz);
65
+ (0, vitest_1.expect)(m.dimension).toBe(1);
66
+ const xLine = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0])]);
67
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)(m, xLine)).toBe(true);
68
+ });
69
+ (0, vitest_1.it)('join de e1 y e2 es el plano xy (dim 2)', () => {
70
+ const a = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0, 0])]);
71
+ const b = (0, quantum_1.span)([(0, quantum_1.vec)([0, 1, 0])]);
72
+ const j = (0, quantum_1.join)(a, b);
73
+ (0, vitest_1.expect)(j.dimension).toBe(2);
74
+ (0, vitest_1.expect)(j.ambientDim).toBe(3);
75
+ });
76
+ (0, vitest_1.it)('orthocomplement en R^2: span(e1)⊥ ≡ span(e2)', () => {
77
+ const e1 = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0])], 2);
78
+ const perp = (0, quantum_1.orthocomplement)(e1);
79
+ (0, vitest_1.expect)(perp.dimension).toBe(1);
80
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)(perp, (0, quantum_1.span)([(0, quantum_1.vec)([0, 1])], 2))).toBe(true);
81
+ });
82
+ (0, vitest_1.it)('orthocomplement doble es identidad: (a⊥)⊥ = a', () => {
83
+ const a = (0, quantum_1.span)([(0, quantum_1.vec)([1, 1, 0]), (0, quantum_1.vec)([0, 1, 1])]);
84
+ const aPerpPerp = (0, quantum_1.orthocomplement)((0, quantum_1.orthocomplement)(a));
85
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)(aPerpPerp, a)).toBe(true);
86
+ });
87
+ (0, vitest_1.it)('orthocomplement: zero⊥ = top, top⊥ = zero', () => {
88
+ const Z = (0, quantum_1.zeroSubspace)(3);
89
+ const T = (0, quantum_1.topSubspace)(3);
90
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)((0, quantum_1.orthocomplement)(Z, 3), T)).toBe(true);
91
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)((0, quantum_1.orthocomplement)(T, 3), Z)).toBe(true);
92
+ });
93
+ });
94
+ (0, vitest_1.describe)('quantum logic — lattice no-distributivo pero orthomodular', () => {
95
+ (0, vitest_1.it)('makeQuantumLattice expone zero, top y operaciones', () => {
96
+ const L = (0, quantum_1.makeQuantumLattice)(3);
97
+ (0, vitest_1.expect)(L.dimensions).toBe(3);
98
+ (0, vitest_1.expect)(L.zero.dimension).toBe(0);
99
+ (0, vitest_1.expect)(L.top.dimension).toBe(3);
100
+ });
101
+ (0, vitest_1.it)('CONTRAEJEMPLO de distributividad en R^2: tres rectas distintas', () => {
102
+ // En R^2, tomamos a = span(e1), b = span(e2), c = span(e1+e2).
103
+ // Entonces b ∨ c = todo R^2, así a ∧ (b ∨ c) = a (dimensión 1).
104
+ // Pero a ∧ b = {0} y a ∧ c = {0}, así (a ∧ b) ∨ (a ∧ c) = {0}.
105
+ const L = (0, quantum_1.makeQuantumLattice)(2);
106
+ const a = (0, quantum_1.span)([(0, quantum_1.vec)([1, 0])], 2);
107
+ const b = (0, quantum_1.span)([(0, quantum_1.vec)([0, 1])], 2);
108
+ const c = (0, quantum_1.span)([(0, quantum_1.vec)([1, 1])], 2);
109
+ const lhs = L.meet(a, L.join(b, c));
110
+ const rhs = L.join(L.meet(a, b), L.meet(a, c));
111
+ (0, vitest_1.expect)(lhs.dimension).toBe(1);
112
+ (0, vitest_1.expect)(rhs.dimension).toBe(0);
113
+ (0, vitest_1.expect)((0, quantum_1.equalsSubspace)(lhs, rhs)).toBe(false);
114
+ });
115
+ (0, vitest_1.it)('isDistributive devuelve false para R^2 (sampling encuentra contraejemplo)', () => {
116
+ const L = (0, quantum_1.makeQuantumLattice)(2);
117
+ (0, vitest_1.expect)((0, quantum_1.isDistributive)(L, 30)).toBe(false);
118
+ });
119
+ (0, vitest_1.it)('isDistributive devuelve false para R^3 con sampler que fuerza a ⊂ b ∨ c', () => {
120
+ const L = (0, quantum_1.makeQuantumLattice)(3);
121
+ (0, vitest_1.expect)((0, quantum_1.isDistributive)(L, 60)).toBe(false);
122
+ });
123
+ (0, vitest_1.it)('isModular: el lattice de subespacios de R^n SÍ es modular', () => {
124
+ const L = (0, quantum_1.makeQuantumLattice)(3);
125
+ (0, vitest_1.expect)((0, quantum_1.isModular)(L, 20)).toBe(true);
126
+ });
127
+ (0, vitest_1.it)('isOrthomodular: se cumple la ley orthomodular', () => {
128
+ const L = (0, quantum_1.makeQuantumLattice)(3);
129
+ (0, vitest_1.expect)((0, quantum_1.isOrthomodular)(L, 20)).toBe(true);
130
+ });
131
+ (0, vitest_1.it)('R^2 es modular pero NO distributivo — combinación que separa booleano de quantum', () => {
132
+ const L = (0, quantum_1.makeQuantumLattice)(2);
133
+ (0, vitest_1.expect)((0, quantum_1.isModular)(L, 30)).toBe(true);
134
+ (0, vitest_1.expect)((0, quantum_1.isDistributive)(L, 30)).toBe(false);
135
+ });
136
+ });
137
+ (0, vitest_1.describe)('quantum logic — Kochen–Specker', () => {
138
+ (0, vitest_1.it)('findOrthogonalTriples: detecta la única base ortogonal canónica en R^3', () => {
139
+ const v = [(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0]), (0, quantum_1.vec)([0, 0, 1])];
140
+ const triples = (0, quantum_1.findOrthogonalTriples)(v);
141
+ (0, vitest_1.expect)(triples).toEqual([[0, 1, 2]]);
142
+ });
143
+ (0, vitest_1.it)('configuración trivial (una base ortonormal) SÍ es coloreable', () => {
144
+ const v = [(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0]), (0, quantum_1.vec)([0, 0, 1])];
145
+ const triples = (0, quantum_1.findOrthogonalTriples)(v);
146
+ (0, vitest_1.expect)(triples.length).toBe(1);
147
+ (0, vitest_1.expect)((0, quantum_1.isKSColorable)({ vectors: v, orthoTriples: triples })).toBe(true);
148
+ });
149
+ (0, vitest_1.it)('dos bases que comparten un eje en R^3: el eje compartido todavía permite coloración', () => {
150
+ const s = 1 / Math.sqrt(2);
151
+ const v = [(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([0, 1, 0]), (0, quantum_1.vec)([0, 0, 1]), (0, quantum_1.vec)([0, s, s]), (0, quantum_1.vec)([0, s, -s])];
152
+ const triples = (0, quantum_1.findOrthogonalTriples)(v);
153
+ (0, vitest_1.expect)(triples.length).toBeGreaterThanOrEqual(2);
154
+ (0, vitest_1.expect)((0, quantum_1.isKSColorable)({ vectors: v, orthoTriples: triples })).toBe(true);
155
+ });
156
+ (0, vitest_1.it)('rayo repetido en el mismo triple ⇒ no coloreable trivialmente', () => {
157
+ // Si por error armamos un triple con dos rayos iguales, la
158
+ // restricción "exactamente un 1" se vuelve imposible.
159
+ const v = [(0, quantum_1.vec)([1, 0, 0]), (0, quantum_1.vec)([2, 0, 0]), (0, quantum_1.vec)([0, 1, 0])];
160
+ const cfg = { vectors: v, orthoTriples: [[0, 1, 2]] };
161
+ (0, vitest_1.expect)((0, quantum_1.isKSColorable)(cfg)).toBe(false);
162
+ });
163
+ (0, vitest_1.it)('kochenSpeckerTheorem3D devuelve un set R^3 estilo-Peres con varios triples', () => {
164
+ const cfg = (0, quantum_1.kochenSpeckerTheorem3D)();
165
+ (0, vitest_1.expect)(cfg.vectors.length).toBeGreaterThanOrEqual(13);
166
+ (0, vitest_1.expect)(cfg.orthoTriples.length).toBeGreaterThanOrEqual(3);
167
+ // Todos los vectores son R^3
168
+ for (const v of cfg.vectors)
169
+ (0, vitest_1.expect)(v.values.length).toBe(3);
170
+ });
171
+ (0, vitest_1.it)('Cabello-18 tiene 18 vectores en R^4 y 9 contextos', () => {
172
+ const { vectors, contexts } = (0, quantum_1.kochenSpeckerCabello18)();
173
+ (0, vitest_1.expect)(vectors.length).toBe(18);
174
+ (0, vitest_1.expect)(contexts.length).toBe(9);
175
+ for (const v of vectors)
176
+ (0, vitest_1.expect)(v.values.length).toBe(4);
177
+ // Cada vector aparece en exactamente 2 contextos.
178
+ const appearance = new Array(vectors.length).fill(0);
179
+ for (const ctx of contexts)
180
+ for (const i of ctx)
181
+ appearance[i]++;
182
+ (0, vitest_1.expect)(appearance.every((c) => c === 2)).toBe(true);
183
+ });
184
+ (0, vitest_1.it)('Cabello-18: cada contexto consta de 4 vectores mutuamente ortogonales', () => {
185
+ const { vectors, contexts } = (0, quantum_1.kochenSpeckerCabello18)();
186
+ for (const ctx of contexts) {
187
+ (0, vitest_1.expect)(ctx.length).toBe(4);
188
+ for (let i = 0; i < ctx.length; i++) {
189
+ for (let j = i + 1; j < ctx.length; j++) {
190
+ const d = (0, quantum_1.dot)(vectors[ctx[i]], vectors[ctx[j]]);
191
+ (0, vitest_1.expect)(d).toBeCloseTo(0, 9);
192
+ }
193
+ }
194
+ }
195
+ });
196
+ (0, vitest_1.it)('TEOREMA Kochen-Specker (Cabello-18): la configuración NO es coloreable', () => {
197
+ const { vectors, contexts } = (0, quantum_1.kochenSpeckerCabello18)();
198
+ (0, vitest_1.expect)((0, quantum_1.isKSColorableContexts)(vectors, contexts)).toBe(false);
199
+ });
200
+ (0, vitest_1.it)('parity argument: 9 contextos × 1 uno/ctx = 9 (impar) vs 2 apariciones/vec = par ⇒ no coloreable', () => {
201
+ // Sanity check del razonamiento detrás del KS Cabello-18.
202
+ const { contexts } = (0, quantum_1.kochenSpeckerCabello18)();
203
+ (0, vitest_1.expect)(contexts.length % 2).toBe(1); // 9 es impar
204
+ const slots = contexts.reduce((s, c) => s + c.length, 0);
205
+ (0, vitest_1.expect)(slots).toBe(36); // 9 × 4
206
+ (0, vitest_1.expect)((slots / 2) % 2).toBe(0); // cada vector ocupa 2 slots ⇒ par
207
+ });
208
+ });
209
+ //# sourceMappingURL=quantum.test.js.map