@stevenvo780/autologic 1.0.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 (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/dist/atoms/coreference.d.ts +29 -0
  4. package/dist/atoms/coreference.d.ts.map +1 -0
  5. package/dist/atoms/coreference.js +75 -0
  6. package/dist/atoms/coreference.js.map +1 -0
  7. package/dist/atoms/identifier-gen.d.ts +23 -0
  8. package/dist/atoms/identifier-gen.d.ts.map +1 -0
  9. package/dist/atoms/identifier-gen.js +83 -0
  10. package/dist/atoms/identifier-gen.js.map +1 -0
  11. package/dist/atoms/index.d.ts +20 -0
  12. package/dist/atoms/index.d.ts.map +1 -0
  13. package/dist/atoms/index.js +112 -0
  14. package/dist/atoms/index.js.map +1 -0
  15. package/dist/atoms/keyword-extractor.d.ts +29 -0
  16. package/dist/atoms/keyword-extractor.d.ts.map +1 -0
  17. package/dist/atoms/keyword-extractor.js +73 -0
  18. package/dist/atoms/keyword-extractor.js.map +1 -0
  19. package/dist/autologic.d.ts +63 -0
  20. package/dist/autologic.d.ts.map +1 -0
  21. package/dist/autologic.js +107 -0
  22. package/dist/autologic.js.map +1 -0
  23. package/dist/discourse/index.d.ts +18 -0
  24. package/dist/discourse/index.d.ts.map +1 -0
  25. package/dist/discourse/index.js +43 -0
  26. package/dist/discourse/index.js.map +1 -0
  27. package/dist/discourse/markers-en.d.ts +7 -0
  28. package/dist/discourse/markers-en.d.ts.map +1 -0
  29. package/dist/discourse/markers-en.js +113 -0
  30. package/dist/discourse/markers-en.js.map +1 -0
  31. package/dist/discourse/markers-es.d.ts +7 -0
  32. package/dist/discourse/markers-es.d.ts.map +1 -0
  33. package/dist/discourse/markers-es.js +134 -0
  34. package/dist/discourse/markers-es.js.map +1 -0
  35. package/dist/discourse/pattern-detector.d.ts +16 -0
  36. package/dist/discourse/pattern-detector.d.ts.map +1 -0
  37. package/dist/discourse/pattern-detector.js +95 -0
  38. package/dist/discourse/pattern-detector.js.map +1 -0
  39. package/dist/discourse/role-classifier.d.ts +12 -0
  40. package/dist/discourse/role-classifier.d.ts.map +1 -0
  41. package/dist/discourse/role-classifier.js +141 -0
  42. package/dist/discourse/role-classifier.js.map +1 -0
  43. package/dist/formalize.d.ts +25 -0
  44. package/dist/formalize.d.ts.map +1 -0
  45. package/dist/formalize.js +123 -0
  46. package/dist/formalize.js.map +1 -0
  47. package/dist/formula/connectors.d.ts +31 -0
  48. package/dist/formula/connectors.d.ts.map +1 -0
  49. package/dist/formula/connectors.js +90 -0
  50. package/dist/formula/connectors.js.map +1 -0
  51. package/dist/formula/first-order.d.ts +11 -0
  52. package/dist/formula/first-order.d.ts.map +1 -0
  53. package/dist/formula/first-order.js +156 -0
  54. package/dist/formula/first-order.js.map +1 -0
  55. package/dist/formula/index.d.ts +15 -0
  56. package/dist/formula/index.d.ts.map +1 -0
  57. package/dist/formula/index.js +49 -0
  58. package/dist/formula/index.js.map +1 -0
  59. package/dist/formula/modal.d.ts +11 -0
  60. package/dist/formula/modal.d.ts.map +1 -0
  61. package/dist/formula/modal.js +138 -0
  62. package/dist/formula/modal.js.map +1 -0
  63. package/dist/formula/propositional.d.ts +11 -0
  64. package/dist/formula/propositional.d.ts.map +1 -0
  65. package/dist/formula/propositional.js +241 -0
  66. package/dist/formula/propositional.js.map +1 -0
  67. package/dist/formula/temporal.d.ts +11 -0
  68. package/dist/formula/temporal.d.ts.map +1 -0
  69. package/dist/formula/temporal.js +134 -0
  70. package/dist/formula/temporal.js.map +1 -0
  71. package/dist/generator/index.d.ts +6 -0
  72. package/dist/generator/index.d.ts.map +1 -0
  73. package/dist/generator/index.js +12 -0
  74. package/dist/generator/index.js.map +1 -0
  75. package/dist/generator/st-emitter.d.ts +23 -0
  76. package/dist/generator/st-emitter.d.ts.map +1 -0
  77. package/dist/generator/st-emitter.js +134 -0
  78. package/dist/generator/st-emitter.js.map +1 -0
  79. package/dist/generator/validator.d.ts +22 -0
  80. package/dist/generator/validator.d.ts.map +1 -0
  81. package/dist/generator/validator.js +53 -0
  82. package/dist/generator/validator.js.map +1 -0
  83. package/dist/index.d.ts +32 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +44 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/nlp/index.d.ts +8 -0
  88. package/dist/nlp/index.d.ts.map +1 -0
  89. package/dist/nlp/index.js +17 -0
  90. package/dist/nlp/index.js.map +1 -0
  91. package/dist/nlp/stemmer-en.d.ts +10 -0
  92. package/dist/nlp/stemmer-en.d.ts.map +1 -0
  93. package/dist/nlp/stemmer-en.js +149 -0
  94. package/dist/nlp/stemmer-en.js.map +1 -0
  95. package/dist/nlp/stemmer-es.d.ts +10 -0
  96. package/dist/nlp/stemmer-es.d.ts.map +1 -0
  97. package/dist/nlp/stemmer-es.js +117 -0
  98. package/dist/nlp/stemmer-es.js.map +1 -0
  99. package/dist/nlp/stopwords.d.ts +11 -0
  100. package/dist/nlp/stopwords.d.ts.map +1 -0
  101. package/dist/nlp/stopwords.js +73 -0
  102. package/dist/nlp/stopwords.js.map +1 -0
  103. package/dist/nlp/tokenizer.d.ts +13 -0
  104. package/dist/nlp/tokenizer.d.ts.map +1 -0
  105. package/dist/nlp/tokenizer.js +36 -0
  106. package/dist/nlp/tokenizer.js.map +1 -0
  107. package/dist/segmenter/clause-splitter.d.ts +15 -0
  108. package/dist/segmenter/clause-splitter.d.ts.map +1 -0
  109. package/dist/segmenter/clause-splitter.js +192 -0
  110. package/dist/segmenter/clause-splitter.js.map +1 -0
  111. package/dist/segmenter/index.d.ts +11 -0
  112. package/dist/segmenter/index.d.ts.map +1 -0
  113. package/dist/segmenter/index.js +25 -0
  114. package/dist/segmenter/index.js.map +1 -0
  115. package/dist/segmenter/sentence-splitter.d.ts +13 -0
  116. package/dist/segmenter/sentence-splitter.d.ts.map +1 -0
  117. package/dist/segmenter/sentence-splitter.js +69 -0
  118. package/dist/segmenter/sentence-splitter.js.map +1 -0
  119. package/dist/types.d.ts +184 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +6 -0
  122. package/dist/types.js.map +1 -0
  123. package/package.json +51 -0
  124. package/readme.md +1 -0
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPropositional = buildPropositional;
4
+ const connectors_1 = require("./connectors");
5
+ /**
6
+ * Construye fórmulas proposicionales para un conjunto de oraciones.
7
+ */
8
+ function buildPropositional(sentences, atomEntries, detectedPatterns) {
9
+ const formulas = [];
10
+ let labelCounter = 1;
11
+ for (let sIdx = 0; sIdx < sentences.length; sIdx++) {
12
+ const sentence = sentences[sIdx];
13
+ const sentenceAtoms = atomEntries.filter(a => {
14
+ // Buscar átomos que pertenecen a cláusulas de esta oración
15
+ const clauseIdxs = sentence.clauses.map((_, i) => i);
16
+ // Heurística: mapear por índice global de cláusula
17
+ return true; // procesamos todos y filtramos por contexto
18
+ });
19
+ const builtFormulas = buildSentenceFormulas(sentence, atomEntries, sIdx, labelCounter, detectedPatterns);
20
+ formulas.push(...builtFormulas);
21
+ labelCounter += builtFormulas.length;
22
+ }
23
+ return formulas;
24
+ }
25
+ /**
26
+ * Construye fórmulas para una oración individual.
27
+ */
28
+ function buildSentenceFormulas(sentence, allAtoms, sentenceIdx, labelStart, patterns) {
29
+ const clauses = sentence.clauses;
30
+ if (clauses.length === 0)
31
+ return [];
32
+ // Obtener átomos para esta oración (por texto de cláusula)
33
+ const clauseAtomMap = new Map();
34
+ for (const atom of allAtoms) {
35
+ // Mapear texto de cláusula → atom ID
36
+ const matchClause = clauses.find(c => c.text === atom.text || c.text.includes(atom.text) || atom.text.includes(c.text));
37
+ if (matchClause) {
38
+ clauseAtomMap.set(matchClause.text, atom.id);
39
+ }
40
+ }
41
+ // Fallback: asignar átomos por orden si no hay match textual
42
+ if (clauseAtomMap.size === 0) {
43
+ clauses.forEach((c, i) => {
44
+ const atom = allAtoms[i];
45
+ if (atom)
46
+ clauseAtomMap.set(c.text, atom.id);
47
+ });
48
+ }
49
+ const formulas = [];
50
+ let label = labelStart;
51
+ switch (sentence.type) {
52
+ case 'conditional': {
53
+ let conditionClauses = clauses.filter(c => c.role === 'condition');
54
+ let consequentClauses = clauses.filter(c => c.role === 'consequent' || c.role === 'conclusion' || c.role === 'assertion');
55
+ // Fallback: si no hay cláusula explícita de condición pero hay consequent,
56
+ // usar la primera cláusula que no sea consequent como condición
57
+ if (conditionClauses.length === 0 && clauses.length >= 2) {
58
+ const nonConsequent = clauses.filter(c => c.role !== 'consequent' && c.role !== 'conclusion');
59
+ if (nonConsequent.length > 0) {
60
+ conditionClauses = [nonConsequent[0]];
61
+ consequentClauses = clauses.filter(c => c !== nonConsequent[0]);
62
+ }
63
+ }
64
+ if (conditionClauses.length > 0 && consequentClauses.length > 0) {
65
+ const antecedent = getAtomId(conditionClauses[0].text, clauseAtomMap, allAtoms);
66
+ const consequent = getAtomId(consequentClauses[0].text, clauseAtomMap, allAtoms);
67
+ // Aplicar negación si hay modificadores
68
+ const antStr = applyModifiers(antecedent, conditionClauses[0].modifiers.map(m => m.type));
69
+ const consStr = applyModifiers(consequent, consequentClauses[0].modifiers.map(m => m.type));
70
+ formulas.push({
71
+ formula: `${antStr} ${connectors_1.ST_OPERATORS.implication} ${consStr}`,
72
+ stType: 'axiom',
73
+ label: `regla_${label}`,
74
+ sourceText: sentence.original,
75
+ sourceSentence: sentenceIdx,
76
+ comment: `Condicional: "${sentence.original}"`,
77
+ });
78
+ }
79
+ break;
80
+ }
81
+ case 'biconditional': {
82
+ if (clauses.length >= 2) {
83
+ const left = getAtomId(clauses[0].text, clauseAtomMap, allAtoms);
84
+ const right = getAtomId(clauses[1].text, clauseAtomMap, allAtoms);
85
+ formulas.push({
86
+ formula: `${left} ${connectors_1.ST_OPERATORS.biconditional} ${right}`,
87
+ stType: 'axiom',
88
+ label: `bicond_${label}`,
89
+ sourceText: sentence.original,
90
+ sourceSentence: sentenceIdx,
91
+ comment: `Bicondicional: "${sentence.original}"`,
92
+ });
93
+ }
94
+ break;
95
+ }
96
+ case 'conjunction': {
97
+ const atoms = clauses.map(c => getAtomId(c.text, clauseAtomMap, allAtoms));
98
+ if (atoms.length >= 2) {
99
+ const formula = atoms.join(` ${connectors_1.ST_OPERATORS.conjunction} `);
100
+ formulas.push({
101
+ formula,
102
+ stType: 'axiom',
103
+ label: `conj_${label}`,
104
+ sourceText: sentence.original,
105
+ sourceSentence: sentenceIdx,
106
+ comment: `Conjunción: "${sentence.original}"`,
107
+ });
108
+ }
109
+ break;
110
+ }
111
+ case 'disjunction': {
112
+ const atoms = clauses.map(c => getAtomId(c.text, clauseAtomMap, allAtoms));
113
+ if (atoms.length >= 2) {
114
+ const formula = atoms.join(` ${connectors_1.ST_OPERATORS.disjunction} `);
115
+ formulas.push({
116
+ formula,
117
+ stType: 'axiom',
118
+ label: `disj_${label}`,
119
+ sourceText: sentence.original,
120
+ sourceSentence: sentenceIdx,
121
+ comment: `Disyunción: "${sentence.original}"`,
122
+ });
123
+ }
124
+ break;
125
+ }
126
+ case 'negation': {
127
+ if (clauses.length > 0) {
128
+ const atom = getAtomId(clauses[0].text, clauseAtomMap, allAtoms);
129
+ formulas.push({
130
+ formula: `${connectors_1.ST_OPERATORS.negation}(${atom})`,
131
+ stType: 'axiom',
132
+ label: `neg_${label}`,
133
+ sourceText: sentence.original,
134
+ sourceSentence: sentenceIdx,
135
+ comment: `Negación: "${sentence.original}"`,
136
+ });
137
+ }
138
+ break;
139
+ }
140
+ case 'complex': {
141
+ // Oraciones complejas con premisas y conclusiones
142
+ const premiseClauses = clauses.filter(c => c.role === 'premise');
143
+ const conclusionClauses = clauses.filter(c => c.role === 'conclusion');
144
+ // Generar axiomas para premisas
145
+ for (const pClause of premiseClauses) {
146
+ const atom = getAtomId(pClause.text, clauseAtomMap, allAtoms);
147
+ const atomStr = applyModifiers(atom, pClause.modifiers.map(m => m.type));
148
+ formulas.push({
149
+ formula: atomStr,
150
+ stType: 'axiom',
151
+ label: `premisa_${label++}`,
152
+ sourceText: pClause.text,
153
+ sourceSentence: sentenceIdx,
154
+ comment: `Premisa: "${pClause.text}"`,
155
+ });
156
+ }
157
+ // Generar derivaciones para conclusiones
158
+ if (conclusionClauses.length > 0 && premiseClauses.length > 0) {
159
+ for (const cClause of conclusionClauses) {
160
+ const atom = getAtomId(cClause.text, clauseAtomMap, allAtoms);
161
+ const premiseLabels = formulas
162
+ .filter(f => f.stType === 'axiom')
163
+ .map(f => f.label);
164
+ formulas.push({
165
+ formula: atom,
166
+ stType: 'derive',
167
+ label: `conclusion_${label++}`,
168
+ sourceText: cClause.text,
169
+ sourceSentence: sentenceIdx,
170
+ comment: `Conclusión: "${cClause.text}"`,
171
+ });
172
+ }
173
+ }
174
+ break;
175
+ }
176
+ default: {
177
+ // Aserción simple o tipo no manejado arriba
178
+ for (const clause of clauses) {
179
+ const atom = getAtomId(clause.text, clauseAtomMap, allAtoms);
180
+ const atomStr = applyModifiers(atom, clause.modifiers.map(m => m.type));
181
+ const isConclusion = clause.role === 'conclusion';
182
+ const isPremise = clause.role === 'premise' || clause.role === 'assertion';
183
+ formulas.push({
184
+ formula: atomStr,
185
+ stType: isConclusion ? 'derive' : 'axiom',
186
+ label: isConclusion ? `conclusion_${label}` : `hecho_${label}`,
187
+ sourceText: clause.text,
188
+ sourceSentence: sentenceIdx,
189
+ comment: isConclusion
190
+ ? `Conclusión: "${clause.text}"`
191
+ : `Hecho: "${clause.text}"`,
192
+ });
193
+ label++;
194
+ }
195
+ break;
196
+ }
197
+ }
198
+ return formulas;
199
+ }
200
+ /**
201
+ * Obtiene el ID de átomo para un texto de cláusula.
202
+ */
203
+ function getAtomId(clauseText, clauseAtomMap, allAtoms) {
204
+ // Buscar en el mapa directo
205
+ const direct = clauseAtomMap.get(clauseText);
206
+ if (direct)
207
+ return direct;
208
+ // Buscar match parcial
209
+ for (const [text, id] of clauseAtomMap) {
210
+ if (clauseText.includes(text) || text.includes(clauseText)) {
211
+ return id;
212
+ }
213
+ }
214
+ // Buscar en todos los átomos
215
+ const atomMatch = allAtoms.find(a => a.text === clauseText || a.text.includes(clauseText) || clauseText.includes(a.text));
216
+ if (atomMatch)
217
+ return atomMatch.id;
218
+ // Fallback: generar ID del texto
219
+ return clauseText.replace(/\s+/g, '_').toUpperCase().slice(0, 20);
220
+ }
221
+ /**
222
+ * Aplica modificadores lógicos a una fórmula atómica.
223
+ */
224
+ function applyModifiers(atomId, modifiers) {
225
+ let formula = atomId;
226
+ for (const mod of modifiers) {
227
+ switch (mod) {
228
+ case 'negation':
229
+ formula = `!(${formula})`;
230
+ break;
231
+ case 'necessity':
232
+ formula = `[](${formula})`;
233
+ break;
234
+ case 'possibility':
235
+ formula = `<>(${formula})`;
236
+ break;
237
+ }
238
+ }
239
+ return formula;
240
+ }
241
+ //# sourceMappingURL=propositional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propositional.js","sourceRoot":"","sources":["../../src/formula/propositional.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Temporal Formula Builder
3
+ *
4
+ * Construye fórmulas de lógica temporal (LTL).
5
+ */
6
+ import type { AnalyzedSentence, AtomEntry, FormulaEntry } from '../types';
7
+ /**
8
+ * Construye fórmulas temporales LTL.
9
+ */
10
+ export declare function buildTemporal(sentences: AnalyzedSentence[], atomEntries: AtomEntry[]): FormulaEntry[];
11
+ //# sourceMappingURL=temporal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.d.ts","sourceRoot":"","sources":["../../src/formula/temporal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG1E;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,gBAAgB,EAAE,EAC7B,WAAW,EAAE,SAAS,EAAE,GACvB,YAAY,EAAE,CAYhB"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTemporal = buildTemporal;
4
+ const connectors_1 = require("./connectors");
5
+ /**
6
+ * Construye fórmulas temporales LTL.
7
+ */
8
+ function buildTemporal(sentences, atomEntries) {
9
+ const formulas = [];
10
+ let labelCounter = 1;
11
+ for (let sIdx = 0; sIdx < sentences.length; sIdx++) {
12
+ const sentence = sentences[sIdx];
13
+ const built = buildTemporalSentence(sentence, atomEntries, sIdx, labelCounter);
14
+ formulas.push(...built);
15
+ labelCounter += built.length;
16
+ }
17
+ return formulas;
18
+ }
19
+ function buildTemporalSentence(sentence, allAtoms, sentenceIdx, labelStart) {
20
+ const formulas = [];
21
+ const clauses = sentence.clauses;
22
+ let label = labelStart;
23
+ // Detectar operadores temporales en cláusulas
24
+ const hasNext = clauses.some(c => c.modifiers.some(m => m.type === 'temporal_next'));
25
+ const hasUntil = clauses.some(c => c.modifiers.some(m => m.type === 'temporal_until'));
26
+ const hasAlways = clauses.some(c => c.modifiers.some(m => m.type === 'temporal_always'));
27
+ const hasEventually = clauses.some(c => c.modifiers.some(m => m.type === 'temporal_eventually'));
28
+ if (sentence.type === 'conditional' && hasNext) {
29
+ // "Después de A, B" → A -> next B
30
+ const condClauses = clauses.filter(c => c.role === 'condition' || c.role === 'premise');
31
+ const consClauses = clauses.filter(c => c.role === 'consequent' || c.role === 'conclusion' || c.role === 'assertion');
32
+ if (condClauses.length > 0 && consClauses.length > 0) {
33
+ const ant = findAtom(condClauses[0].text, allAtoms);
34
+ const cons = findAtom(consClauses[0].text, allAtoms);
35
+ if (ant && cons) {
36
+ formulas.push({
37
+ formula: `${ant.id} -> ${connectors_1.ST_OPERATORS.temporal_next} ${cons.id}`,
38
+ stType: 'axiom',
39
+ label: `a${label++}`,
40
+ sourceText: sentence.original,
41
+ sourceSentence: sentenceIdx,
42
+ comment: `Temporal next: "${sentence.original}"`,
43
+ });
44
+ }
45
+ }
46
+ }
47
+ else if (hasUntil && clauses.length >= 2) {
48
+ // "A hasta que B" → A until B
49
+ const atomsList = clauses.map(c => findAtom(c.text, allAtoms)).filter(Boolean);
50
+ if (atomsList.length >= 2) {
51
+ formulas.push({
52
+ formula: `${atomsList[0].id} ${connectors_1.ST_OPERATORS.temporal_until} ${atomsList[1].id}`,
53
+ stType: 'axiom',
54
+ label: `a${label++}`,
55
+ sourceText: sentence.original,
56
+ sourceSentence: sentenceIdx,
57
+ comment: `Temporal until: "${sentence.original}"`,
58
+ });
59
+ }
60
+ }
61
+ else if (hasAlways) {
62
+ // "Siempre A" → always A
63
+ for (const clause of clauses) {
64
+ const atom = findAtom(clause.text, allAtoms);
65
+ if (atom) {
66
+ formulas.push({
67
+ formula: `${connectors_1.ST_OPERATORS.temporal_always} ${atom.id}`,
68
+ stType: 'axiom',
69
+ label: `a${label++}`,
70
+ sourceText: clause.text,
71
+ sourceSentence: sentenceIdx,
72
+ comment: `Temporal always: "${clause.text}"`,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ else if (hasEventually) {
78
+ // "Eventualmente A" → eventually A
79
+ for (const clause of clauses) {
80
+ const atom = findAtom(clause.text, allAtoms);
81
+ if (atom) {
82
+ formulas.push({
83
+ formula: `${connectors_1.ST_OPERATORS.temporal_eventually} ${atom.id}`,
84
+ stType: 'axiom',
85
+ label: `a${label++}`,
86
+ sourceText: clause.text,
87
+ sourceSentence: sentenceIdx,
88
+ comment: `Temporal eventually: "${clause.text}"`,
89
+ });
90
+ }
91
+ }
92
+ }
93
+ else {
94
+ // Temporal genérico: tratar como condicional con next
95
+ if (sentence.type === 'conditional' || clauses.length >= 2) {
96
+ const condClauses = clauses.filter(c => c.role === 'condition' || c.role === 'premise');
97
+ const restClauses = clauses.filter(c => c.role !== 'condition' && c.role !== 'premise');
98
+ if (condClauses.length > 0 && restClauses.length > 0) {
99
+ const ant = findAtom(condClauses[0].text, allAtoms);
100
+ const cons = findAtom(restClauses[0].text, allAtoms);
101
+ if (ant && cons) {
102
+ formulas.push({
103
+ formula: `${ant.id} -> ${connectors_1.ST_OPERATORS.temporal_next} ${cons.id}`,
104
+ stType: 'axiom',
105
+ label: `a${label++}`,
106
+ sourceText: sentence.original,
107
+ sourceSentence: sentenceIdx,
108
+ comment: `Temporal: "${sentence.original}"`,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ else {
114
+ // Aserción temporal simple
115
+ for (const clause of clauses) {
116
+ const atom = findAtom(clause.text, allAtoms);
117
+ if (atom) {
118
+ formulas.push({
119
+ formula: atom.id,
120
+ stType: 'axiom',
121
+ label: `a${label++}`,
122
+ sourceText: clause.text,
123
+ sourceSentence: sentenceIdx,
124
+ });
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return formulas;
130
+ }
131
+ function findAtom(text, allAtoms) {
132
+ return allAtoms.find(a => a.text === text || a.text.includes(text) || text.includes(a.text)) || null;
133
+ }
134
+ //# sourceMappingURL=temporal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal.js","sourceRoot":"","sources":["../../src/formula/temporal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generator — Generación y validación de código ST
3
+ */
4
+ export { emitST } from './st-emitter';
5
+ export { validateST, validationToDiagnostics } from './validator';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validationToDiagnostics = exports.validateST = exports.emitST = void 0;
4
+ /**
5
+ * Generator — Generación y validación de código ST
6
+ */
7
+ var st_emitter_1 = require("./st-emitter");
8
+ Object.defineProperty(exports, "emitST", { enumerable: true, get: function () { return st_emitter_1.emitST; } });
9
+ var validator_1 = require("./validator");
10
+ Object.defineProperty(exports, "validateST", { enumerable: true, get: function () { return validator_1.validateST; } });
11
+ Object.defineProperty(exports, "validationToDiagnostics", { enumerable: true, get: function () { return validator_1.validationToDiagnostics; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,2CAAsC;AAA7B,oGAAA,MAAM,OAAA;AACf,yCAAkE;AAAzD,uGAAA,UAAU,OAAA;AAAE,oHAAA,uBAAuB,OAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ST Emitter — Genera código fuente ST válido y legible
3
+ *
4
+ * Produce código ST con trazabilidad, comentarios y formato estructurado.
5
+ */
6
+ import type { FormulaEntry, LogicProfile, Diagnostic } from '../types';
7
+ interface EmitOptions {
8
+ profile: LogicProfile;
9
+ language: 'es' | 'en';
10
+ includeComments: boolean;
11
+ atoms: Map<string, string>;
12
+ formulas: FormulaEntry[];
13
+ detectedPatterns: string[];
14
+ }
15
+ /**
16
+ * Emite código ST completo a partir de fórmulas construidas.
17
+ */
18
+ export declare function emitST(options: EmitOptions): {
19
+ code: string;
20
+ diagnostics: Diagnostic[];
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=st-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-emitter.d.ts","sourceRoot":"","sources":["../../src/generator/st-emitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAa,UAAU,EAAE,MAAM,UAAU,CAAC;AAElF,UAAU,WAAW;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CAyHxF"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitST = emitST;
4
+ /**
5
+ * Emite código ST completo a partir de fórmulas construidas.
6
+ */
7
+ function emitST(options) {
8
+ const { profile, language, includeComments, atoms, formulas, detectedPatterns } = options;
9
+ const lines = [];
10
+ const diagnostics = [];
11
+ // ── Header ──────────────────────────────────
12
+ if (includeComments) {
13
+ lines.push('// ═══════════════════════════════════════');
14
+ lines.push('// Formalización automática — autologic');
15
+ lines.push(`// Perfil: ${profile}`);
16
+ lines.push(`// Idioma: ${language}`);
17
+ if (detectedPatterns.length > 0) {
18
+ lines.push(`// Patrones: ${detectedPatterns.join(', ')}`);
19
+ }
20
+ lines.push('// ═══════════════════════════════════════');
21
+ lines.push('');
22
+ }
23
+ // ── Logic declaration ───────────────────────
24
+ lines.push(`logic ${profile}`);
25
+ lines.push('');
26
+ // ── Interpret declarations ──────────────────
27
+ if (atoms.size > 0) {
28
+ if (includeComments) {
29
+ lines.push('// ── Proposiciones atómicas ────────────');
30
+ }
31
+ // Para first_order no hacemos interpret de predicados
32
+ const isFirstOrder = profile === 'classical.first_order' || profile === 'aristotelian.syllogistic';
33
+ for (const [atomId, text] of atoms) {
34
+ if (isFirstOrder && atomId.includes('(')) {
35
+ // Para primer orden: usar interpret con la fórmula completa
36
+ lines.push(`interpret "${text}" as ${atomId}`);
37
+ }
38
+ else {
39
+ lines.push(`interpret "${text}" as ${atomId}`);
40
+ }
41
+ }
42
+ lines.push('');
43
+ }
44
+ // ── Formulas (axioms, derives, checks) ──────
45
+ if (formulas.length > 0) {
46
+ if (includeComments) {
47
+ lines.push('// ── Estructura argumental ─────────────');
48
+ if (detectedPatterns.length > 0) {
49
+ lines.push(`// Patrón detectado: ${detectedPatterns.join(', ')}`);
50
+ }
51
+ }
52
+ lines.push('');
53
+ // Agrupar por tipo
54
+ const axioms = formulas.filter(f => f.stType === 'axiom');
55
+ const derives = formulas.filter(f => f.stType === 'derive');
56
+ const checks = formulas.filter(f => f.stType === 'check');
57
+ // Emitir axiomas
58
+ for (const axiom of axioms) {
59
+ if (includeComments && axiom.comment) {
60
+ lines.push(`// ${axiom.comment}`);
61
+ }
62
+ lines.push(`axiom ${axiom.label} : ${axiom.formula}`);
63
+ }
64
+ if (axioms.length > 0 && derives.length > 0) {
65
+ lines.push('');
66
+ }
67
+ // Emitir derivaciones
68
+ for (const derive of derives) {
69
+ if (includeComments && derive.comment) {
70
+ lines.push(`// ${derive.comment}`);
71
+ }
72
+ // Construir la lista de axiomas/premisas para el derive
73
+ const premiseLabels = axioms.map(a => a.label);
74
+ if (premiseLabels.length > 0) {
75
+ lines.push(`derive ${derive.formula} from {${premiseLabels.join(', ')}}`);
76
+ }
77
+ else {
78
+ lines.push(`derive ${derive.formula}`);
79
+ }
80
+ }
81
+ if (derives.length > 0 && checks.length > 0) {
82
+ lines.push('');
83
+ }
84
+ // Emitir checks
85
+ for (const check of checks) {
86
+ if (includeComments && check.comment) {
87
+ lines.push(`// ${check.comment}`);
88
+ }
89
+ lines.push(`check valid (${check.formula})`);
90
+ }
91
+ // Agregar verificación automática para condicionales
92
+ const conditionalAxioms = axioms.filter(a => a.formula.includes('->'));
93
+ if (conditionalAxioms.length > 0 && checks.length === 0) {
94
+ lines.push('');
95
+ if (includeComments) {
96
+ lines.push('// ── Verificación ──────────────────────');
97
+ }
98
+ for (const ca of conditionalAxioms) {
99
+ lines.push(`check valid (${ca.formula})`);
100
+ }
101
+ }
102
+ }
103
+ // Limpiar líneas en blanco consecutivas
104
+ const code = cleanOutput(lines);
105
+ // Diagnóstico si no hay fórmulas
106
+ if (formulas.length === 0) {
107
+ diagnostics.push({
108
+ severity: 'warning',
109
+ message: 'No se generaron fórmulas. El texto puede ser demasiado simple o no contener estructura lógica detectable.',
110
+ code: 'NO_FORMULAS',
111
+ });
112
+ }
113
+ return { code, diagnostics };
114
+ }
115
+ /**
116
+ * Limpia el código de salida eliminando líneas en blanco excesivas.
117
+ */
118
+ function cleanOutput(lines) {
119
+ const result = [];
120
+ let lastWasEmpty = false;
121
+ for (const line of lines) {
122
+ const isEmpty = line.trim() === '';
123
+ if (isEmpty && lastWasEmpty)
124
+ continue;
125
+ result.push(line);
126
+ lastWasEmpty = isEmpty;
127
+ }
128
+ // Eliminar trailing newlines excesivos
129
+ while (result.length > 0 && result[result.length - 1].trim() === '') {
130
+ result.pop();
131
+ }
132
+ return result.join('\n') + '\n';
133
+ }
134
+ //# sourceMappingURL=st-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st-emitter.js","sourceRoot":"","sources":["../../src/generator/st-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Validator — Valida código ST generado con st-lang parse()
3
+ *
4
+ * Intenta importar st-lang dinámicamente (peerDep).
5
+ * Si no está disponible, reporta warning pero no falla.
6
+ */
7
+ import type { Diagnostic } from '../types';
8
+ interface ValidationResult {
9
+ ok: boolean;
10
+ errors: string[];
11
+ }
12
+ /**
13
+ * Valida código ST usando el parser de st-lang.
14
+ * Requiere que @stevenvo780/st-lang esté instalado (peerDependency).
15
+ */
16
+ export declare function validateST(code: string): ValidationResult;
17
+ /**
18
+ * Convierte errores de validación en diagnósticos.
19
+ */
20
+ export declare function validationToDiagnostics(validation: ValidationResult): Diagnostic[];
21
+ export {};
22
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/generator/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,UAAU,gBAAgB;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAiCzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,gBAAgB,GAAG,UAAU,EAAE,CAOlF"}