(* TP 13 - Arbres rouge noir *)

type couleur = R | B ;;

type arn = V | N of couleur * arn * int * arn ;;

let a0 = V;; (* ok *)
let a1 = N (R, N (B, V, 0, V), 3, N (B, V, 5, V));; (* non *)
let a2 = N (B, N (R, V, 0, V), 3, N (R, V, 5, V));; (* ok *)
let a3 = N (B, N (R, V, 0, V), 3, N (B, V, 5, V));; (* non *)
let a4 = N (B, N (B, V, 0, V), 3, N (B, V, 5, V));; (* ok *)
let a5 = N (B, N (B, V, 0, V), 3, N (R, N (B, V, 4, V), 5, V));; (* non *)
let a6 = N (B, N (B, V, 0, V), 3, N (R, N (B, V, 4, V), 5, N (B, V, 7, V)));; (* ok *)
let a7 = N (B, N (B, V, 0, V), 3, N (R, N (B, V, 4, V), 5, N (R, V, 7, N (B, V, 8, V) )));; (* non *)

(* Q14 *)
let valide a =
  failwith "A FAIRE";;

assert (valide a0);;
assert (not (valide a1));;
assert (valide a2);;
assert (not (valide a3));;
assert (valide a4);;
assert (not (valide a5));;
assert (valide a6);;
assert (not (valide a7));;