src/HOL/Matrix/cplex/FloatSparseMatrixBuilder.ML
changeset 23261 85f27f79232f
parent 22964 2284e0d02e7f
child 23665 825bea0266db
equal deleted inserted replaced
23260:eb6d86fb7ed3 23261:85f27f79232f
    12   type float = Float.float
    12   type float = Float.float
    13   val approx_value : int -> (float -> float) -> string -> term * term
    13   val approx_value : int -> (float -> float) -> string -> term * term
    14   val approx_vector : int -> (float -> float) -> vector -> term * term
    14   val approx_vector : int -> (float -> float) -> vector -> term * term
    15   val approx_matrix : int -> (float -> float) -> matrix -> term * term
    15   val approx_matrix : int -> (float -> float) -> matrix -> term * term
    16 
    16 
    17   val mk_spvec_entry : Intt.int -> float -> term
    17   val mk_spvec_entry : integer -> float -> term
    18   val mk_spmat_entry : Intt.int -> term -> term
    18   val mk_spmat_entry : integer -> term -> term
    19   val spvecT: typ
    19   val spvecT: typ
    20   val spmatT: typ
    20   val spmatT: typ
    21   
    21   
    22   val v_elem_at : vector -> int -> string option
    22   val v_elem_at : vector -> int -> string option
    23   val m_elem_at : matrix -> int -> vector option
    23   val m_elem_at : matrix -> int -> vector option
    62 fun approx_vector prec pprt vector =
    62 fun approx_vector prec pprt vector =
    63   let
    63   let
    64     fun app (index, s) (lower, upper) =
    64     fun app (index, s) (lower, upper) =
    65       let
    65       let
    66         val (flower, fupper) = approx_value prec pprt s
    66         val (flower, fupper) = approx_value prec pprt s
    67         val index = HOLogic.mk_number HOLogic.natT (Intt.int index)
    67         val index = HOLogic.mk_number HOLogic.natT (Integer.int index)
    68         val elower = HOLogic.mk_prod (index, flower)
    68         val elower = HOLogic.mk_prod (index, flower)
    69         val eupper = HOLogic.mk_prod (index, fupper)
    69         val eupper = HOLogic.mk_prod (index, fupper)
    70       in (elower :: lower, eupper :: upper) end;
    70       in (elower :: lower, eupper :: upper) end;
    71   in
    71   in
    72     pairself (HOLogic.mk_list spvecT) (Inttab.fold app vector ([], []))
    72     pairself (HOLogic.mk_list spvecT) (Inttab.fold app vector ([], []))
    75 fun approx_matrix prec pprt vector =
    75 fun approx_matrix prec pprt vector =
    76   let
    76   let
    77     fun app (index, v) (lower, upper) =
    77     fun app (index, v) (lower, upper) =
    78       let
    78       let
    79         val (flower, fupper) = approx_vector prec pprt v
    79         val (flower, fupper) = approx_vector prec pprt v
    80         val index = HOLogic.mk_number HOLogic.natT (Intt.int index)
    80         val index = HOLogic.mk_number HOLogic.natT (Integer.int index)
    81         val elower = HOLogic.mk_prod (index, flower)
    81         val elower = HOLogic.mk_prod (index, flower)
    82         val eupper = HOLogic.mk_prod (index, fupper)
    82         val eupper = HOLogic.mk_prod (index, fupper)
    83       in (elower :: lower, eupper :: upper) end;
    83       in (elower :: lower, eupper :: upper) end;
    84   in
    84   in
    85     pairself (HOLogic.mk_list spmatT) (Inttab.fold app vector ([], []))
    85     pairself (HOLogic.mk_list spmatT) (Inttab.fold app vector ([], []))