ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ ;Pc@s/dfdYZdefdYZdefdYZdfdYZdfd YZd fd YZd fd YZdfdYZdfdYZdfdYZ ddl m Z ddl Z ddl Z de jfdYZdefdYZe jeddS(tAAcBs#eZdZdZdZRS(cCstd||S(Ntop(tBOAPP(tselftother((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt__mul__scCstd||S(Ntop2(R(RR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt__add__scCstd||S(Nteq(R(RR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt__eq__ s(t__name__t __module__RRR (((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs  tANAMEcBseZdZdZRS(cCs ||_dS(N(tname(RR ((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt__init__scCs|jS(N(R (R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt__str__s(R R RR(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR s RcBseZdZdZRS(cGs||_||_dS(N(tfuncnametargs(RRR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs cCs6d|jdjg|jD]}t|^qfS(Ns%s(%s)t,(RtjoinRtstr(Rtx((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs(R R RR(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs tAlgebraicStructurecBseZdZdZRS(c Os)||_||_g|_xt|D]\}}t|drU|j|krUnit|ss||jjkri}d|kr|d|dotRcs0||s,|jd||ffStS(Ns not %s in %s(tfailedR.(tenvRR/(texprtf(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyttestfuncss(RR5(tbinoptdRF(tctnames(RDREsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt gentestfuncis   (R R5tSet(RRJtcondtdiR RK((RIRJsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR7bs  cCs/|j\}}|j|j||d|S(Ns not in %s(targt forall_pairsR(RtatbRCRER ((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytc_test_contains|s  (R R R7RS(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR?as tTernaryAlgebraicStructureFamilycBseZdZdZRS(cs^i}xD]}t|||R((R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRGs%s{( attr('range', set) & attr('arity', equals(2)) & expset('''mapping(range, range, '->', range)''', 'range') )(R^R_texpset(RRGte((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_binary_operations  cCs|jS(N(trelation(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_binary_relationscCs |jtS(N(tfamilyR?(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_BinaryAlgebraicStructurescsfd}j}|j||jd|jj|jj@|jj@|jd|jj|jj@|jj@@|jd|jj@|jd |jj@|jd |jj @|jd |jj @S( Nc st|dkrtd|}nj|jj||d|d|d|jj||d|d|d|S( Nt~t-tnotslambda x: %s xRR;R<(RtRuRv(R5RiR R!(tsetR=R\R<tid0tid1(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytboolalgs  $R=R\sop0.zeros op1.identitysop1.zeros op0.identity(R=R\(R\R=(sop0.zeros op1.identity(sop1.zeros op0.identity( R^R_RaRRbt complementedtmonoidt distributiveRR(RRzRn((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_boolean_algebras  cCsd}|jj|dS(NcsIj}|j|j|jjfddS(Ncsj||S(N(R(RCR/(R<RERR;(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@sR{(R=R;R<tforallR(RCRR((R<RERR;sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytps    !R{(R^t predicate(RR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_complementeds cCs|jddS(Ntxysx * y == y * x(Re(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_commutativescCs |jtS(N(RrRW(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt#_get_DistributiveAlgebraicStructurescCs|j|j@S(N(tdistributive_1tdistributive_2(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_distributive"scCs|jddS(NRds x * (y + z) == (x * y) + (x * z)(tDistributiveAlgebraicStructure(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_distributive_1%scCs|jddS(NRds (x + y) * z == (x * z) + (y * z)(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_distributive_2)scsc|j|ddfdY}j|jdjjjdjj@S(NtFieldcseZfdZRS(csx|dkrtd|}n||_jj||||||_jj|j|||||_dS(NRuRtRvslambda x: %s x(RuRtRv(R5RtringR!R`tequalstmulgroup(RRhtaddtmultnegR9R;tone(RRn(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR2s   !(R R R((RRn(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR1sRR((R^R_RaRRt abelian_group(RR((RRnsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_field-s  csGfd}d}j}|j|jjj|d@S(Ncs;|dkrtd|}nj||d|d|S(NRuRtRvslambda x: %s xRR9(RuRtRv(R5Ri(RhRR9R(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytmkgroup@s csYy jWntk r-|jdnXj|jjfdS(Nsno invert functioncs4j||||jS(N(RR(RCR(REtgtinv(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@Ks(R9tAttributeErrorRBR=RR(RCR((RERRsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyREs    R`(R^R_R|R(RRRRn((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_group?s  cCs#dddY}|jj|S(Nt RelationSpeccBs#eZdZdZdZRS(cSsH|j|j|jf>|jjjB}|j|jj|jj||S(N( tbooleantPyObjectRRRtcprodt setcastableRptfuop(RRnRG((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_spec_quadrupleYs  cSs.td|jtdtdtdfS(NRRtGLBtLUB(RaRw(RRn((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_spec_structbs  c Ss|\}}}}|j|}|jjj|jj||ff}|jjj||}|jjj||}dddY}|}||_||_ ||_ ||_ |S(NtCcBseZRS((R R (((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRos(( RgRptpaxat fromuniversaltdefipairRR R!RRRR( RRnt.2RhRRRRRI((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytmap_quadruple_to_structis'     (R R RRR(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRWs ((R^trepcat(RR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_latticeformTs!cCs|j}d}|j|jjj|jd|jd|jjj@|jd|jj @|jd|jj @|j |d@S(NcsRfd}|fdjdoQ|fdjdS(Ncs+fd}jj|S(Ncso*s>|jdSs\r`tS|jjfdS(Ns not an %scs,|o| p+|S(N((RCtlb2(tRtlbRR/(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s(RBR.RR(RCRR/(RtlatR R(RRR/sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyttestlbs (RPR(RRR R(RCR(RR RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyttest~s csjj||fS(N(tcontainsR(RR/(RCR(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@RAs lower boundcsjj||fS(N(RR(RR/(RCR(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@RAs upper bound(RR(RCRR((RCRsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR}s !RRRRtlattice( R^t abstractsett latticeformtstructRRaRt partial_orderRR R(RRnR((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_latticezs    QcCs|jj|j|jjS(N(R^tLocalEnvt_Specification_t LocalEnvExpr(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_LEscsPd}fd}j}|j||jdj|j|d@S(Ncs:j}|j||jjfdS(Ncs%j|||S(N(R(RCR/(RnRER(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s(R=RRR(RCRR((RnRERsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs  csj||d|S(NR(Ri(RhRR(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytmkmonoidsR=R|(R^R_Rat associativeR(RRRRn((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_monoids  csffd}j}|j||jd|jj|jd|jj@|jd|jj@S(Nc s\|dkrtd|}nj|jj||d|d|jj||S(NRuRtRvslambda x: %s xRR9(RuRtRv(R5RiR R!(RhRRRR;(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytmkrings  R=R\(R\R=(R^R_RaRRt semigroupR}(RRRn((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_rings  +cCs+|jj|jj|jjd|jS(NR=(R^R_R R!RaR(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_semigroupscCs |jjS(N(t_parentR^(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt _get_SpecscCs |jtS(N(RrRT(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_TernaryAlgebraicStructurescsDdjjffdY}j|_jj|S(NRcseZfdZRS(csNjjj|||y j}Wntk r9nX||||dS(N(R^t SpecFamilyRR(t innerselfRR(tini(tFR(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs   (R R R((RR(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs(R^RR Rr(RRR((RRsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRrs( cCs|j|jj||S(N(trelpropR^R(RtsR ((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt relpropredscCs|jddS(Ncs|jjfdS(Ncs;|j||fo-|j||f p:||kS(N(R(RCRR/(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s1(RPR(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@ssantisymmetric wrt '==' op(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_antisymmetricscCs|j|j@|j@S(N(t reflexivet symmetrict transitive(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_equivalence_relations cCs|jddS(Ncs|jjfdS(Ncs|j||fdS(Nt irrreflexive(ttest_contains_not(RCR(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@RA(RR(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s R(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_irreflexivescCs|j|j@|j@S(N(Rt antisymmetricR(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_partial_orders cCs|j|j@S(N(Rttotal_relation(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_total_orderscCs|jddS(Ncs|jjfdS(Ncs.|j||fp-|j||fS(N(R(RCRR/(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s(RPR(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@ss+total_relation: xRy or yRx for all x,y in A(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_total_relationscCs|jddS(Ncs|jjfdS(Ncs|j||fdS(NR(t test_contains(RCR(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@RA(RR(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@ sR(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_reflexive scCs|jddS(Ncs|jfdS(Ncs%|\}}|j||fdS(NR(R(RCt.1RR/(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s (R(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@sR(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_symmetricscCs|jddS(Ncs|jfdS(Ncs.|\|jjfdS(Ncs2|j|f p1|j|fdS(NR(RR(RCRU(RRR/(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s(RR(RCRRR/(R(RR/sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@s  (R(RCR((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@sR(R(R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt_get_transitivescCsN|j}|j|jjj|S|j|jj|jd|jj |@S(NtdomainR(RR( R^RRpRRR_R!RaRR(RRRn((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR%s   (&R R RcRfRiReRoRqRsR~RRRRRRRRRRRRRRRRRrRRRRRRRRRRR(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR]sH               &               RcBsYeZdZdZdddYZdd dYZdZdd dYZRS( s@ Specification of some general algebraic structures c,s|}|j}|j}ddddddgddddddgddddddgddddddgddddddgddddddgg|j}|j|j|jf|jjdddf|jjdd f|jjd d d f|j|j f|j t d ff|j |j ddff|j t d ff|j t dff|j t d ff|j t dff|jt d ft dfff|jt d ft dfff|jt d ft dfff|jt d ft dfff|jt d ft dfff|jt d ft dfff|jt d ff|jtdff|jt dff|jt d dff|jtdd ff|jt d dff|jt dddff|jt d ddff|jt dddff|j|j@|j ddddddfdddff|jt dd ddff|jtdd ddft d d ddft ddddft dd ddft dd ddff|jtdd ddd dff|jtdd ddd dff|j|j ttdddttft dddddf|jddd|j|jff|j|j ttdddttf|j ttdddttf|j ttdddttf|j ttdddttf|j ttdddttf|j ttdddttffg!}g}x|D]} | d} t| d} t| tr|} | jd} x&| D]} t| | } qWn| } |j | | fqAW|S(NiiiiiiiggRAs1234%^sasdf*&(t*t+Rut|cs ||S(N((RR/(tS3(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@hRAcSsddddddg|S(Niiiiii((R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@iRARtcSsd|S(Ng?((R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@qRAg?cSsd|S(Ng@((R((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR@rRAtortandRvt&t.i(!RRtTypeRwtemptytInttFloattStringtalgebraic_classR tintRRbRR}RRRRR|R`RRtfieldtfloattboolean_algebraR-R.tlistR4tsplittgetattrR#(RttetobjRRRCRtasexstexRQR texsRRJ((RsN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyt GetExamples6s      $%'"!!!!!*   RcBseZdjdddURS(swif 1: binary_operation_name equals( '+', '-', '*', '/', '%', '|', '&', '**', '<<', '>>') algebraic_class (setof(Type.Tuple) & attr('new', callable)) relation_class (setof( setof(any*any) | Type.Tuple)) relational_operator_name equals( '<', '<=', '>', '>=', '==', '!=', 'in', 'not in', 'is', 'is not') ss = lambda IS: N(R R treplace(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRst GlueTypeExprcBseZdjdddURS(s if 1: abelian_group setof(AA.group) associative setof(AA.binary_operation) binary_operation doc(''' A \emp{binary operation} $*$ on a set $S$ is a function $*: S \cross S \mapsto S$. The element in $S$ assigned to $(x, y)$ is denoted $x*y$. \citemh(p.21) ''') & LE.algebraic_class boolean_algebra LE.algebraic_class commutative LE.algebraic_class distributive setof(cprod(AA.binary_operation, AA.binary_operation)) distributive_1 setof(cprod(AA.binary_operation, AA.binary_operation)) distributive_2 setof(cprod(AA.binary_operation, AA.binary_operation)) field LE.algebraic_class group (LE.algebraic_class & doc(''' ''' )) monoid LE.algebraic_class ring (LE.algebraic_class, attr('new', argnames('S', 'add', 'mul', 'neg', 'zero'))) semigroup LE.algebraic_class ss = lambda IN:N(R R R(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRsc s|j}|jjddd}d}fd}fd}jdfj||dfj||dfj||dfj||d fj||dfj||d fj||dfj||d fj||d fj||d fj ||d fj ||d fj ||dfj ||d fj |||fj ||dfj ||d fj |||fj jdddd fj|td ttfj|td d tfj|td td fj|tdd d fj|tdtd fj|tdd tfjjtd ttffg}|S(NiiicSs||@|kS(N((RR/((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytsubsetofscsjj||ffS(N(RpR(RhR(Rn(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytDscsjj|fS(N(Rt quadruple(R(R(sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pytLss==t doc('x R x for every x in A', AA.LE.relation_class) symmetric doc('x R y implies y R x, for all x, y in A', AA.LE.relation_class) transitive doc('x R y, y R z implies x R z, for all x, y, z in A', AA.LE.relation_class) irreflexive doc('not (x R y), for all x in A', AA.LE.relation_class) antisymmetric doc('x R y, y R x implies x == y, for all x, y in A', AA.LE.relation_class) total_relation doc('x R y or y R x, for all x, y in A', AA.LE.relation_class) equivalence_relation doc('Reflexive, symmetric and transitive', AA.LE.relation_class) partial_order doc('Reflexive, antisymmetric and transitive', AA.LE.relation_class) total_order doc('Partial order and x R y or y R x, for all x, y in A', AA.LE.relation_class) lattice attr('quadruple', doc('''Tuples (S, R, V, A), where: S: set or convertible to set, i.e. 'setcastable' R: relation operator on S V: binary operator on S A: binary operator on S R, V and A are either operator symbols or functions. (S, R) forms a partial order such that every pair x, y of elements in S have a greatest lower bound GLB and a least upper bound LUB. The GLB is given by V(x, y) or x V y depending on if V is a function or operator symbol. Likewise, ULB is given by A(x, y) or x A y. For example, these are lattice specifications: (int, '<=', min, max) (int, lambda x, y: x & y == x, '&', '|') ''', setof(tupleform( ('S', 'R', 'V', 'A'), attr('S', SPLE.setcastable) & expset('''attr('R', AA.LE.relational_operator_name | boolean<<(S, S)) & attr('V', AA.LE.binary_operation_name | setcast(S)<<(S, S)) & attr('A', AA.LE.binary_operation_name | setcast(S)<<(S, S)) ''', 'S') )))) ss =lambda IN:N(R R R(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyRs5((((R R t__doc__RRR(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR1s  [ 5i(tsupportNtTestCasecBseZRS((R R (((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR +st FirstCasecBseZdZRS(cCs5|jj}|jt}|j|jjjdS(N(theapyR^t mkTestEnvRRtguppytAbstractAlgebra(RR^tTestEnv((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyttest_1/s (R R R(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyR .si(RR RRR2R?RTRWR]Rtguppy.heapy.testR tsystunittestR R t run_unittest(((sN/opt/alt/python27/lib64/python2.7/site-packages/guppy/heapy/AbstractAlgebra.pyts  %!!*e