diff --git a/src/inference/rewrite/Position.java b/src/inference/rewrite/Position.java deleted file mode 100644 index 6fb1315..0000000 --- a/src/inference/rewrite/Position.java +++ /dev/null @@ -1,43 +0,0 @@ -package inference.rewrite; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import lombok.Getter; - -public class Position { - - @Getter - private List paths; - - public Position(List paths) { - this.paths = Collections.unmodifiableList(paths); - } - - public Position addPath(int index) { - List nextPaths = new ArrayList<>(paths); - nextPaths.add(index); - return new Position(Collections.unmodifiableList(nextPaths)); - } - - @Override - public boolean equals(Object another) { - if (! (another instanceof Position)) { - return false; - } - Position position = (Position) another; - return paths.equals(position.getPaths()); - } - - @Override - public int hashCode() { - return this.paths.hashCode(); - } - - @Override - public String toString() { - return paths.toString(); - } - -} diff --git a/src/inference/rewrite/ResourceTree.java b/src/inference/rewrite/ResourceTree.java deleted file mode 100644 index 8ecdd14..0000000 --- a/src/inference/rewrite/ResourceTree.java +++ /dev/null @@ -1,65 +0,0 @@ -package inference.rewrite; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import models.terms.DependencyTerm; -import models.terms.EvaluatableTerm; -import models.terms.Resource; - -public class ResourceTree { - - private Resource root; - private Map> tree; - private Map resourceMap; - - public ResourceTree(EvaluatableTerm term) { - tree = new HashMap<>(); - resourceMap = new HashMap<>(); - constructResourceTree(term, new Position(List.of(0))); - } - - private Position constructResourceTree(EvaluatableTerm term, Position top) { - if (term instanceof Resource resource) { - resourceMap.put(top, resource); - return top; - } else if (term instanceof DependencyTerm depTerm) { - EvaluatableTerm dependingTerm = depTerm.getDependingTerm(); - List dependedResources = depTerm.getDependedResources(); - List argumentTerms = depTerm.getArgumentTerms(); - Position nextPosition = constructResourceTree(dependingTerm, top); - Position resultPosition = nextPosition; - tree.put(nextPosition, new ArrayList<>()); - for (int i = 0; i < dependedResources.size(); i++) { - Position nextPos = nextPosition.addPath(i); - tree.get(nextPosition).add(nextPos); - resultPosition = constructResourceTree(dependedResources.get(i), nextPos); - Position nextNextPos = resultPosition.addPath(0); - tree.put(resultPosition, new ArrayList<>()); - tree.get(resultPosition).add(nextNextPos); - resultPosition = constructResourceTree(argumentTerms.get(i), nextNextPos); - } - return resultPosition; - } else { - return null; - } - } - - @Override - public String toString() { - return tree.toString(); - } - - public void debug(Position pos) { - System.out.println(pos + ", " + resourceMap.get(pos)); - if (tree.containsKey(pos)) { - for (Position nextPos : tree.get(pos)) { - debug(nextPos); - } - } - } - -} - diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 634454c..a9b6dbc 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,6 @@ import java.util.List; import inference.ProofSystem; -import inference.equivalence.SemanticEquivalenceProofSystem; -import inference.equivalence.SemanticEquivalenceRelation; import inference.rewrite.Position; import inference.rewrite.ResourceTree; import inference.rewrite.RewriteInferenceSystem; diff --git a/src/main/java/inference/rewrite/Position.java b/src/main/java/inference/rewrite/Position.java new file mode 100644 index 0000000..6fb1315 --- /dev/null +++ b/src/main/java/inference/rewrite/Position.java @@ -0,0 +1,43 @@ +package inference.rewrite; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import lombok.Getter; + +public class Position { + + @Getter + private List paths; + + public Position(List paths) { + this.paths = Collections.unmodifiableList(paths); + } + + public Position addPath(int index) { + List nextPaths = new ArrayList<>(paths); + nextPaths.add(index); + return new Position(Collections.unmodifiableList(nextPaths)); + } + + @Override + public boolean equals(Object another) { + if (! (another instanceof Position)) { + return false; + } + Position position = (Position) another; + return paths.equals(position.getPaths()); + } + + @Override + public int hashCode() { + return this.paths.hashCode(); + } + + @Override + public String toString() { + return paths.toString(); + } + +} diff --git a/src/main/java/inference/rewrite/ResourceTree.java b/src/main/java/inference/rewrite/ResourceTree.java new file mode 100644 index 0000000..8ecdd14 --- /dev/null +++ b/src/main/java/inference/rewrite/ResourceTree.java @@ -0,0 +1,65 @@ +package inference.rewrite; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import models.terms.DependencyTerm; +import models.terms.EvaluatableTerm; +import models.terms.Resource; + +public class ResourceTree { + + private Resource root; + private Map> tree; + private Map resourceMap; + + public ResourceTree(EvaluatableTerm term) { + tree = new HashMap<>(); + resourceMap = new HashMap<>(); + constructResourceTree(term, new Position(List.of(0))); + } + + private Position constructResourceTree(EvaluatableTerm term, Position top) { + if (term instanceof Resource resource) { + resourceMap.put(top, resource); + return top; + } else if (term instanceof DependencyTerm depTerm) { + EvaluatableTerm dependingTerm = depTerm.getDependingTerm(); + List dependedResources = depTerm.getDependedResources(); + List argumentTerms = depTerm.getArgumentTerms(); + Position nextPosition = constructResourceTree(dependingTerm, top); + Position resultPosition = nextPosition; + tree.put(nextPosition, new ArrayList<>()); + for (int i = 0; i < dependedResources.size(); i++) { + Position nextPos = nextPosition.addPath(i); + tree.get(nextPosition).add(nextPos); + resultPosition = constructResourceTree(dependedResources.get(i), nextPos); + Position nextNextPos = resultPosition.addPath(0); + tree.put(resultPosition, new ArrayList<>()); + tree.get(resultPosition).add(nextNextPos); + resultPosition = constructResourceTree(argumentTerms.get(i), nextNextPos); + } + return resultPosition; + } else { + return null; + } + } + + @Override + public String toString() { + return tree.toString(); + } + + public void debug(Position pos) { + System.out.println(pos + ", " + resourceMap.get(pos)); + if (tree.containsKey(pos)) { + for (Position nextPos : tree.get(pos)) { + debug(nextPos); + } + } + } + +} + diff --git a/src/main/java/inference/rewrite/RewriteInferenceSystem.java b/src/main/java/inference/rewrite/RewriteInferenceSystem.java index 15ef228..f9ea440 100644 --- a/src/main/java/inference/rewrite/RewriteInferenceSystem.java +++ b/src/main/java/inference/rewrite/RewriteInferenceSystem.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; +import inference.rewrite.ResourceTree; import models.formulas.EquationFormula; import models.formulas.Formula; import models.formulas.Then;