type variables = char;; type formule = | Var of variables | Non of formule | Implique of formule*formule | Equivaut of formule*formule | Et of formule list | Ou of formule list;; let f = Implique (Et [Var 'p';Non (Var 'q')], Ou [Var 'p';Non (Var 'r')]);; let exemple_de_contexte v = match v with |'p' -> true |'q' -> false |'r' -> false |_ -> true;; let rec interpretation contexte formule = match formule with | Var v-> contexte v | Non f -> not (interpretation contexte f) | Implique (a,b) -> not (interpretation contexte a) || (interpretation contexte b) | Equivaut (a,b) -> not (interpretation contexte a) = (interpretation contexte b) | Et [] -> true | Et (h::t) -> (interpretation contexte h) && (interpretation contexte (Et t)) | Ou [] -> false | Ou (h::t) -> (interpretation contexte h) || (interpretation contexte (Ou t));; interpretation (exemple_de_contexte) (Et [Var 'q'; Non (Var 'r')]);;