(* ---------------------------------------------------------------------- *)
(* 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 <<exists x. x^4 + x^2 + 1 = 0>>;;
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 <<exists x. x^3 - x^2 + x - 1 = 0>>;;
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
<<exists x y. x^3 - x^2 + x - 1 = 0 /\
y^3 - y^2 + y - 1 = 0 /\ ~(x = y)>>;;
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
<<forall a f k. (forall e. k < e ==> 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
<<exists x. a * x^2 + b * x + c = 0>>;;
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
<<forall a b c. (exists x. a * x^2 + b * x + c = 0) <=>
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
<<forall a b c. (exists x. a * x^2 + b * x + c = 0) <=>
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 <<exists x. 0 <= x /\ x <= 1 /\ (r * r * x * x - r * (1 + r) * x + (1 + r) = 0)
/\ ~(2 * r * x = 1 + r)>>
*)
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 <<exists x. x - 1 > 0>>;;
0
*)
time REAL_QELIM_CONV `?x. x - &1 > &0`;;
(*
DATE ------- HOL
4/29/2005 .56
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. 3 - x > 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 <<exists x. x^2 = 0>>;;
0
*)
time REAL_QELIM_CONV `?x. x pow 2 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.12
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^2 + 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 + &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.11
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^2 - 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 - &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.54
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^2 - 2 * x + 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 - &2 * x + &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.21
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^2 - 3 * x + 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 - &3 * x + &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.75
*)
(* ------------------------------------------------------------------------- *)
(* Cubics. *)
(* ------------------------------------------------------------------------- *)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^3 - 1 > 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 3 - &1 > &0`;;
(*
DATE ------- HOL
4/29/2005 1.96
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^3 - 3 * x^2 + 3 * x - 1 > 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 <<exists x. x^3 - 4 * x^2 + 5 * x - 2 > 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 <<exists x. x^3 - 6 * x^2 + 11 * x - 6 = 0>>;;
*)
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 <<exists x. x^4 - 1 > 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 - &1 > &0`;;
(*
DATE ------- HOL
4/29/2005 3.07
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^4 + 1 > 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 + &1 > &0`;;
(*
DATE ------- HOL
4/29/2005 2.47
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^4 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 = &0`;;
(*
DATE ------- HOL
4/29/2005 2.48
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^4 - x^3 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 - x pow 3 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.76
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^4 - x^2 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 - x pow 2 = &0`;;
(*
DATE ------- HOL
4/29/2005 2.16
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^4 - 2 * x^2 + 2 = 0>>;;
*)
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
<<exists x. x^5 - 15 * x^4 + 85 * x^3 - 225 * x^2 + 274 * x - 120 = 0>>;;
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 <<exists x.
x^6 - 21 * x^5 + 175 * x^4 - 735 * x^3 + 1624 * x^2 - 1764 * x + 720 = 0>>;;
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 <<exists x.
x^6 - 12 * x^5 + 56 * x^4 - 130 * x^3 + 159 * x^2 - 98 * x + 24 = 0>>;;
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 <<exists x. x^2 + 2 > 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 <<exists x. a * x^2 + b * x + c = 0>>;;
*)
time REAL_QELIM_CONV `?x. a * x pow 2 + b * x + c = &0`;;
(*
DATE ------- HOL
4/29/2005 10.94
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. a * x^3 + b * x^2 + c * x + d = 0>>;;
*)
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 <<exists x1 x2. x1^2 + x2^2 - u1 <= 0 /\ x1^2 - u2 > 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 <<forall x y. x > 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 <<exists x. x^2 - x + 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 - x + &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.19
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^2 - 3 * x + 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 2 - &3 * x + &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 1.65
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x > 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 <<exists x. 7 * x^2 - 5 * x + 3 > 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 <<exists x. 11 * x^3 - 7 * x^2 - 2 * x + 1 = 0 /\
7 * x^2 - 5 * x + 3 > 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
<<forall x. -(1) <= x /\ x <= 1 ==>
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
<<exists 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>>;;
*)
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
<<exists r. 0 < r /\
r < 1 /\
0 < (1 - 3 * r) * (a^2 + b^2) + 2 * a * r /\
(2 - 3 * r) * (a^2 + b^2) + 4 * a * r - 2 * a - r < 0>>;;
*)
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
<<forall x y. (1 - t) * x <= (1 + t) * y /\ (1 - t) * y <= (1 + t) * x
==> 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 <<exists x2. x1^2 + x2^2 <= u1 /\ x1^2 > 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 <<exists x1 x2. x1^2 + x2^2 <= u1 /\ x1^2 > 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
<<forall x1 x2. x1 + x2 <= 2 /\ x1 <= 1 /\ x1 >= 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 <<exists r. 0 < r /\ r < 1 /\
(1 - 3 * r) * (a^2 + b^2) + 2 * a * r > 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 <<exists x. forall y. x^2 + y^2 > 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 <<forall x y. x^2 + y^2 = 1 ==> 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 <<forall x y. x^2 + y^2 = 1 ==> 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 <<forall x y. x * y > 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 <<exists x y. x > 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 <<forall x y. x < y ==> 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 <<forall x. 0 < x <=> 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 <<forall x. 0 <= x <=> 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 <<forall x. 0 <= x <=> 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 <<forall x y. 0 < x /\ x < y ==> 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 <<forall x y. x < y ==> 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 <<forall x y. x^2 + y^2 = 0 ==> 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 <<forall x y z. x^2 + y^2 + z^2 = 0 ==> 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 <<forall w x y z. w^2 + x^2 + y^2 + z^2 = 0
==> 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 a. a^2 = 2 ==> 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 a. a^2 = 2 ==> 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 <<forall x y. x^2 = 2 /\ y^2 = 3 ==> (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 <<forall x. exists y. x^2 = y^3>>;;
*)
time REAL_QELIM_CONV `!x. ?y. x pow 2 = y pow 3`;;
(*
DATE ------- HOL
4/29/2005 6.93
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<forall x. exists y. x^3 = y^2>>;;
*)
time REAL_QELIM_CONV `!x. ?y. x pow 3 = y pow 2`;;
(*
DATE ------- HOL
4/29/2005 5.76
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall a b c.
(a * x^2 + b * x + c = 0) /\
(a * y^2 + b * y + c = 0) /\
~(x = y)
==> (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
<<forall 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^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 <<forall x. x^2 < 1 <=> x^4 < 1>>;;
*)
(*
DATE ------- HOL
4/29/2005 1327
*)
(* ------------------------------------------------------------------------- *)
(* Counting roots. *)
(* ------------------------------------------------------------------------- *)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim <<exists x. x^3 - x^2 + x - 1 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 3 - x pow 2 + x - &1 = &0`;;
(*
DATE ------- HOL
4/29/2005 3.8
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<exists x y. x^3 - x^2 + x - 1 = 0 /\ y^3 - y^2 + y - 1 = 0 /\ ~(x = y)>>;;
*)
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 <<exists x. x^4 + x^2 - 2 = 0>>;;
*)
time REAL_QELIM_CONV `?x. x pow 4 + x pow 2 - &2 = &0`;;
(*
DATE ------- HOL
4/29/2005 4.9
*)
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<exists x y. x^4 + x^2 - 2 = 0 /\ y^4 + y^2 - 2 = 0 /\ ~(x = y)>>;;
*)
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
<<exists x y. x^3 + x^2 - x - 1 = 0 /\ y^3 + y^2 - y - 1 = 0 /\ ~(x = y)>>;;
*)
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 <<exists x y z. x^3 + x^2 - x - 1 = 0 /\
y^3 + y^2 - y - 1 = 0 /\
z^3 + z^2 - z - 1 = 0 /\ ~(x = y) /\ ~(x = z)>>;;
*)
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
<<forall x y. exists s c. s^2 + c^2 = 1 /\ s * x + c * y = 0>>;;
*)
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 <<forall x y. (x + y)^2 <= 2 * (x^2 + y^2)>>;;
*)
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 <<forall x y. (x + y)^2 <= c * (x^2 + y^2)>>;;
*)
time REAL_QELIM_CONV `!x y. (x + y) pow 2 <= c * (x pow 2 + y pow 2)`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall c. (forall x y. (x + y)^2 <= c * (x^2 + y^2)) <=> 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 <<forall a b. a * b * c <= a^2 + b^2>>;;
*)
time REAL_QELIM_CONV `!a b. a * b * c <= a pow 2 + b pow 2`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall c. (forall a b. a * b * c <= a^2 + b^2) <=> 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
<<forall a b c. 0 < a /\ 0 < b /\ 0 < c
==> 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
<<forall a b c. a * b > 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
<<forall a b c. a * b > 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
<<forall a b. a < 0 ==> (a * b > 0 <=> b < 0)>>;;
*)
time REAL_QELIM_CONV
`!a b. a < &0 ==> (a * b > &0 <=> b < &0)`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall a b c. a * b < 0 /\ ~(c = 0) ==> (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
<<forall a b. a * b < 0 <=> 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
<<forall a b. a * b <= 0 <=> 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 a b. ~(a <= b) <=> forall d. d <= b ==> d < a>>;;
*)
time REAL_QELIM_CONV
`!a b. ~(a <= b) <=> !d. d <= b ==> d < a`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall a b. ~(a <= b) <=> forall d. d <= b ==> ~(d = a)>>;;
*)
time REAL_QELIM_CONV
`!a b. ~(a <= b) <=> !d. d <= b ==> ~(d = a)`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall a b. ~(a < b) <=> 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
<<forall x y. x^2 + y^2 = 1 ==> (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
<<forall x y. 2 * x * y <= x^2 + y^2>>;;
*)
time REAL_QELIM_CONV
`!x y. &2 * x * y <= x pow 2 + y pow 2`;;
(* --------------------------------- --------------------------------- *)
(*
time real_qelim
<<forall a b c d. 2 * a * b * c * d <= a^2 * b^2 + c^2 * d^2>>;;
*)
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
<<forall x1 x2 y1 y2.
(x1 * y1 + x2 * y2)^2 <= (x1^2 + x2^2) * (y1^2 + y2^2)>>;;
*)
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
<<exists 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_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
<<forall a b c d.
(exists 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)>>;;
*)
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`;;