方程式の解き方
前回の lem03 にあるように,REAL/COMPLEX_FIELD が知っているのは有理式までなので,それ以外のものを扱うには,必要な性質を前件として与えて証明させた後,SIMP,REWRITEなどにより前件を消去します.
SIMP_RULE[COMPLEX_POW_II_2; GSYM CX_POW; SQRT_POW_2; ARITH_RULE `&0 <= &3`; GSYM CX_DIV; GSYM CX_MUL; GSYM REAL_NEG_MINUS1; GSYM COMPLEX_TRAD;] (COMPLEX_FIELD `Cx(sqrt(&3)) pow 2 = Cx(&3) /\ ii pow 2 = --Cx(&1) ==> (c pow 2 - c + Cx(&1) = Cx(&0) <=> c = Cx(&1/ &2) + ii * Cx(sqrt (&3))/ Cx(&2) \/ c = Cx(&1/ &2) + ii * Cx(-- &1) * Cx(sqrt (&3))/ Cx(&2))`) ;;
対話的に書くと...
g `c pow 2 - c + Cx (&1) = Cx (&0) <=> c = complex (&1 / &2,sqrt (&3) / &2) \/ c = complex (&1 / &2,--(sqrt (&3) / &2))` ;; e( ONCE_REWRITE_TAC [REAL_NEG_MINUS1] );; e( REWRITE_TAC [COMPLEX_TRAD; CX_MUL; CX_DIV] );; e( MP_TAC COMPLEX_POW_II_2 );; e( MP_TAC (SIMP_RULE[SQRT_POW_2; ARITH_RULE `&0 <= &3`] (SPECL[`sqrt (&3)`; `2`]CX_POW)) );; e( CONV_TAC COMPLEX_FIELD );; g `c pow 2 - c + Cx (&1) = Cx (&0) <=> c = complex (&1 / &2,sqrt (&3) / &2) \/ c = complex (&1 / &2,--(sqrt (&3) / &2))` ;; e( ONCE_REWRITE_TAC [REAL_NEG_MINUS1] );; e( REWRITE_TAC [COMPLEX_TRAD; CX_MUL; CX_DIV] );; e( MP_TAC COMPLEX_POW_II_2 );; e( SUBGOAL_THEN `Cx(sqrt(&3)) pow 2 = Cx(&3)` MP_TAC );; e( SIMP_TAC[SQRT_POW_2; ARITH_RULE `&0 <= &3`; GSYM CX_POW] );; e( CONV_TAC COMPLEX_FIELD );;
のようにやや譲歩せねばなりません.