:- dynamic and_prod/3, and_godel/3, and_luka/3, or_prod/3, or_godel/3, or_luka/3, agr_aver/3, pri_prod/3, pri_div/3, pri_sub/3, pri_add/3, pri_min/3, pri_max/3, agr_extremely/2, agr_very/2, agr_moreless/2, agr_roughly/2.

member(X):-number(X), 0=<X,X=<1.
members(X).

leq(X,Y):-X =< Y.

bot(0).
top(1).

and_prod(X,Y,Z) :- pri_prod(X,Y,Z).
and_godel(X,Y,Z) :- pri_min(X,Y,Z).
and_luka(X,Y,Z) :- pri_add(X,Y,U1), pri_sub(U1,1,U2), pri_max(U2,0,Z).

or_prod(X,Y,Z) :- pri_prod(X,Y,U1), pri_add(X,Y,U2), pri_sub(U2,U1,Z).
or_godel(X,Y,Z) :- pri_max(X,Y,Z).
or_luka(X,Y,Z) :- pri_add(X,Y,U1), pri_min(U1,1,Z).

agr_aver(X,Y,Z) :- pri_add(X,Y,U1),pri_prod(U1,0.5,Z).
% agr_aver(X,Y,Z) :- or_godel(X,Y,U01), or_luka(X,Y,U02), pri_add(U01,U02,U1),pri_div(U1,2,Z).

pri_prod(X,Y,Z) :- Z is X * Y.
pri_div(X,Y,Z) :- Z is X / Y.
pri_sub(X,Y,Z) :- Z is X-Y.
pri_add(X,Y,Z) :- Z is X+Y.
pri_min(X,Y,Z) :- (X=<Y,Z=X;X>Y,Z=Y).
pri_max(X,Y,Z) :- (X=<Y,Z=Y;X>Y,Z=X). % max(x,y) 

agr_extremely(X,Y):- Y is X*X*X*X.
agr_very(X,Y) :- Y is X*X.
agr_moreless(X,Y) :- Y is sqrt(X).
agr_roughly(X,Y) :- Y is sqrt(sqrt(X)).