Newer
Older
RDLProofSystem / src / main / java / Main.java
import java.util.HashMap;
import java.util.Map;

import com.google.common.collect.TreeMultimap;

import constants.Types;
import models.algebra.Constant;
import models.algebra.Expression;
import models.algebra.Type;
import models.algebra.Variable;
import models.formulas.meta.MetaEquationFormula;
import models.terms.Dependency;
import models.terms.Resource;
import models.terms.meta.MetaDynamicDependency;
import models.terms.meta.MetaDynamicDependencyTerm;
import models.terms.meta.MetaEvaluatableTermVariable;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResource;
import models.terms.meta.MetaTermGenerator;
import utils.ExpressionUtils;

public class Main {

	static Type INT = Types.typeInt;

	public static void main(String[] args) {
		//
		sandbox();
		sandbox2();
		sandbox3();
		sandbox4();
		sandbox5();
		sandbox6();
	}
	
	
	static void sandbox() {
		Expression tmp = utils.ExpressionUtils.parse("x");
		System.out.println(tmp);
		tmp = utils.ExpressionUtils.parse("(x + 5) * 3");
		Map<Variable, Integer> nums = new HashMap<>();
		int a = utils.ExpressionUtils.getCoefficientAndConstantsFromExpression(tmp, nums, 1);
		System.out.println(tmp);
		System.out.println(a);
		System.out.println(nums);
		
		int b = utils.ExpressionUtils.getConstantValue(new  Constant("3"));
		System.out.println(b);
	}
	
	static void sandbox2() {
		TreeMultimap<Integer, Integer> tmp = TreeMultimap.create();
		tmp.put(1, 1);
		tmp.put(1, 2);
		tmp.put(1, 1);
		tmp.put(1, 3);
		System.out.println(tmp.get(1));
	}
	
	static void sandbox3() {
		MetaDynamicDependency d1 = new MetaDynamicDependency((ci, cd, mi, md, context) -> new MetaResource(new Variable("x" + ci)));
		MetaDynamicDependency d2 = new MetaDynamicDependency(new MetaTermGenerator() {
			@Override
			public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
				if (curIndex == 0 && curDepth < maxDepth) return new MetaDynamicDependency(this);
				else return new MetaResource(new Variable("x" + curIndex + "_" + curDepth));
			} 
		});
		d2.generate(0, 2, 2, null);
		System.out.println(d2.generate(0, 2, 2, null));
	}
	
	static void sandbox4() {
		MetaDynamicDependencyTerm t1 = new MetaDynamicDependencyTerm((ci, cd, mi, md, contex) -> new MetaResource(new Variable("x" + ci)));
		MetaDynamicDependencyTerm t2 = new MetaDynamicDependencyTerm(new MetaTermGenerator() {
			@Override
			public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
				if (curDepth == 0 && curIndex != 0 && curIndex % 2 == 0) {
					return new MetaDynamicDependencyTerm(this);
				}
				return new MetaResource(new Variable("x" + curDepth + "_" + curIndex));
			}
		});
		System.out.println(t1.generate(0, 5, 0, null));
		System.out.println(t2.generate(0, 3, 2, null));
	}
	
	static void sandbox5() {
		MetaDynamicDependency md1 = new MetaDynamicDependency(new MetaTermGenerator() {
			@Override
			public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
				int maxOrder = (Integer) context.get("maxOrder");
				if (curDepth < maxDepth && curIndex == 0) {
					return new MetaDynamicDependency(this);
				}
				if (curIndex == 0) {
					return new MetaEvaluatableTermVariable(new Variable("s"), new Constant("" + maxOrder));
				}
				return new MetaEvaluatableTermVariable(new Variable("v" + curDepth), new Constant("" + (maxOrder - (maxDepth - curDepth))));
			}});
		System.out.println(md1.generate(2, 3, Map.of("maxOrder", 4)).toStringWithOrder());
		Dependency d1 = new Dependency(new Resource("s", 4), new Resource("t", 4));
		Dependency d2 = new Dependency(d1, new Resource("v3", 3));
		Dependency d3 = new Dependency(d2, new Resource("v2", 2));
		Dependency d4 = new Dependency(d3, new Resource("v1", 1));
		System.out.println(d3);
	}
	
	
	static void sandbox6() {
		MetaDynamicDependency d1 =
				new MetaDynamicDependency(
						new MetaTermGenerator() {
							@Override
							public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
								int i = maxDepth - curDepth;
								context.put("" + curDepth, curIndex);
								if (curDepth == maxDepth - 1 && curIndex == 0) {
									return new MetaDynamicDependency(
											new MetaTermGenerator() {
												@Override
												public MetaRDLTerm generate(int curIndex2, int curDepth2, int maxIndex2, int maxDepth2, Map<String, Object> context2) {
													curIndex2 -= 2;
													context2.put("" + curDepth2, curIndex2 + 1);
													context2.put("depth", curDepth2);
													return new MetaEvaluatableTermVariable(new Variable("v" + curDepth2 + "_" + curIndex2), new Variable("n"));
												}
											},
											new MetaEvaluatableTermVariable(new Variable("s"), new Variable("n")),
											new MetaEvaluatableTermVariable(new Variable("t"), new Variable("n"))
									);
								} else if (curIndex == 0) {
									return new MetaDynamicDependency(this);
								}
								curIndex -= 1;
								return new MetaEvaluatableTermVariable(new Variable("v" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
							}
						}
				);
		Map<String, Object> context = new HashMap<>();
		var tmp = d1.generate(3, 5, context);
		System.out.println(tmp);
		System.out.println(context);
	}
	
	void sandbox7() {
		var d =new MetaEquationFormula(
				new MetaDynamicDependencyTerm(
						new MetaTermGenerator() {
							@Override
							public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
								int i = maxDepth - curDepth;
								maxIndex = (Integer) context.get("" + curDepth);
								if (curDepth == maxDepth - 1 && curIndex == 0) {
									return new MetaDynamicDependency(
											new MetaTermGenerator() {
												@Override
												public MetaRDLTerm generate(int curIndex2, int curDepth2, int maxIndex2, int maxDepth2, Map<String, Object> context2) {
													curIndex2 -= 3;
													maxIndex2 = (Integer) context.get("" + curDepth2);
													if (curIndex2 >= maxIndex2 * 2) {
														return null;
													}
													if (curIndex2 % 2 == 0) {
														return new MetaEvaluatableTermVariable(new Variable("v" + curDepth2 + "_" + curIndex2), new Variable("n"));
													} 
													return new MetaEvaluatableTermVariable(new Variable("x" + curDepth2 + "_" + curIndex2), new Variable("n"));
												}
											},
											new MetaEvaluatableTermVariable(new Variable("s"), new Variable("n")),
											new MetaEvaluatableTermVariable(new Variable("t"), new Variable("n")),
											new MetaEvaluatableTermVariable(new Variable("u"), new Variable("m"))
									);
								}
								if (curIndex == 0) {
									return new MetaDynamicDependency(this);
								}
								curIndex -= 1;
								if (curIndex >= maxIndex * 2) {
									return null;
								}
								if (curIndex % 2 == 0) {
									return new MetaEvaluatableTermVariable(new Variable("v" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
								}
								return new MetaEvaluatableTermVariable(new Variable("x" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
							}
						}
				),
				new MetaDynamicDependencyTerm(
						new MetaTermGenerator() {
							@Override
							public MetaRDLTerm generate(int curIndex, int curDepth, int maxIndex, int maxDepth, Map<String, Object> context) {
								int m = (Integer) context.get("m");
								int n = (Integer) context.get("n");
								int i = maxDepth - curDepth;
								maxIndex = (Integer) context.get("" + curDepth);
								if (curDepth == maxDepth - 1 && curIndex == 0) {
									return new MetaDynamicDependency(
											new MetaTermGenerator() {
												@Override
												public MetaRDLTerm generate(int curIndex2, int curDepth2, int maxIndex2, int maxDepth2, Map<String, Object> context2) {
													curIndex2 -= 3;
													maxIndex2 = (Integer) context.get("" + curDepth2);
													if (curIndex2 >= maxIndex2 * 2) {
														return null;
													}
													if (curIndex2 % 2 == 0) {
														return new MetaEvaluatableTermVariable(new Variable("v" + curDepth2 + "_" + curIndex2), new Variable("n"));
													} 
													return new MetaEvaluatableTermVariable(new Variable("x" + curDepth2 + "_" + curIndex2), new Variable("n"));
												}
											},
											new MetaEvaluatableTermVariable(new Variable("s"), new Variable("n")),
											new MetaEvaluatableTermVariable(new Variable("t"), new Variable("n")),
											new MetaEvaluatableTermVariable(new Variable("q"), new Variable("m"))
									);
								}
								if (curIndex == 0) {
									return new MetaDynamicDependency(this);
								}
								curIndex -= 1;
								if (n - i == m) {
									if (curIndex == 0) {
										return new MetaEvaluatableTermVariable(new Variable("q"), new Variable("m"));
									}
									if (curIndex == 1) {
										return new MetaEvaluatableTermVariable(new Variable("u"), new Variable("m"));
									}
									curIndex -= 2;
									if (curIndex >= maxIndex * 2) {
										return null;
									}
									if (curIndex % 2 == 0) {
										return new MetaEvaluatableTermVariable(new Variable("v" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
									}
									return new MetaEvaluatableTermVariable(new Variable("x" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
								}
								if (curIndex >= maxIndex * 2) {
									return null;
								}
								if (curIndex % 2 == 0) {
									return new MetaEvaluatableTermVariable(new Variable("v" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
								}
								return new MetaEvaluatableTermVariable(new Variable("x" + curDepth + "_" + curIndex), ExpressionUtils.parse("n - " + i));
							}
						}
				)
		);
	}
}