# simple_lt_word.rs内容和用法 ## 一、内容 ### 作用 用于比较U256位的lhs是否小于rhs。 ### 结构体 包含了两个gadget结构体,在simple_lt的基础上进行应用 ```rust pub struct SimpleComparisonGadget { lt: SimpleLtGadget, // lt = 1时,有lhs, // eq = 1 代表 lhs == rhs, 即 simple_is_zero的概念 } pub struct SimpleLtWordGadget { comparison_hi: SimpleComparisonGadget, // 即SimpleComparisonGadget,可用与判断两数是否相等 lt_lo: SimpleLtGadget, // lt = 1时,有lhs= rhs。总结:hi_lt = 0 且 hi_eq = 1时,lt = 1,公式结果为1,代表lhs < rhs; - 当hi_lt = 0时,hi_eq = 0时,可得出lhs > rhs。总结:hi_lt = 0 且 hi_eq = 0,公式结果为0,得出lhs > rhs; 通过上述三种结果分析可得:当公式结果输出为1时,有 lhr < rhs,当公式结果输出为0时,有lhs >= rhs的结论。由于我们的目的是为了比较lhs < rhs的情况,我们只需要关注公式输出为1时的结果,能够满足我们的需求。 ### 构造约束 SimpleComparisonGadget的约束: ``` pub fn get_constraints(&self) -> Vec<(String, Expression)> { let mut res: Vec<(String, Expression)> = Vec::new(); res.extend(self.lt.get_constraints()); res.extend(self.eq.get_constraints()); res } ``` SimpleLtWordGadget的约束: ```rust pub fn get_constraints(&self) -> Vec<(String, Expression)> { let mut res: Vec<(String, Expression)> = Vec::new(); res.extend(self.comparison_hi.get_constraints()); res.extend(self.lt_lo.get_constraints()); res } ``` ## 二、用法 在div_mod中有具体使用方法,如下: ``` let is_lt_lo = SimpleLtGadget::new(&c[1], &b[1], <[1], &diff[1]); let comparison = SimpleComparisonGadget::new(&c[0], &b[0], <[0], is_zero, &diff[0]); let is_lt = SimpleLtWordGadget::new(comparison, is_lt_lo); ``` 其中c[1],b[1],lt[1],diff[1]代表c_lo,b_lo,lt_lo,diff_lo。