% This file used for testing the HYPROLOG system
% - used for benchmarking
% 
%
% Copyright (C) Henning Christiansen, October 2005-2008

% ?- hyprolog(benchmarkDB).


% To test, try one of:
% ?- q(w(e100,f100)).
% ?- q10(w(e100,f100)).
% ?- q100(w(e100,f100)).
% ?- q1000(w(e100,f100)).
% ?- q10000(w(e100,f100)).

show_internal_rules.

abducibles abd_p/4, abd_q/4, abd_r/3.

%% For maximum efficiency:

allow_duplicate_abducibles.
no_explicit_negation.


w(E,F):- pp(A,B,C,D), qq(C,D,E,F), rr(A,E,F).

wr(E,F):- rr(A,E,F), qq(C,D,E,F),  pp(A,B,C,D).


pp(A,B,C,D):- p(A,B,C,D).
pp(A,B,C,D):- abd_p(A,B,C,D).

qq(C,D,E,F):- q(C,D,E,F).
qq(C,D,E,F):- abd_q(C,D,E,F).

rr(A,E,F):- r(A,E,F).
rr(A,E,F):- abd_r(A,E,F).

abd_p(A,B,_,_) ==> \+ p(A,B,_,_).  % A,B key
abd_q(C,D,_,_) ==> \+ q(C,D,_,_).  % C,D key
abd_r(A,E,_) ==>   \+ r(A,E,_).    % A,E key

q(Q):-
   statistics(runtime,_),
   q_notime(Q),
   statistics(runtime,[_,T]),
   write('Used : '),write(T), write(ms).

q_notime(Q):- \+ \+ once(Q).

q10(Q):-
   statistics(runtime,_),
   q_notime10(Q),
   statistics(runtime,[_,T]),
   write('Used : '),write(T), write(ms).

q_notime10(Q):-
  q_notime(Q),q_notime(Q),q_notime(Q),q_notime(Q),q_notime(Q),
  q_notime(Q),q_notime(Q),q_notime(Q),q_notime(Q),q_notime(Q).

q100(Q):-
   statistics(runtime,_),
   q_notime100(Q),
   statistics(runtime,[_,T]),
   write('Used : '),write(T), write(ms).

q_notime100(Q):-
  q_notime10(Q), q_notime10(Q), q_notime10(Q), q_notime10(Q), q_notime10(Q),
  q_notime10(Q), q_notime10(Q), q_notime10(Q), q_notime10(Q), q_notime10(Q).

q1000(Q):-
   statistics(runtime,_),
   q_notime1000(Q),
   statistics(runtime,[_,T]),
   write('Used : '),write(T), write(ms).

q_notime1000(Q):-
  q_notime100(Q), q_notime100(Q), q_notime100(Q), q_notime100(Q), q_notime100(Q),
  q_notime100(Q), q_notime100(Q), q_notime100(Q), q_notime100(Q), q_notime100(Q).


q10000(Q):-
   statistics(runtime,_),
   q_notime10000(Q),
   statistics(runtime,[_,T]),
   write('Used : '),write(T), write(ms).

q_notime10000(Q):-
  q_notime1000(Q), q_notime1000(Q), q_notime1000(Q), q_notime1000(Q), q_notime1000(Q),
  q_notime1000(Q), q_notime1000(Q), q_notime1000(Q), q_notime1000(Q), q_notime1000(Q).

p(a1,b1,c1,d1).
p(a2,b2,c2,d2).
p(a3,b3,c3,d3).
p(a4,b4,c4,d4).
p(a5,b5,c5,d5).
p(a6,b6,c6,d6).
p(a7,b7,c7,d7).
p(a8,b8,c8,d8).
p(a9,b9,c9,d9).
p(a10,b10,c10,d10).
p(a11,b11,c11,d11).
p(a12,b12,c12,d12).
p(a13,b13,c13,d13).
p(a14,b14,c14,d14).
p(a15,b15,c15,d15).
p(a16,b16,c16,d16).
p(a17,b17,c17,d17).
p(a18,b18,c18,d18).
p(a19,b19,c19,d19).
p(a20,b20,c20,d20).
p(a21,b21,c21,d21).
p(a22,b22,c22,d22).
p(a23,b23,c23,d23).
p(a24,b24,c24,d24).
p(a25,b25,c25,d25).
p(a26,b26,c26,d26).
p(a27,b27,c27,d27).
p(a28,b28,c28,d28).
p(a29,b29,c29,d29).
p(a30,b30,c30,d30).
p(a31,b31,c31,d31).
p(a32,b32,c32,d32).
p(a33,b33,c33,d33).
p(a34,b34,c34,d34).
p(a35,b35,c35,d35).
p(a36,b36,c36,d36).
p(a37,b37,c37,d37).
p(a38,b38,c38,d38).
p(a39,b39,c39,d39).
p(a40,b40,c40,d40).
p(a41,b41,c41,d41).
p(a42,b42,c42,d42).
p(a43,b43,c43,d43).
p(a44,b44,c44,d44).
p(a45,b45,c45,d45).
p(a46,b46,c46,d46).
p(a47,b47,c47,d47).
p(a48,b48,c48,d48).
p(a49,b49,c49,d49).
p(a50,b50,c50,d50).
p(a51,b51,c51,d51).
p(a52,b52,c52,d52).
p(a53,b53,c53,d53).
p(a54,b54,c54,d54).
p(a55,b55,c55,d55).
p(a56,b56,c56,d56).
p(a57,b57,c57,d57).
p(a58,b58,c58,d58).
p(a59,b59,c59,d59).
p(a60,b60,c60,d60).
p(a61,b61,c61,d61).
p(a62,b62,c62,d62).
p(a63,b63,c63,d63).
p(a64,b64,c64,d64).
p(a65,b65,c65,d65).
p(a66,b66,c66,d66).
p(a67,b67,c67,d67).
p(a68,b68,c68,d68).
p(a69,b69,c69,d69).
p(a70,b70,c70,d70).
p(a71,b71,c71,d71).
p(a72,b72,c72,d72).
p(a73,b73,c73,d73).
p(a74,b74,c74,d74).
p(a75,b75,c75,d75).
p(a76,b76,c76,d76).
p(a77,b77,c77,d77).
p(a78,b78,c78,d78).
p(a79,b79,c79,d79).
p(a80,b80,c80,d80).
p(a81,b81,c81,d81).
p(a82,b82,c82,d82).
p(a83,b83,c83,d83).
p(a84,b84,c84,d84).
p(a85,b85,c85,d85).
p(a86,b86,c86,d86).
p(a87,b87,c87,d87).
p(a88,b88,c88,d88).
p(a89,b89,c89,d89).
p(a90,b90,c90,d90).
p(a91,b91,c91,d91).
p(a92,b92,c92,d92).
p(a93,b93,c93,d93).
p(a94,b94,c94,d94).
p(a95,b95,c95,d95).
p(a96,b96,c96,d96).
p(a97,b97,c97,d97).
p(a98,b98,c98,d98).
p(a99,b99,c99,d99).
p(a100,b100,c100,d100).

q(c1,d1,e1,f1).
q(c2,d2,e2,f2).
q(c3,d3,e3,f3).
q(c4,d4,e4,f4).
q(c5,d5,e5,f5).
q(c6,d6,e6,f6).
q(c7,d7,e7,f7).
q(c8,d8,e8,f8).
q(c9,d9,e9,f9).
q(c10,d10,e10,f10).

q(c11,d11,e11,f11).
q(c12,d12,e12,f12).
q(c13,d13,e13,f13).
q(c14,d14,e14,f14).
q(c15,d15,e15,f15).
q(c16,d16,e16,f16).
q(c17,d17,e17,f17).
q(c18,d18,e18,f18).
q(c19,d19,e19,f19).
q(c20,d20,e20,f20).
q(c21,d21,e21,f21).
q(c22,d22,e22,f22).
q(c23,d23,e23,f23).
q(c24,d24,e24,f24).
q(c25,d25,e25,f25).
q(c26,d26,e26,f26).
q(c27,d27,e27,f27).
q(c28,d28,e28,f28).
q(c29,d29,e29,f29).
q(c30,d30,e30,f30).
q(c31,d31,e31,f31).
q(c32,d32,e32,f32).
q(c33,d33,e33,f33).
q(c34,d34,e34,f34).
q(c35,d35,e35,f35).
q(c36,d36,e36,f36).
q(c37,d37,e37,f37).
q(c38,d38,e38,f38).
q(c39,d39,e39,f39).
q(c40,d40,e40,f40).
q(c41,d41,e41,f41).
q(c42,d42,e42,f42).
q(c43,d43,e43,f43).
q(c44,d44,e44,f44).
q(c45,d45,e45,f45).
q(c46,d46,e46,f46).
q(c47,d47,e47,f47).
q(c48,d48,e48,f48).
q(c49,d49,e49,f49).
q(c50,d50,e50,f50).
q(c51,d51,e51,f51).
q(c52,d52,e52,f52).
q(c53,d53,e53,f53).
q(c54,d54,e54,f54).
q(c55,d55,e55,f55).
q(c56,d56,e56,f56).
q(c57,d57,e57,f57).
q(c58,d58,e58,f58).
q(c59,d59,e59,f59).
q(c60,d60,e60,f60).
q(c61,d61,e61,f61).
q(c62,d62,e62,f62).
q(c63,d63,e63,f63).
q(c64,d64,e64,f64).
q(c65,d65,e65,f65).
q(c66,d66,e66,f66).
q(c67,d67,e67,f67).
q(c68,d68,e68,f68).
q(c69,d69,e69,f69).
q(c70,d70,e70,f70).
q(c71,d71,e71,f71).
q(c72,d72,e72,f72).
q(c73,d73,e73,f73).
q(c74,d74,e74,f74).
q(c75,d75,e75,f75).
q(c76,d76,e76,f76).
q(c77,d77,e77,f77).
q(c78,d78,e78,f78).
q(c79,d79,e79,f79).
q(c80,d80,e80,f80).
q(c81,d81,e81,f81).
q(c82,d82,e82,f82).
q(c83,d83,e83,f83).
q(c84,d84,e84,f84).
q(c85,d85,e85,f85).
q(c86,d86,e86,f86).
q(c87,d87,e87,f87).
q(c88,d88,e88,f88).
q(c89,d89,e89,f89).
q(c90,d90,e90,f90).
q(c91,d91,e91,f91).
q(c92,d92,e92,f92).
q(c93,d93,e93,f93).
q(c94,d94,e94,f94).
q(c95,d95,e95,f95).
q(c96,d96,e96,f96).
q(c97,d97,e97,f97).
q(c98,d98,e98,f98).
q(c99,d99,e99,f99).
q(c100,d100,e100,f100).

r(a1,e1,f1).
r(a2,e2,f2).
r(a3,e3,f3).
r(a4,e4,f4).
r(a5,e5,f5).
r(a6,e6,f6).
r(a7,e7,f7).
r(a8,e8,f8).
r(a9,e9,f9).
r(a10,e10,f10).
r(a11,e11,f11).
r(a12,e12,f12).
r(a13,e13,f13).
r(a14,e14,f14).
r(a15,e15,f15).
r(a16,e16,f16).
r(a17,e17,f17).
r(a18,e18,f18).
r(a19,e19,f19).
r(a20,e20,f20).
r(a21,e21,f21).
r(a22,e22,f22).
r(a23,e23,f23).
r(a24,e24,f24).
r(a25,e25,f25).
r(a26,e26,f26).
r(a27,e27,f27).
r(a28,e28,f28).
r(a29,e29,f29).
r(a30,e30,f30).
r(a31,e31,f31).
r(a32,e32,f32).
r(a33,e33,f33).
r(a34,e34,f34).
r(a35,e35,f35).
r(a36,e36,f36).
r(a37,e37,f37).
r(a38,e38,f38).
r(a39,e39,f39).
r(a40,e40,f40).
r(a41,e41,f41).
r(a42,e42,f42).
r(a43,e43,f43).
r(a44,e44,f44).
r(a45,e45,f45).
r(a46,e46,f46).
r(a47,e47,f47).
r(a48,e48,f48).
r(a49,e49,f49).
r(a50,e50,f50).
r(a51,e51,f51).
r(a52,e52,f52).
r(a53,e53,f53).
r(a54,e54,f54).
r(a55,e55,f55).
r(a56,e56,f56).
r(a57,e57,f57).
r(a58,e58,f58).
r(a59,e59,f59).
r(a60,e60,f60).
r(a61,e61,f61).
r(a62,e62,f62).
r(a63,e63,f63).
r(a64,e64,f64).
r(a65,e65,f65).
r(a66,e66,f66).
r(a67,e67,f67).
r(a68,e68,f68).
r(a69,e69,f69).
r(a70,e70,f70).
r(a71,e71,f71).
r(a72,e72,f72).
r(a73,e73,f73).
r(a74,e74,f74).
r(a75,e75,f75).
r(a76,e76,f76).
r(a77,e77,f77).
r(a78,e78,f78).
r(a79,e79,f79).
r(a80,e80,f80).
r(a81,e81,f81).
r(a82,e82,f82).
r(a83,e83,f83).
r(a84,e84,f84).
r(a85,e85,f85).
r(a86,e86,f86).
r(a87,e87,f87).
r(a88,e88,f88).
r(a89,e89,f89).
r(a90,e90,f90).
r(a91,e91,f91).
r(a92,e92,f92).
r(a93,e93,f93).
r(a94,e94,f94).
r(a95,e95,f95).
r(a96,e96,f96).
r(a97,e97,f97).
r(a98,e98,f98).
r(a99,e99,f99).
%r(a100,e100,f100).