let is_team_valid (v:valid) (gl:student list) groupnum padd teamnum =
  let tl         = get_team gl groupnum padd teamnum in
  let (nc,ns,np) = List.fold_left (fun (a,b,c) s -> match student_resp s padd with 
                                       | Capt -> (a+1,b,c)
                                       | Secr -> (a,b+1,c)
                                       | Prog -> (a,b,c+1)
                                       | Zero -> (a,b,c)
                          ) (0,0,0) tl in 
  let rl = [(Capt,nc);(Secr,ns);(Prog,np)] in 
  let rec is_compar_valid vlist = match vlist with 
    | []   -> (true,"")
    | x::c -> match x with 
        | (r,Inferior n)    -> if ((List.assoc r rl) > n) 
          then (false,(Printf.sprintf "%d superfluous %s" ((List.assoc r rl)-n) (resp_to_full_string r)))
          else is_compar_valid c
        | (r,Superior n)    -> if ((List.assoc r rl) < n) 
          then (false,(Printf.sprintf "Missing %d %s" (n-(List.assoc r rl)) (resp_to_full_string r)))
          else is_compar_valid c
        | (r,Between (u,v)) -> if ((List.assoc r rl) < u) 
          then (false,(Printf.sprintf "Missing %d %s" (u-(List.assoc r rl)) (resp_to_full_string r)))
          else if ((List.assoc r rl) > v)
          then (false,(Printf.sprintf "%d superfluous %s" ((List.assoc r rl)-v) (resp_to_full_string r)))
          else is_compar_valid c 
  in if (tl = []) then (true,"")
    else (is_compar_valid v)