+ let initial_set = [fun (r,h) -> (true,r,h)];;
+ let initial_r = fun var -> failwith ("no value for " ^ (Char.escaped var));;
+ let run dpm_set =
+ (* do any of the dpms in the set return (true, _, _) when given (initial_r, []) as input? *)
+ List.filter (fun one_dpm -> let (truth_value, _, _) = one_dpm (initial_r, []) in truth_value) dpm_set <> [];;
+
+ (* let's define some predicates *)
+ let male e = (e = Bob || e = Ted);;
+ let wife_of e1 e2 = ((e1,e2) = (Bob, Carol) || (e1,e2) = (Ted, Alice));;
+ let kisses e1 e2 = ((e1,e2) = (Bob, Carol) || (e1,e2) = (Ted, Alice));;
+ let misses e1 e2 = ((e1,e2) = (Bob, Carol) || (e1,e2) = (Ted, Carol));;