(* ---------------------------------------------------------------------- *) (* Paper *) (* ---------------------------------------------------------------------- *) (* ---------------------------- Chebychev ----------------------------- *) time REAL_QELIM_CONV `!x. --(&1) <= x /\ x <= &1 ==> -- (&1) <= &2 * x pow 2 - &1 /\ &2 * x pow 2 - &1 <= &1`;; (* DATE ------- HOL -------- 5/20 4.92 5/22 4.67 *) time REAL_QELIM_CONV `!x. --(&1) <= x /\ x <= &1 ==> -- (&1) <= &4 * x pow 3 - &3 * x /\ &4 * x pow 3 - &3 * x <= &1`;; (* DATE ------- HOL -------- 5/20 14.38 5/22 13.65 *) time REAL_QELIM_CONV `&1 < &2 /\ (!x. &1 < x ==> &1 < x pow 2) /\ (!x y. &1 < x /\ &1 < y ==> &1 < x * (&1 + &2 * y))`;; (* DATE ------- HOL -------- 5/22 23.61 *) time REAL_QELIM_CONV `&0 <= b /\ &0 <= c /\ &0 < a * c ==> ?u. &0 < u /\ u * (u * c - a * c) - (u * a * c - (a pow 2 * c + b)) < a pow 2 * c + b`;; (* DATE ------- HOL -------- 5/22 8.78 *) (* ------------------------------------------------------------------------- *) (* Examples. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.01 let fm = `?x. x pow 4 + x pow 2 + &1 = &0`;; let vars = [] *) time REAL_QELIM_CONV `?x. x pow 4 + x pow 2 + &1 = &0`;; (* DATE ------- HOL -------- 4/29/2005 3.19 5/19 2.2 5/20 1.96 5/22 1.53 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.01 *) time REAL_QELIM_CONV `?x. x pow 3 - x pow 2 + x - &1 = &0`;; (* DATE ------- HOL -------- 4/29/2005 3.83 5/22/2005 1.69 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.23 *) time REAL_QELIM_CONV `?x y. (x pow 3 - x pow 2 + x - &1 = &0) /\ (y pow 3 - y pow 2 + y - &1 = &0) /\ ~(x = y)`;; (* DATE ------- HOL -------- Factor 4/29/2005 682.85 3000 5/17/2005 345.27 5/22 269 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < f < a * e) ==> f <= a * k>>;; 0.02 *) time REAL_QELIM_CONV `!a f k. (!e. k < e ==> f < a * e) ==> f <= a * k`;; (* DATE ------- HOL -------- Factor 4/29/2005 20.91 1000 5/15/2005 17.98 5/17/2005 15.12 5/18/2005 12.87 5/22 12.09 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.01 *) time REAL_QELIM_CONV `?x. a * x pow 2 + b * x + c = &0`;; (* DATE ------- HOL -------- Factor 4/29/2005 10.99 1000 5/17/2005 6.42 5/18 5.39 5/22 4.74 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < b^2 >= 4 * a * c>>;; 0.51 *) time REAL_QELIM_CONV `!a b c. (?x. a * x pow 2 + b * x + c = &0) <=> b pow 2 >= &4 * a * c`;; (* DATE ------- HOL -------- Factor 4/29/2005 1200.99 2400 5/17 878.25 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < a = 0 /\ (~(b = 0) \/ c = 0) \/ ~(a = 0) /\ b^2 >= 4 * a * c>>;; 0.51 *) time REAL_QELIM_CONV `!a b c. (?x. a * x pow 2 + b * x + c = &0) <=> (a = &0) /\ (~(b = &0) \/ (c = &0)) \/ ~(a = &0) /\ b pow 2 >= &4 * a * c`;; (* DATE ------- HOL -------- Factor 4/29/2005 1173.9 2400 5/17 848.4 5/20 816 1095 during depot update *) (* time real_qelim <> *) time REAL_QELIM_CONV `?x. &0 <= x /\ x <= &1 /\ (r pow 2 * x pow 2 - r * (&1 + r) * x + (&1 + r) = &0) /\ ~(&2 * r * x = &1 + r)`;; (* DATE ------- HOL -------- Factor 5/20/2005 19021 1460 4000 line output *) (* ------------------------------------------------------------------------- *) (* Termination ordering for group theory completion. *) (* ------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------- *) (* Left this out *) (* ------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------- *) (* This one works better using DNF. *) (* ------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------- *) (* And this *) (* ------------------------------------------------------------------------- *) (* ------------------------------------------------------------------------- *) (* Linear examples. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; 0 *) time REAL_QELIM_CONV `?x. x - &1 > &0`;; (* DATE ------- HOL 4/29/2005 .56 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ x - 1 > 0>>;; 0 *) time REAL_QELIM_CONV `?x. &3 - x > &0 /\ x - &1 > &0`;; (* DATE ------- HOL 4/29/2005 1.66 *) (* ------------------------------------------------------------------------- *) (* Quadratics. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0 *) time REAL_QELIM_CONV `?x. x pow 2 = &0`;; (* DATE ------- HOL 4/29/2005 1.12 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 + &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.11 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 - &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.54 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 - &2 * x + &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.21 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 - &3 * x + &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.75 *) (* ------------------------------------------------------------------------- *) (* Cubics. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x. x pow 3 - &1 > &0`;; (* DATE ------- HOL 4/29/2005 1.96 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x. x pow 3 - &3 * x pow 2 + &3 * x - &1 > &0`;; (* DATE ------- HOL 4/29/2005 1.97 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x. x pow 3 - &4 * x pow 2 + &5 * x - &2 > &0`;; (* DATE ------- HOL 4/29/2005 4.89 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 3 - &6 * x pow 2 + &11 * x - &6 = &0`;; (* DATE ------- HOL 4/29/2005 4.17 *) (* ------------------------------------------------------------------------- *) (* Quartics. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x. x pow 4 - &1 > &0`;; (* DATE ------- HOL 4/29/2005 3.07 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x. x pow 4 + &1 > &0`;; (* DATE ------- HOL 4/29/2005 2.47 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 4 = &0`;; (* DATE ------- HOL 4/29/2005 2.48 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 4 - x pow 3 = &0`;; (* DATE ------- HOL 4/29/2005 1.76 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 4 - x pow 2 = &0`;; (* DATE ------- HOL 4/29/2005 2.16 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 4 - &2 * x pow 2 + &2 = &0`;; (* DATE ------- HOL 4/29/2005 6.87 5/16/2005 5.22 *) (* ------------------------------------------------------------------------- *) (* Quintics. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.03 print_timers() *) time REAL_QELIM_CONV `?x. x pow 5 - &15 * x pow 4 + &85 * x pow 3 - &225 * x pow 2 + &274 * x - &120 = &0`;; (* DATE ------- HOL -------- Factor 4/29/2005 65.64 2500 5/15/2005 55.93 5/16/2005 47.72 *) (* ------------------------------------------------------------------------- *) (* Sextics(?) *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 0.15 *) time REAL_QELIM_CONV `?x. x pow 6 - &21 * x pow 5 + &175 * x pow 4 - &735 * x pow 3 + &1624 * x pow 2 - &1764 * x + &720 = &0`;; `?x. x pow 5 - &15 * x pow 4 + &85 * x pow 3 - &225 * x pow 2 + &274 * x - &120 = &0`;; (* DATE ------- HOL -------- Factor 4/29/2005 1400.4 10000 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; 7.54 *) (* NOT YET *) (* time REAL_QELIM_CONV `?x. x pow 6 - &12 * x pow 5 + &56 * x pow 4 - &130 * x pow 3 + &159 * x pow 2 - &98 * x + &24 = &0`;; *) (* ------------------------------------------------------------------------- *) (* Multiple polynomials. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ x^3 - 11 = 0 /\ x + 131 >= 0>>;; *) time REAL_QELIM_CONV `?x. x pow 2 + &2 > &0 /\ (x pow 3 - &11 = &0) /\ x + &131 >= &0`;; (* DATE ------- HOL 4/29/2005 13.1 *) (* ------------------------------------------------------------------------- *) (* With more variables. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. a * x pow 2 + b * x + c = &0`;; (* DATE ------- HOL 4/29/2005 10.94 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. a * x pow 3 + b * x pow 2 + c * x + d = &0`;; (* DATE ------- HOL 4/29/2005 269.17 *) (* ------------------------------------------------------------------------- *) (* Constraint solving. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0>>;; *) time REAL_QELIM_CONV `?x1 x2. x1 pow 2 + x2 pow 2 - u1 <= &0 /\ x1 pow 2 - u2 > &0`;; (* DATE ------- HOL 4/29/2005 89.97 *) (* ------------------------------------------------------------------------- *) (* Huet & Oppen (interpretation of group theory). *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ y > 0 ==> x * (1 + 2 * y) > 0>>;; *) time REAL_QELIM_CONV `!x y. x > &0 /\ y > &0 ==> x * (&1 + &2 * y) > &0`;; (* DATE ------- HOL 4/29/2005 5.03 *) (* ------------------------------------------------------------------------- *) (* Other examples. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 - x + &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.19 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 2 - &3 * x + &1 = &0`;; (* DATE ------- HOL 4/29/2005 1.65 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 6 /\ (x^2 - 3 * x + 1 = 0)>>;; *) time REAL_QELIM_CONV `?x. x > &6 /\ (x pow 2 - &3 * x + &1 = &0)`;; (* DATE ------- HOL 4/29/2005 3.63 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ x^2 - 3 * x + 1 = 0>>;; *) time REAL_QELIM_CONV `?x. &7 * x pow 2 - &5 * x + &3 > &0 /\ (x pow 2 - &3 * x + &1 = &0)`;; (* DATE ------- HOL 4/29/2005 8.62 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ x^2 - 8 * x + 1 = 0>>;; *) time REAL_QELIM_CONV `?x. (&11 * x pow 3 - &7 * x pow 2 - &2 * x + &1 = &0) /\ &7 * x pow 2 - &5 * x + &3 > &0 /\ (x pow 2 - &8 * x + &1 = &0)`;; (* DATE ------- HOL 4/29/2005 221.4 *) (* ------------------------------------------------------------------------- *) (* Quadratic inequality from Liska and Steinberg *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < C * (x - 1) * (4 * x * a * C - x * C - 4 * a * C + C - 2) >= 0>>;; *) time REAL_QELIM_CONV `!x. -- &1 <= x /\ x <= &1 ==> C * (x - &1) * (&4 * x * a * C - x * C - &4 * a * C + C - &2) >= &0`;; (* DATE ------- HOL 4/29/2005 1493 *) (* ------------------------------------------------------------------------- *) (* Metal-milling example from Loos and Weispfenning *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x y. &0 < x /\ y < &0 /\ (x * r - x * t + t = q * x - s * x + s) /\ (x * b - x * d + d = a * y - c * y + c)`;; (* ------------------------------------------------------------------------- *) (* Linear example from Collins and Johnson *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?r. &0 < r /\ r < &1 /\ &0 < (&1 - &3 * r) * (a pow 2 + b pow 2) + &2 * a * r /\ (&2 - &3 * r) * (a pow 2 + b pow 2) + &4 * a * r - &2 * a - r < &0`;; (* ------------------------------------------------------------------------- *) (* Dave Griffioen #4 *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 <= y>>;; *) time REAL_QELIM_CONV `!x y. (&1 - t) * x <= (&1 + t) * y /\ (&1 - t) * y <= (&1 + t) * x ==> &0 <= y`;; (* DATE ------- HOL 4/29/2005 893 *) (* ------------------------------------------------------------------------- *) (* Some examples from "Real Quantifier Elimination in practice". *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < u2>>;; *) time REAL_QELIM_CONV `?x2. x1 pow 2 + x2 pow 2 <= u1 /\ x1 pow 2 > u2`;; (* DATE ------- HOL 4/29/2005 4 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < u2>>;; *) time REAL_QELIM_CONV `?x1 x2. x1 pow 2 + x2 pow 2 <= u1 /\ x1 pow 2 > u2`;; (* DATE ------- HOL 4/29/2005 90 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <= 0 /\ x2 >= 0 ==> 3 * (x1 + 3 * x2^2 + 2) <= 8 * (2 * x1 + x2 + 1)>>;; *) time REAL_QELIM_CONV `!x1 x2. x1 + x2 <= &2 /\ x1 <= &1 /\ x1 >= &0 /\ x2 >= &0 ==> &3 * (x1 + &3 * x2 pow 2 + &2) <= &8 * (&2 * x1 + x2 + &1)`;; (* DATE ------- HOL 4/29/2005 18430 *) (* ------------------------------------------------------------------------- *) (* From Collins & Johnson's "Sign variation..." article. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 /\ (2 - 3 * r) * (a^2 + b^2) + 4 * a * r - 2 * a - r < 0>>;; *) time REAL_QELIM_CONV `?r. &0 < r /\ r < &1 /\ (&1 - &3 * r) * (a pow 2 + b pow 2) + &2 * a * r > &0 /\ (&2 - &3 * r) * (a pow 2 + b pow 2) + &4 * a * r - &2 * a - r < &0`;; (* DATE ------- HOL 4/29/2005 4595.11 *) (* ------------------------------------------------------------------------- *) (* From "Parallel implementation of CAD" article. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 1 /\ x * y >= 1>>;; *) time REAL_QELIM_CONV `?x. !y. x pow 2 + y pow 2 > &1 /\ x * y >= &1`;; (* DATE ------- HOL 4/29/2005 89.51 *) (* ------------------------------------------------------------------------- *) (* Other misc examples. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 2 * x * y <= 1>>;; *) time REAL_QELIM_CONV `!x y. (x pow 2 + y pow 2 = &1) ==> &2 * x * y <= &1`;; (* DATE ------- HOL 4/29/2005 83.02 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 2 * x * y < 1>>;; *) time REAL_QELIM_CONV `!x y. (x pow 2 + y pow 2 = &1) ==> &2 * x * y < &1`;; (* DATE ------- HOL 4/29/2005 83.7 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 <=> x > 0 /\ y > 0 \/ x < 0 /\ y < 0>>;; *) time REAL_QELIM_CONV `!x y. x * y > &0 <=> x > &0 /\ y > &0 \/ x < &0 /\ y < &0`;; (* DATE ------- HOL 4/29/2005 27.4 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < y /\ x^2 < y^2>>;; *) time REAL_QELIM_CONV `?x y. x > y /\ x pow 2 < y pow 2`;; (* DATE ------- HOL 4/29/2005 1.19 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists z. x < z /\ z < y>>;; *) time REAL_QELIM_CONV `!x y. x < y ==> ?z. x < z /\ z < y`;; (* DATE ------- HOL 4/29/2005 3.8 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists y. x * y^2 = 1>>;; *) time REAL_QELIM_CONV `!x. &0 < x <=> ?y. x * y pow 2 = &1`;; (* DATE ------- HOL 4/29/2005 3.76 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists y. x * y^2 = 1>>;; *) time REAL_QELIM_CONV `!x. &0 <= x <=> ?y. x * y pow 2 = &1`;; (* DATE ------- HOL 4/29/2005 4.38 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists y. x = y^2>>;; *) time REAL_QELIM_CONV `!x. &0 <= x <=> ?y. x = y pow 2`;; (* DATE ------- HOL 4/29/2005 4.38 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists z. x < z^2 /\ z^2 < y>>;; *) time REAL_QELIM_CONV `!x y. &0 < x /\ x < y ==> ?z. x < z pow 2 /\ z pow 2 < y`;; (* DATE ------- HOL 4/29/2005 93.1 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < exists z. x < z^2 /\ z^2 < y>>;; *) time REAL_QELIM_CONV `!x y. x < y ==> ?z. x < z pow 2 /\ z pow 2 < y`;; (* DATE ------- HOL 4/29/2005 93.22 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < x = 0 /\ y = 0>>;; *) time REAL_QELIM_CONV `!x y. (x pow 2 + y pow 2 = &0) ==> (x = &0) /\ (y = &0)`;; (* DATE ------- HOL 4/29/2005 17.21 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < x = 0 /\ y = 0 /\ z = 0>>;; *) time REAL_QELIM_CONV `!x y z. (x pow 2 + y pow 2 + z pow 2 = &0) ==> (x = &0) /\ (y = &0) /\ (z = &0)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < w = 0 /\ x = 0 /\ y = 0 /\ z = 0>>;; *) time REAL_QELIM_CONV `!w x y z. (w pow 2 + x pow 2 + y pow 2 + z pow 2 = &0) ==> (w = &0) /\ (x = &0) /\ (y = &0) /\ (z = &0)`;; (* DATE ------- HOL 4/29/2005 596 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < forall x. ~(x^2 + a*x + 1 = 0)>>;; *) time REAL_QELIM_CONV `!a. (a pow 2 = &2) ==> !x. ~(x pow 2 + a*x + &1 = &0)`;; (* DATE ------- HOL 4/29/2005 8.7 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < forall x. ~(x^2 - a*x + 1 = 0)>>;; *) time REAL_QELIM_CONV `!a. (a pow 2 = &2) ==> !x. ~(x pow 2 - a*x + &1 = &0)`;; (* DATE ------- HOL 4/29/2005 8.82 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < (x * y)^2 = 6>>;; *) time REAL_QELIM_CONV `!x y. (x pow 2 = &2) /\ (y pow 2 = &3) ==> ((x * y) pow 2 = &6)`;; (* DATE ------- HOL 4/29/2005 48.59 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x. ?y. x pow 2 = y pow 3`;; (* DATE ------- HOL 4/29/2005 6.93 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x. ?y. x pow 3 = y pow 2`;; (* DATE ------- HOL 4/29/2005 5.76 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < (a * (x + y) + b = 0)>>;; *) time REAL_QELIM_CONV `!a b c. (a * x pow 2 + b * x + c = &0) /\ (a * y pow 2 + b * y + c = &0) /\ ~(x = y) ==> (a * (x + y) + b = &0)`;; (* DATE ------- HOL 4/29/2005 76.5 *) (* --------------------------------- --------------------------------- *) (* time real_qelim < (y_1^2 = y_2^2)>>;; *) time REAL_QELIM_CONV `!y_1 y_2 y_3 y_4. (y_1 = &2 * y_3) /\ (y_2 = &2 * y_4) /\ (y_1 * y_3 = y_2 * y_4) ==> (y_1 pow 2 = y_2 pow 2)`;; (* time real_qelim < x^4 < 1>>;; *) (* DATE ------- HOL 4/29/2005 1327 *) (* ------------------------------------------------------------------------- *) (* Counting roots. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 3 - x pow 2 + x - &1 = &0`;; (* DATE ------- HOL 4/29/2005 3.8 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x y. (x pow 3 - x pow 2 + x - &1 = &0) /\ (y pow 3 - y pow 2 + y - &1 = &0) /\ ~(x = y)`;; (* DATE ------- HOL 4/29/2005 670 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x. x pow 4 + x pow 2 - &2 = &0`;; (* DATE ------- HOL 4/29/2005 4.9 *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x y. x pow 4 + x pow 2 - &2 = &0 /\ y pow 4 + y pow 2 - &2 = &0 /\ ~(x = y)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x y. (x pow 3 + x pow 2 - x - &1 = &0) /\ (y pow 3 + y pow 2 - y - &1 = &0) /\ ~(x = y)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?x y z. (x pow 3 + x pow 2 - x - &1 = &0) /\ (y pow 3 + y pow 2 - y - &1 = &0) /\ (z pow 3 + z pow 2 - z - &1 = &0) /\ ~(x = y) /\ ~(x = z)`;; (* ------------------------------------------------------------------------- *) (* Existence of tangents, so to speak. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x y. ?s c. (s pow 2 + c pow 2 = &1) /\ s * x + c * y = &0`;; (* ------------------------------------------------------------------------- *) (* Another useful thing (componentwise ==> normwise accuracy etc.) *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x y. (x + y) pow 2 <= &2 * (x pow 2 + y pow 2)`;; (* ------------------------------------------------------------------------- *) (* Some related quantifier elimination problems. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x y. (x + y) pow 2 <= c * (x pow 2 + y pow 2)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < 2 <= c>>;; *) time REAL_QELIM_CONV `!c. (!x y. (x + y) pow 2 <= c * (x pow 2 + y pow 2)) <=> &2 <= c`;; (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!a b. a * b * c <= a pow 2 + b pow 2`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < c^2 <= 4>>;; *) time REAL_QELIM_CONV `!c. (!a b. a * b * c <= a pow 2 + b pow 2) <=> c pow 2 <= &4`;; (* ------------------------------------------------------------------------- *) (* Tedious lemmas I once proved manually in HOL. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 < a * b /\ 0 < a * c /\ 0 < b * c>>;; *) time REAL_QELIM_CONV `!a b c. &0 < a /\ &0 < b /\ &0 < c ==> &0 < a * b /\ &0 < a * c /\ &0 < b * c`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 ==> (c * a < 0 <=> c * b < 0)>>;; *) time REAL_QELIM_CONV `!a b c. a * b > &0 ==> (c * a < &0 <=> c * b < &0)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < 0 ==> (a * c < 0 <=> b * c < 0)>>;; *) time REAL_QELIM_CONV `!a b c. a * b > &0 ==> (a * c < &0 <=> b * c < &0)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < (a * b > 0 <=> b < 0)>>;; *) time REAL_QELIM_CONV `!a b. a < &0 ==> (a * b > &0 <=> b < &0)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < (c * a < 0 <=> ~(c * b < 0))>>;; *) time REAL_QELIM_CONV `!a b c. a * b < &0 /\ ~(c = &0) ==> (c * a < &0 <=> ~(c * b < &0))`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < a > 0 /\ b < 0 \/ a < 0 /\ b > 0>>;; *) time REAL_QELIM_CONV `!a b. a * b < &0 <=> a > &0 /\ b < &0 \/ a < &0 /\ b > &0`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < a >= 0 /\ b <= 0 \/ a <= 0 /\ b >= 0>>;; *) time REAL_QELIM_CONV `!a b. a * b <= &0 <=> a >= &0 /\ b <= &0 \/ a <= &0 /\ b >= &0`;; (* ------------------------------------------------------------------------- *) (* Vaguely connected with reductions for Robinson arithmetic. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < forall d. d <= b ==> d < a>>;; *) time REAL_QELIM_CONV `!a b. ~(a <= b) <=> !d. d <= b ==> d < a`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < forall d. d <= b ==> ~(d = a)>>;; *) time REAL_QELIM_CONV `!a b. ~(a <= b) <=> !d. d <= b ==> ~(d = a)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < forall d. d < b ==> d < a>>;; *) time REAL_QELIM_CONV `!a b. ~(a < b) <=> !d. d < b ==> d < a`;; (* ------------------------------------------------------------------------- *) (* Another nice problem. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim < (x + y)^2 <= 2>>;; *) time REAL_QELIM_CONV `!x y. (x pow 2 + y pow 2 = &1) ==> (x + y) pow 2 <= &2`;; (* ------------------------------------------------------------------------- *) (* Some variants / intermediate steps in Cauchy-Schwartz inequality. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x y. &2 * x * y <= x pow 2 + y pow 2`;; (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!a b c d. &2 * a * b * c * d <= a pow 2 * b pow 2 + c pow 2 * d pow 2`;; (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `!x1 x2 y1 y2. (x1 * y1 + x2 * y2) pow 2 <= (x1 pow 2 + x2 pow 2) * (y1 pow 2 + y2 pow 2)`;; (* ------------------------------------------------------------------------- *) (* The determinant example works OK here too. *) (* ------------------------------------------------------------------------- *) (* --------------------------------- --------------------------------- *) (* time real_qelim <>;; *) time REAL_QELIM_CONV `?w x y z. (a * w + b * y = &1) /\ (a * x + b * z = &0) /\ (c * w + d * y = &0) /\ (c * x + d * z = &1)`;; (* --------------------------------- --------------------------------- *) (* time real_qelim < ~(a * d = b * c)>>;; *) time REAL_QELIM_CONV `!a b c d. (?w x y z. (a * w + b * y = &1) /\ (a * x + b * z = &0) /\ (c * w + d * y = &0) /\ (c * x + d * z = &1)) <=> ~(a * d = b * c)`;; (* ------------------------------------------------------------------------- *) (* From applying SOLOVAY_VECTOR_TAC. *) (* ------------------------------------------------------------------------- *) let th = prove (`&0 <= c' /\ &0 <= c /\ &0 < h * c' ==> (?u. &0 < u /\ (!v. &0 < v /\ v <= u ==> v * (v * (h * h * c' + c) - h * c') - (v * h * c' - c') < c'))`, W(fun (asl,w) -> MAP_EVERY (fun v -> SPEC_TAC(v,v)) (frees w)) THEN CONV_TAC REAL_QELIM_CONV);; (* ------------------------------------------------------------------------- *) (* Two notions of parallelism. *) (* ------------------------------------------------------------------------- *) time REAL_QELIM_CONV `!x1 x2 y1 y2. (?c. (x2 = c * x1) /\ (y2 = c * y1)) <=> (x1 = &0 /\ y1 = &0 ==> x2 = &0 /\ y2 = &0) /\ x1 * y2 = x2 * y1`;; (* ------------------------------------------------------------------------- *) (* From Behzad Akbarpour (takes about 300 seconds). *) (* ------------------------------------------------------------------------- *) time REAL_QELIM_CONV `!x. &0 <= x /\ x <= &1 ==> &0 < &1 - x + x pow 2 / &2 - x pow 3 / &6 /\ &1 <= (&1 + x + x pow 2) * (&1 - x + x pow 2 / &2 - x pow 3 / &6)`;; (* ------------------------------------------------------------------------- *) (* A natural simplification of "limit of a product" result. *) (* Takes about 450 seconds. *) (* ------------------------------------------------------------------------- *) (*** Would actually like to get rid of abs internally and state it like this: time REAL_QELIM_CONV `!x y e. &0 < e ==> ?d. &0 < d /\ abs((x + d) * (y + d) - x * y) < e`;; ****) time REAL_QELIM_CONV `!x y e. &0 < e ==> ?d. &0 < d /\ (x + d) * (y + d) - x * y < e /\ x * y - (x + d) * (y + d) < e`;;