Newer
Older
ResourceDependencyLogic / src / tests / inferencerule / InferenceRuleTest.java
package tests.inferencerule;

import static org.junit.jupiter.api.Assertions.*;
import static tests.Utils.*;

import java.util.List;

import org.junit.jupiter.api.Test;

import inference.InferenceRule;
import models.algebra.Variable;
import models.formulas.DependencyFormula;
import models.formulas.EquationFormula;
import models.formulas.meta.MetaDependencyFormula;
import models.formulas.meta.MetaEquationFormula;
import models.terms.Dependency;
import models.terms.DependencyTerm;
import models.terms.Resource;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;

public class InferenceRuleTest {

	@Test
	void InferenceRuleTerst1() {
		MetaEvaluatableTermVariable te = new MetaEvaluatableTermVariable(new  Variable("te"));
		MetaResource v = new MetaResource(new Variable("v"));
		MetaResource w = new MetaResource(new Variable("w"));
		MetaRDLTerm metaD1 = new MetaRDLTerm(te, v);
		MetaRDLTerm metaD2 = new MetaRDLTerm(v, w);
		MetaRDLTerm metaD3 = new MetaRDLTerm(te, w);
		MetaDependencyFormula metaDf1 = new MetaDependencyFormula(metaD1);
		MetaDependencyFormula metaDf2 = new MetaDependencyFormula(metaD2);
		MetaDependencyFormula metaDf3 = new MetaDependencyFormula(metaD3);
		InferenceRule goseShazo = new InferenceRule(List.of(metaDf1, metaDf2), metaDf3);
		
		Resource a = new Resource("a", INT, 0);
		Resource b = new Resource("b", INT, 0);
		Resource c = new Resource("c", INT, 0);
		Dependency d1 = new Dependency(a, b);
		Dependency d2 = new Dependency(b, c);
		Dependency d3 = new Dependency(a, c);
		DependencyFormula df1 = new DependencyFormula(d1); // a : b
		DependencyFormula df2 = new DependencyFormula(d2); // b : c
		DependencyFormula df3 = new DependencyFormula(d3); // a : c
		assertTrue(goseShazo.check(List.of(df1, df2), df3));
		
	}
	
	@Test
	void InferencuRuleTest2() {
		MetaEvaluatableTermVariable te = new MetaEvaluatableTermVariable(new Variable("te"));
		MetaEvaluatableTermVariable ue = new MetaEvaluatableTermVariable(new Variable("ue"));
		MetaEvaluatableTermVariable se = new MetaEvaluatableTermVariable(new Variable("se"));
		MetaResource v = new MetaResource(new Variable("v"));
		MetaEquationFormula assump1 = new MetaEquationFormula(te, ue);
		MetaEquationFormula concl1 = new MetaEquationFormula(new MetaRDLTerm(se, v, te), new MetaRDLTerm(se, v, ue));
		/*
		 *                 te = ue
		 *  ----------------------------------------
		 *   [se : v -> te] = [se : v -> ue]
		 */
		InferenceRule rightReplacement = new InferenceRule(List.of(assump1), concl1);

		Resource a = new Resource("a", INT, 0);
		Resource c = new Resource("c", INT, 0);
		Resource d = new Resource("d", INT, 0);
		Resource x = new Resource("x", INT, 0);
		Resource y = new Resource("y", INT, 0);
		Resource z = new Resource("z", INT, 0);
		DependencyTerm xyz = new DependencyTerm(x, y, z);
		EquationFormula assump2 = new EquationFormula(a, xyz); // a = [x : y -> z]
		EquationFormula concl2 = new EquationFormula(new DependencyTerm(c, d, a), new DependencyTerm(c, d, xyz)); // [c : d -> a] = [c : d -> [x : y -> z]]
		
		assertTrue(rightReplacement.check(List.of(assump2), concl2));
	}
	
}