[Toss-devel-svn] SF.net SVN: toss:[1361] trunk/Toss
Status: Beta
Brought to you by:
lukaszkaiser
|
From: <luk...@us...> - 2011-03-15 11:03:24
|
Revision: 1361
http://toss.svn.sourceforge.net/toss/?rev=1361&view=rev
Author: lukstafi
Date: 2011-03-15 11:03:16 +0000 (Tue, 15 Mar 2011)
Log Message:
-----------
GameSimpl: fixed optional relations bug in stage 1: replacing equivalent and complement relations. New simplification algorithm for FormulaOps.remove_redundant (will form the base of GameSimpl stage 2: removing subsumed atoms).
Modified Paths:
--------------
trunk/Toss/Formula/FormulaOps.ml
trunk/Toss/Formula/FormulaOps.mli
trunk/Toss/Formula/FormulaOpsTest.ml
trunk/Toss/GGP/GDL.ml
trunk/Toss/GGP/GDLTest.ml
trunk/Toss/GGP/GameSimpl.ml
trunk/Toss/GGP/GameSimplTest.ml
trunk/Toss/GGP/tests/breakthrough-simpl.toss
trunk/Toss/GGP/tests/connect5-simpl.toss
Modified: trunk/Toss/Formula/FormulaOps.ml
===================================================================
--- trunk/Toss/Formula/FormulaOps.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/Formula/FormulaOps.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -119,6 +119,10 @@
(* ----------------- MAPPING TO ATOMS AND VAR SUBSTITUTION ------------------ *)
+let is_atom = function
+ | Rel _ | Eq _ | In _ -> true
+ | _ -> false
+
(* Map [f] to all literals (i.e. atoms or not(atom)'s) in the given
formula. Preserves order of subformulas. *)
let rec map_to_literals f g = function
@@ -661,7 +665,8 @@
if simp_p = p && simp_q = q then Times (p, q) else
simplify_re ~do_pnf ~do_formula (Times (simp_p, simp_q))
-(* Flatten "and"s and "or"s in a formula -- i.e. associativity. *)
+(* Flatten "and"s and "or"s in a formula --
+ i.e. associativity. Remove double negation along the way. *)
let rec flatten_formula phi =
let rec flat_and = function
| And conjs -> Aux.concat_map flat_and conjs
@@ -682,6 +687,7 @@
| And _ -> And (flat_and phi)
| All (vs, phi) -> All (vs, flatten_formula phi)
| Ex (vs, phi) -> Ex (vs, flatten_formula phi)
+ | Not (Not phi) -> flatten_formula phi
| Not phi -> Not (flatten_formula phi)
| (Rel _ | Eq _ | In _ | RealExpr _) as atom -> atom
@@ -709,38 +715,124 @@
free_conjs @ [Ex (vs, bound_phi)])
| phi -> [phi]
-(* Remove literals from disjunctions in positive positions
- (conjunctions in negative positions) that already occur conjoined
- to the disjucntion. (Does not descend the real part currently.) *)
-let remove_redundant phi =
- let rec aux base neg = function
+(* Simplify the formula by removing relational literals, depending on
+ what literals they are conjoined with up the tree, whether they are
+ in a disjunction and what literals they are disjoined with, keeping
+ track of the sign (variance) of a position. (Does not descend the
+ real part currently.) [implies] is applied to atoms only. Repeat
+ the removal till fixpoint since it can "unpack" literals e.g. from
+ conjunctions to disjunctions. *)
+let remove_redundant ?(implies=(=)) phi =
+ let implied_by x y = implies y x in
+ let literal neg phis =
+ if neg then List.map (fun phi->Not phi) phis
+ else phis in
+ (* FIXME: check if all is fine under [neg=false] *)
+ let rec aux_conjs posbase negbase neg conjs =
+ let more_posbase, subtasks = List.partition is_atom conjs in
+ let more_negbase, subtasks = Aux.partition_map (function
+ | Not phi when is_atom phi -> Aux.Left phi | phi -> Aux.Right phi
+ ) subtasks in
+ let more_posbase, more_negbase =
+ if neg then more_negbase, more_posbase
+ else more_posbase, more_negbase in
+ (* {{{ log entry *)
+ if !debug_level > 3 then (
+ Printf.printf "aux_conjs: neg=%b; \
+ posbase=%s -- negbase=%s\n\
+ more_posbase=%s -- more_negbase=%s\n%!"
+ neg
+ (String.concat "; " (List.map Formula.str posbase))
+ (String.concat "; " (List.map Formula.str negbase))
+ (String.concat "; " (List.map Formula.str more_posbase))
+ (String.concat "; " (List.map Formula.str more_negbase))
+ );
+ (* }}} *)
+ (* remove redundant *)
+ let more_posbase = List.filter
+ (fun more -> not (List.exists (implied_by more) posbase))
+ more_posbase in
+ let more_posbase = Aux.maximal implied_by more_posbase in
+ let more_negbase = List.filter
+ (fun less -> not (List.exists (implies less) negbase))
+ more_negbase in
+ let more_negbase = Aux.maximal implies more_negbase in
+ (* {{{ log entry *)
+ if !debug_level > 3 then (
+ Printf.printf "aux_conjs: result more_posbase=%s -- more_negbase=%s\n%!"
+ (String.concat "; " (List.map Formula.str more_posbase))
+ (String.concat "; " (List.map Formula.str more_negbase))
+ );
+ (* }}} *)
+ literal neg more_posbase @ literal (not neg) more_negbase @
+ List.map (aux (more_posbase @ posbase) (more_negbase @ negbase) neg)
+ subtasks
+
+ and aux_disjs posbase negbase neg disjs =
+ let poslits, subtasks = List.partition is_atom disjs in
+ let neglits, subtasks = Aux.partition_map (function
+ | Not phi when is_atom phi -> Aux.Left phi | phi -> Aux.Right phi
+ ) subtasks in
+ let poslits, neglits =
+ if neg then neglits, poslits else poslits, neglits in
+ (* {{{ log entry *)
+ if !debug_level > 3 then (
+ Printf.printf "aux_disjs: neg=%b; \
+ posbase=%s -- negbase=%s\n\
+ poslits=%s -- neglits=%s\n%!"
+ neg
+ (String.concat "; " (List.map Formula.str posbase))
+ (String.concat "; " (List.map Formula.str negbase))
+ (String.concat "; " (List.map Formula.str poslits))
+ (String.concat "; " (List.map Formula.str neglits))
+ );
+ (* }}} *)
+ (* remove contradicted *)
+ let poslits = List.filter
+ (fun more -> not (List.exists (implies more) negbase))
+ poslits in
+ let poslits = Aux.maximal implies poslits in
+ let neglits = List.filter
+ (fun less -> not (List.exists (implied_by less) posbase))
+ neglits in
+ let neglits = Aux.maximal implied_by neglits in
+ (* {{{ log entry *)
+ if !debug_level > 3 then (
+ Printf.printf "aux_disjs: result poslits=%s -- neglits=%s\n%!"
+ (String.concat "; " (List.map Formula.str poslits))
+ (String.concat "; " (List.map Formula.str neglits))
+ );
+ (* }}} *)
+ literal neg poslits @ literal (not neg) neglits @
+ List.map (aux posbase negbase neg) subtasks
+
+ and aux posbase negbase neg = function
| And conjs when not neg ->
- let more_base, subtasks = List.partition (function
- | Rel _ | Not (Rel _) -> true | _ -> false) conjs in
- And (more_base @ List.map (aux (more_base @ base) neg) subtasks)
+ And (aux_conjs posbase negbase neg conjs)
| Or conjs when neg ->
- let more_base, subtasks = List.partition (function
- | Rel _ | Not (Rel _) -> true | _ -> false) conjs in
- Or (more_base @ List.map (aux (more_base @ base) neg) subtasks)
+ Or (aux_conjs posbase negbase neg conjs)
+ | And disjs (* when neg *) ->
+ And (aux_disjs posbase negbase neg disjs)
| Or disjs (* when not neg *) ->
- let literals, subtasks = List.partition (function
- | Rel _ | Not (Rel _) -> true | _ -> false) disjs in
- let disjs =
- Aux.list_diff literals base @ List.map (aux base neg) subtasks in
- (match disjs with [disj] -> disj | _ -> Or disjs)
- | And disjs (* when neg *) ->
- let literals, subtasks = List.partition (function
- | Rel _ | Not (Rel _) -> true | _ -> false) disjs in
- let disjs =
- Aux.list_diff literals base @ List.map (aux base neg) subtasks in
- (match disjs with [disj] -> disj | _ -> And disjs)
- | Not phi -> Not (aux base (not neg) phi)
- | Ex (vs, phi) -> Ex (vs, aux base neg phi)
- | All (vs, phi) -> All (vs, aux base neg phi)
+ Or (aux_disjs posbase negbase neg disjs)
+
+ | Not phi -> Not (aux posbase negbase (not neg) phi)
+ | Ex (vs, phi) -> Ex (vs, aux posbase negbase neg phi)
+ | All (vs, phi) -> All (vs, aux posbase negbase neg phi)
| phi -> phi in
- aux [] false (flatten_formula phi)
+ let rec fixpoint phi =
+ (* {{{ log entry *)
+ if !debug_level > 1 then (
+ Printf.printf "remove_redundant: step %s\n%!"
+ (Formula.str phi)
+ );
+ (* }}} *)
+ let res = aux [] [] false (flatten_formula phi) in
+ if res = phi then res else fixpoint res in
+ fixpoint phi
+
(* Compute size of a formula (currently w/o descending the real part). *)
let rec size = function
| Or js | And js -> List.fold_left (+) 1 (List.map size js)
Modified: trunk/Toss/Formula/FormulaOps.mli
===================================================================
--- trunk/Toss/Formula/FormulaOps.mli 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/Formula/FormulaOps.mli 2011-03-15 11:03:16 UTC (rev 1361)
@@ -85,17 +85,23 @@
val pnf : formula -> formula
-(** Flatten "and"s and "or"s in a formula -- i.e. associativity. *)
+(** Flatten "and"s and "or"s in a formula --
+ i.e. associativity. Remove double negation along the way. *)
val flatten_formula : formula -> formula
(** Formula as a list of conjuncts, with one level of distributing
negation over disjunction and pushing quantifiers inside. *)
val flatten_ands : formula -> formula list
-(** Remove literals from disjunctions in positive positions
- (conjunctions in negative positions) that already occur conjoined
- to the disjucntion. (Does not descend the real part currently.) *)
-val remove_redundant : formula -> formula
+(** Simplify the formula by removing relational literals, depending on
+ what literals they are conjoined with up the tree, whether they are
+ in a disjunction and what literals they are disjoined with, keeping
+ track of the sign (variance) of a position. (Does not descend the
+ real part currently.) [implies] is applied to atoms only. Repeat
+ the removal till fixpoint since it can "unpack" literals e.g. from
+ conjunctions to disjunctions. *)
+val remove_redundant :
+ ?implies:(formula -> formula -> bool) -> formula -> formula
(** Compute size of a formula (currently w/o descending the real part). *)
val size : formula -> int
Modified: trunk/Toss/Formula/FormulaOpsTest.ml
===================================================================
--- trunk/Toss/Formula/FormulaOpsTest.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/Formula/FormulaOpsTest.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -329,6 +329,39 @@
formula_eq id phi2 (FormulaOps.make_fo_tc_disj k x y) phi1 in
tc_eq 2 "x" "y" "R(x, y)" "x = y or R(x, y) or ex t(R(x,t) and R(t,y))";
);
+
+ "remove_redundant default" >::
+ (fun () ->
+ let rr_eq phi1 phi2 =
+ formula_eq id phi2 FormulaOps.remove_redundant phi1 in
+ rr_eq "P(x) and P(x)" "P(x)";
+ rr_eq "P(x) and (not P(x) or Q(x))" "P(x) and Q(x)";
+ rr_eq "not P(x) and (O(x) or Q(x) or P(x))"
+ "not P(x) and (O(x) or Q(x))";
+ rr_eq "not P(x) and (not O(x) or Q(x) or P(x)) and O(x)"
+ "O(x) and Q(x) and not P(x)";
+ rr_eq "not (P(x) or (not P(x) and Q(x)))" "not (P(x) or Q(x))";
+ );
+
+ "remove_redundant P->Q,R->S" >::
+ (fun () ->
+ let implies phi1 phi2 =
+ match phi1, phi2 with
+ | Formula.Rel ("P",xs), Formula.Rel ("Q",ys) when xs=ys -> true
+ | Formula.Rel ("R",xs), Formula.Rel ("S",ys) when xs=ys -> true
+ | _ when phi1 = phi2 -> true
+ | _ -> false in
+ let rr_eq phi1 phi2 =
+ formula_eq id phi2 (FormulaOps.remove_redundant ~implies) phi1 in
+ rr_eq "P(x) and Q(x)" "P(x)";
+ rr_eq "P(x) and (not Q(x) or R(x,y))" "P(x) and R(x,y)";
+ rr_eq "Q(x) and (not P(x) or R(x,y))"
+ "Q(x) and (R(x, y) or not P(x))";
+ rr_eq "not Q(x) and (P(x) or R(x,y))" "R(x,y) and not Q(x)";
+ rr_eq "not (S(x,y) or (P(x) and not R(x,y)))"
+ "not (S(x, y) or P(x))";
+ );
+
] ;;
let a =
Modified: trunk/Toss/GGP/GDL.ml
===================================================================
--- trunk/Toss/GGP/GDL.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/GDL.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -3431,7 +3431,7 @@
} in
(* {{{ log entry *)
(* *
- let file = open_out "./GGP/tests/breakthrough-raw.toss" in
+ let file = open_out "./GGP/tests/connect5-raw.toss" in
output_string file (Arena.state_str result);
close_out file;
* *)
@@ -3451,7 +3451,7 @@
) loc_noop_legal in
(* {{{ log entry *)
(* *
- let file = open_out "./GGP/tests/breakthrough-simpl.toss" in
+ let file = open_out "./GGP/tests/connect5-simpl.toss" in
output_string file (Arena.state_str result);
close_out file;
* *)
Modified: trunk/Toss/GGP/GDLTest.ml
===================================================================
--- trunk/Toss/GGP/GDLTest.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/GDLTest.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -146,5 +146,5 @@
let breakthrough = load_rules "./GGP/examples/breakthrough.gdl" in
let connect5 = load_rules "./GGP/examples/connect5.gdl" in
let tictactoe = load_rules "./GGP/examples/tictactoe.gdl" in
- let gdl_def, toss_def = GDL.translate_game (Const "white") breakthrough in
+ let gdl_def, toss_def = GDL.translate_game (Const "x") connect5 in
ignore gdl_def; ignore connect5; ignore breakthrough; ignore tictactoe
Modified: trunk/Toss/GGP/GameSimpl.ml
===================================================================
--- trunk/Toss/GGP/GameSimpl.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/GameSimpl.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -23,10 +23,11 @@
that occur positively in the LHS and are complements of their
original. Derive all the tuples of embedded relations that are
required to be absent for a match (not present, even optionally,
- in the LHS). Remove the non-optional tuples for relations that are
- complements of their originals and add tuples of originals that
- are complements of relations that are required to be
- absent. Rename relations equivalent to their originals.
+ in the LHS). (1a1) Rename relations equivalent to their
+ originals. (1a2) Remove the non-optional tuples for relations that
+ are complements of their originals and (1a3) add tuples of
+ originals that are complements of relations that are required to
+ be absent.
(2) Locate relations that subsume, or are subsumed by others (in
terms of inclusion relations between their graphs). Simplify
@@ -94,7 +95,7 @@
(String.concat ", " fluents)
);
(* }}} *)
- (* prepare for (3) and (1) *)
+ (* prepare for (1) and (2) *)
let subset_table =
List.fold_left (fun table (rel,arity) ->
let rel_tups =
@@ -109,6 +110,14 @@
) Aux.Strings.empty signat in
Aux.StrMap.add rel row table
) Aux.StrMap.empty signat in
+ (* {{{ log entry *)
+ if !debug_level > 2 then (
+ Printf.printf "GameSimpl: subset table =\n%s\n%!"
+ (Aux.StrMap.fold (fun k v acc ->
+ acc^"\n"^k^" < "^
+ String.concat ", " (Aux.Strings.elements v)) subset_table "")
+ );
+ (* }}} *)
let subsumed rel1 rel2 =
Aux.Strings.mem rel2 (Aux.StrMap.find rel1 subset_table) in
let compl_table =
@@ -124,8 +133,8 @@
let ntups = tcard rel_tups and ntups2 = tcard rel2_tups in
if ntups >= ntups2 &&
ntups + ntups2 = Aux.int_pow nelems arity &&
- Structure.Tuples.is_empty
- (Structure.Tuples.inter rel_tups rel2_tups)
+ Structure.Tuples.is_empty
+ (Structure.Tuples.inter rel_tups rel2_tups)
then Aux.Strings.add rel2 row
else row
) Aux.Strings.empty signat in
@@ -137,19 +146,30 @@
let equivalent =
List.map (fun (rel1, arity) ->
try
- let rel2, _ =
- List.find (fun (rel2, arity2) ->
- rel1 <> rel2 && arity = arity2 &&
- (complement rel1 rel2 ||
- (subsumed rel1 rel2 && subsumed rel2 rel1))
- ) signat in
- rel1, (rel2, complement rel1 rel2)
+ let rel2, _ =
+ List.find (fun (rel2, arity2) ->
+ arity = arity2 &&
+ not (List.mem rel2 fluents ||
+ List.mem_assoc rel2 game.Arena.defined_rels) &&
+ (complement rel1 rel2 ||
+ (subsumed rel1 rel2 && subsumed rel2 rel1))
+ ) signat in
+ rel1, (rel2, complement rel1 rel2)
with Not_found -> rel1, (rel1, false)
) signat in
let removable rel =
+ let spec = DiscreteRule.special_rel_of rel in
+ let rel =
+ match spec with
+ | None -> rel
+ | Some spec -> DiscreteRule.orig_rel_of rel in
not (List.mem rel fluents) &&
not (List.mem_assoc rel game.Arena.defined_rels) &&
- not (List.exists (fun (_,(rel2,_)) -> rel2=rel) equivalent) in
+ not (List.exists (fun (_,(rel2,_)) -> rel2=rel) equivalent) &&
+ not (List.mem (fst (List.assoc rel equivalent)) fluents ||
+ List.mem_assoc (fst (List.assoc rel equivalent))
+ game.Arena.defined_rels)
+ in
(* {{{ log entry *)
if !debug_level > 0 then (
Printf.printf "GameSimpl: equivalent structures --\n%s\n%!"
@@ -217,6 +237,7 @@
let ltups = Structure.Tuples.elements in
let lhs_neg_tups =
r.ContinuousRule.compiled.DiscreteRule.lhs_neg_tups in
+ (* 1a1: renaming removable relations to their originals *)
let lhs_struc =
Structure.StringMap.fold (fun rel tups lhs_struc ->
let spec = DiscreteRule.special_rel_of rel in
@@ -227,14 +248,17 @@
if not (removable rel) then lhs_struc
else
let orig, neg = List.assoc rel equivalent in
- if not neg then
- let orig =
- match spec with
- | None -> orig
- | Some spec -> "_"^spec^"_"^orig in
+ let orig =
+ match spec with
+ | None -> orig
+ | Some spec -> "_"^spec^"_"^orig in
+ if not neg (* 1a1 *)
+ || (neg && spec = Some "opt") (* not-1a2 *)
+ then
Structure.add_rels lhs_struc orig (ltups tups)
else if List.mem_assoc rel lhs_neg_tups
- then
+ && spec <> Some "opt"
+ then (* 1a3 *)
Structure.add_rels lhs_struc orig
(List.assoc rel lhs_neg_tups)
else lhs_struc
@@ -289,4 +313,8 @@
emb_rels = emb_rels;
}}) game.Arena.rules} in
+ (* 2 *)
+ (*let game =
+ Arena.map_to_formulas (FormulaOps.)*)
+
game, state
Modified: trunk/Toss/GGP/GameSimplTest.ml
===================================================================
--- trunk/Toss/GGP/GameSimplTest.ml 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/GameSimplTest.ml 2011-03-15 11:03:16 UTC (rev 1361)
@@ -58,3 +58,14 @@
with
| Some tests -> ignore (run_test_tt ~verbose:true tests)
| None -> ()
+
+let a () =
+ let breakthrough = state_of_file "./GGP/tests/breakthrough-raw.toss" in
+ Printf.printf "\nINPUT:\n%s\n%!" (Arena.state_str breakthrough);
+ GameSimpl.debug_level := 4;
+ let res = GameSimpl.simplify breakthrough in
+ let resf = open_out "./GGP/tests/breakthrough-simpl.toss" in
+ let res_str = Arena.state_str res in
+ output_string resf res_str;
+ close_out resf;
+ Printf.printf "\nRESULT:\n%s\n%!" res_str
Modified: trunk/Toss/GGP/tests/breakthrough-simpl.toss
===================================================================
--- trunk/Toss/GGP/tests/breakthrough-simpl.toss 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/tests/breakthrough-simpl.toss 2011-03-15 11:03:16 UTC (rev 1361)
@@ -1,10 +1,13 @@
PLAYERS white, black
RULE move_x1_y1_x2_y2_0:
[cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
+ _opt_cellholds_x2_y2_black {
+ cellholds_x1_y1__blank_; cellholds_x2_y2__blank_; control__blank_};
+ _opt_cellholds_x2_y2_white (control__blank_);
+ _opt_control_black {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ _opt_control_white {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
cellholds_x2_y2_white (cellholds_x1_y1__blank_);
control_white (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
index__cellholds_x2_y2_MV1_y2 {
cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2
@@ -24,31 +27,34 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
RULE move_x1_y1_x2_y2_00:
[cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
+ _opt_cellholds_x2_y2_black {
+ cellholds_x1_y1__blank_; cellholds_x2_y2__blank_; control__blank_};
+ _opt_cellholds_x2_y2_white (control__blank_);
+ _opt_control_black {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ _opt_control_white {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
cellholds_x2_y2_white (cellholds_x1_y1__blank_);
control_white (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
index__cellholds_x2_y2_MV1_y2 {
cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2
@@ -68,42 +74,45 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
-RULE move_x_y1_x_y2_0:
- [cellholds_x_y1__blank_, cellholds_x_y2__blank_, control__blank_ |
- EQ___cellholds_x2_y2_MV1_x2
- (cellholds_x_y1__blank_, cellholds_x_y2__blank_);
- cellholds_x2_y2_white (cellholds_x_y1__blank_);
- control_white (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x_y1__blank_; cellholds_x_y2__blank_};
+RULE move_x1_y1_x2_y2_1:
+ [cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
+ _opt_cellholds_x2_y2_black (control__blank_);
+ _opt_cellholds_x2_y2_white {
+ cellholds_x1_y1__blank_; cellholds_x2_y2__blank_; control__blank_};
+ _opt_control_black {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ _opt_control_white {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ cellholds_x2_y2_black (cellholds_x1_y1__blank_);
+ control_black (control__blank_);
index__cellholds_x2_y2_MV1_y2 {
- cellholds_x_y1__blank_; cellholds_x_y2__blank_};
+ cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2
+ (cellholds_x2_y2__blank_, cellholds_x1_y1__blank_);
succ__cellholds_x2_y2_MV1_y2__cellholds_x2_y2_MV1_y2
- (cellholds_x_y1__blank_, cellholds_x_y2__blank_)
+ (cellholds_x2_y2__blank_, cellholds_x1_y1__blank_)
|
] ->
- [cellholds_x_y1__blank_, cellholds_x_y2__blank_, control__blank_ |
- cellholds_x2_y2_white (cellholds_x_y2__blank_);
- control_black (control__blank_)
+ [cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
+ cellholds_x2_y2_black (cellholds_x2_y2__blank_);
+ control_white (control__blank_)
|
]
emb cellholds_x2_y2_black, cellholds_x2_y2_white, control_black,
@@ -112,35 +121,38 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
-RULE move_x1_y1_x2_y2_1:
+RULE move_x1_y1_x2_y2_10:
[cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
+ _opt_cellholds_x2_y2_black (control__blank_);
+ _opt_cellholds_x2_y2_white {
+ cellholds_x1_y1__blank_; cellholds_x2_y2__blank_; control__blank_};
+ _opt_control_black {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+ _opt_control_white {cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
cellholds_x2_y2_black (cellholds_x1_y1__blank_);
control_black (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
index__cellholds_x2_y2_MV1_y2 {
cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2
- (cellholds_x2_y2__blank_, cellholds_x1_y1__blank_);
+ (cellholds_x1_y1__blank_, cellholds_x2_y2__blank_);
succ__cellholds_x2_y2_MV1_y2__cellholds_x2_y2_MV1_y2
(cellholds_x2_y2__blank_, cellholds_x1_y1__blank_)
|
@@ -156,42 +168,44 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
-RULE move_x1_y1_x2_y2_10:
- [cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
- cellholds_x2_y2_black (cellholds_x1_y1__blank_);
- control_black (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
+RULE move_x_y1_x_y2_0:
+ [cellholds_x_y1__blank_, cellholds_x_y2__blank_, control__blank_ |
+ EQ___cellholds_x2_y2_MV1_x2
+ (cellholds_x_y1__blank_, cellholds_x_y2__blank_);
+ _opt_cellholds_x2_y2_black {cellholds_x_y1__blank_; control__blank_};
+ _opt_cellholds_x2_y2_white (control__blank_);
+ _opt_control_black {cellholds_x_y1__blank_; cellholds_x_y2__blank_};
+ _opt_control_white {cellholds_x_y1__blank_; cellholds_x_y2__blank_};
+ cellholds_x2_y2_white (cellholds_x_y1__blank_);
+ control_white (control__blank_);
index__cellholds_x2_y2_MV1_y2 {
- cellholds_x1_y1__blank_; cellholds_x2_y2__blank_};
- succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2
- (cellholds_x1_y1__blank_, cellholds_x2_y2__blank_);
+ cellholds_x_y1__blank_; cellholds_x_y2__blank_};
succ__cellholds_x2_y2_MV1_y2__cellholds_x2_y2_MV1_y2
- (cellholds_x2_y2__blank_, cellholds_x1_y1__blank_)
+ (cellholds_x_y1__blank_, cellholds_x_y2__blank_)
|
] ->
- [cellholds_x1_y1__blank_, cellholds_x2_y2__blank_, control__blank_ |
- cellholds_x2_y2_black (cellholds_x2_y2__blank_);
- control_white (control__blank_)
+ [cellholds_x_y1__blank_, cellholds_x_y2__blank_, control__blank_ |
+ cellholds_x2_y2_white (cellholds_x_y2__blank_);
+ control_black (control__blank_)
|
]
emb cellholds_x2_y2_black, cellholds_x2_y2_white, control_black,
@@ -200,33 +214,35 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
RULE move_x_y1_x_y2_1:
[cellholds_x_y1__blank_, cellholds_x_y2__blank_, control__blank_ |
EQ___cellholds_x2_y2_MV1_x2
(cellholds_x_y1__blank_, cellholds_x_y2__blank_);
+ _opt_cellholds_x2_y2_black (control__blank_);
+ _opt_cellholds_x2_y2_white {cellholds_x_y1__blank_; control__blank_};
+ _opt_control_black {cellholds_x_y1__blank_; cellholds_x_y2__blank_};
+ _opt_control_white {cellholds_x_y1__blank_; cellholds_x_y2__blank_};
cellholds_x2_y2_black (cellholds_x_y1__blank_);
control_black (control__blank_);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_x_y1__blank_; cellholds_x_y2__blank_};
index__cellholds_x2_y2_MV1_y2 {
cellholds_x_y1__blank_; cellholds_x_y2__blank_};
succ__cellholds_x2_y2_MV1_y2__cellholds_x2_y2_MV1_y2
@@ -244,24 +260,24 @@
(not
ex cellholds_x374_8__blank_
(cellholds_x2_8_MV1(cellholds_x374_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x374_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x374_8__blank_) and
cellholds_x2_y2_white(cellholds_x374_8__blank_)) and
- not
not
- ex cellholds_x375_y368__blank_
- (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x375_y368__blank_) and
- cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x375_y368__blank_
+ (index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x375_y368__blank_) and
+ cellholds_x2_y2_black(cellholds_x375_y368__blank_)) and
+ not
+ ex cellholds_x376_1__blank_
+ (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x376_1__blank_) and
+ cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
not
- ex cellholds_x376_1__blank_
- (cellholds_x2_1_MV1(cellholds_x376_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x376_1__blank_) and
- cellholds_x2_y2_black(cellholds_x376_1__blank_)) and
- not
not
ex cellholds_x377_y369__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x377_y369__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x377_y369__blank_) and
cellholds_x2_y2_white(cellholds_x377_y369__blank_)))
LOC 0 {
PLAYER white
@@ -271,12 +287,12 @@
:(
ex cellholds_x26_8__blank_
(cellholds_x2_8_MV1(cellholds_x26_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x26_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x26_8__blank_) and
cellholds_x2_y2_white(cellholds_x26_8__blank_)) or
not
ex cellholds_x27_y26__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x27_y26__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x27_y26__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x27_y26__blank_) and
cellholds_x2_y2_black(cellholds_x27_y26__blank_))
);
black:
@@ -284,12 +300,12 @@
:(
ex cellholds_x30_1__blank_
(cellholds_x2_1_MV1(cellholds_x30_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x30_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x30_1__blank_) and
cellholds_x2_y2_black(cellholds_x30_1__blank_)) or
not
ex cellholds_x31_y28__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x31_y28__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x31_y28__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x31_y28__blank_) and
cellholds_x2_y2_white(cellholds_x31_y28__blank_))
)
}
@@ -304,12 +320,12 @@
:(
ex cellholds_x26_8__blank_
(cellholds_x2_8_MV1(cellholds_x26_8__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x26_8__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x26_8__blank_) and
cellholds_x2_y2_white(cellholds_x26_8__blank_)) or
not
ex cellholds_x27_y26__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x27_y26__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x27_y26__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x27_y26__blank_) and
cellholds_x2_y2_black(cellholds_x27_y26__blank_))
);
black:
@@ -317,12 +333,12 @@
:(
ex cellholds_x30_1__blank_
(cellholds_x2_1_MV1(cellholds_x30_1__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x30_1__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x30_1__blank_) and
cellholds_x2_y2_black(cellholds_x30_1__blank_)) or
not
ex cellholds_x31_y28__blank_
(index__cellholds_x2_y2_MV1_y2(cellholds_x31_y28__blank_) and
- index__cellholds_x2_y2_MV1_x2(cellholds_x31_y28__blank_) and
+ index__cellholds_x2_y2_MV1_y2(cellholds_x31_y28__blank_) and
cellholds_x2_y2_white(cellholds_x31_y28__blank_))
)
}
@@ -1478,30 +1494,6 @@
};
control_MV1 (control_MV1); control_black:1 {};
control_white (control_MV1);
- index__cellholds_x2_y2_MV1_x2 {
- cellholds_8_8_MV1; cellholds_8_7_MV1; cellholds_8_6_MV1;
- cellholds_8_5_MV1; cellholds_8_4_MV1; cellholds_8_3_MV1;
- cellholds_8_2_MV1; cellholds_8_1_MV1; cellholds_7_8_MV1;
- cellholds_7_7_MV1; cellholds_7_6_MV1; cellholds_7_5_MV1;
- cellholds_7_4_MV1; cellholds_7_3_MV1; cellholds_7_2_MV1;
- cellholds_7_1_MV1; cellholds_6_8_MV1; cellholds_6_7_MV1;
- cellholds_6_6_MV1; cellholds_6_5_MV1; cellholds_6_4_MV1;
- cellholds_6_3_MV1; cellholds_6_2_MV1; cellholds_6_1_MV1;
- cellholds_5_8_MV1; cellholds_5_7_MV1; cellholds_5_6_MV1;
- cellholds_5_5_MV1; cellholds_5_4_MV1; cellholds_5_3_MV1;
- cellholds_5_2_MV1; cellholds_5_1_MV1; cellholds_4_8_MV1;
- cellholds_4_7_MV1; cellholds_4_6_MV1; cellholds_4_5_MV1;
- cellholds_4_4_MV1; cellholds_4_3_MV1; cellholds_4_2_MV1;
- cellholds_4_1_MV1; cellholds_3_8_MV1; cellholds_3_7_MV1;
- cellholds_3_6_MV1; cellholds_3_5_MV1; cellholds_3_4_MV1;
- cellholds_3_3_MV1; cellholds_3_2_MV1; cellholds_3_1_MV1;
- cellholds_2_8_MV1; cellholds_2_7_MV1; cellholds_2_6_MV1;
- cellholds_2_5_MV1; cellholds_2_4_MV1; cellholds_2_3_MV1;
- cellholds_2_2_MV1; cellholds_2_1_MV1; cellholds_1_8_MV1;
- cellholds_1_7_MV1; cellholds_1_6_MV1; cellholds_1_5_MV1;
- cellholds_1_4_MV1; cellholds_1_3_MV1; cellholds_1_2_MV1;
- cellholds_1_1_MV1
- };
index__cellholds_x2_y2_MV1_y2 {
cellholds_8_8_MV1; cellholds_8_7_MV1; cellholds_8_6_MV1;
cellholds_8_5_MV1; cellholds_8_4_MV1; cellholds_8_3_MV1;
@@ -1526,7 +1518,7 @@
cellholds_1_4_MV1; cellholds_1_3_MV1; cellholds_1_2_MV1;
cellholds_1_1_MV1
};
- role__cellholds_x2_y2_MV1_x2:1 {}; role__cellholds_x2_y2_MV1_y2:1 {};
+ role__cellholds_x2_y2_MV1_y2:1 {};
succ__cellholds_x2_y2_MV1_x2__cellholds_x2_y2_MV1_x2 {
(cellholds_7_8_MV1, cellholds_8_8_MV1);
(cellholds_7_8_MV1, cellholds_8_7_MV1);
Modified: trunk/Toss/GGP/tests/connect5-simpl.toss
===================================================================
--- trunk/Toss/GGP/tests/connect5-simpl.toss 2011-03-15 00:46:12 UTC (rev 1360)
+++ trunk/Toss/GGP/tests/connect5-simpl.toss 2011-03-15 11:03:16 UTC (rev 1361)
@@ -1,6 +1,11 @@
PLAYERS x, o
RULE mark_x149_y149_0:
[cell_x149_y149__blank_, control__blank_ |
+ _opt_cell_x_y_b (control__blank_);
+ _opt_cell_x_y_o {cell_x149_y149__blank_; control__blank_};
+ _opt_cell_x_y_x {cell_x149_y149__blank_; control__blank_};
+ _opt_control_o (cell_x149_y149__blank_);
+ _opt_control_x (cell_x149_y149__blank_);
cell_x_y_b (cell_x149_y149__blank_); control_MV1 (control__blank_);
control_x (control__blank_)
|
@@ -181,6 +186,11 @@
not not ex cell_x182_y182__blank_ cell_x_y_b(cell_x182_y182__blank_))
RULE mark_x159_y159_1:
[cell_x159_y159__blank_, control__blank_ |
+ _opt_cell_x_y_b (control__blank_);
+ _opt_cell_x_y_o {cell_x159_y159__blank_; control__blank_};
+ _opt_cell_x_y_x {cell_x159_y159__blank_; control__blank_};
+ _opt_control_o (cell_x159_y159__blank_);
+ _opt_control_x (cell_x159_y159__blank_);
cell_x_y_b (cell_x159_y159__blank_); control_MV1 (control__blank_);
control_o (control__blank_)
|
@@ -1662,21 +1672,6 @@
};
cell_x_y_o:1 {}; cell_x_y_x:1 {}; control_MV1 (control_MV1);
control_o:1 {}; control_x (control_MV1);
- coordinate__cell_x_y_MV1_x {
- cell_h_h_MV1; cell_h_g_MV1; cell_h_f_MV1; cell_h_e_MV1; cell_h_d_MV1;
- cell_h_c_MV1; cell_h_b_MV1; cell_h_a_MV1; cell_g_h_MV1; cell_g_g_MV1;
- cell_g_f_MV1; cell_g_e_MV1; cell_g_d_MV1; cell_g_c_MV1; cell_g_b_MV1;
- cell_g_a_MV1; cell_f_h_MV1; cell_f_g_MV1; cell_f_f_MV1; cell_f_e_MV1;
- cell_f_d_MV1; cell_f_c_MV1; cell_f_b_MV1; cell_f_a_MV1; cell_e_h_MV1;
- cell_e_g_MV1; cell_e_f_MV1; cell_e_e_MV1; cell_e_d_MV1; cell_e_c_MV1;
- cell_e_b_MV1; cell_e_a_MV1; cell_d_h_MV1; cell_d_g_MV1; cell_d_f_MV1;
- cell_d_e_MV1; cell_d_d_MV1; cell_d_c_MV1; cell_d_b_MV1; cell_d_a_MV1;
- cell_c_h_MV1; cell_c_g_MV1; cell_c_f_MV1; cell_c_e_MV1; cell_c_d_MV1;
- cell_c_c_MV1; cell_c_b_MV1; cell_c_a_MV1; cell_b_h_MV1; cell_b_g_MV1;
- cell_b_f_MV1; cell_b_e_MV1; cell_b_d_MV1; cell_b_c_MV1; cell_b_b_MV1;
- cell_b_a_MV1; cell_a_h_MV1; cell_a_g_MV1; cell_a_f_MV1; cell_a_e_MV1;
- cell_a_d_MV1; cell_a_c_MV1; cell_a_b_MV1; cell_a_a_MV1
- };
coordinate__cell_x_y_MV1_y {
cell_h_h_MV1; cell_h_g_MV1; cell_h_f_MV1; cell_h_e_MV1; cell_h_d_MV1;
cell_h_c_MV1; cell_h_b_MV1; cell_h_a_MV1; cell_g_h_MV1; cell_g_g_MV1;
@@ -2596,6 +2591,6 @@
(cell_a_a_MV1, cell_d_b_MV1); (cell_a_a_MV1, cell_c_b_MV1);
(cell_a_a_MV1, cell_b_b_MV1); (cell_a_a_MV1, cell_a_b_MV1)
};
- role__cell_x_y_MV1_x:1 {}; role__cell_x_y_MV1_y:1 {}
+ role__cell_x_y_MV1_y:1 {}
|
]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|