Research Article

Formalization of Function Matrix Theory in HOL

Algorithm 1

Formal proof of the quadratic function differential.
val DIFF_QUADRATIC = store_thm(“DIFF_QUADRATIC”,
        “!(fv:'n fun_vector)  (v:'n vector)  (A:('n,'n) matrix)  (t:real).
                 (fv fvector_diffl v)(t)(transp A = A)  ==>
      ((fv ** A ** fv) diffl
   (v ** A ** (compute_fvector fv t)  +  (v ** A) ** (compute_fvector fv t)))(t)”,
   REPEAT GEN_TAC THEN
  RW_TAC std_ss [MATRIX_VECTOR] THEN
  ‘!(fv:'n fun_vector) (A:('n,'n) matrix).
  (transp A = A)   ==>  (fv ** A ** fv = (fv ** A) ** fv)’
   by REWRITE_TAC THENL
  [SRW_TAC fcpLib.FCP_ss    fvector_mul_matrix_def THEN
     SRW_TAC fcpLib.FCP_ss    fvector_dot_def THEN
     ABS_TAC THEN
     MATCH_MP_TAC SUM_EQ THEN
     SRW_TAC THEN
     SRW_TAC fcpLib.FCP_ss    fvector_mul_vec_def THEN
     SRW_TAC fcpLib.FCP_ss    matrix_mul_fvec_def THEN
     SRW_TAC fcpLib.FCP_ss    vec_mul_fvector_def THEN
     GEN_REWR_TAC RAND_CONV REAL_MUL_COMM THEN
     REWRITE_TAC GSYM SUM_CMUL THEN
     MATCH_MP_TAC SUM_EQ THEN
     SRW_TAC THEN
     DISJ2_TAC THEN
     SRW_TAC fcpLib.FCP_ss    row_def, column_def THEN
     NTAC 3(POP_ASSUM MP_TAC) THEN
     SRW_TAC [fcpLib.FCP_ss]  [transp_def] THEN
     PROVE_TAC [REAL_MUL_COMM],ALL_TAC] THEN
    ‘!(fv:'n fun_vector)  (A:('n,'n) matrix) t:real.  
      (compute_fvector fv t) ** A = compute_fvector (fv ** A) t
     by REWRITE_TAC [COMPUTE_FVEC_MUL_MATRIX] THEN
  ‘!(fv:'n fun_vector)  (v:'n vector) t:real.  
      v ** (compute_fvector fv t)  =  (v ** fv) t
      by REWRITE_TAC COMPUTE_VEC_MUL_FVEC THEN
  ‘!(fv:'n fun_vector)  (v:'n vector)  (A:('n,'n) matrix)  (t:real).
      (fv  fvector_diffl  v)(t)  ==>  ((fv ** A) fvector_diffl (v ** A))(t)’
      by REWRITE_TAC [DIFF_FVEC_MUL_MATRIX] THEN
  PROVE_TAC [DIFF_FVECTOR_MUL]);