
(*
module Z64 = 
  struct 
    type t = Int64.t
    let of_int = Int64.of_int
    let neg = Int64.neg
    let add = Int64.add
    let sub = Int64.sub
    let mul = Int64.mul
    let div = Int64.div
    let succ = Int64.succ
    let zero = Int64.zero
    let one = Int64.one
    let write ch x = Printf.fprintf ch "%Ld" x
  end
*)

  let cloak2 m v w = 
    assert(Array.length v = n_rows m);
    assert(Array.length w = n_cols m);
    createij (
      fun i j ->
	if i=0 && j=0 then
	  N.zero
	else if i=0 then
	  w.(j-1)
	else if j=0 then
	  v.(i-1)
	else
	  get m (i-1) (j-1)
    ) (1+(n_rows m)) (1+(n_cols m))
  let cloak m v = 
    assert_square_mat m;
    cloak2 m v v
