Newer
Older
ResourceDependencyLogic / src / inference / equivalence / SemanticEquivalenceProofSystem.java
@Sakoda2269 Sakoda2269 on 20 Dec 2 KB 途中まで
package inference.equivalence;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import models.algebra.Constant;
import models.algebra.Term;
import models.algebra.Variable;
import models.dataConstraintModel.DataConstraintModel;
import models.terms.LinearRightNormalizedType;
import models.terms.RDLTerm;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResourceVariable;

public class SemanticEquivalenceProofSystem {

	private Map<Integer, List<SemanticEquivalenceRelation>> assumptions;
	private SemanticEquivalenceRelation conclusion;
	int maxOrder = -1;
	
	private static MetaSemanticEquivalenceRelation rule1 = new MetaSemanticEquivalenceRelation(
			new MetaRDLTerm(
					new MetaResourceVariable(new Variable("v"), new Term(DataConstraintModel.add, List.of(new Variable("n"), new Constant("1")))),
					new MetaResourceVariable(new Variable("v"), new Term(DataConstraintModel.add, List.of(new Variable("n"), new Constant("1")))),
					new MetaEvaluatableTermVariable(new Variable("t"), new Variable("n"), LinearRightNormalizedType.LINEAR_RIGHT_NORMALIZED)
			),
			new MetaEvaluatableTermVariable(new Variable("t"), new Variable("n"), LinearRightNormalizedType.LINEAR_RIGHT_NORMALIZED),
			new Variable("n")
	);
	
	private static MetaSemanticEquivalenceRelation rule4_1 = new MetaSemanticEquivalenceRelation(
			new MetaEvaluatableTermVariable(new Variable("t"), new Term(DataConstraintModel.add, List.of(new Variable("n"), new Constant("1"))), LinearRightNormalizedType.LINEAR_RIGHT_NORMALIZED),
			new MetaEvaluatableTermVariable(new Variable("t'"), new Term(DataConstraintModel.add, List.of(new Variable("n"), new Constant("1"))), LinearRightNormalizedType.LINEAR_RIGHT_NORMALIZED),
			new Term(DataConstraintModel.add, List.of(new Variable("n"), new Constant("1")))
	);
	
	public SemanticEquivalenceProofSystem(Collection<SemanticEquivalenceRelation> assumptions, SemanticEquivalenceRelation conclusion) {
		for(SemanticEquivalenceRelation assumption : assumptions) {
			maxOrder = Math.max(maxOrder, assumption.getOrder());
			if (! this.assumptions.containsKey(assumption.getOrder())) {
				this.assumptions.put(assumption.getOrder(), new ArrayList<>());
			}
		}
		this.conclusion = conclusion;
	}
	
	public boolean proof() {
		Set<RDLTerm> existTerms = new HashSet<>();
		for(int key : assumptions.keySet()) {
			for(SemanticEquivalenceRelation relation : assumptions.get(key)) {
				existTerms.addAll(relation.getLeftSideHand().getSubTerms(RDLTerm.class).values());
				existTerms.add(relation.getLeftSideHand());
				existTerms.addAll(relation.getRightSideHand().getSubTerms(RDLTerm.class).values());
				existTerms.add(relation.getRightSideHand());
			}
		}
		for (int i = maxOrder; i > 0; i--) {
			
		}
		return false;
	}
	
}