package inference.axioms;
import java.util.Map;
import inference.EquationAxiom;
import models.algebra.Variable;
import models.formulas.meta.MetaDependencyFormula;
import models.formulas.meta.MetaEquationFormula;
import models.terms.meta.MetaDependencyTerm;
import models.terms.meta.MetaDynamicDependency;
import models.terms.meta.MetaDynamicDependencyTerm;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaTermGenerator;
public class MapComposition extends EquationAxiom {
public MapComposition() {
super("Map Composition");
assumptions.add(
new MetaDependencyFormula(
new MetaDynamicDependency(
(ci, cd, mi, md, context) -> ci - 2 == 0 ? new MetaEvaluatableTermVariable(new Variable("u")) : new MetaEvaluatableTermVariable(new Variable("u" + (ci - 2))),
new MetaEvaluatableTermVariable(new Variable("s")),
new MetaEvaluatableTermVariable(new Variable("t"))
)
)
);
assumptions.add(
new MetaDependencyFormula(
new MetaDynamicDependency(
(ci, cd, mi, md, context) -> ci - 1 == 0 ? new MetaEvaluatableTermVariable(new Variable("v")) : new MetaEvaluatableTermVariable(new Variable("v" + (ci - 1))),
new MetaEvaluatableTermVariable(new Variable("t"))
)
)
);
repetitionAssumptions.add(
new MetaEquationFormula(
new MetaDependencyTerm(
new MetaEvaluatableTermVariable(new Variable("v")),
new MetaEvaluatableTermVariable(new Variable("xxx")),
new MetaEvaluatableTermVariable(new Variable("yyy"))
),
new MetaEvaluatableTermVariable(new Variable("x"))
)
);
conclusion = new MetaEquationFormula(
new MetaDynamicDependencyTerm(
new MetaTermGenerator() {
@Override
public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
curIndex -= 1;
return null;
}},
new MetaEvaluatableTermVariable(new Variable("s")),
new MetaEvaluatableTermVariable(new Variable("t"))
),
new MetaDynamicDependencyTerm(
new MetaTermGenerator() {
@Override
public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
return null;
}
},
new MetaEvaluatableTermVariable(new Variable("s"))
)
);
}
}