+ let int (x : bool) : int = Obj.magic x
+ let kint (x : Tree.NodeKind.t) : int = Obj.magic x
+ let summary tree node parent fc ns =
+ (int (ns != T.nil)) lor
+ ((int (fc != T.nil)) lsl 1) lor
+ ((int (node == T.next_sibling tree parent)) lsl 2) lor
+ ((int (node == T.first_child tree parent)) lsl 3) lor
+ ((kint (T.kind tree node)) lsl 4)
+
+ let has_next_sibling summary : bool = Obj.magic (summary land 1)
+ let has_first_child summary : bool = Obj.magic ((summary lsr 1) land 1)
+ let is_next_sibling summary : bool = Obj.magic ((summary lsr 2) land 1)
+ let is_first_child summary : bool = Obj.magic ((summary lsr 3) land 1)
+ let kind summary : Tree.NodeKind.t = Obj.magic (summary lsr 4)
+
+
+ let eval_form phi node_summary f_set n_set p_set s_set =