@@ -17,8 +17,9 @@ class nla_throttle {
1717public:
1818 enum throttle_kind {
1919 ORDER_LEMMA, // order lemma (9 params)
20- BINOMIAL_SIGN_LEMMA, // binomial sign (5 params)
21- MONOTONE_LEMMA // monotonicity (2 params)
20+ BINOMIAL_SIGN_LEMMA, // binomial sign (6 params)
21+ MONOTONE_LEMMA, // monotonicity (2 params)
22+ TANGENT_LEMMA // tangent lemma (5 params: monic_var, x_var, y_var, below, plane_type)
2223 };
2324
2425private:
@@ -50,51 +51,24 @@ class nla_throttle {
5051
5152public:
5253 nla_throttle (trail_stack& trail) : m_trail(trail) {}
53-
54- void set_enabled (bool enabled) { m_enabled = enabled; }
54+ void set_enabled (bool enabled) { m_enabled = enabled; }
5555 bool enabled () const { return m_enabled; }
5656
5757 // Monotone lemma: mvar + is_lt
58- bool insert_new (throttle_kind k, lpvar mvar, bool is_lt) {
59- if (!m_enabled) return false ;
60- signature sig;
61- sig.m_values [0 ] = static_cast <unsigned >(k);
62- sig.m_values [1 ] = static_cast <unsigned >(mvar);
63- sig.m_values [2 ] = static_cast <unsigned >(is_lt);
64- return insert_new_impl (sig);
65- }
58+ bool insert_new (throttle_kind k, lpvar mvar, bool is_lt);
6659
6760 // Binomial sign: xy_var + x + y + sign + sy
68- bool insert_new (throttle_kind k, lpvar xy_var, lpvar x, lpvar y, int sign, int sy) {
69- if (!m_enabled) return false ;
70- signature sig;
71- sig.m_values [0 ] = static_cast <unsigned >(k);
72- sig.m_values [1 ] = static_cast <unsigned >(xy_var);
73- sig.m_values [2 ] = static_cast <unsigned >(x);
74- sig.m_values [3 ] = static_cast <unsigned >(y);
75- sig.m_values [4 ] = normalize_sign (sign);
76- sig.m_values [5 ] = normalize_sign (sy);
77- return insert_new_impl (sig);
78- }
61+ bool insert_new (throttle_kind k, lpvar xy_var, lpvar x, lpvar y, int sign, int sy);
7962
8063 // Order lemma: ac_var + a + c_sign + c + bd_var + b_var + d_sign + d + ab_cmp
8164 bool insert_new (throttle_kind k, lpvar ac_var, lpvar a, const rational& c_sign, lpvar c,
82- lpvar bd_var, lpvar b_var, const rational& d_sign, lpvar d, llc ab_cmp) {
83- if (!m_enabled) return false ;
84- signature sig;
85- sig.m_values [0 ] = static_cast <unsigned >(k);
86- sig.m_values [1 ] = static_cast <unsigned >(ac_var);
87- sig.m_values [2 ] = static_cast <unsigned >(a);
88- sig.m_values [3 ] = pack_rational_sign (c_sign);
89- sig.m_values [4 ] = static_cast <unsigned >(c);
90- sig.m_values [5 ] = static_cast <unsigned >(bd_var);
91- sig.m_values [6 ] = static_cast <unsigned >(b_var);
92- // Pack d_sign, d, and ab_cmp into the last slot
93- sig.m_values [7 ] = (pack_rational_sign (d_sign) << 24 ) |
94- ((static_cast <unsigned >(d) & 0xFFFF ) << 8 ) |
95- (static_cast <unsigned >(ab_cmp) & 0xFF );
96- return insert_new_impl (sig);
97- }
65+ lpvar bd_var, lpvar b_var, const rational& d_sign, lpvar d, llc ab_cmp);
66+
67+ // Tangent lemma: monic_var + x_var + y_var + below + plane_type
68+ bool insert_new (throttle_kind k, lpvar monic_var, lpvar x_var, lpvar y_var, bool below, int plane_type);
69+
70+ // Tangent lemma (simplified): monic_var + x_var + y_var + below
71+ bool insert_new (throttle_kind k, lpvar monic_var, lpvar x_var, lpvar y_var, bool below);
9872
9973private:
10074 bool insert_new_impl (const signature& sig);
@@ -107,6 +81,7 @@ class nla_throttle {
10781 static unsigned normalize_sign (int sign) {
10882 return static_cast <unsigned >(sign + 127 );
10983 }
84+
11085};
11186
11287}
0 commit comments