public IActionResult SolveTableau([FromBody] TableauInput tableauInput) { if (tableauInput == null || !HasValidFormulas(tableauInput)) { return(BadRequest("The request could not be understood by the server due to malformed syntax.")); } var tableauSolution = TableauSolutionService.ComputeTableauSolution(tableauInput); EventService.LogTableauSolution(tableauSolution); return(Ok(tableauSolution)); }
public TableauSolution ComputeTableauSolution(TableauInput tableauInput) { var solutionTableau = TableauSolver.Solve(tableauInput); var tableauSolution = new TableauSolution() { SolutionNode = solutionTableau, TableauInput = tableauInput, RequestDateTime = DateTime.Now }; return(tableauSolution); }
public SolutionNode Solve(TableauInput input) { var initialBranch = new Branch(); initialBranch.AddNewFormula(new BranchItem(input.TableauRoot)); if (input.TheoryAxioms == null) { input.TheoryAxioms = new List <TableauInputNode>(); } foreach (var axiom in input.TheoryAxioms) { initialBranch.AddAxiom(new BranchItem(axiom)); } return(initialBranch.Develop()); }
ParseTableauInput(UnparsedTableauInput unparsedTableauInput) { if (!unparsedTableauInput.HasAtleastOneParseRequest()) { throw new ConversionException("Unparsed tableau input must contain atleast one formula to parse"); } if ((from request in unparsedTableauInput.FormulaParseRequests where request.UnparsedTableauNode.Formula == null select request).Any()) { throw new ConstraintException("Unparsed tableau input contains null string as formula's string representation"); } var parsedTableauNodes = new List <ParsedTableauNode>(); try { foreach (var request in unparsedTableauInput.FormulaParseRequests) { if (request.ErrorResponse != string.Empty) { continue; } try { var formula = FormulaFactory.Parse(request.UnparsedTableauNode.Formula); parsedTableauNodes.Add(new ParsedTableauNode() { Formula = formula, TruthLabel = request.UnparsedTableauNode.TruthLabel }); } catch (ParseException ex) { request.ErrorResponse = ex.Message; } } } catch (Exception ex) { throw new ConversionException($"Formula parser exception {ex.Message}"); } if (unparsedTableauInput.HasErrorResponse()) { return(new TableauInput(), unparsedTableauInput); } var tableauInput = new TableauInput() { TableauRoot = new TableauInputNode() { Formula = parsedTableauNodes[0].Formula, TruthLabel = parsedTableauNodes[0].TruthLabel }, TheoryAxioms = (from request in parsedTableauNodes.Skip(1) let axiom = new TableauInputNode() { Formula = request.Formula, TruthLabel = request.TruthLabel } select axiom).ToList() }; return(tableauInput, new UnparsedTableauInput()); }
private bool HasValidFormulas(TableauInput tableauInput) { return(tableauInput.GetAllNodes().All(tableauInputNode => tableauInputNode.Formula.Apply(FormulaValidator))); }