Newer
Older
RDLProofSystem / src / main / java / Main.java
@Sakoda2269 Sakoda2269 on 24 Jul 12 KB MetaTermも複数引数に対応
import java.util.List;

import inference.rewrite.Position;
import inference.rewrite.ResourceTree;
import inference.rewrite.RewriteInferenceSystem;
import lombok.SneakyThrows;
import models.algebra.Expression;
import models.algebra.Type;
import models.dataConstraintModel.DataConstraintModel;
import models.dataFlowModel.DataTransferModel;
import models.formulas.EquationFormula;
import models.formulas.Then;
import models.terms.DependencyTerm;
import models.terms.PrimedTerm;
import models.terms.Resource;
import parser.Parser;
import parser.Parser.TokenStream;

public class Main {

	static TokenStream stream = new Parser.TokenStream();
	static Parser parser = new Parser(stream);
	static DataTransferModel model = new DataTransferModel();
	
	static Type INT = DataConstraintModel.typeInt;

	public static void main(String[] args) {
//		sandbox4();
//		System.out.println("=================================================================");
//		System.out.println("=================================================================");
//		System.out.println("=================================================================");
//		sandbox5();
		sandbox9();
	}
	
	static void sandbox1() {
		Resource A = new Resource("A",  INT, 1);
		Resource B = new Resource("B",  INT, 1);
		Resource C = new Resource("C",  INT, 1);
		Resource D = new Resource("D",  INT, 1);
		Resource E = new Resource("E",  INT, 1);
		Resource F = new Resource("F",  INT, 1);
		Resource G = new Resource("G",  INT, 1);
		DependencyTerm t1 = new DependencyTerm(A, B, C, D, E);
		DependencyTerm t2 = new DependencyTerm(t1, F, G);
		System.out.println(t2);
		ResourceTree rt = new ResourceTree(t2);
		System.out.println(rt);
		rt.debug(new Position(List.of(0)));
	}
	
	static void sandbox2() {
		Resource A = new Resource("A",  INT, 1);
		Resource B = new Resource("B",  INT, 1);
		Resource C = new Resource("C",  INT, 1);
		Resource D = new Resource("D",  INT, 1);
		Resource E = new Resource("E",  INT, 1);
		Resource F = new Resource("F",  INT, 1);
		Resource G = new Resource("G",  INT, 1);
		Resource H = new Resource("H",  INT, 1);
		Resource I = new Resource("I",  INT, 1);
		Resource J = new Resource("J",  INT, 1);
		Resource K = new Resource("K",  INT, 1);
		Resource L = new Resource("L",  INT, 1);
		Resource M = new Resource("M",  INT, 1);
		Resource N = new Resource("N",  INT, 1);
		Resource O = new Resource("O",  INT, 1);
		Resource P = new Resource("P",  INT, 1);
		Resource Q = new Resource("Q",  INT, 1);
		
		DependencyTerm t1 = new DependencyTerm(A, B, C, D, E);
		DependencyTerm t2 = new DependencyTerm(G, H, I, J, K);
		DependencyTerm t3 = new DependencyTerm(M, N, O, P, Q);
		DependencyTerm t4 = new DependencyTerm(t1, F, t2, L, t3);
		System.out.println(t4);
		ResourceTree rt = new ResourceTree(t4);
		System.out.println(rt);
		rt.debug(new Position());
		rt.debugAllPath();
		
	}
	
	static void sandbox3() {
		Resource A = new Resource("A",  INT, 1);
		Resource B = new Resource("B",  INT, 1);
		Resource C = new Resource("C",  INT, 1);
		Resource D = new Resource("D",  INT, 1);
		Resource x = new Resource("x",  INT, 0);
		Resource y = new Resource("y",  INT, 1);
		DependencyTerm t1 = new DependencyTerm(A, B, C);
		DependencyTerm t2 = new DependencyTerm(B, C, D);
		EquationFormula f1 = new EquationFormula(t1, x);
		EquationFormula f2 = new EquationFormula(y, t2);
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(f1, f2), null);
		ris.inference();
		
	}
	
	static void sandbox4() {
		Resource uadd = new Resource("uadd", INT, 1);
		Resource add = new Resource("add", INT, 1);
		Resource cid = new Resource("cid", INT, 1);
		Resource org = new Resource("org", INT, 1);
		Resource uid = new Resource("uid", INT, 1);
		Resource x = new Resource("x", INT, 0);
		Resource y = new Resource("y", INT, 0);
		DependencyTerm t1 = new DependencyTerm(add, cid, org);
		DependencyTerm t2 = new DependencyTerm(org, uid, x);
		DependencyTerm t3 = new DependencyTerm(uadd, uid, x);
		DependencyTerm t4 = new DependencyTerm(add, cid, y);
		EquationFormula f1 = new EquationFormula(uadd, t1);
		EquationFormula f2 = new EquationFormula(t2, y);
		EquationFormula f3 = new EquationFormula(t3, t4);
		
		
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(f1, f2), f3);
		ris.debug();
		ris.inference();
		
	}
	
	static void sandbox5() {
		Resource uadd = new Resource("uadd", INT, 1);
		Resource add = new Resource("add", INT, 1);
		Resource cid = new Resource("cid", INT, 1);
		Resource org = new Resource("org", INT, 1);
		Resource uid = new Resource("uid", INT, 1);
		Resource x = new Resource("x", INT, 0);
		Resource y = new Resource("y", INT, 0);
		Resource z = new Resource("z", INT, 0);
		DependencyTerm t1 = new DependencyTerm(add, cid, org);
		DependencyTerm t2 = new DependencyTerm(add, cid, x);
		DependencyTerm t3 = new DependencyTerm(org, uid, z);
		DependencyTerm t4 = new DependencyTerm(uadd, uid, z);
		
		EquationFormula f1 = new EquationFormula(uadd, t1);
		EquationFormula f2 = new EquationFormula(t2, y);
		EquationFormula f3 = new EquationFormula(t3, x);
		EquationFormula f4 = new EquationFormula(t4, y);
		Then f5 = new Then(f3, f4);
		
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(f1, f2), f5);
		ris.debug();
		ris.inference();
		
	}
	
	static void sandbox6() {
		Resource add = new Resource("add", INT, 1);
		Resource cid = new Resource("cid", INT, 1);
		Resource org = new Resource("org", INT, 1);
		Resource uid = new Resource("uid", INT, 1);
		Resource x = new Resource("x", INT, 0);
		Resource y = new Resource("y", INT, 0);
		Resource z = new Resource("z", INT, 0);
		
		DependencyTerm t1 = new DependencyTerm(add, cid, x);
		DependencyTerm t2 = new DependencyTerm(cid, uid, z);
		DependencyTerm t3 = new DependencyTerm(add, cid, t2);
		EquationFormula f1 = new EquationFormula(t1, y);
		EquationFormula f2 = new EquationFormula(t2, x);
		EquationFormula f3 = new EquationFormula(t3, y);
		Then f4 = new Then(f2, f3);
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(f1), f4);
		ris.inference();
		
	}
	
	
	static void sandbox7() {
		Resource A = new Resource("A",  INT, 1);
		Resource B = new Resource("B",  INT, 1);
		Resource C = new Resource("C",  INT, 1);
		Resource D = new Resource("D",  INT, 1);
		Resource E = new Resource("E",  INT, 1);
		Resource F = new Resource("F",  INT, 1);
		Resource G = new Resource("G",  INT, 1);
		Resource H = new Resource("H",  INT, 1);
		Resource I = new Resource("I",  INT, 1);
		Resource J = new Resource("J",  INT, 1);
		Resource K = new Resource("K",  INT, 1);
		Resource L = new Resource("L",  INT, 1);
		Resource M = new Resource("M",  INT, 1);
		Resource N = new Resource("N",  INT, 1);
		Resource O = new Resource("O",  INT, 1);
		
		DependencyTerm t1 = new DependencyTerm(A, B, C);
		DependencyTerm t2 = new DependencyTerm(I, J, K);
		DependencyTerm t3 = new DependencyTerm(M, N, O);
		DependencyTerm t4 = new DependencyTerm(E, F, G, H, t2);
		DependencyTerm t5 = new DependencyTerm(t1, D, t4, L, t3);
		
		ResourceTree rt = new ResourceTree(t5);
//		System.out.println(rt);
		rt.debug(new Position(List.of(0)));
	}
	
	static void sandbox8() {
		Resource A = new Resource("A", INT, 1);
		Resource B = new Resource("B", INT, 1);
		Resource C = new Resource("C", INT, 1);
		DependencyTerm te = new DependencyTerm(A, B, C);
		EquationFormula eq1 = new EquationFormula(A, te);
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq1), eq1);
		ris.inference();
	}
	
	static void sandbox9() {
		Resource totalAmount = new Resource("totalAmount", INT, 1);
		Resource quantity = new Resource("quantity", INT, 1);
		Resource unitPrice = new Resource("unitPrice", INT, 1);
		Resource productId = new Resource("productID", INT, 1);
		Resource productName = new Resource("productName", INT, 1);
		Resource soledProductId = new Resource("soledProductId", INT, 1);
		PrimedTerm totalAmountP = new PrimedTerm(totalAmount);
		PrimedTerm quantityP = new PrimedTerm(quantity);
		PrimedTerm unitPriceP = new PrimedTerm(unitPrice);
		PrimedTerm productIdP = new PrimedTerm(productId);
		PrimedTerm productNameP = new PrimedTerm(productName);
		PrimedTerm soledProductIdP = new PrimedTerm(soledProductId);
		Resource a = new Resource("a", INT, 0);
		Resource b = new Resource("b", INT, 0);
		Resource c = new Resource("c", INT, 0);
		Resource d = new Resource("d", INT, 0);
		Resource e = new Resource("e", INT, 0);
		Resource salesId = new Resource("salesId", INT, 1);
		PrimedTerm salesIdP = new PrimedTerm(salesId);
		Resource mul = new Resource("mul", INT, 1);
		Resource mul1= new Resource("mul1", INT, 1);
		Resource mul2 = new Resource("mul2", INT, 1);
		
		// reference1
		DependencyTerm te1 = new DependencyTerm(unitPrice, productId, soledProductId);
		DependencyTerm te2 = new DependencyTerm(mul, mul1, quantity, mul2, te1);
		EquationFormula eq1 = new EquationFormula(totalAmount, te2);
		
		//reference2
		DependencyTerm te3 = new DependencyTerm(unitPriceP, productIdP, soledProductIdP);
		DependencyTerm te4 = new DependencyTerm(mul, mul1, quantityP, mul2, te3);
		EquationFormula eq2 = new EquationFormula(totalAmountP, te4);
		
		//input1
		DependencyTerm te5 = new DependencyTerm(soledProductIdP, salesIdP, a);
		EquationFormula eq3 = new EquationFormula(te5, b);
		
		//input2
		DependencyTerm te6 = new DependencyTerm(quantityP, salesIdP, a);
		EquationFormula eq4 = new EquationFormula(te6, c);
		
		//input3, 4, 5
		EquationFormula eq5 = new EquationFormula(productIdP, productId);
		EquationFormula eq6 = new EquationFormula(productNameP, productName);
		EquationFormula eq7 = new EquationFormula(unitPriceP, unitPrice);
		
		// value copy
		DependencyTerm te7 = new DependencyTerm(totalAmountP, salesIdP, a);
		DependencyTerm te8 = new DependencyTerm(unitPriceP, productIdP, b);
		DependencyTerm te9 = new DependencyTerm(mul, mul1, c, mul2, te8);
		EquationFormula eq8 = new EquationFormula(te7, te9);
		
		
		//----------------------change value-------------------
		//input6
		DependencyTerm te10 = new DependencyTerm(unitPriceP, productIdP, d);
		EquationFormula eq9 = new EquationFormula(te10, e);
		
		//input7, 8, 9, 10
		EquationFormula eq10 = new EquationFormula(productNameP, productName);
		EquationFormula eq11 = new EquationFormula(salesIdP, salesId);
		EquationFormula eq12 = new EquationFormula(soledProductIdP, soledProductId);
		EquationFormula eq13 = new EquationFormula(quantityP, quantity);
		
		//value copy
		EquationFormula eq14 = new EquationFormula(totalAmountP, totalAmount);
		
		//value copy conclusion
		DependencyTerm te11 = new DependencyTerm(totalAmountP, salesIdP, a);
		DependencyTerm te12 = new DependencyTerm(totalAmount, salesId, a);
		EquationFormula eq15 = new EquationFormula(te11, te12);
//		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12, eq13, eq14), eq15);
//		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(), List.of(), List.of(eq3, eq4, eq5, eq6, eq7, eq8, eq9, eq10, eq11, eq12, eq13, eq14), eq15);
		
		//value copy new sales
//		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq8), eq15);
		
		//value copy change value
		RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq9, eq10, eq11, eq12, eq13, eq14), eq15);
		ris.debug();
		ris.inference();
//		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		
		//reference conclusion
		DependencyTerm te13 = new DependencyTerm(soledProductId, salesId, a);
		EquationFormula eq16 = new EquationFormula(d, te13);
		Then th1 = new Then(eq16, eq15);
		
		
//		RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq3, eq4, eq5, eq6, eq7, eq1, eq9, eq10, eq11, eq12, eq13, eq2), th1);
//		RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2), List.of(), List.of(eq3, eq4, eq5, eq6, eq7,eq9, eq10, eq11, eq12, eq13), th1);
		
		//reference new sales
//		RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2, eq3, eq4, eq5, eq6, eq7), th1);
		
		//reference change value
		RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2, eq9, eq10, eq11, eq12, eq13), th1);
		
		ris2.debug();
		ris2.inference();
		
	}
	
	
	
	
	@SneakyThrows
	static Expression parse(String expr) {
		stream.addLine(expr);
		return parser.parseTerm(stream, model);
	}
	
	
}