diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 382c6c8..14ca9f9 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -239,12 +239,15 @@ DependencyTerm te4 = new DependencyTerm(mul, mul1, quantityP, mul2, te3); EquationFormula eq2 = new EquationFormula(totalAmountP, te4); + //input1 DependencyTerm te5 = new DependencyTerm(soledProductIdP, salesIdP, a); EquationFormula eq3 = new EquationFormula(te5, b); + //input2 DependencyTerm te6 = new DependencyTerm(quantityP, salesIdP, a); EquationFormula eq4 = new EquationFormula(te6, c); + //input3, 4, 5 EquationFormula eq5 = new EquationFormula(productIdP, productId); EquationFormula eq6 = new EquationFormula(productNameP, productName); EquationFormula eq7 = new EquationFormula(unitPriceP, unitPrice); @@ -255,28 +258,54 @@ DependencyTerm te9 = new DependencyTerm(mul, mul1, c, mul2, te8); EquationFormula eq8 = new EquationFormula(te7, te9); + + //----------------------change value------------------- + //input6 DependencyTerm te10 = new DependencyTerm(unitPriceP, productIdP, d); EquationFormula eq9 = new EquationFormula(te10, e); + //input7, 8, 9, 10 EquationFormula eq10 = new EquationFormula(productNameP, productName); EquationFormula eq11 = new EquationFormula(salesIdP, salesId); EquationFormula eq12 = new EquationFormula(soledProductIdP, soledProductId); EquationFormula eq13 = new EquationFormula(quantityP, quantity); //value copy -// EquationFormula eq14 = new EquationFormula(totalAmountP, totalAmount); + EquationFormula eq14 = new EquationFormula(totalAmountP, totalAmount); + //value copy conclusion DependencyTerm te11 = new DependencyTerm(totalAmountP, salesIdP, a); DependencyTerm te12 = new DependencyTerm(totalAmount, salesId, a); EquationFormula eq15 = new EquationFormula(te11, te12); -// RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6,eq7,eq8,eq9,eq10,eq11,eq12,eq13,eq14), eq15); -// ris.inference(); +// RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12, eq13, eq14), eq15); +// RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(), List.of(), List.of(eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12, eq13, eq14), eq15); + //value copy new sales + RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq8), eq15); + + //value copy change value +// RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq9, eq10, eq11, eq12, eq13, eq14), eq15); + ris.inference(); +// + System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); + System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); + System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); + + //reference conclusion DependencyTerm te13 = new DependencyTerm(soledProductId, salesId, a); EquationFormula eq16 = new EquationFormula(d, te13); Then th1 = new Then(eq16, eq15); - RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6,eq7,eq1,eq9,eq10,eq11,eq12,eq13,eq2), th1); + +// RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq1, eq9, eq10, eq11, eq12, eq13, eq2), th1); +// RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2), List.of(), List.of(eq3, eq4, eq5, eq6, eq7,eq9, eq10, eq11, eq12, eq13), th1); + + //reference new sales +// RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2, eq3, eq4, eq5, eq6, eq7), th1); + + //reference change value + RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2, eq9, eq10, eq11, eq12, eq13), th1); + // ris2.debug(); ris2.inference(); diff --git a/src/main/java/inference/rewrite/ResourceTree.java b/src/main/java/inference/rewrite/ResourceTree.java index effe013..cfe6929 100644 --- a/src/main/java/inference/rewrite/ResourceTree.java +++ b/src/main/java/inference/rewrite/ResourceTree.java @@ -119,7 +119,7 @@ public String toString() { List result = new ArrayList<>(); toStringAllPath(new Position(), new ArrayList<>(), result); - return "<" + result.stream().collect(Collectors.joining("\n")) + ">"; + return "<" + result.stream().collect(Collectors.joining("|\n")) + ">"; } public void debug(Position pos) { diff --git a/src/main/java/inference/rewrite/RewriteInferenceSystem.java b/src/main/java/inference/rewrite/RewriteInferenceSystem.java index 211387d..15643a0 100644 --- a/src/main/java/inference/rewrite/RewriteInferenceSystem.java +++ b/src/main/java/inference/rewrite/RewriteInferenceSystem.java @@ -19,12 +19,12 @@ public class RewriteInferenceSystem { - List constraintFormulas = new ArrayList<>(); - List invariantFormulas = new ArrayList<>(); - List inputFormulas = new ArrayList<>(); - List conditionalFormulas = new ArrayList<>(); - List otherFormulas = new ArrayList<>(); - EquationFormula conclusion; + private List constraintFormulas = new ArrayList<>(); + private List invariantFormulas = new ArrayList<>(); + private List inputFormulas = new ArrayList<>(); + private List conditionalFormulas = new ArrayList<>(); + private List otherFormulas = new ArrayList<>(); + private EquationFormula conclusion; public RewriteInferenceSystem(List assumptions, Formula conclusion) { @@ -46,9 +46,21 @@ } else { this.conclusion = (EquationFormula) conclusion; } - } + public RewriteInferenceSystem(List constraintFormulas, List invariantFormulas, List inputFormulas, Formula conclusion) { + this.constraintFormulas = constraintFormulas; + this.invariantFormulas = invariantFormulas; + this.inputFormulas = inputFormulas; + if (conclusion instanceof Then then) { + conditionalFormulas.add((EquationFormula) then.getCondition()); + this.conclusion = (EquationFormula) then.getResult(); + } else { + this.conclusion = (EquationFormula) conclusion; + } + } + + public void debug() { System.out.println("constraintFormulas: " + constraintFormulas.toString()); System.out.println("invariantFormulas: " + invariantFormulas.toString()); @@ -86,15 +98,19 @@ Map> rightRewriteGraph = new HashMap<>(); Set conclusionLeftResult = rewriteTree(new ResourceTree(conclusion.getLeftSideHand()), inputFormula, leftRewriteGraph); Set conclusionRightResult = rewriteTree(new ResourceTree(conclusion.getRightSideHand()), inputFormula, rightRewriteGraph); - conclusionLeftResult.retainAll(conclusionRightResult); - ResourceTree resultRoot = conclusionLeftResult.iterator().next(); - showRewriteGraph(resultRoot, leftRewriteGraph); - System.out.println("=============================================================----"); - showRewriteGraph(resultRoot, rightRewriteGraph); // System.out.println(conclusionLeftResult); +// System.out.println(conclusionRightResult); + conclusionLeftResult.retainAll(conclusionRightResult); System.out.println(conclusionLeftResult.size() != 0); +// if (conclusionLeftResult.size() != 0) { +// ResourceTree resultRoot = conclusionLeftResult.iterator().next(); +// showRewriteGraph(resultRoot, leftRewriteGraph); +// System.out.println("=============================================================----"); +// showRewriteGraph(resultRoot, rightRewriteGraph); +// System.out.println(conclusionLeftResult); +// } - } + } return false; } @@ -218,33 +234,22 @@ } private void showRewriteGraph(ResourceTree root, Map> rewriteGraph) { - List> result = new ArrayList<>(); - result.add(new HashSet<>()); - result.get(0).add(root); + List result = new ArrayList<>(); + List resultNodes = new ArrayList<>(); + result.add(root); boolean isChanged = true; while (isChanged) { - Set nextTrees = new HashSet<>(); + ResourceTree curTree = result.get(result.size() - 1); isChanged = false; - for (ResourceTree curTree : result.get(result.size() - 1)) { - if (rewriteGraph.containsKey(curTree)) { - isChanged |= !rewriteGraph.get(curTree).isEmpty(); - for (RewriteGraphNode node: rewriteGraph.get(curTree)) { - nextTrees.add(node.baseTree()); - } - } + if (rewriteGraph.containsKey(curTree)) { + isChanged |= !rewriteGraph.get(curTree).isEmpty(); + RewriteGraphNode nextNode = rewriteGraph.get(curTree).iterator().next(); + result.add(nextNode.baseTree()); + resultNodes.add(nextNode); } - result.add(nextTrees); } - result.remove(result.size() - 1); - for (int i = result.size() - 1; i >= 0; i--) { - Set curTrees = result.get(i); - StringBuilder sb = new StringBuilder(); - for (ResourceTree rt : curTrees) { - sb.append(rewriteGraph.get(rt)); - sb.append(", \n"); - } - sb.delete(sb.length() - 1, sb.length()); - System.out.println(sb.toString()); + for (int i = resultNodes.size() - 1; i >= 0; i--) { + System.out.println(resultNodes.get(i)); System.out.println("--------------------------"); } System.out.println(root);