% Elements
member(X) :- atom(X), name(X,[C]), C >= 97, C =< 122.
members([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]).

% Ordering relation
leq(X,Y) :- name(X,[Cx]), name(Y,[Cy]), Cx =< Cy.

% Supremum and infimum
bot(z).
top(a).

% Binary operations
and_godel(X,Y,Z) :- name(X,[Cx]), name(Y,[Cy]), pri_max(Cx,Cy,Cz), name(Z,[Cz]).
or_godel(X,Y,Z) :- name(X,[Cx]), name(Y,[Cy]), pri_min(Cx,Cy,Cz), name(Z,[Cz]).

% Auxiliar operations
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).
