title: specman e lists constraints references
body: <p>i am trying to do the following :</p>
  
  <pre><code>unit parent {
                sons: list of sons is instance;
                grands: list of grands is instance;
  
                keep sons.size() == 4;
                keep grands.size() == 4;
  };
  
  unit sons {
              grands:list of grands is instance;
              keep grands == get_enclosing_unit(parent).grands.all( .id &gt; 3 );
  
             //this is not working
             keep for each in grands {
                it.parent_age == 70;
             };
  };
  
  unit grands {
             id: uint;
             parent_age:uint;
  };
  
  extend sys {
     p : parent is instance;
     run() is also {
        print p;
        for each (s) in p.sons {
           print s;
        };
        for each (g) in p.grands {
           print g;
        };
  
     };
  };
  </code></pre>
  
  <p>in other words , i want the sons list to point to a part of the parents list , but still be able to constraint(the not working part) the list of grands from the sons unit/struct.</p>
  
  <p>With PGen constraint engine on 9.20, the above code produces:</p>
  
  <pre><code>Starting the test ...
  Running the test ...
    p = parent-@0: parent   e_path: sys.p
    hdl_path:
          ----------------------------------------------  @tmp
  0       sons:                           (4 items)
  1       grands:                         (4 items)
    s = sons-@1: sons   e_path: sys.p.sons[0]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (empty)
    s = sons-@2: sons   e_path: sys.p.sons[1]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (empty)
    s = sons-@3: sons   e_path: sys.p.sons[2]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (empty)
    s = sons-@4: sons   e_path: sys.p.sons[3]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (empty)
    g = grands-@5: grands   e_path: sys.p.grands[0]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             4107502109
  1       parent_age:                     3829340118
    g = grands-@6: grands   e_path: sys.p.grands[1]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             3657005019
  1       parent_age:                     2354335776
    g = grands-@7: grands   e_path: sys.p.grands[2]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             3238917208
  1       parent_age:                     336300761
    g = grands-@8: grands   e_path: sys.p.grands[3]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             1416976666
  1       parent_age:                     2212224392
  </code></pre>
  
  <p>With IntelliGen constraint engine on Specman 9.20, the above code produces:</p>
  
  <pre><code>Starting the test ...
  Running the test ...
    p = parent-@0: parent   e_path: sys.p
    hdl_path:
          ----------------------------------------------  @tmp
  0       sons:                           (4 items)
  1       grands:                         (4 items)
    s = sons-@1: sons   e_path: sys.p.sons[0]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (4 items)
    s = sons-@2: sons   e_path: sys.p.sons[1]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (4 items)
    s = sons-@3: sons   e_path: sys.p.sons[2]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (4 items)
    s = sons-@4: sons   e_path: sys.p.sons[3]
    hdl_path:
          ----------------------------------------------  @tmp
  0       grands:                         (4 items)
    g = grands-@5: grands   e_path: sys.p.grands[0]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             619055518
  1       parent_age:                     4122406610
    g = grands-@6: grands   e_path: sys.p.grands[1]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             2908565159
  1       parent_age:                     1741309063
    g = grands-@7: grands   e_path: sys.p.grands[2]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             3091108084
  1       parent_age:                     1231835435
    g = grands-@8: grands   e_path: sys.p.grands[3]
    hdl_path:
          ----------------------------------------------  @tmp
  0       id:                             1717477430
  1       parent_age:                     937745175
  No actual running requested.
  Checking the test ...
  Checking is complete - 0 DUT errors, 0 DUT warnings.
  </code></pre>