00078 {
00079 mdd_t ***PINS;
00080 int i, j;
00081 mvar_type a, b;
00082 array_t *mvar_list = mdd_ret_mvar_list(mgr);
00083 array_t *bvar_list = mdd_ret_bvar_list(mgr);
00084 bvar_type a_bit_i, b_bit_i;
00085 mdd_t *result, *less_than;
00086
00087 a = array_fetch ( mvar_type, mvar_list, a_mvar_id);
00088 b = array_fetch ( mvar_type, mvar_list, b_mvar_id);
00089
00090
00091 PINS = ALLOC(mdd_t **, M);
00092 for(i=0; i<M; i++) PINS[i] = ALLOC(mdd_t *, M);
00093
00094 for(i=0; i< M; i++)
00095 for(j=0; j< M; j++) PINS[i][j] = mdd_zero(mgr);
00096
00097 for(i=0; i< M; i++) PINS[i][i] = mdd_one(mgr);
00098
00099 for( i = 1 ; i <= (MIN(a.encode_length, b.encode_length)); i++){
00100 a_bit_i = mdd_ret_bvar( &a, (a.encode_length - i), bvar_list);
00101 b_bit_i = mdd_ret_bvar( &b, (b.encode_length - i), bvar_list);
00102
00103 mod_block_build(&PINS, M, &a_bit_i, &b_bit_i);
00104 }
00105
00106 if ( a.encode_length > b.encode_length )
00107 for ( i = MIN(a.encode_length, b.encode_length)+1; i <= a.encode_length; i++){
00108 a_bit_i = mdd_ret_bvar( &a, (a.encode_length - i), bvar_list);
00109 assert_zero( mgr, &(PINS[0][0]), &a_bit_i);
00110 }
00111
00112 if ( b.encode_length > a.encode_length )
00113 for ( i = MIN(a.encode_length, b.encode_length)+1; i <= b.encode_length; i++){
00114 b_bit_i = mdd_ret_bvar( &b, (b.encode_length - i), bvar_list);
00115 single_var_block_build( &PINS, &b_bit_i, M);
00116 }
00117
00118 less_than = build_lt_c(mgr, a_mvar_id, M);
00119
00120 result = mdd_and(PINS[0][0], less_than, 1, 1);
00121
00122 return result;
00123
00124
00125 }