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)