22
33import com .articulate .sigma .trans .SUMOformulaToTPTPformula ;
44import com .articulate .sigma .*;
5+ import com .articulate .sigma .tp .ATPQuery ;
6+ import com .articulate .sigma .tp .ATPResult ;
7+ import com .articulate .sigma .tp .ProverCrashedException ;
8+ import com .articulate .sigma .tp .ProverTimeoutException ;
9+ import com .articulate .sigma .tp .TheoremProverController ;
10+
511
612import javax .servlet .*;
713import javax .servlet .http .*;
@@ -70,6 +76,9 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I
7076 case "translatetotptp" :
7177 handleTranslateToTPTP (req , resp );
7278 break ;
79+ case "query" :
80+ handleQuery (req , resp );
81+ break ;
7382 case "format" :
7483 case "check" :
7584 default :
@@ -296,6 +305,91 @@ private void handleTranslateToTPTP(HttpServletRequest req, HttpServletResponse r
296305 }
297306 }
298307
308+ /**
309+ * Run a highlighted SUO-KIF expression as a query without leaving the editor.
310+ * The first version intentionally mirrors AskTell's basic Vampire defaults.
311+ */
312+ private void handleQuery (HttpServletRequest req , HttpServletResponse resp ) throws IOException {
313+
314+ resp .setContentType ("application/json; charset=UTF-8" );
315+ String statement = Optional .ofNullable (req .getParameter ("stmt" )).orElse ("" ).trim ();
316+ String kbName = Optional .ofNullable (req .getParameter ("kb" )).orElse ("SUMO" ).trim ();
317+ if (kbName .isEmpty ()) kbName = "SUMO" ;
318+
319+ if (statement .isEmpty ()) {
320+ resp .setStatus (HttpServletResponse .SC_BAD_REQUEST );
321+ writeJson (resp , false , "Highlight a SUO-KIF expression first." , null );
322+ return ;
323+ }
324+ if (statement .indexOf ('@' ) >= 0 ) {
325+ resp .setStatus (HttpServletResponse .SC_BAD_REQUEST );
326+ writeJson (resp , false , "Row variables (@) are not allowed in queries." , null );
327+ return ;
328+ }
329+
330+ HttpSession session = req .getSession (false );
331+ if (session == null ) {
332+ resp .setStatus (HttpServletResponse .SC_UNAUTHORIZED );
333+ writeJson (resp , false , "Your session has expired. Please log in again." , null );
334+ return ;
335+ }
336+
337+ try {
338+ KBmanager .getMgr ().initializeOnce ();
339+ KB kb = KBmanager .getMgr ().getKB (kbName );
340+ if (kb == null ) {
341+ resp .setStatus (HttpServletResponse .SC_BAD_REQUEST );
342+ writeJson (resp , false , "Knowledge base not found: " + kbName , null );
343+ return ;
344+ }
345+
346+ ATPQuery atpQuery = new ATPQuery (
347+ kb ,
348+ session .getId (),
349+ statement ,
350+ null ,
351+ "custom" ,
352+ "Vampire" ,
353+ "fof" ,
354+ "CASC" ,
355+ false ,
356+ false ,
357+ false ,
358+ false ,
359+ 30 ,
360+ 1
361+ );
362+ ATPResult result = new TheoremProverController ().ask (atpQuery );
363+
364+ if (result == null ) {
365+ writeJson (resp , false , "No result returned by Vampire." , null );
366+ return ;
367+ }
368+
369+ List <String > stdout = result .getStdout ();
370+ String proof = stdout == null || stdout .isEmpty ()
371+ ? "Vampire completed, but returned no proof output."
372+ : String .join (System .lineSeparator (), stdout );
373+ writeJson (resp , true , proof , null );
374+ }
375+ catch (ProverTimeoutException e ) {
376+ resp .setStatus (HttpServletResponse .SC_GATEWAY_TIMEOUT );
377+ writeJson (resp , false , "Vampire timed out after 30 seconds." , null );
378+ }
379+ catch (ProverCrashedException e ) {
380+ resp .setStatus (HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
381+ String detail = e .getResult () == null || e .getResult ().getStdout () == null
382+ ? ""
383+ : System .lineSeparator () + String .join (System .lineSeparator (), e .getResult ().getStdout ());
384+ writeJson (resp , false , "Vampire crashed." + detail , null );
385+ }
386+ catch (Exception e ) {
387+ resp .setStatus (HttpServletResponse .SC_INTERNAL_SERVER_ERROR );
388+ writeJson (resp , false , "Unable to run query: " +
389+ (e .getMessage () == null ? e .getClass ().getSimpleName () : e .getMessage ()), null );
390+ }
391+ }
392+
299393 private void handleFormatOrCheck (HttpServletRequest req , HttpServletResponse resp )
300394 throws IOException , ServletException {
301395
@@ -622,4 +716,4 @@ private static String stripTqMetaPredicatesForCheck(String text) {
622716
623717 return out .toString ();
624718 }
625- }
719+ }
0 commit comments