[Toss-devel-svn] SF.net SVN: toss:[1615] trunk/Toss
Status: Beta
Brought to you by:
lukaszkaiser
From: <luk...@us...> - 2011-10-24 21:38:38
|
Revision: 1615 http://toss.svn.sourceforge.net/toss/?rev=1615&view=rev Author: lukstafi Date: 2011-10-24 21:38:29 +0000 (Mon, 24 Oct 2011) Log Message: ----------- GDL translation: pruning next clause literals that are redundant wrt. legal clause literals; reverting from using Sum to set the counter element. Solver: exposing the ability to provide the assignment of free variables to get_real_val. ContinuousRule: computing the update (of functions) using the assignment on which the rewrite is performed. Modified Paths: -------------- trunk/Toss/Arena/ContinuousRule.ml trunk/Toss/Formula/Aux.ml trunk/Toss/Formula/Aux.mli trunk/Toss/Formula/AuxTest.ml trunk/Toss/GGP/GDL.mli trunk/Toss/GGP/TranslateFormula.ml trunk/Toss/GGP/TranslateFormula.mli trunk/Toss/GGP/TranslateGame.ml trunk/Toss/GGP/TranslateGame.mli trunk/Toss/GGP/TranslateGameTest.ml trunk/Toss/GGP/tests/connect4-raw.toss trunk/Toss/GGP/tests/connect4-simpl.toss trunk/Toss/GGP/tests/pacman3p-raw.toss trunk/Toss/GGP/tests/pacman3p-simpl.toss trunk/Toss/Solver/AssignmentSet.ml trunk/Toss/Solver/AssignmentSet.mli trunk/Toss/Solver/Solver.ml trunk/Toss/Solver/Solver.mli trunk/Toss/www/reference/reference.tex Modified: trunk/Toss/Arena/ContinuousRule.ml =================================================================== --- trunk/Toss/Arena/ContinuousRule.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/Arena/ContinuousRule.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -175,8 +175,11 @@ (lhs, FormulaSubst.subst_real ["t", Formula.Const !time] rhs)) upd in (* we don't need to use val_map because !last_struc contains the evolved values *) + let asg = AssignmentSet.fo_assgn_of_list + (List.map (fun (e, a) -> + `FO (left_elname e), a) m) in let upd_vals = List.map - (fun (lhs,expr) -> lhs, Solver.M.get_real_val expr !last_struc) + (fun (lhs,expr) -> lhs, Solver.M.get_real_val ~asg expr !last_struc) upd in (* we pass the evolved structure to discrete rewriting, so that function values can be copied to new elements in case they are Modified: trunk/Toss/Formula/Aux.ml =================================================================== --- trunk/Toss/Formula/Aux.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/Formula/Aux.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -229,6 +229,12 @@ try f hd :: tl with Not_found -> tl +let rec find_try f = function + | [] -> raise Not_found + | hd::tl -> + try f hd + with Not_found -> find_try f tl + let rec fold_left_try f accu l = match l with [] -> accu Modified: trunk/Toss/Formula/Aux.mli =================================================================== --- trunk/Toss/Formula/Aux.mli 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/Formula/Aux.mli 2011-10-24 21:38:29 UTC (rev 1615) @@ -142,6 +142,10 @@ raise [Not_found]. Therefore [map_try] call cannot raise [Not_found]. *) val map_try : ('a -> 'b) -> 'a list -> 'b list +(** Find the first element of the list on which the function does not + raise [Not_found] and return its result. Raises [Not_found] if + the function results in [Not_found] on all elements. *) +val find_try : ('a -> 'b) -> 'a list -> 'b (** Fold [f] over the list collecting results whose computation does not raise [Not_found]. Therefore [fold_left_try] call cannot raise Modified: trunk/Toss/Formula/AuxTest.ml =================================================================== --- trunk/Toss/Formula/AuxTest.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/Formula/AuxTest.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -124,7 +124,7 @@ ) [] ["a",1; "b",2; "b",1; "a",1]) ); - "unsome, map_try" >:: + "unsome, map_try, find_try" >:: (fun () -> assert_equal ~printer:(fun x->x) "x" (Aux.unsome (Some "x")); @@ -138,6 +138,12 @@ assert_equal ~printer:(String.concat "; ") ["a";"b";"d"] (Aux.map_try f [`A;`B;`C;`D]); + + let f = function `A -> "a" | `B -> "b" | `C -> raise Not_found + | `D -> "d" in + assert_equal ~printer:(fun x->x) + "a" + (Aux.find_try f [`C;`A;`B;`C;`D]); ); "product, all_ntuples, concat_foldr" >:: Modified: trunk/Toss/GGP/GDL.mli =================================================================== --- trunk/Toss/GGP/GDL.mli 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/GDL.mli 2011-10-24 21:38:29 UTC (rev 1615) @@ -76,6 +76,7 @@ (** Check for equality modulo ground terms on the right. *) val mask_blank : term list -> term list -> bool val unify_all : substitution -> term list -> substitution +val unify_rels : ?sb:substitution -> rel_atom -> rel_atom -> substitution val rels_unify : rel_atom -> rel_atom -> bool val subst : substitution -> term -> term val subst_consts : substitution -> term -> term @@ -84,6 +85,7 @@ val subst_literal : substitution -> literal -> literal val subst_literals : substitution -> literal list -> literal list val subst_clause : substitution -> clause -> clause +val subst_consts_literals : substitution -> literal list -> literal list val subst_consts_clause : substitution -> clause -> clause module Tuples : Set.S with type elt = term array @@ -176,6 +178,7 @@ val atom_str : atom -> string val rel_atom_str : rel_atom -> string +val rel_atoms_str : rel_atom list -> string val def_str : string * def_branch list -> string val literal_str : literal -> string val literals_str : literal list -> string Modified: trunk/Toss/GGP/TranslateFormula.ml =================================================================== --- trunk/Toss/GGP/TranslateFormula.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/TranslateFormula.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -205,9 +205,8 @@ let cc = Formula.Fun (c, counter_v) and ct = transl_c t in if cc = ct then [] else [Formula.RealExpr ( - Formula.Sum ([counter_v], Formula.Rel (counter_n, [|counter_v|]), - minus cc ct) - , sign_op)] in + (* Formula.Sum ([counter_v], Formula.Rel (counter_n, [|counter_v|]),) *) + minus cc ct, sign_op)] in let transl_numfun_rel sign rel t1 t2 = let sign_op = if sign then Formula.EQZero else Formula.NEQZero in @@ -215,9 +214,8 @@ FormulaSubst.subst_real [":x", transl_c t1] (List.assoc rel data.num_functions) in [Formula.RealExpr ( - Formula.Sum ([counter_v], Formula.Rel (counter_n, [|counter_v|]), - minus f_result (transl_c t2)) - , sign_op)] in + (* Formula.Sum ([counter_v], Formula.Rel (counter_n, [|counter_v|]),) *) + minus f_result (transl_c t2), sign_op)] in let rec aux = function | Pos (True (Func (c, [|t|]))) when List.mem c data.counters && @@ -373,12 +371,23 @@ if pos_vars = [] then base_part else Formula.Ex ((pos_vars :> Formula.var list), base_part) +let has_counter t = + FormulaMap.fold_formula + {FormulaMap.make_fold ( || ) false with + FormulaMap.fold_Fun = (fun _ v -> v = counter_v)} t + (* Translate a disjunction of conjunctions of literals (and disjs of lits). *) -let translate data disj = +let translate ?(counter_guard=true) data disj = let disj = separate_disj data.counters disj in - Formula.Or (List.map (fun (rels_phi, pos_state, neg_state) -> - transl_disjunct data rels_phi pos_state neg_state [] - ) disj) + let res = + Formula.Or (List.map (fun (rels_phi, pos_state, neg_state) -> + transl_disjunct data rels_phi pos_state neg_state [] + ) disj) in + if counter_guard && has_counter res + then Formula.Ex + ([counter_v], + Formula.And [Formula.Rel (counter_n, [|counter_v|]); res]) + else res (* **************************************** *) (* {3 Build defined relations.} *) Modified: trunk/Toss/GGP/TranslateFormula.mli =================================================================== --- trunk/Toss/GGP/TranslateFormula.mli 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/TranslateFormula.mli 2011-10-24 21:38:29 UTC (rev 1615) @@ -24,8 +24,12 @@ string list -> GDL.literal list list -> (GDL.literal list * GDL.literal list * GDL.literal list) list +(** Translate a disjunction of conjunctions of literals (and disjs of + lits). [counter_guard] is set to false, do not introduce + "gdl__counter(gdl__counter)" atom. *) val translate : - transl_data -> GDL.literal list list -> Formula.formula + ?counter_guard:bool -> transl_data -> GDL.literal list list -> + Formula.formula val build_defrels : transl_data -> GDL.clause list -> Modified: trunk/Toss/GGP/TranslateGame.ml =================================================================== --- trunk/Toss/GGP/TranslateGame.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/TranslateGame.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -80,6 +80,16 @@ rule needs to match in at least one generated state to be kept). *) let playouts_for_rule_filtering = ref 4 +(** When [filter_possibly_redundant] is false, only whole groups of + variable-sharing "next" clause literals that together are subsumed + by "legal" clause literals are filtered out. With + [filter_possibly_redundant] set to true, subsumed "next" literals + are removed, even though they may be intended for different + elements as witnessed by remaining "next" clause literals (which + get their variables renamed to match the "legal" clause + literals). *) +let filter_possibly_redundant = ref true + let env_player = Const "environment" type tossrule_data = { @@ -1671,9 +1681,126 @@ List.map (add_erasure_clauses f_paths) move_tups +(* Partition literals into connected components where edges are + shared variables. *) +let partition_lits lits = + let parts = List.fold_left + (fun parts lit -> + let l_vars = literals_vars [lit] in + let more_parts, cur_parts = List.partition + (fun (_, p_vars) -> + Aux.Strings.is_empty (Aux.Strings.inter l_vars p_vars)) + parts in + let cur_part = List.fold_left + (fun (c_lits, c_vars) (p_lits, p_vars) -> + c_lits @ p_lits, Aux.Strings.union c_vars p_vars) + ([lit], l_vars) cur_parts in + cur_part::more_parts) + [] lits in + List.map fst parts + +let encode_lit = function + | Pos a -> + let rel, args = rel_of_atom a in + "Pos "^rel, args + | Neg a -> + let rel, args = rel_of_atom a in + "Neg "^rel, args + | Disj _ -> raise Not_found + + +let filter_poss_redundant legal_lits body = + let legal_lits_enc = Aux.map_try encode_lit legal_lits in + (* {{{ log entry *) + if !debug_level > 3 then ( + Printf.printf "filter_poss_redundant:\nlegal_lits=%s\nbody=%s\n\n%!" + (rel_atoms_str legal_lits_enc) (literals_str body) + ); + (* }}} *) + List.fold_right + (fun lit (sb, keep) -> + try + let lit_enc = encode_lit lit in + let sb = + Aux.find_try (unify_rels ~sb lit_enc) legal_lits_enc in + sb, keep + with Not_found -> sb, lit::keep) + body ([], []) + +(* We remove literals in [body] that are considered subsumed by + [legal_lits]. We find the most coarse partition of [body] such that + different classes do not share variables. A group of [body] + literals is considered subsumed if its every literal unifies with a + [legal_lits] literal under a common substitution. The current + algorithm is greedy in that we only consider the first matching + legal literal for a given [body] literal. We also ignore + disjunctions. + + If [filter_possibly_redundant] is true, rather than processing + [body] literals in bulk, check each literal separately, removing + those that unify with some "legal" clause literal, even though they + may be intended for different elements as witnessed by remaining + "next" clause literals. *) +let filter_redundant legal_lits body = + if !filter_possibly_redundant + then filter_poss_redundant legal_lits body + else + let parts = partition_lits body in + let legal_lits_enc = Aux.map_try encode_lit legal_lits in + (* {{{ log entry *) + if !debug_level > 3 then ( + Printf.printf "filter_redundant:\nlegal_lits=%s\nbody=%s\n\n%!" + (rel_atoms_str legal_lits_enc) (literals_str body) + ); + (* }}} *) + let sbs, keep_parts = Aux.partition_map + (fun part -> + try + let sb = List.fold_left + (fun sb lit -> + let lit_enc = encode_lit lit in + Aux.find_try (unify_rels ~sb lit_enc) legal_lits_enc) + [] part in + Aux.Left sb + with Not_found -> Aux.Right part) + parts in + List.concat sbs, List.concat keep_parts + +(* Filter the "next" clauses removing conditions common with legal + clauses, pass the result to [rule_cases]. *) let add_legal_cond counters num_functors static_rels testground - program playout_states (legal_tup, next_cls) = + program playout_states (legal_tup, next_cls) = let legal_tup, legal_conds = List.split legal_tup in + (* We fix the variables in the legal conditions because we will + search for "embeddings" of parts of legal conditions in "next" + clause bodies. *) + let legal_lits = List.concat legal_conds in + let fixed_vars = terms_vars (Array.of_list legal_tup) in + let fixed_vars = Aux.Strings.elements + (Aux.Strings.union fixed_vars (literals_vars legal_lits)) in + let var_to_fixed = List.map + (fun v -> v, Const v) fixed_vars in + let legal_lits = subst_literals var_to_fixed legal_lits in + let next_cls = List.map (* fix [legal_tup] vars in "next" *) + (fun (head, req, body) -> + subst_consts var_to_fixed head, req, + subst_consts_literals var_to_fixed body) + next_cls in + (* Filter-out redundant conditions. Note that unfixed variables in + "next" clauses are local to clauses. *) + let next_cls = List.map + (fun (head, req, body) -> + let sb, body = filter_redundant legal_lits body in + subst sb head, req, subst_literals sb body) + next_cls in + let fixed_to_var = List.map + (fun v -> v, Var v) fixed_vars in + let next_cls = List.map + (fun (head, req, body) -> + subst_consts fixed_to_var head, req, + subst_consts_literals fixed_to_var body) + next_cls in + let legal_cls = List.map (* required clauses *) (fun body -> ignore_rhs, true, body) legal_conds in List.map @@ -2034,10 +2161,13 @@ List.fold_left comp_f xvar path | _ -> assert false -let transl_cond_updates transl_data num_functions cond_updates = +let transl_cond_updates transl_data rule_elems num_functions cond_updates = let cond_update (cond, update) = let update = transl_update_path num_functions update in - let cond = TranslateFormula.translate transl_data [cond] in + let cond = FormulaOps.del_vars_quant + (List.map Formula.fo_var_of_string rule_elems :> Formula.var list) + (TranslateFormula.translate + ~counter_guard:false transl_data [cond]) in Formula.Times (Formula.Char cond, update) in match cond_updates with | [] -> assert false @@ -2156,10 +2286,9 @@ (* a trick to force instantiating the counter variable -- note that variable with the same name is also part of the precondition *) - Formula.Sum ( - [`FO counter_n], - Formula.Rel (counter_n, [|`FO counter_n|]), - transl_cond_updates transl_data num_functions cond_updates)) + (*Formula.Sum ([`FO counter_n], + Formula.Rel (counter_n, [|`FO counter_n|]),) *) + transl_cond_updates transl_data struc_elems num_functions cond_updates) counter_cls in let rule = ContinuousRule.make_rule signat [] discrete @@ -2392,7 +2521,7 @@ match counter_goal_cls with | [] -> Formula.Const 0. | cond_upds -> - transl_cond_updates transl_data num_functions cond_upds in + transl_cond_updates transl_data [] num_functions cond_upds in if num_payoff = Formula.Const 0. then counter_payoff else if counter_payoff = Formula.Const 0. Modified: trunk/Toss/GGP/TranslateGame.mli =================================================================== --- trunk/Toss/GGP/TranslateGame.mli 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/TranslateGame.mli 2011-10-24 21:38:29 UTC (rev 1615) @@ -17,6 +17,16 @@ rule needs to match in at least one generated state to be kept). *) val playouts_for_rule_filtering : int ref +(** When [filter_possibly_redundant] is false, only whole groups of + variable-sharing "next" clause literals that together are subsumed + by "legal" clause literals are filtered out. With + [filter_possibly_redundant] set to true, subsumed "next" literals + are removed, even though they may be intended for different + elements as witnessed by remaining "next" clause literals (which + get their variables renamed to match the "legal" clause + literals). *) +val filter_possibly_redundant : bool ref + type tossrule_data = { legal_tuple : GDL.term array; (* the "legal"/"does" term of the player that performs the move Modified: trunk/Toss/GGP/TranslateGameTest.ml =================================================================== --- trunk/Toss/GGP/TranslateGameTest.ml 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/TranslateGameTest.ml 2011-10-24 21:38:29 UTC (rev 1615) @@ -312,22 +312,31 @@ "connect4" >:: (fun () -> + (* Works with [filter_possibly_redundant] both true and false. *) + let old_filter_possibly_redundant = + !TranslateGame.filter_possibly_redundant in + TranslateGame.filter_possibly_redundant := false; game_test_case ~game_name:"connect4" ~player:"white" ~own_plnum:0 ~opponent_plnum:1 ~loc0_rule_name:"drop_c11_noop" ~loc0_emb:[ - "cell_c11_h4__BLANK_", "cell_2_1__BLANK_"; + "cell_c11_y18__BLANK_", "cell_2_1__BLANK_"; "control__BLANK_", "control__BLANK_"] ~loc0_move:"(drop 2)" ~loc0_noop:"noop" ~loc1:1 ~loc1_rule_name:"noop_drop_c12" ~loc1_emb:[ - "cell_c12_h6__BLANK_", "cell_2_2__BLANK_"; + "cell_c12_y20__BLANK_", "cell_2_2__BLANK_"; "control__BLANK_", "control__BLANK_"] - ~loc1_noop:"noop" ~loc1_move:"(drop 2)" + ~loc1_noop:"noop" ~loc1_move:"(drop 2)"; + TranslateGame.filter_possibly_redundant := old_filter_possibly_redundant; ); "pacman3p" >:: (fun () -> + (* Works only with [filter_possibly_redundant] true. *) + let old_filter_possibly_redundant = + !TranslateGame.filter_possibly_redundant in + TranslateGame.filter_possibly_redundant := true; simult_test_case ~game_name:"pacman3p" ~player:"pacman" ~plnum:1 (* 0 is environment! *) ~moves:[|"(move east)"; "(move nowhere)"; "(move nowhere)"|] @@ -335,7 +344,6 @@ "move_east", [ "gdl__counter", "gdl__counter"; "location__BLANK__x10_y10", "location__BLANK__6_3"; - "location__BLANK__x9_y9", "location__BLANK__5_3"; "location__BLANK__x_y", "location__BLANK__5_3"; "synch_control_", "synch_control_"]; "move_nowhere0", [ @@ -346,6 +354,7 @@ "location__BLANK__x13_y13", "location__BLANK__5_6"; "location__BLANK__x14_y14", "location__BLANK__5_6"; "synch_control_", "synch_control_"]|]; + TranslateGame.filter_possibly_redundant := old_filter_possibly_redundant; ); ] @@ -360,25 +369,18 @@ let a () = - (* set_debug_level 4; *) - simult_test_case ~game_name:"pacman3p" ~player:"pacman" - ~plnum:1 (* 0 is environment! *) - ~moves:[|"(move east)"; "(move nowhere)"; "(move nowhere)"|] - ~rules_and_embs:[| - "move_east", [ - "gdl__counter", "gdl__counter"; - "location__BLANK__x10_y10", "location__BLANK__6_3"; - "location__BLANK__x9_y9", "location__BLANK__5_3"; - "location__BLANK__x_y", "location__BLANK__5_3"; - "synch_control_", "synch_control_"]; - "move_nowhere0", [ - "location__BLANK__x11_y11", "location__BLANK__4_6"; - "location__BLANK__x12_y12", "location__BLANK__4_6"; - "synch_control_", "synch_control_"]; - "move_nowhere1", [ - "location__BLANK__x13_y13", "location__BLANK__5_6"; - "location__BLANK__x14_y14", "location__BLANK__5_6"; - "synch_control_", "synch_control_"]|]; + game_test_case ~game_name:"connect4" ~player:"white" + ~own_plnum:0 ~opponent_plnum:1 + ~loc0_rule_name:"drop_c11_noop" + ~loc0_emb:[ + "cell_c11_y18__BLANK_", "cell_2_1__BLANK_"; + "control__BLANK_", "control__BLANK_"] + ~loc0_move:"(drop 2)" ~loc0_noop:"noop" + ~loc1:1 ~loc1_rule_name:"noop_drop_c12" + ~loc1_emb:[ + "cell_c12_y20__BLANK_", "cell_2_2__BLANK_"; + "control__BLANK_", "control__BLANK_"] + ~loc1_noop:"noop" ~loc1_move:"(drop 2)"; (* failwith "tested"; *) () Modified: trunk/Toss/GGP/tests/connect4-raw.toss =================================================================== --- trunk/Toss/GGP/tests/connect4-raw.toss 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/tests/connect4-raw.toss 2011-10-24 21:38:29 UTC (rev 1615) @@ -262,80 +262,54 @@ (line__r() and true) or (line__w() and true) or (not open() and true) PLAYERS white, red RULE drop_c11_noop: - [cell_c11_h4__BLANK_, control__BLANK_ | + [cell_c11_y18__BLANK_, control__BLANK_ | _opt_cell_2b (control__BLANK_); - _opt_cell_2dirt {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_cell_2r {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_cell_2w {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_control_0red {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_control_0white (cell_c11_h4__BLANK_); cell_2b (cell_c11_h4__BLANK_); - cell__BLANK___BLANK___BLANK_ (cell_c11_h4__BLANK_); + _opt_cell_2dirt {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_cell_2r {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_cell_2w {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_control_0red {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_control_0white (cell_c11_y18__BLANK_); + cell_2b (cell_c11_y18__BLANK_); + cell__BLANK___BLANK___BLANK_ (cell_c11_y18__BLANK_); control_0white (control__BLANK_); control__BLANK_ (control__BLANK_) | ] -> - [cell_c11_h4__BLANK_, control__BLANK_ | - cell_2w (cell_c11_h4__BLANK_); control_0red (control__BLANK_) | - ] emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white + [cell_c11_y18__BLANK_, control__BLANK_ | + cell_2w (cell_c11_y18__BLANK_); control_0red (control__BLANK_) | + ] + emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white pre (not terminal() and - ex cell_c11_y17__BLANK_, cell_c11_h3__BLANK_, cell_c11_y18__BLANK_ - (cell__BLANK___BLANK___BLANK_(cell_c11_h3__BLANK_) and - filled(cell_c11_h3__BLANK_) and - cell__BLANK___BLANK___BLANK_(cell_c11_y17__BLANK_) and - filled(cell_c11_y17__BLANK_) and cell_2b(cell_c11_y18__BLANK_) and - cell__BLANK___BLANK___BLANK_(cell_c11_y18__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h3__BLANK_, cell_c11_h4__BLANK_) and - succ__cell_1__cell_1(cell_c11_h3__BLANK_, cell_c11_h4__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h3__BLANK_, cell_c11_y17__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h3__BLANK_, cell_c11_y18__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h4__BLANK_, cell_c11_h3__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h4__BLANK_, cell_c11_y17__BLANK_) and - EQ___cell_0__cell_0(cell_c11_h4__BLANK_, cell_c11_y18__BLANK_) and - EQ___cell_0__cell_0(cell_c11_y17__BLANK_, cell_c11_h3__BLANK_) and - EQ___cell_0__cell_0(cell_c11_y17__BLANK_, cell_c11_h4__BLANK_) and + ex cell_c11_y17__BLANK_ + (cell__BLANK___BLANK___BLANK_(cell_c11_y17__BLANK_) and + filled(cell_c11_y17__BLANK_) and EQ___cell_0__cell_0(cell_c11_y17__BLANK_, cell_c11_y18__BLANK_) and succ__cell_1__cell_1(cell_c11_y17__BLANK_, cell_c11_y18__BLANK_) and - EQ___cell_0__cell_0(cell_c11_y18__BLANK_, cell_c11_h3__BLANK_) and - EQ___cell_0__cell_0(cell_c11_y18__BLANK_, cell_c11_h4__BLANK_) and EQ___cell_0__cell_0(cell_c11_y18__BLANK_, cell_c11_y17__BLANK_))) RULE noop_drop_c12: - [cell_c12_h6__BLANK_, control__BLANK_ | + [cell_c12_y20__BLANK_, control__BLANK_ | _opt_cell_2b (control__BLANK_); - _opt_cell_2dirt {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_cell_2r {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_cell_2w {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_control_0red (cell_c12_h6__BLANK_); - _opt_control_0white {cell_c12_h6__BLANK_; control__BLANK_}; - cell_2b (cell_c12_h6__BLANK_); - cell__BLANK___BLANK___BLANK_ (cell_c12_h6__BLANK_); + _opt_cell_2dirt {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_cell_2r {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_cell_2w {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_control_0red (cell_c12_y20__BLANK_); + _opt_control_0white {cell_c12_y20__BLANK_; control__BLANK_}; + cell_2b (cell_c12_y20__BLANK_); + cell__BLANK___BLANK___BLANK_ (cell_c12_y20__BLANK_); control_0red (control__BLANK_); control__BLANK_ (control__BLANK_) | ] -> - [cell_c12_h6__BLANK_, control__BLANK_ | - cell_2r (cell_c12_h6__BLANK_); control_0white (control__BLANK_) | + [cell_c12_y20__BLANK_, control__BLANK_ | + cell_2r (cell_c12_y20__BLANK_); control_0white (control__BLANK_) | ] emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white pre (not terminal() and - ex cell_c12_y19__BLANK_, cell_c12_h5__BLANK_, cell_c12_y20__BLANK_ - (cell__BLANK___BLANK___BLANK_(cell_c12_h5__BLANK_) and - filled(cell_c12_h5__BLANK_) and - cell__BLANK___BLANK___BLANK_(cell_c12_y19__BLANK_) and - filled(cell_c12_y19__BLANK_) and cell_2b(cell_c12_y20__BLANK_) and - cell__BLANK___BLANK___BLANK_(cell_c12_y20__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h5__BLANK_, cell_c12_h6__BLANK_) and - succ__cell_1__cell_1(cell_c12_h5__BLANK_, cell_c12_h6__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h5__BLANK_, cell_c12_y19__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h5__BLANK_, cell_c12_y20__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h6__BLANK_, cell_c12_h5__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h6__BLANK_, cell_c12_y19__BLANK_) and - EQ___cell_0__cell_0(cell_c12_h6__BLANK_, cell_c12_y20__BLANK_) and - EQ___cell_0__cell_0(cell_c12_y19__BLANK_, cell_c12_h5__BLANK_) and - EQ___cell_0__cell_0(cell_c12_y19__BLANK_, cell_c12_h6__BLANK_) and + ex cell_c12_y19__BLANK_ + (cell__BLANK___BLANK___BLANK_(cell_c12_y19__BLANK_) and + filled(cell_c12_y19__BLANK_) and EQ___cell_0__cell_0(cell_c12_y19__BLANK_, cell_c12_y20__BLANK_) and succ__cell_1__cell_1(cell_c12_y19__BLANK_, cell_c12_y20__BLANK_) and - EQ___cell_0__cell_0(cell_c12_y20__BLANK_, cell_c12_h5__BLANK_) and - EQ___cell_0__cell_0(cell_c12_y20__BLANK_, cell_c12_h6__BLANK_) and EQ___cell_0__cell_0(cell_c12_y20__BLANK_, cell_c12_y19__BLANK_))) LOC 0 { Modified: trunk/Toss/GGP/tests/connect4-simpl.toss =================================================================== --- trunk/Toss/GGP/tests/connect4-simpl.toss 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/tests/connect4-simpl.toss 2011-10-24 21:38:29 UTC (rev 1615) @@ -103,58 +103,47 @@ R: EQ___cell_0__cell_0__AND__succ__cell_1__cell_1, R1: succ__cell_0__cell_0__AND_INV__succ__cell_1__cell_1 RULE drop_c11_noop: - [cell_c11_h4__BLANK_, control__BLANK_ | + [cell_c11_y18__BLANK_, control__BLANK_ | _opt_cell_2b (control__BLANK_); - _opt_cell_2dirt {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_cell_2r {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_cell_2w {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_control_0red {cell_c11_h4__BLANK_; control__BLANK_}; - _opt_control_0white (cell_c11_h4__BLANK_); cell_2b (cell_c11_h4__BLANK_); - control_0white (control__BLANK_); control__BLANK_ (control__BLANK_); - number__cell_1 (cell_c11_h4__BLANK_) + _opt_cell_2dirt {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_cell_2r {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_cell_2w {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_control_0red {cell_c11_y18__BLANK_; control__BLANK_}; + _opt_control_0white (cell_c11_y18__BLANK_); + cell_2b (cell_c11_y18__BLANK_); control_0white (control__BLANK_); + control__BLANK_ (control__BLANK_); number__cell_1 (cell_c11_y18__BLANK_) | ] -> - [cell_c11_h4__BLANK_, control__BLANK_ | - cell_2w (cell_c11_h4__BLANK_); control_0red (control__BLANK_) | - ] emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white + [cell_c11_y18__BLANK_, control__BLANK_ | + cell_2w (cell_c11_y18__BLANK_); control_0red (control__BLANK_) | + ] + emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white pre (not terminal() and - ex cell_c11_y17__BLANK_, cell_c11_h3__BLANK_, cell_c11_y18__BLANK_ - (R(cell_c11_h3__BLANK_, cell_c11_h4__BLANK_) and R(cell_c11_y17__BLANK_, - cell_c11_y18__BLANK_) and EQ___cell_0__cell_0(cell_c11_h4__BLANK_, - cell_c11_y17__BLANK_) and EQ___cell_0__cell_0(cell_c11_h3__BLANK_, - cell_c11_y17__BLANK_) and number__cell_1(cell_c11_h3__BLANK_) and - number__cell_1(cell_c11_y17__BLANK_) and - number__cell_1(cell_c11_y18__BLANK_) and - filled(cell_c11_h3__BLANK_) and filled(cell_c11_y17__BLANK_) and - cell_2b(cell_c11_y18__BLANK_))) + ex cell_c11_y17__BLANK_ + (R(cell_c11_y17__BLANK_, cell_c11_y18__BLANK_) and + number__cell_1(cell_c11_y17__BLANK_) and filled(cell_c11_y17__BLANK_))) RULE noop_drop_c12: - [cell_c12_h6__BLANK_, control__BLANK_ | + [cell_c12_y20__BLANK_, control__BLANK_ | _opt_cell_2b (control__BLANK_); - _opt_cell_2dirt {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_cell_2r {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_cell_2w {cell_c12_h6__BLANK_; control__BLANK_}; - _opt_control_0red (cell_c12_h6__BLANK_); - _opt_control_0white {cell_c12_h6__BLANK_; control__BLANK_}; - cell_2b (cell_c12_h6__BLANK_); control_0red (control__BLANK_); - control__BLANK_ (control__BLANK_); number__cell_1 (cell_c12_h6__BLANK_) + _opt_cell_2dirt {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_cell_2r {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_cell_2w {cell_c12_y20__BLANK_; control__BLANK_}; + _opt_control_0red (cell_c12_y20__BLANK_); + _opt_control_0white {cell_c12_y20__BLANK_; control__BLANK_}; + cell_2b (cell_c12_y20__BLANK_); control_0red (control__BLANK_); + control__BLANK_ (control__BLANK_); number__cell_1 (cell_c12_y20__BLANK_) | ] -> - [cell_c12_h6__BLANK_, control__BLANK_ | - cell_2r (cell_c12_h6__BLANK_); control_0white (control__BLANK_) | + [cell_c12_y20__BLANK_, control__BLANK_ | + cell_2r (cell_c12_y20__BLANK_); control_0white (control__BLANK_) | ] emb cell_2b, cell_2dirt, cell_2r, cell_2w, control_0red, control_0white pre (not terminal() and - ex cell_c12_y19__BLANK_, cell_c12_h5__BLANK_, cell_c12_y20__BLANK_ - (R(cell_c12_h5__BLANK_, cell_c12_h6__BLANK_) and R(cell_c12_y19__BLANK_, - cell_c12_y20__BLANK_) and EQ___cell_0__cell_0(cell_c12_h6__BLANK_, - cell_c12_y19__BLANK_) and EQ___cell_0__cell_0(cell_c12_h5__BLANK_, - cell_c12_y19__BLANK_) and number__cell_1(cell_c12_h5__BLANK_) and - number__cell_1(cell_c12_y19__BLANK_) and - number__cell_1(cell_c12_y20__BLANK_) and - filled(cell_c12_h5__BLANK_) and filled(cell_c12_y19__BLANK_) and - cell_2b(cell_c12_y20__BLANK_))) + ex cell_c12_y19__BLANK_ + (R(cell_c12_y19__BLANK_, cell_c12_y20__BLANK_) and + number__cell_1(cell_c12_y19__BLANK_) and filled(cell_c12_y19__BLANK_))) LOC 0 { PLAYER white { @@ -200,351 +189,6 @@ cell_7_2__BLANK_, cell_7_3__BLANK_, cell_7_4__BLANK_, cell_7_5__BLANK_, cell_7_6__BLANK_, val__8, val__b, val__dirt, val__r, val__red, val__w, val__white, control__BLANK_ | - EQ___cell_0__cell_0 { - (cell_1_0__BLANK_, cell_1_0__BLANK_); - (cell_1_0__BLANK_, cell_1_1__BLANK_); - (cell_1_0__BLANK_, cell_1_2__BLANK_); - (cell_1_0__BLANK_, cell_1_3__BLANK_); - (cell_1_0__BLANK_, cell_1_4__BLANK_); - (cell_1_0__BLANK_, cell_1_5__BLANK_); - (cell_1_0__BLANK_, cell_1_6__BLANK_); - (cell_1_1__BLANK_, cell_1_0__BLANK_); - (cell_1_1__BLANK_, cell_1_1__BLANK_); - (cell_1_1__BLANK_, cell_1_2__BLANK_); - (cell_1_1__BLANK_, cell_1_3__BLANK_); - (cell_1_1__BLANK_, cell_1_4__BLANK_); - (cell_1_1__BLANK_, cell_1_5__BLANK_); - (cell_1_1__BLANK_, cell_1_6__BLANK_); - (cell_1_2__BLANK_, cell_1_0__BLANK_); - (cell_1_2__BLANK_, cell_1_1__BLANK_); - (cell_1_2__BLANK_, cell_1_2__BLANK_); - (cell_1_2__BLANK_, cell_1_3__BLANK_); - (cell_1_2__BLANK_, cell_1_4__BLANK_); - (cell_1_2__BLANK_, cell_1_5__BLANK_); - (cell_1_2__BLANK_, cell_1_6__BLANK_); - (cell_1_3__BLANK_, cell_1_0__BLANK_); - (cell_1_3__BLANK_, cell_1_1__BLANK_); - (cell_1_3__BLANK_, cell_1_2__BLANK_); - (cell_1_3__BLANK_, cell_1_3__BLANK_); - (cell_1_3__BLANK_, cell_1_4__BLANK_); - (cell_1_3__BLANK_, cell_1_5__BLANK_); - (cell_1_3__BLANK_, cell_1_6__BLANK_); - (cell_1_4__BLANK_, cell_1_0__BLANK_); - (cell_1_4__BLANK_, cell_1_1__BLANK_); - (cell_1_4__BLANK_, cell_1_2__BLANK_); - (cell_1_4__BLANK_, cell_1_3__BLANK_); - (cell_1_4__BLANK_, cell_1_4__BLANK_); - (cell_1_4__BLANK_, cell_1_5__BLANK_); - (cell_1_4__BLANK_, cell_1_6__BLANK_); - (cell_1_5__BLANK_, cell_1_0__BLANK_); - (cell_1_5__BLANK_, cell_1_1__BLANK_); - (cell_1_5__BLANK_, cell_1_2__BLANK_); - (cell_1_5__BLANK_, cell_1_3__BLANK_); - (cell_1_5__BLANK_, cell_1_4__BLANK_); - (cell_1_5__BLANK_, cell_1_5__BLANK_); - (cell_1_5__BLANK_, cell_1_6__BLANK_); - (cell_1_6__BLANK_, cell_1_0__BLANK_); - (cell_1_6__BLANK_, cell_1_1__BLANK_); - (cell_1_6__BLANK_, cell_1_2__BLANK_); - (cell_1_6__BLANK_, cell_1_3__BLANK_); - (cell_1_6__BLANK_, cell_1_4__BLANK_); - (cell_1_6__BLANK_, cell_1_5__BLANK_); - (cell_1_6__BLANK_, cell_1_6__BLANK_); - (cell_2_0__BLANK_, cell_2_0__BLANK_); - (cell_2_0__BLANK_, cell_2_1__BLANK_); - (cell_2_0__BLANK_, cell_2_2__BLANK_); - (cell_2_0__BLANK_, cell_2_3__BLANK_); - (cell_2_0__BLANK_, cell_2_4__BLANK_); - (cell_2_0__BLANK_, cell_2_5__BLANK_); - (cell_2_0__BLANK_, cell_2_6__BLANK_); - (cell_2_1__BLANK_, cell_2_0__BLANK_); - (cell_2_1__BLANK_, cell_2_1__BLANK_); - (cell_2_1__BLANK_, cell_2_2__BLANK_); - (cell_2_1__BLANK_, cell_2_3__BLANK_); - (cell_2_1__BLANK_, cell_2_4__BLANK_); - (cell_2_1__BLANK_, cell_2_5__BLANK_); - (cell_2_1__BLANK_, cell_2_6__BLANK_); - (cell_2_2__BLANK_, cell_2_0__BLANK_); - (cell_2_2__BLANK_, cell_2_1__BLANK_); - (cell_2_2__BLANK_, cell_2_2__BLANK_); - (cell_2_2__BLANK_, cell_2_3__BLANK_); - (cell_2_2__BLANK_, cell_2_4__BLANK_); - (cell_2_2__BLANK_, cell_2_5__BLANK_); - (cell_2_2__BLANK_, cell_2_6__BLANK_); - (cell_2_3__BLANK_, cell_2_0__BLANK_); - (cell_2_3__BLANK_, cell_2_1__BLANK_); - (cell_2_3__BLANK_, cell_2_2__BLANK_); - (cell_2_3__BLANK_, cell_2_3__BLANK_); - (cell_2_3__BLANK_, cell_2_4__BLANK_); - (cell_2_3__BLANK_, cell_2_5__BLANK_); - (cell_2_3__BLANK_, cell_2_6__BLANK_); - (cell_2_4__BLANK_, cell_2_0__BLANK_); - (cell_2_4__BLANK_, cell_2_1__BLANK_); - (cell_2_4__BLANK_, cell_2_2__BLANK_); - (cell_2_4__BLANK_, cell_2_3__BLANK_); - (cell_2_4__BLANK_, cell_2_4__BLANK_); - (cell_2_4__BLANK_, cell_2_5__BLANK_); - (cell_2_4__BLANK_, cell_2_6__BLANK_); - (cell_2_5__BLANK_, cell_2_0__BLANK_); - (cell_2_5__BLANK_, cell_2_1__BLANK_); - (cell_2_5__BLANK_, cell_2_2__BLANK_); - (cell_2_5__BLANK_, cell_2_3__BLANK_); - (cell_2_5__BLANK_, cell_2_4__BLANK_); - (cell_2_5__BLANK_, cell_2_5__BLANK_); - (cell_2_5__BLANK_, cell_2_6__BLANK_); - (cell_2_6__BLANK_, cell_2_0__BLANK_); - (cell_2_6__BLANK_, cell_2_1__BLANK_); - (cell_2_6__BLANK_, cell_2_2__BLANK_); - (cell_2_6__BLANK_, cell_2_3__BLANK_); - (cell_2_6__BLANK_, cell_2_4__BLANK_); - (cell_2_6__BLANK_, cell_2_5__BLANK_); - (cell_2_6__BLANK_, cell_2_6__BLANK_); - (cell_3_0__BLANK_, cell_3_0__BLANK_); - (cell_3_0__BLANK_, cell_3_1__BLANK_); - (cell_3_0__BLANK_, cell_3_2__BLANK_); - (cell_3_0__BLANK_, cell_3_3__BLANK_); - (cell_3_0__BLANK_, cell_3_4__BLANK_); - (cell_3_0__BLANK_, cell_3_5__BLANK_); - (cell_3_0__BLANK_, cell_3_6__BLANK_); - (cell_3_1__BLANK_, cell_3_0__BLANK_); - (cell_3_1__BLANK_, cell_3_1__BLANK_); - (cell_3_1__BLANK_, cell_3_2__BLANK_); - (cell_3_1__BLANK_, cell_3_3__BLANK_); - (cell_3_1__BLANK_, cell_3_4__BLANK_); - (cell_3_1__BLANK_, cell_3_5__BLANK_); - (cell_3_1__BLANK_, cell_3_6__BLANK_); - (cell_3_2__BLANK_, cell_3_0__BLANK_); - (cell_3_2__BLANK_, cell_3_1__BLANK_); - (cell_3_2__BLANK_, cell_3_2__BLANK_); - (cell_3_2__BLANK_, cell_3_3__BLANK_); - (cell_3_2__BLANK_, cell_3_4__BLANK_); - (cell_3_2__BLANK_, cell_3_5__BLANK_); - (cell_3_2__BLANK_, cell_3_6__BLANK_); - (cell_3_3__BLANK_, cell_3_0__BLANK_); - (cell_3_3__BLANK_, cell_3_1__BLANK_); - (cell_3_3__BLANK_, cell_3_2__BLANK_); - (cell_3_3__BLANK_, cell_3_3__BLANK_); - (cell_3_3__BLANK_, cell_3_4__BLANK_); - (cell_3_3__BLANK_, cell_3_5__BLANK_); - (cell_3_3__BLANK_, cell_3_6__BLANK_); - (cell_3_4__BLANK_, cell_3_0__BLANK_); - (cell_3_4__BLANK_, cell_3_1__BLANK_); - (cell_3_4__BLANK_, cell_3_2__BLANK_); - (cell_3_4__BLANK_, cell_3_3__BLANK_); - (cell_3_4__BLANK_, cell_3_4__BLANK_); - (cell_3_4__BLANK_, cell_3_5__BLANK_); - (cell_3_4__BLANK_, cell_3_6__BLANK_); - (cell_3_5__BLANK_, cell_3_0__BLANK_); - (cell_3_5__BLANK_, cell_3_1__BLANK_); - (cell_3_5__BLANK_, cell_3_2__BLANK_); - (cell_3_5__BLANK_, cell_3_3__BLANK_); - (cell_3_5__BLANK_, cell_3_4__BLANK_); - (cell_3_5__BLANK_, cell_3_5__BLANK_); - (cell_3_5__BLANK_, cell_3_6__BLANK_); - (cell_3_6__BLANK_, cell_3_0__BLANK_); - (cell_3_6__BLANK_, cell_3_1__BLANK_); - (cell_3_6__BLANK_, cell_3_2__BLANK_); - (cell_3_6__BLANK_, cell_3_3__BLANK_); - (cell_3_6__BLANK_, cell_3_4__BLANK_); - (cell_3_6__BLANK_, cell_3_5__BLANK_); - (cell_3_6__BLANK_, cell_3_6__BLANK_); - (cell_4_0__BLANK_, cell_4_0__BLANK_); - (cell_4_0__BLANK_, cell_4_1__BLANK_); - (cell_4_0__BLANK_, cell_4_2__BLANK_); - (cell_4_0__BLANK_, cell_4_3__BLANK_); - (cell_4_0__BLANK_, cell_4_4__BLANK_); - (cell_4_0__BLANK_, cell_4_5__BLANK_); - (cell_4_0__BLANK_, cell_4_6__BLANK_); - (cell_4_1__BLANK_, cell_4_0__BLANK_); - (cell_4_1__BLANK_, cell_4_1__BLANK_); - (cell_4_1__BLANK_, cell_4_2__BLANK_); - (cell_4_1__BLANK_, cell_4_3__BLANK_); - (cell_4_1__BLANK_, cell_4_4__BLANK_); - (cell_4_1__BLANK_, cell_4_5__BLANK_); - (cell_4_1__BLANK_, cell_4_6__BLANK_); - (cell_4_2__BLANK_, cell_4_0__BLANK_); - (cell_4_2__BLANK_, cell_4_1__BLANK_); - (cell_4_2__BLANK_, cell_4_2__BLANK_); - (cell_4_2__BLANK_, cell_4_3__BLANK_); - (cell_4_2__BLANK_, cell_4_4__BLANK_); - (cell_4_2__BLANK_, cell_4_5__BLANK_); - (cell_4_2__BLANK_, cell_4_6__BLANK_); - (cell_4_3__BLANK_, cell_4_0__BLANK_); - (cell_4_3__BLANK_, cell_4_1__BLANK_); - (cell_4_3__BLANK_, cell_4_2__BLANK_); - (cell_4_3__BLANK_, cell_4_3__BLANK_); - (cell_4_3__BLANK_, cell_4_4__BLANK_); - (cell_4_3__BLANK_, cell_4_5__BLANK_); - (cell_4_3__BLANK_, cell_4_6__BLANK_); - (cell_4_4__BLANK_, cell_4_0__BLANK_); - (cell_4_4__BLANK_, cell_4_1__BLANK_); - (cell_4_4__BLANK_, cell_4_2__BLANK_); - (cell_4_4__BLANK_, cell_4_3__BLANK_); - (cell_4_4__BLANK_, cell_4_4__BLANK_); - (cell_4_4__BLANK_, cell_4_5__BLANK_); - (cell_4_4__BLANK_, cell_4_6__BLANK_); - (cell_4_5__BLANK_, cell_4_0__BLANK_); - (cell_4_5__BLANK_, cell_4_1__BLANK_); - (cell_4_5__BLANK_, cell_4_2__BLANK_); - (cell_4_5__BLANK_, cell_4_3__BLANK_); - (cell_4_5__BLANK_, cell_4_4__BLANK_); - (cell_4_5__BLANK_, cell_4_5__BLANK_); - (cell_4_5__BLANK_, cell_4_6__BLANK_); - (cell_4_6__BLANK_, cell_4_0__BLANK_); - (cell_4_6__BLANK_, cell_4_1__BLANK_); - (cell_4_6__BLANK_, cell_4_2__BLANK_); - (cell_4_6__BLANK_, cell_4_3__BLANK_); - (cell_4_6__BLANK_, cell_4_4__BLANK_); - (cell_4_6__BLANK_, cell_4_5__BLANK_); - (cell_4_6__BLANK_, cell_4_6__BLANK_); - (cell_5_0__BLANK_, cell_5_0__BLANK_); - (cell_5_0__BLANK_, cell_5_1__BLANK_); - (cell_5_0__BLANK_, cell_5_2__BLANK_); - (cell_5_0__BLANK_, cell_5_3__BLANK_); - (cell_5_0__BLANK_, cell_5_4__BLANK_); - (cell_5_0__BLANK_, cell_5_5__BLANK_); - (cell_5_0__BLANK_, cell_5_6__BLANK_); - (cell_5_1__BLANK_, cell_5_0__BLANK_); - (cell_5_1__BLANK_, cell_5_1__BLANK_); - (cell_5_1__BLANK_, cell_5_2__BLANK_); - (cell_5_1__BLANK_, cell_5_3__BLANK_); - (cell_5_1__BLANK_, cell_5_4__BLANK_); - (cell_5_1__BLANK_, cell_5_5__BLANK_); - (cell_5_1__BLANK_, cell_5_6__BLANK_); - (cell_5_2__BLANK_, cell_5_0__BLANK_); - (cell_5_2__BLANK_, cell_5_1__BLANK_); - (cell_5_2__BLANK_, cell_5_2__BLANK_); - (cell_5_2__BLANK_, cell_5_3__BLANK_); - (cell_5_2__BLANK_, cell_5_4__BLANK_); - (cell_5_2__BLANK_, cell_5_5__BLANK_); - (cell_5_2__BLANK_, cell_5_6__BLANK_); - (cell_5_3__BLANK_, cell_5_0__BLANK_); - (cell_5_3__BLANK_, cell_5_1__BLANK_); - (cell_5_3__BLANK_, cell_5_2__BLANK_); - (cell_5_3__BLANK_, cell_5_3__BLANK_); - (cell_5_3__BLANK_, cell_5_4__BLANK_); - (cell_5_3__BLANK_, cell_5_5__BLANK_); - (cell_5_3__BLANK_, cell_5_6__BLANK_); - (cell_5_4__BLANK_, cell_5_0__BLANK_); - (cell_5_4__BLANK_, cell_5_1__BLANK_); - (cell_5_4__BLANK_, cell_5_2__BLANK_); - (cell_5_4__BLANK_, cell_5_3__BLANK_); - (cell_5_4__BLANK_, cell_5_4__BLANK_); - (cell_5_4__BLANK_, cell_5_5__BLANK_); - (cell_5_4__BLANK_, cell_5_6__BLANK_); - (cell_5_5__BLANK_, cell_5_0__BLANK_); - (cell_5_5__BLANK_, cell_5_1__BLANK_); - (cell_5_5__BLANK_, cell_5_2__BLANK_); - (cell_5_5__BLANK_, cell_5_3__BLANK_); - (cell_5_5__BLANK_, cell_5_4__BLANK_); - (cell_5_5__BLANK_, cell_5_5__BLANK_); - (cell_5_5__BLANK_, cell_5_6__BLANK_); - (cell_5_6__BLANK_, cell_5_0__BLANK_); - (cell_5_6__BLANK_, cell_5_1__BLANK_); - (cell_5_6__BLANK_, cell_5_2__BLANK_); - (cell_5_6__BLANK_, cell_5_3__BLANK_); - (cell_5_6__BLANK_, cell_5_4__BLANK_); - (cell_5_6__BLANK_, cell_5_5__BLANK_); - (cell_5_6__BLANK_, cell_5_6__BLANK_); - (cell_6_0__BLANK_, cell_6_0__BLANK_); - (cell_6_0__BLANK_, cell_6_1__BLANK_); - (cell_6_0__BLANK_, cell_6_2__BLANK_); - (cell_6_0__BLANK_, cell_6_3__BLANK_); - (cell_6_0__BLANK_, cell_6_4__BLANK_); - (cell_6_0__BLANK_, cell_6_5__BLANK_); - (cell_6_0__BLANK_, cell_6_6__BLANK_); - (cell_6_1__BLANK_, cell_6_0__BLANK_); - (cell_6_1__BLANK_, cell_6_1__BLANK_); - (cell_6_1__BLANK_, cell_6_2__BLANK_); - (cell_6_1__BLANK_, cell_6_3__BLANK_); - (cell_6_1__BLANK_, cell_6_4__BLANK_); - (cell_6_1__BLANK_, cell_6_5__BLANK_); - (cell_6_1__BLANK_, cell_6_6__BLANK_); - (cell_6_2__BLANK_, cell_6_0__BLANK_); - (cell_6_2__BLANK_, cell_6_1__BLANK_); - (cell_6_2__BLANK_, cell_6_2__BLANK_); - (cell_6_2__BLANK_, cell_6_3__BLANK_); - (cell_6_2__BLANK_, cell_6_4__BLANK_); - (cell_6_2__BLANK_, cell_6_5__BLANK_); - (cell_6_2__BLANK_, cell_6_6__BLANK_); - (cell_6_3__BLANK_, cell_6_0__BLANK_); - (cell_6_3__BLANK_, cell_6_1__BLANK_); - (cell_6_3__BLANK_, cell_6_2__BLANK_); - (cell_6_3__BLANK_, cell_6_3__BLANK_); - (cell_6_3__BLANK_, cell_6_4__BLANK_); - (cell_6_3__BLANK_, cell_6_5__BLANK_); - (cell_6_3__BLANK_, cell_6_6__BLANK_); - (cell_6_4__BLANK_, cell_6_0__BLANK_); - (cell_6_4__BLANK_, cell_6_1__BLANK_); - (cell_6_4__BLANK_, cell_6_2__BLANK_); - (cell_6_4__BLANK_, cell_6_3__BLANK_); - (cell_6_4__BLANK_, cell_6_4__BLANK_); - (cell_6_4__BLANK_, cell_6_5__BLANK_); - (cell_6_4__BLANK_, cell_6_6__BLANK_); - (cell_6_5__BLANK_, cell_6_0__BLANK_); - (cell_6_5__BLANK_, cell_6_1__BLANK_); - (cell_6_5__BLANK_, cell_6_2__BLANK_); - (cell_6_5__BLANK_, cell_6_3__BLANK_); - (cell_6_5__BLANK_, cell_6_4__BLANK_); - (cell_6_5__BLANK_, cell_6_5__BLANK_); - (cell_6_5__BLANK_, cell_6_6__BLANK_); - (cell_6_6__BLANK_, cell_6_0__BLANK_); - (cell_6_6__BLANK_, cell_6_1__BLANK_); - (cell_6_6__BLANK_, cell_6_2__BLANK_); - (cell_6_6__BLANK_, cell_6_3__BLANK_); - (cell_6_6__BLANK_, cell_6_4__BLANK_); - (cell_6_6__BLANK_, cell_6_5__BLANK_); - (cell_6_6__BLANK_, cell_6_6__BLANK_); - (cell_7_0__BLANK_, cell_7_0__BLANK_); - (cell_7_0__BLANK_, cell_7_1__BLANK_); - (cell_7_0__BLANK_, cell_7_2__BLANK_); - (cell_7_0__BLANK_, cell_7_3__BLANK_); - (cell_7_0__BLANK_, cell_7_4__BLANK_); - (cell_7_0__BLANK_, cell_7_5__BLANK_); - (cell_7_0__BLANK_, cell_7_6__BLANK_); - (cell_7_1__BLANK_, cell_7_0__BLANK_); - (cell_7_1__BLANK_, cell_7_1__BLANK_); - (cell_7_1__BLANK_, cell_7_2__BLANK_); - (cell_7_1__BLANK_, cell_7_3__BLANK_); - (cell_7_1__BLANK_, cell_7_4__BLANK_); - (cell_7_1__BLANK_, cell_7_5__BLANK_); - (cell_7_1__BLANK_, cell_7_6__BLANK_); - (cell_7_2__BLANK_, cell_7_0__BLANK_); - (cell_7_2__BLANK_, cell_7_1__BLANK_); - (cell_7_2__BLANK_, cell_7_2__BLANK_); - (cell_7_2__BLANK_, cell_7_3__BLANK_); - (cell_7_2__BLANK_, cell_7_4__BLANK_); - (cell_7_2__BLANK_, cell_7_5__BLANK_); - (cell_7_2__BLANK_, cell_7_6__BLANK_); - (cell_7_3__BLANK_, cell_7_0__BLANK_); - (cell_7_3__BLANK_, cell_7_1__BLANK_); - (cell_7_3__BLANK_, cell_7_2__BLANK_); - (cell_7_3__BLANK_, cell_7_3__BLANK_); - (cell_7_3__BLANK_, cell_7_4__BLANK_); - (cell_7_3__BLANK_, cell_7_5__BLANK_); - (cell_7_3__BLANK_, cell_7_6__BLANK_); - (cell_7_4__BLANK_, cell_7_0__BLANK_); - (cell_7_4__BLANK_, cell_7_1__BLANK_); - (cell_7_4__BLANK_, cell_7_2__BLANK_); - (cell_7_4__BLANK_, cell_7_3__BLANK_); - (cell_7_4__BLANK_, cell_7_4__BLANK_); - (cell_7_4__BLANK_, cell_7_5__BLANK_); - (cell_7_4__BLANK_, cell_7_6__BLANK_); - (cell_7_5__BLANK_, cell_7_0__BLANK_); - (cell_7_5__BLANK_, cell_7_1__BLANK_); - (cell_7_5__BLANK_, cell_7_2__BLANK_); - (cell_7_5__BLANK_, cell_7_3__BLANK_); - (cell_7_5__BLANK_, cell_7_4__BLANK_); - (cell_7_5__BLANK_, cell_7_5__BLANK_); - (cell_7_5__BLANK_, cell_7_6__BLANK_); - (cell_7_6__BLANK_, cell_7_0__BLANK_); - (cell_7_6__BLANK_, cell_7_1__BLANK_); - (cell_7_6__BLANK_, cell_7_2__BLANK_); - (cell_7_6__BLANK_, cell_7_3__BLANK_); - (cell_7_6__BLANK_, cell_7_4__BLANK_); - (cell_7_6__BLANK_, cell_7_5__BLANK_); - (cell_7_6__BLANK_, cell_7_6__BLANK_) - }; R { (cell_1_0__BLANK_, cell_1_1__BLANK_); (cell_1_1__BLANK_, cell_1_2__BLANK_); Modified: trunk/Toss/GGP/tests/pacman3p-raw.toss =================================================================== --- trunk/Toss/GGP/tests/pacman3p-raw.toss 2011-10-23 20:28:50 UTC (rev 1614) +++ trunk/Toss/GGP/tests/pacman3p-raw.toss 2011-10-24 21:38:29 UTC (rev 1615) @@ -179,68 +179,61 @@ location__BLANK___BLANK___BLANK_(location__BLANK__xnew0_y20) and location__BLANK___BLANK___BLANK_(location__BLANK__x20_y20))) REL nopellets() = - ((Sum (gdl__counter | gdl__counter(gdl__counter) : - :collected(gdl__counter) - 35.) = 0) and - true) + ex gdl__counter + (gdl__counter(gdl__counter) and + (:collected(gdl__counter) - 35. = 0) and true) REL terminal() = (captured() and true) or (nopellets() and true) or (timeout() and true) REL timeout() = - ((Sum (gdl__counter | gdl__counter(gdl__counter) : - :step(gdl__counter) - 100.) = 0) and - true) + ex gdl__counter + (gdl__counter(gdl__counter) and (:step(gdl__counter) - 100. = 0) and true) PLAYERS environment, pacman, blinky, inky RULE move_east: - [gdl__counter, location__BLANK__x10_y10, location__BLANK__x9_y9, - location__BLANK__x_y, synch_control_ | - _nondistinct_ { - (location__BLANK__x9_y9, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x9_y9) - }; + [gdl__counter, location__BLANK__x10_y10, location__BLANK__x_y, + synch_control_ | + _nondistinct_ (location__BLANK__x_y, location__BLANK__x10_y10); _opt_blinky__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_control_0ghosts { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_control_0pacman { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_inky__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0blinky { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0inky { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0pacman { gdl__counter; location__BLANK__x10_y10; synch_control_}; _opt_location_0pellet { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_pacman__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y - }; + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y}; gdl__counter (gdl__counter); legalstep__east (location__BLANK__x_y); - location_0pacman {location__BLANK__x9_y9; location__BLANK__x_y}; + location_0pacman (location__BLANK__x_y); location__BLANK___BLANK___BLANK_ { - location__BLANK__x10_y10; location__BLANK__x9_y9; location__BLANK__x_y}; - nextcell__east (location__BLANK__x9_y9, location__BLANK__x10_y10); + location__BLANK__x10_y10; location__BLANK__x_y}; + nextcell__east (location__BLANK__x_y, location__BLANK__x10_y10); synch_control_ (synch_control_) | ] -> - [gdl__counter, location__BLANK__x10_y10, location__BLANK__x9_y9, - location__BLANK__x_y, synch_control_ | + [gdl__counter, location__BLANK__x10_y10, location__BLANK__x_y, + synch_control_ | location_0pacman (location__BLANK__x10_y10); pacman__SYNC (synch_control_); synch_control_ (synch_control_) | @@ -250,27 +243,23 @@ location_0pellet update :collected(gdl__counter) = - Sum (gdl__counter | gdl__counter(gdl__counter) : + :( + ex location__BLANK__x6_y6 + (nextcell__east(location__BLANK__x_y, location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x_y) and + not + (nextcell__east(location__BLANK__x_y, location__BLANK__x6_y6) and + location_0pellet(location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6))) + ) * :collected(gdl__counter) + :( - ex location__BLANK__x6_y6, location__BLANK__x5_y5 - (nextcell__east(location__BLANK__x5_y5, location__BLANK__x6_y6) and - location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6) and - location_0pacman(location__BLANK__x5_y5) and - location__BLANK___BLANK___BLANK_(location__BLANK__x5_y5) and - not - (nextcell__east(location__BLANK__x5_y5, location__BLANK__x6_y6) and - location_0pellet(location__BLANK__x6_y6) and - location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6))) - ) * :collected(gdl__counter) + - :( - ex location__BLANK__x3_y3, location__BLANK__x4_y4 - (nextcell__east(location__BLANK__x3_y3, location__BLANK__x4_y4) and - location_0pacman(location__BLANK__x3_y3) and - location__BLANK___BLANK___BLANK_(location__BLANK__x3_y3) and - location_0pellet(location__BLANK__x4_y4) and - location__BLANK___BLANK___BLANK_(location__BLANK__x4_y4)) - ) * (1. * (:collected(gdl__counter) - 98.) + 99.) - ) + ex location__BLANK__x4_y4 + (nextcell__east(location__BLANK__x_y, location__BLANK__x4_y4) and + location__BLANK___BLANK___BLANK_(location__BLANK__x_y) and + location_0pellet(location__BLANK__x4_y4) and + location__BLANK___BLANK___BLANK_(location__BLANK__x4_y4)) + ) * (1. * (:collected(gdl__counter) - 98.) + 99.) pre (not terminal() and ex val__pacman, control__BLANK_ @@ -278,57 +267,51 @@ control__BLANK_(control__BLANK_) and movable(val__pacman) and val__0pacman(val__pacman) and val___BLANK_(val__pacman))) RULE move_north: - [gdl__counter, location__BLANK__x10_y10, location__BLANK__x9_y9, - location__BLANK__x_y, synch_control_ | - _nondistinct_ { - (location__BLANK__x9_y9, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x9_y9) - }; + [gdl__counter, location__BLANK__x10_y10, location__BLANK__x_y, + synch_control_ | + _nondistinct_ (location__BLANK__x_y, location__BLANK__x10_y10); _opt_blinky__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_control_0ghosts { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_control_0pacman { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_inky__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0blinky { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0inky { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_location_0pacman { gdl__counter; location__BLANK__x10_y10; synch_control_}; _opt_location_0pellet { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y; synch_control_ + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y; + synch_control_ }; _opt_pacman__SYNC { - gdl__counter; location__BLANK__x10_y10; location__BLANK__x9_y9; - location__BLANK__x_y - }; + gdl__counter; location__BLANK__x10_y10; location__BLANK__x_y}; gdl__counter (gdl__counter); legalstep__north (location__BLANK__x_y); - location_0pacman {location__BLANK__x9_y9; location__BLANK__x_y}; + location_0pacman (location__BLANK__x_y); location__BLANK___BLANK___BLANK_ { - location__BLANK__x10_y10; location__BLANK__x9_y9; location__BLANK__x_y}; - nextcell__north (location__BLANK__x9_y9, location__BLANK__x10_y10); + location__BLANK__x10_y10; location__BLANK__x_y}; + nextcell__north (location__BLANK__x_y, location__BLANK__x10_y10); synch_control_ (synch_control_) | ] -> - [gdl__counter, location__BLANK__x10_y10, location__BLANK__x9_y9, - location__BLANK__x_y, synch_control_ | + [gdl__counter, location__BLANK__x10_y10, location__BLANK__x_y, + synch_control_ | location_0pacman (location__BLANK__x10_y10); pacman__SYNC (synch_control_); synch_control_ (synch_control_) | @@ -338,27 +321,23 @@ location_0pellet update :collected(gdl__counter) = - Sum (gdl__counter | gdl__counter(gdl__counter) : + :( + ex location__BLANK__x6_y6 + (nextcell__north(location__BLANK__x_y, location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x_y) and + not + (nextcell__north(location__BLANK__x_y, location__BLANK__x6_y6) and + location_0pellet(location__BLANK__x6_y6) and + location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6))) + ) * :collected(gdl__counter) + :( - ex location__BLANK__x6_y6, location__BLANK__x5_y5 - (nextcell__north(location__BLANK__x5_y5, location__BLANK__x6_y6) and - location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6) and - location_0pacman(location__BLANK__x5_y5) and - location__BLANK___BLANK___BLANK_(location__BLANK__x5_y5) and - not - (nextcell__north(location__BLANK__x5_y5, location__BLANK__x6_y6) and - location_0pellet(location__BLANK__x6_y6) and - location__BLANK___BLANK___BLANK_(location__BLANK__x6_y6))) - ) * :collected(gdl__counter) + - :( - ex location__BLANK__x3_y3, location__BLANK__x4_y4 - (nextcell__north(location__BLANK__x3_y3, location__BLANK__x4_y4) and - location_0pacman(location__BLANK__x3_y3) and - location__BLANK___BLANK___BLANK_(location__BLANK__x3_y3) and - location_0pellet(location__BLANK__x4_y4) and - location__BLANK___BLANK___BLANK_(location__BLANK__x4_y4)) - ) * (1. * (:collected(gdl__counter) - 98.) + 99.) - ) + ex location__BLANK__x4_y4 + (nextcell__north(location__BLANK__x_y, location__BLANK__x4_y4) and + location__BLANK___BLANK___BLANK_(location__BLANK__x_y) and + location_0pellet(location__BLANK__x4_y4) and + location__BLANK___BLANK___BLANK_(location__BLANK__x4_y4)) + ) * (1. * (:collected(gdl__counter) - 98.) + 99.) pre (not terminal() and ex val__pacman, control__BLANK_ @@ -366,57 +345,51 @@ control__BLANK_(control__BLANK_) and movable(val__pacman) and val__0pacman(val__pacman) and val___BLANK_(val__pacman))) RULE move_south: - [gdl__counter, location__BLANK__x10_y10, location__BLANK__x9_y9, - location__BLANK__x_y, synch_control_ | - _nondistinct_ { - (location__BLANK__x9_y9, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x10_y10); - (location__BLANK__x_y, location__BLANK__x9_y9) - }; + [gdl__counter, location__BLANK__x10_y10, location__BLANK__x_y, + synch_control_ | + _nondistinct_ (location__BLANK__x_y, location__BLANK__x10_y10); _opt_blinky__SYNC { - gdl__counter; ... [truncated message content] |