set_goal([`&0 < b pow 2 - &4 * a * c`],`?x. a * x pow 2 + b * x + c = &0`);;
e(ASM_CASES_TAC `a = &0`);;
e(ASM_CASES_TAC `b = &0`);;
e( X_GET_TAC 0 );;
e( ASM_SIMP_TAC [] );;
e( ARITH_TAC );;
e( EXISTS_TAC `-- c / b` );;
e( ASM_REAL_FIELD_TAC );;
e( EXISTS_TAC `(sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a)` );;
e( POP_ASSUM MP_TAC );;
e( FIRST_X_ASSUM (MP_TAC o (MATCH_MP REAL_LT_IMP_LE) ) );;
e( SIMP_TAC [POW_2;GSYM SQRT_POW2] );;
e( REAL_FIELD_TAC );;
top_thm();;
# set_goal([`&0 < b pow 2 - &4 * a * c`],`?x. a * x pow 2 + b * x + c = &0`);;
val it : goalstack = 1 subgoal (1 total)
0 [`&0 < b pow 2 - &4 * a * c`]
`?x. a * x pow 2 + b * x + c = &0`
# e(ASM_CASES_TAC `a = &0`);;
val it : goalstack = 2 subgoals (2 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`~(a = &0)`]
`?x. a * x pow 2 + b * x + c = &0`
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`a = &0`]
`?x. a * x pow 2 + b * x + c = &0`
# e(ASM_CASES_TAC `b = &0`);;
val it : goalstack = 2 subgoals (3 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`a = &0`]
2 [`~(b = &0)`]
`?x. a * x pow 2 + b * x + c = &0`
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`a = &0`]
2 [`b = &0`]
`?x. a * x pow 2 + b * x + c = &0`
# e( X_GET_TAC 0 );;
val it : goalstack = 1 subgoal (3 total)
0 [`a = &0`]
1 [`b = &0`]
`&0 < b pow 2 - &4 * a * c ==> (?x. a * x pow 2 + b * x + c = &0)`
# e( ASM_SIMP_TAC [] );;
val it : goalstack = 1 subgoal (3 total)
0 [`a = &0`]
1 [`b = &0`]
`&0 < &0 pow 2 - &4 * &0 * c ==> (?x. &0 * x pow 2 + &0 * x + c = &0)`
# e( ARITH_TAC );;
val it : goalstack = 1 subgoal (2 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`a = &0`]
2 [`~(b = &0)`]
`?x. a * x pow 2 + b * x + c = &0`
# e( EXISTS_TAC `-- c / b` );;
val it : goalstack = 1 subgoal (2 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`a = &0`]
2 [`~(b = &0)`]
`a * (--c / b) pow 2 + b * --c / b + c = &0`
# e( ASM_REAL_FIELD_TAC );;
2 basis elements and 0 critical pairs
5 basis elements and 3 critical pairs
5 basis elements and 2 critical pairs
5 basis elements and 1 critical pairs
5 basis elements and 0 critical pairs
val it : goalstack = 1 subgoal (1 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`~(a = &0)`]
`?x. a * x pow 2 + b * x + c = &0`
# e( EXISTS_TAC `(sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a)` );;
val it : goalstack = 1 subgoal (1 total)
0 [`&0 < b pow 2 - &4 * a * c`]
1 [`~(a = &0)`]
`a * ((sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a)) pow 2 +
b * (sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a) +
c =
&0`
# e( POP_ASSUM MP_TAC );;
val it : goalstack = 1 subgoal (1 total)
0 [`&0 < b pow 2 - &4 * a * c`]
`~(a = &0)
==> a * ((sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a)) pow 2 +
b * (sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a) +
c =
&0`
# e( FIRST_X_ASSUM (MP_TAC o (MATCH_MP REAL_LT_IMP_LE) ) );;
val it : goalstack = 1 subgoal (1 total)
`&0 <= b pow 2 - &4 * a * c
==> ~(a = &0)
==> a * ((sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a)) pow 2 +
b * (sqrt (b pow 2 - &4 * a * c) - b) / (&2 * a) +
c =
&0`
# e( SIMP_TAC [POW_2;GSYM SQRT_POW2] );;
val it : goalstack = 1 subgoal (1 total)
`sqrt (b * b - &4 * a * c) * sqrt (b * b - &4 * a * c) = b * b - &4 * a * c
==> ~(a = &0)
==> a *
(sqrt (b * b - &4 * a * c) - b) / (&2 * a) *
(sqrt (b * b - &4 * a * c) - b) / (&2 * a) +
b * (sqrt (b * b - &4 * a * c) - b) / (&2 * a) +
c =
&0`
# e( REAL_FIELD_TAC );;
3 basis elements and 0 critical pairs
4 basis elements and 1 critical pairs
4 basis elements and 0 critical pairs
val it : goalstack = No subgoals
# top_thm () ;;
val it : thm = &0 < b pow 2 - &4 * a * c |- ?x. a * x pow 2 + b * x + c = &0