Attachment 'dcomp-poset-eric.sage'

Download

   1 ############################################################################
   2 ################### Function to append poset elements to x #################
   3 ############################################################################
   4  
   5 def build_line(x,s,f):
   6     p=list(s)
   7     q=list(f)
   8     if s[0]>f[0] or s[1]>f[1]:
   9         return
  10     x.append(tuple(p))
  11     while p!=q:
  12         if p[0]<q[0]:
  13             p[0]+=1
  14         if p[1]<q[1]:
  15             p[1]+=1
  16         x.append(tuple(p))
  17     return
  18 
  19 ############################################################################
  20 ########### Function to append lines of elements of poset to x #############
  21 ############################################################################
  22 
  23 def build_block(x,sc,fc):
  24     if fc[1]-sc[1] > fc[0]-sc[0]:
  25         for i in range(sc[0],fc[0]+1):
  26             build_line(x,(i,sc[1]),(i,fc[1]))
  27     else:
  28         for i in range(sc[1],fc[1]+1):
  29             build_line(x,(sc[0],i),(fc[0],i))
  30     return
  31     
  32 ############################################################################
  33 ################### Relations between elements a and b #####################
  34 ############################################################################
  35 
  36 def relations(a,b,p1=None,q1=None,p2=None,q2=None):
  37     if a[0]==b[0]:
  38         if b[1]==p1 and a[0]==q1:
  39             return False
  40         if a[1]+1==b[1]:
  41             return True
  42     elif a[1]==b[1]:
  43         if b[1]==p2 and a[0]==q2:
  44             return False
  45         if a[0]+1==b[0]:
  46             return True
  47     elif p1 is not None and p2 is not None:
  48         if b[0]>q1-1 and b[1]>p1-1:
  49             if a[0]+1==b[0] and a[1]+1==b[1]:
  50                 return True
  51     return False
  52 
  53 ############################################################################
  54 ############# Function to return d-complete poset of class 1 ###############
  55 ############################################################################
  56 
  57 def poset_1(part): # part = [base,height,hline1,...,hline_n]
  58 		
  59     if len(part)>part[1]+2:
  60         raise ValueError("part can have a maximum length of part[1] (height=%s).\nThere can be a maximum of %s hlines."%(str(part[1]),str(part[1])))
  61 
  62     for i in range(2,len(part)):
  63         if part[i]+2>part[0]:
  64             raise ValueError("part[%s] (hline%s) is too long. It can have a maximum length of %s."%(str(i),str(i-1),str(part[0]-2)))
  65 
  66     x=[]
  67     
  68     build_block(x,(0,0),(1,part[0]-1))
  69     
  70     build_block(x,(2,0),(part[1]-1,1))
  71 
  72     ### Optional parts ###
  73     
  74     for i in range(2,len(part)):
  75         build_line(x,(i,2),(i,part[i]+1))
  76         
  77     def rel(a,b):
  78         return relations(a,b)
  79                  
  80     return Poset((x,rel),cover_relations=True)
  81     
  82 ############################################################################
  83 ############# Function to return d-complete poset of class 2 ###############
  84 ############################################################################
  85 
  86 def poset_2(part): # part = [base,vline1,...,vline_n]
  87 
  88     #if not all(x>y and x>0 and y>0 for x, y in zip(part, part[1:])):
  89     #    raise ValueError('part must be strictly decreasing and no zeros')
  90     #if part[0] > 1:
  91     #    if len(part) < 2:
  92     #        raise ValueError('part does not have enough elements')
  93     #    if part[1] != part[0]-1:
  94     #        raise ValueError('second element of part must be one less than first')    
  95     #elif part[0] > 2:
  96     #    if len(part) < 3:
  97     #        raise ValueError('part does not have enough elements')
  98     #    if part[2] < 1:
  99     #        raise ValueError('third element of part must be at least one') 
 100 
 101     x=[]
 102     
 103     x.append((0,0))
 104     
 105     build_block(x,(0,1),(1,part[0]-1))
 106     
 107     x.append((2,2))
 108     
 109     ### Optional parts ###
 110     
 111     for i in range(1,len(part)):
 112         build_line(x,(i+1,i+2),(i+part[i],i+2))
 113         
 114     def rel(a,b):
 115         return relations(a,b)
 116                  
 117     return Poset((x,rel),cover_relations=True)
 118 
 119 ############################################################################
 120 ############# Function to return d-complete poset of class 3 ###############
 121 ############################################################################
 122 
 123 def poset_3(part): # part = [htail1,base,height,dtail1]
 124     
 125     x=[]
 126     
 127     build_line(x,(0,0),(0,part[0]-1))
 128     
 129     build_block(x,(0,part[0]),(1,part[1]-1))
 130     
 131     build_block(x,(2,part[0]),(part[2]-1,part[0]+1))
 132     
 133     build_line(x,(2,part[0]+2),(part[3]+1,part[3]+1+part[0]))
 134          
 135     def rel(a,b):
 136         return relations(a,b,part[0]+2,2,part[0]+2,1)
 137     
 138     return Poset((x,rel),cover_relations=True)
 139     
 140 ############################################################################
 141 ############# Function to return d-complete poset of class 4 ###############
 142 ############################################################################
 143 
 144 def poset_4(part): # part = [htail1,base,height,vline1,...,vline_n]
 145   
 146     x=[]
 147     
 148     build_line(x,(0,0),(0,part[0]-1))
 149     
 150     build_block(x,(0,part[0]),(1,part[1]-1))
 151     
 152     build_line(x,(2,part[0]+1),(part[2]-1,part[0]+1))
 153     
 154     ### Optional parts ###
 155     
 156     for i in range(3,len(part)):
 157         build_line(x,(2,part[0]+i-1),(part[i]+1,part[0]+i-1))         
 158 
 159     def rel(a,b):
 160         return relations(a,b)
 161         
 162     return Poset((x,rel),cover_relations=True)
 163     
 164 ############################################################################
 165 ############# Function to return d-complete poset of class 5 ###############
 166 ############################################################################
 167 
 168 def poset_5(part): # part = [htail1,base,height,hline1,vline1]
 169     
 170     x=[]
 171     
 172     build_line(x,(0,0),(0,part[0]-1))
 173     
 174     build_block(x,(0,part[0]),(1,part[1]-1))
 175 
 176     build_line(x,(2,part[0]+1),(2,part[2]-1))
 177 
 178     build_line(x,(2,part[0]+2),(3,part[0]+3))
 179  
 180     ### Optional parts ###
 181     
 182     for i in range(3,len(part)-1):
 183         build_line(x,(3,part[0]+i-1),(2+part[i],part[0]+i-1))
 184 
 185     def rel(a,b):
 186         return relations(a,b,part[0]+3,3,part[0]+3,2)
 187         
 188     return Poset((x,rel),cover_relations=True)
 189     
 190 ############################################################################
 191 ############# Function to return d-complete poset of class 6 ###############
 192 ############################################################################
 193 
 194 def poset_6(part): # part = [htail1,base,height,hline1,hline2]
 195      
 196     x=[]
 197     
 198     build_line(x,(0,0),(0,part[0]-1))
 199     
 200     build_block(x,(0,part[0]),(1,part[1]-1))
 201     
 202     for i in range(2,4):
 203         build_line(x,(i,part[0]+1),(i,part[0]+3))
 204         
 205     build_line(x,(3,part[0]+1),(part[2]-1,part[0]+1))
 206      
 207     ### Optional parts ###
 208     
 209     for i in range(3,len(part)):
 210         build_line(x,(i-1,part[0]+4),(i-1,part[0]+3+part[i]))
 211         
 212     def rel(a,b):
 213         return relations(a,b,p1=part[0]+2,q1=3)
 214         
 215     return Poset((x,rel),cover_relations=True)
 216 
 217 ############################################################################
 218 ############# Function to return d-complete poset of class 7 ###############
 219 ############################################################################
 220 
 221 def poset_7(part): # part = [htail1,base,height,vline1,vline2]
 222      
 223     x=[]
 224     
 225     build_line(x,(0,0),(0,part[0]-1))
 226     
 227     build_block(x,(0,part[0]),(1,part[1]-1))
 228 
 229     build_block(x,(2,part[0]+1),(3,part[0]+3))
 230     
 231     build_line(x,(4,part[0]+1),(part[2]-1,part[0]+1))
 232     
 233     ## Optional parts ###
 234     
 235     for i in range(2,len(part)-1):
 236         build_line(x,(4,part[0]+i),(part[i+1]+3,part[0]+i))
 237              
 238     def rel(a,b):
 239         return relations(a,b,p2=part[0]+3,q2=1)
 240         
 241     return Poset((x,rel),cover_relations=True)
 242     
 243 ############################################################################
 244 ############# Function to return d-complete poset of class 8 ###############
 245 ############################################################################
 246 
 247 def poset_8(part): # part = [base,height,vline1,...,vline4]
 248      
 249     x=[]
 250     
 251     build_line(x,(0,0),(0,part[0]-4))
 252     
 253     build_block(x,(0,part[0]-3),(1,part[0]-1))
 254 
 255     build_block(x,(2,part[0]-2),(3,part[0]))
 256     
 257     build_line(x,(4,part[0]-2),(part[1]-1,part[0]-2))
 258     
 259     ### Optional parts ###
 260     
 261     for i in range(2,len(part)):
 262         if i < 4:
 263             build_line(x,(4,part[0]+i-3),(part[i]+3,part[0]+i-3))
 264         else:
 265             build_line(x,(3,part[0]+i-3),(part[i]+2,part[0]+i-3))
 266                      
 267     def rel(a,b):
 268         return relations(a,b)
 269         
 270     return Poset((x,rel),cover_relations=True)
 271     
 272 ############################################################################
 273 ############# Function to return d-complete poset of class 9 ###############
 274 ############################################################################
 275 
 276 def poset_9(part): # part = [base,height,vline1,...,vline4]
 277      
 278     x=[]
 279     
 280     build_line(x,(0,0),(0,part[0]-4))
 281     
 282     build_block(x,(0,part[0]-3),(1,part[0]-1))
 283 
 284     build_block(x,(2,part[0]-2),(3,part[0]))
 285 
 286     build_block(x,(3,part[0]-2),(4,part[0]+1))
 287  
 288     build_line(x,(5,part[0]-2),(part[1]-1,part[0]-2))
 289     
 290     for i in range(2,len(part)):
 291         if i == 5:
 292             build_line(x,(3,part[0]+2),(part[5]+2,part[0]+2))
 293         else:
 294             build_line(x,(5,part[0]+i-3),(part[i]+4,part[0]+i-3))
 295 
 296     build_line(x,(4,part[0]+1),(5,part[0]+2))
 297             
 298     def rel(a,b):
 299         return relations(a,b,part[0]+2,5,part[0]+2,4)
 300         
 301     return Poset((x,rel),cover_relations=True)
 302     
 303 ############################################################################
 304 ############ Function to return d-complete poset of class 10 ###############
 305 ############################################################################
 306 
 307 def poset_10(part): # part = [base,height,vline1,...,vline4]
 308      
 309     x=[]
 310     
 311     build_line(x,(0,0),(0,part[0]-4))
 312     
 313     build_block(x,(0,part[0]-3),(1,part[0]-1))
 314 
 315     build_block(x,(2,part[0]-2),(3,part[0]))
 316 
 317     build_block(x,(4,part[0]-2),(5,part[0]+2))
 318     
 319     build_line(x,(3,part[0]+1),(3,part[0]+2))
 320     
 321     build_line(x,(6,part[0]-2),(part[1]-1,part[0]-2))
 322     
 323     ### Optional parts ###
 324     
 325     for i in range(2,len(part)):
 326         build_line(x,(6,part[0]+i-3),(part[i]+5,part[0]+i-3))
 327     
 328     def rel(a,b):
 329         return relations(a,b,p2=part[0]+2,q2=3)
 330         
 331     return Poset((x,rel),cover_relations=True)
 332     
 333 ############################################################################
 334 ############ Function to return d-complete poset of class 11 ###############
 335 ############################################################################
 336 
 337 def poset_11(part): # part = [base,height,vline1,...,vline_n]
 338      
 339     x=[]
 340     
 341     build_line(x,(0,0),(0,part[0]-4))
 342     
 343     build_block(x,(0,part[0]-3),(1,part[0]-1))
 344 
 345     build_block(x,(2,part[0]-2),(3,part[0]))
 346 
 347     x.append((3,part[0]+1))
 348     
 349     build_block(x,(4,part[0]-2),(5,part[0]+2))
 350     
 351     build_line(x,(6,part[0]-2),(part[1]-1,part[0]-2))
 352     
 353     for i in range(2,len(part)):
 354         build_line(x,(6,part[0]+i-3),(part[i]+5,part[0]+i-3))
 355     
 356     def rel(a,b):
 357         return relations(a,b)
 358         
 359     return Poset((x,rel),cover_relations=True)
 360     
 361 ############################################################################
 362 ############ Function to return d-complete poset of class 12 ###############
 363 ############################################################################
 364 
 365 def poset_12(part): # part = [base,height,vline1,vline2]
 366      
 367     x=[]
 368     
 369     build_line(x,(0,0),(0,part[0]-4))
 370     
 371     build_block(x,(0,part[0]-3),(1,part[0]-1))
 372 
 373     build_block(x,(2,part[0]-2),(3,part[0]))
 374 
 375     build_block(x,(3,part[0]-2),(4,part[0]+2))
 376     
 377     build_line(x,(5,part[0]+1),(5,part[0]+2))
 378     
 379     build_line(x,(5,part[0]-2),(part[1]-1,part[0]-2))
 380     
 381     ### Optional parts ###
 382     
 383     for i in range(2,len(part)):
 384         build_line(x,(5,part[0]+i-3),(part[i]+4,part[0]+i-3))
 385     
 386     def rel(a,b):
 387         return relations(a,b,p1=part[0]+1,q1=5)
 388         
 389     return Poset((x,rel),cover_relations=True)
 390     
 391 ############################################################################
 392 ############ Function to return d-complete poset of class 13 ###############
 393 ############################################################################
 394 
 395 def poset_13(part): # part = [base,height,vline1]
 396      
 397     x=[]
 398     
 399     build_line(x,(0,0),(0,part[0]-4))
 400     
 401     build_block(x,(0,part[0]-3),(1,part[0]-1))
 402 
 403     build_block(x,(2,part[0]-2),(3,part[0]))
 404 
 405     build_block(x,(3,part[0]-2),(4,part[0]+2))
 406     
 407     build_line(x,(5,part[0]+1),(5,part[0]+2))
 408 
 409     build_line(x,(5,part[0]-2),(part[1]-1,part[0]-2))
 410             
 411     x.append((6,part[0]+2))
 412     
 413     ### Optional part ###
 414     
 415     for i in range(2,len(part)):
 416         build_line(x,(5,part[0]+i-3),(part[i]+4,part[0]+i-3))
 417     
 418     def rel(a,b):
 419         return relations(a,b)
 420         
 421     return Poset((x,rel),cover_relations=True)
 422     
 423 ############################################################################
 424 ############ Function to return d-complete poset of class 14 ###############
 425 ############################################################################
 426 
 427 def poset_14(part): # part = [base,height]
 428      
 429     x=[]
 430     
 431     build_line(x,(0,0),(0,part[0]-4))
 432     
 433     build_block(x,(0,part[0]-3),(1,part[0]-1))
 434 
 435     build_block(x,(2,part[0]-2),(3,part[0]+1))
 436 
 437     build_block(x,(3,part[0]-2),(4,part[0]+2))
 438     
 439     build_line(x,(5,part[0]+1),(5,part[0]+2))
 440     
 441     build_line(x,(6,part[0]+2),(7,part[0]+2))
 442     
 443     build_line(x,(5,part[0]-2),(part[1]-1,part[0]-2))
 444     
 445     def rel(a,b):
 446         return relations(a,b)
 447         
 448     return Poset((x,rel),cover_relations=True)
 449     
 450 ############################################################################
 451 ############ Function to return d-complete poset of class 15 ###############
 452 ############################################################################
 453 
 454 def poset_15(): # only one ideal: itself
 455      
 456     x=[]
 457 
 458     build_line(x,(0,0),(0,2))
 459     
 460     build_block(x,(0,3),(1,4))
 461 
 462     build_block(x,(2,4),(3,6))
 463 
 464     build_block(x,(3,4),(4,8))
 465     
 466     build_line(x,(5,7),(5,8))
 467     
 468     build_line(x,(6,8),(8,8))
 469     
 470     def rel(a,b):
 471         return relations(a,b)
 472         
 473     return Poset((x,rel),cover_relations=True)
 474     
 475 ############################################################################
 476 ######## Function to return d-complete poset of class classification #######
 477 ############################################################################
 478 
 479 def dCompletePoset(classification,description):
 480     
 481     if classification < 1 or classification > 15:
 482         raise ValueError('classification must be integer between 1 and 15')
 483         
 484     return dCompletePoset_class(classification, description)
 485 
 486 ############################################################################
 487 ######################## d-complete poset class ############################
 488 ############################################################################
 489 
 490 from sage.combinat.posets.posets import FinitePoset,PosetElement
 491 
 492 class dCompletePoset_class(FinitePoset):
 493 
 494     def __init__(self, classification, description):
 495     
 496         if classification==1:
 497             p = poset_1(description)
 498         if classification==2:
 499             p = poset_2(description)
 500         if classification==3:
 501             p = poset_3(description)
 502         if classification==4:
 503             p = poset_4(description)
 504         if classification==5:
 505             p = poset_5(description)
 506         if classification==6:
 507             p = poset_6(description)
 508         if classification==7:
 509             p = poset_7(description)
 510         if classification==8:
 511             p = poset_8(description)
 512         if classification==9:
 513             p = poset_9(description)
 514         if classification==10:
 515             p = poset_10(description)
 516         if classification==11:
 517             p = poset_11(description)
 518         if classification==12:
 519             p = poset_12(description)
 520         if classification==13:
 521             p = poset_13(description)
 522         if classification==14:
 523             p = poset_14(description)
 524         if classification==15:
 525             p = poset_15(description)
 526     
 527         FinitePoset.__init__(self,p)
 528 
 529         # This defines the type (class) of elements of poset.
 530         _element_type = PosetElement
 531         
 532         

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2011-05-06 17:55:48, 4.3 KB) [[attachment:Gaelans_Functions.py]]
  • [get | view] (2011-05-06 17:55:41, 15.9 KB) [[attachment:dcomp-poset-eric.sage]]
  • [get | view] (2011-05-06 18:26:47, 4.8 KB) [[attachment:jeu_taquin.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.