[Toss-devel-svn] SF.net SVN: toss:[1539] trunk/Toss
Status: Beta
Brought to you by:
lukaszkaiser
|
From: <luk...@us...> - 2011-08-13 21:19:29
|
Revision: 1539
http://toss.svn.sourceforge.net/toss/?rev=1539&view=rev
Author: lukstafi
Date: 2011-08-13 21:19:21 +0000 (Sat, 13 Aug 2011)
Log Message:
-----------
GDL translation: completely reworked clause partitioning for rule candidate generation (replacing a placeholder in the reimplementation); a couple of bug fixes.
Modified Paths:
--------------
trunk/Toss/Formula/FormulaOps.ml
trunk/Toss/GGP/GDL.ml
trunk/Toss/GGP/GameSimpl.ml
trunk/Toss/GGP/TranslateFormula.ml
trunk/Toss/GGP/TranslateGame.ml
trunk/Toss/GGP/TranslateGameTest.ml
trunk/Toss/GGP/tests/tictactoe-raw.toss
trunk/Toss/GGP/tests/tictactoe-simpl.toss
Modified: trunk/Toss/Formula/FormulaOps.ml
===================================================================
--- trunk/Toss/Formula/FormulaOps.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/Formula/FormulaOps.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -124,19 +124,21 @@
let free_vars phi =
remove_dup_vars [] (List.sort compare_vars (free_vars_acc [] phi))
-(* Delete top-most ex/all quantification of [vs] in the formula. *)
+(* Delete all quantification over [vs] in the formula. *)
let rec del_vars_quant vs = function
| Eq _ | Rel _ | In _ | SO _ | RealExpr _ as f -> f
| Not phi -> Not (del_vars_quant vs phi)
| And (flist) -> And (List.map (del_vars_quant vs) flist)
| Or (flist) -> Or (List.map (del_vars_quant vs) flist)
| Ex ([], phi) | All ([], phi) -> del_vars_quant vs phi
- | Ex (v :: vr, phi) when List.mem v vs ->
- del_vars_quant (Aux.list_remove v vs) (Ex (vr, phi))
- | Ex (v :: vr, phi) -> Ex ([v], del_vars_quant vs (Ex (vr, phi)))
- | All (v :: vr, phi) when List.mem v vs ->
- del_vars_quant (Aux.list_remove v vs) (All (vr, phi))
- | All (v :: vr, phi) -> All ([v], del_vars_quant vs (All (vr, phi)))
+ | Ex (vr, phi) ->
+ let vr = Aux.list_diff vr vs in
+ if vr = [] then del_vars_quant vs phi
+ else Ex (vr, del_vars_quant vs phi)
+ | All (vr, phi) ->
+ let vr = Aux.list_diff vr vs in
+ if vr = [] then del_vars_quant vs phi
+ else All (vr, del_vars_quant vs phi)
| Lfp (r, xs, phi) -> Lfp (r, xs, del_vars_quant vs phi)
| Gfp (r, xs, phi) -> Gfp (r, xs, del_vars_quant vs phi)
Modified: trunk/Toss/GGP/GDL.ml
===================================================================
--- trunk/Toss/GGP/GDL.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/GDL.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -247,7 +247,7 @@
(try List.assoc y sb with Not_found -> t)
| Var _ as t -> t
| Func (f, args) ->
- Func (f, Array.map (subst sb) args)
+ Func (f, Array.map (subst_consts sb) args)
let rec unify_all sb = function
| [] | [_] -> sb
Modified: trunk/Toss/GGP/GameSimpl.ml
===================================================================
--- trunk/Toss/GGP/GameSimpl.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/GameSimpl.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -275,13 +275,25 @@
match spec with
| None -> rel
| Some spec -> DiscreteRule.orig_rel_of rel in
- rel <> "" &&
- not (Aux.Strings.mem rel fluents) &&
- not (List.mem_assoc rel game.Arena.defined_rels) &&
- not (List.exists (fun (_,(rel2,_)) -> rel2=rel) equivalent) &&
- not (Aux.Strings.mem (fst (List.assoc rel equivalent)) fluents ||
- List.mem_assoc (fst (List.assoc rel equivalent))
- game.Arena.defined_rels)
+ (* {{{ log entry *)
+ if !debug_level > 3 then (
+ Printf.printf "removable: %s...%!" rel
+ );
+ (* }}} *)
+ let res =
+ rel <> "" &&
+ not (Aux.Strings.mem rel fluents) &&
+ not (List.mem_assoc rel game.Arena.defined_rels) &&
+ not (List.exists (fun (_,(rel2,_)) -> rel2=rel) equivalent) &&
+ not (Aux.Strings.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 > 3 then (
+ Printf.printf "%B\n%!" res;
+ );
+ (* }}} *)
+ res
in
(* {{{ log entry *)
if !debug_level > 0 then (
Modified: trunk/Toss/GGP/TranslateFormula.ml
===================================================================
--- trunk/Toss/GGP/TranslateFormula.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/TranslateFormula.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -209,7 +209,8 @@
let pos_terms = state_terms pos_state_phi in
let pos_vars = List.map (var_of_term data) pos_terms in
let neg_terms = state_terms neg_state_phi in
- let neg_vars = List.map (var_of_term data) neg_terms in
+ let neg_vars =
+ Aux.list_diff (List.map (var_of_term data) neg_terms) pos_vars in
let all_terms = pos_terms @ neg_terms in
let phi_vars = clause_vars
(("", [| |]),
@@ -231,15 +232,18 @@
(* negation-normal-form of "not neg_state_phi" *)
Formula.Or (
List.map (transl_state data) (nnf_dnf neg_state_phi)) in
+ let negated_part =
+ Formula.And [
+ (* positive because they form a "premise" *)
+ transl_rels data rels_eqs all_terms neg_terms;
+ (* the universal "conclusion" *)
+ negated_neg_state_transl] in
let universal_part =
if neg_terms = [] then []
+ else if neg_vars = []
+ then [Formula.Not negated_part]
else [Formula.Not (
- Formula.Ex (((Aux.list_diff neg_vars pos_vars) :> Formula.var list),
- Formula.And [
- (* positive because they form a "premise" *)
- transl_rels data rels_eqs all_terms neg_terms;
- (* the universal "conclusion" *)
- negated_neg_state_transl]))] in
+ Formula.Ex ((neg_vars :> Formula.var list), negated_part))] in
let base_part =
Formula.And (
[ ext_phi;
Modified: trunk/Toss/GGP/TranslateGame.ml
===================================================================
--- trunk/Toss/GGP/TranslateGame.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/TranslateGame.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -47,9 +47,6 @@
(** Limit on the number of steps for aggregate and random playouts. *)
let playout_horizon = ref 20
-(** Use "true" atoms while computing rule cases. *)
-let split_on_state_atoms = ref false
-
let env_player = Const "ENVIRONMENT"
type tossrule_data = {
@@ -452,8 +449,8 @@
(* Find the rule clauses $\ol{\calC},\ol{\calN}$. Also handles as
special cases: "concurrent" case with selecting clauses for only
one player, and "environment" case for selecting clauses not
- dependent on any player. Preserve legal clauses into the output
- tuples. *)
+ dependent on any player. Preserve "legal" clauses into the output
+ tuples. Mark which "next" clauses contained "does" atoms. *)
let move_tuples used_vars next_cls mode players legal_tuples =
(* computing the $d_i(\calN)$ for each $\calN$ *)
let fresh_x_f () =
@@ -532,12 +529,19 @@
with Not_found -> cl_tup
) cl_tup next_clauses in
let cl_tups = List.map maximality cl_tups in
- (* removing "does" atoms from clauses *)
+ (* Removing "does" atoms from clauses, but leaving a trace: a
+ clause containing "does" atom is required to participate in
+ the rewrite rule. *)
List.map (fun (sb, _, n_cls) ->
let n_cls = List.map (fun (head,frame,body) ->
- head, frame,
- List.filter
- (function Pos (Does _) -> false | _ -> true) body) n_cls in
+ if List.exists
+ (function Pos (Does _) -> true | _ -> false) body
+ then
+ head, (frame, true),
+ List.filter
+ (function Pos (Does _) -> false | _ -> true) body
+ else
+ head, (frame, false), body) n_cls in
sb, legal_tup, n_cls) cl_tups in
Aux.concat_map move_clauses legal_tuples
@@ -551,7 +555,7 @@
);
(* }}} *)
let frame_cls =
- Aux.map_some (fun (s, frame, body) ->
+ Aux.map_some (fun (s, (frame, _), body) ->
if frame then Some (s, body) else None) next_cls in
(* two passes to ensure coverage and maximality *)
(* Treating fixed-vars as consts, by substituting them with
@@ -592,6 +596,13 @@
let frames =
List.map (fun (sb, s, bodies) ->
s, List.map (subst_literals sb) bodies) frames in
+ (* removing the framed state terms *)
+ let frames =
+ let filter_out s body =
+ List.filter
+ (function Pos (True t) when t=s -> false | _ -> true) body in
+ List.map (fun (s, bodies) ->
+ s, List.map (filter_out s) bodies) frames in
(* {{{ log entry *)
if !debug_level > 2 then (
Printf.printf "add_erasure_clauses: frames --\n%!";
@@ -633,54 +644,112 @@
let erasure_cls = List.map
(subst_consts_clause fixed_to_var)
(List.map (fun (s,body)->("erasure next",[|s|]),body) erasure_cls) in
+ (* Erasure clauses are considered as not having "does" atoms,
+ although of course the frame clauses did have "does" atoms. *)
let erasure_cls =
- List.map (fun ((_,h),body) -> h.(0),body) erasure_cls in
+ List.map (fun ((_,h),body) -> h.(0),false,body) erasure_cls in
(* {{{ log entry *)
if !debug_level > 2 then (
Printf.printf "add_erasure_clauses: erasure clauses --\n%!";
- let print_erasure (s, body) =
+ let print_erasure (s, _, body) =
Printf.printf "ERASURE: %s <== %s\n%!" (term_str s)
(String.concat " " (List.map literal_str body)) in
List.iter print_erasure erasure_cls; flush stdout;
);
(* }}} *)
let next_cls =
- Aux.map_some (fun (s, frame, body) ->
- if not frame then Some (s, body) else None) next_cls in
+ Aux.map_some (fun (s, (frame, required), body) ->
+ if not frame then Some (s, required, body) else None) next_cls in
legal_tup, next_cls @ erasure_cls
-(* Assign rule clauses to rule cases, i.e. candidates for
- Toss rules. Collect the conditions and RHS state terms together.
- Frame clauses are already processed into erasure clauses. *)
-let rule_cases next_cls =
- let atoms = Aux.concat_map
- (fun (_, body) -> Aux.map_some (function
- | Pos (Rel _ as a) | Neg (Rel _ as a) -> Some a
- | (Pos (True _ as a) | Neg (True _ as a))
- when !split_on_state_atoms -> Some a
- | _ -> None) body) next_cls in
- if atoms = [] then (* single partition *)
- let case_rhs, case_conds = List.split next_cls in
+let ignore_rhs = Const "__IGNORE_RHS__"
+
+(* Assign rule clauses to rule cases, i.e. candidates for Toss
+ rules. Collect the conditions and RHS state terms together. Frame
+ clauses are already processed into erasure clauses. Rule clauses
+ should contain the "legal" clauses with heads replaced by
+ "_IGNORE_RHS_" terms which will be discarded later; "legal" clauses
+ and "next" clauses that contained "does" atoms should be marked as
+ required.
+
+ We call atoms or literals "deterministic" if they are not under
+ disjunction. First we collect deterministic literals of required
+ clauses, and remove unrequired clauses that have deterministic
+ literals conflicting with deterministic literals of required clauses.
+
+ The candidates are built by partitioning rule clauses. We select
+ "case-split atoms": the deterministic atoms of unrequired clauses
+ that are not deterministic atoms of required clauses. To further
+ decrease the number of case-split atoms, we build "patterns":
+ collect atoms that occur in the same clauses with the same sign,
+ and from each pattern we pick just one arbitrary atom. We generate
+ all sign assingments to case-split atoms -- each is a potential
+ rule case. For each sign assignment, we select exactly those
+ unrequired clauses that have no literals disagreeing with the sign
+ assignment.
+
+ TODO: unrequired clauses with disjunctions may avoid being
+ excluded. If this poses problems we might need to expand
+ disjunctions containing potentially case-split atoms.
+
+*)
+let rule_cases rule_cls =
+ let required_cls = Aux.map_some
+ (fun (h, required, body) ->
+ if required then Some (h, body) else None) rule_cls in
+ let unrequired_cls = Aux.map_some
+ (fun (h, required, body) ->
+ if not required then Some (h, body) else None) rule_cls in
+ let forbidden_lits = Aux.unique_sorted
+ (Aux.concat_map
+ (fun (_, body) -> Aux.map_some (function
+ | Pos (Rel _ as a) | Pos (True _ as a) -> Some (Neg a)
+ | Neg (Rel _ as a) | Neg (True _ as a) -> Some (Pos a)
+ | _ -> None) body) required_cls) in
+ let unrequired_cls = List.filter
+ (fun (_, body) ->
+ not (List.exists (fun flit -> List.mem flit body)
+ forbidden_lits))
+ unrequired_cls in
+ let req_atoms = List.map
+ (function Pos a -> a | Neg a -> a | _ -> assert false)
+ forbidden_lits in
+ let unreq_atoms = Aux.unique_sorted
+ (Aux.concat_map
+ (fun (_, body) -> Aux.map_some (function
+ | Pos (Rel _ as a) | Pos (True _ as a)
+ | Neg (Rel _ as a) | Neg (True _ as a) -> Some a
+ | _ -> None) body) unrequired_cls) in
+ let split_atoms = Aux.list_diff unreq_atoms req_atoms in
+ if split_atoms = [] then (* single partition *)
+ let rule_cls = required_cls @ unrequired_cls in
+ let case_rhs, case_conds = List.split rule_cls in
+ let case_rhs = Aux.list_remove ignore_rhs case_rhs in
(* {{{ log entry *)
if !debug_level > 2 then (
Printf.printf "rule_cases: single partition\n%!";
);
(* }}} *)
- [next_cls, case_rhs, List.concat case_conds]
+ [Aux.unique_sorted case_rhs,
+ Aux.unique_sorted (List.concat case_conds)]
else
let patterns =
- let next_cls = Array.of_list next_cls in
+ let unrequired_cls = Array.of_list unrequired_cls in
List.map (fun a ->
Array.mapi (fun i (_, body) ->
if List.mem (Neg a) body then -1
else if List.mem (Pos a) body then 1
else 0
- ) next_cls,
- a) atoms in
+ ) unrequired_cls,
+ a) split_atoms in
let patterns = Aux.collect patterns in
+ let split_atoms = List.map
+ (fun (_,atoms) -> List.hd atoms) patterns in
(* {{{ log entry *)
if !debug_level > 2 then (
+ Printf.printf "rule_cases: case-split atoms = %s\n%!"
+ (String.concat " " (List.map atom_str split_atoms));
Printf.printf "rule_cases: patterns --\n%!";
let print_pat (pattern, atoms) =
Printf.printf "%a: %s\n%!"
@@ -689,34 +758,29 @@
List.iter print_pat patterns
);
(* }}} *)
- let patterns = List.filter (fun (pat, _) ->
- Aux.array_existsi (fun _ v-> v < 1) pat &&
- Aux.array_existsi (fun _ v-> v > -1) pat) patterns in
- let pos_choice = List.map (fun _ -> true) patterns in
- let neg_choice = List.map (fun _ -> false) patterns in
- let choices = Aux.product [pos_choice; neg_choice] in
+ let choices = Aux.power split_atoms [false; true] in
let rule_case choice =
let separation_cond =
- List.concat
- (List.map2 (fun b (_, atoms) ->
- if b then List.map (fun a -> Pos a) atoms
- else List.map (fun a -> Neg a) atoms) choice patterns) in
+ List.map (fun (a,b) -> if b then Pos a else Neg a) choice in
let case_cls =
List.filter (fun (_, body) ->
- List.for_all2 (fun b (_, atoms) ->
- if b then (* atoms not excluded *)
- List.for_all (fun a -> not (List.mem (Neg a) body)) atoms
- else (* atoms not included *)
- List.for_all (fun a -> not (List.mem (Pos a) body)) atoms
- ) choice patterns
- ) next_cls in
+ List.for_all (fun (a,b) ->
+ if b then (* atom not excluded *)
+ not (List.mem (Neg a) body)
+ else (* atom not included *)
+ not (List.mem (Pos a) body)
+ ) choice
+ ) unrequired_cls in
+ let case_cls = case_cls @ required_cls in
let case_rhs, case_conds = List.split case_cls in
- case_cls, case_rhs, separation_cond @ List.concat case_conds in
+ let case_rhs = Aux.list_remove ignore_rhs case_rhs in
+ Aux.unique_sorted case_rhs,
+ Aux.unique_sorted (separation_cond @ List.concat case_conds) in
let res = List.map rule_case choices in
(* {{{ log entry *)
if !debug_level > 2 then (
Printf.printf "rule_cases: next clauses partitioned into rules\n%!";
- let print_case i (_, case_rhs, case_cond) =
+ let print_case i (case_rhs, case_cond) =
Printf.printf "\nRCAND: #%d\nRHS: %s\nLHS: %s\n%!" i
(String.concat " " (List.map term_str case_rhs))
(String.concat " " (List.map literal_str case_cond)) in
@@ -737,9 +801,9 @@
if !debug_level > 2 then (
Printf.printf
"process_rule_cands: move tuples before adding erasure cls--\n%!";
- let nclause_str (rhs, is_frame, body) =
+ let nclause_str (rhs, (is_frame, required), body) =
Printf.printf
- "%s <=fr:%b= %s\n%!"(term_str rhs) is_frame
+ "%s <=fr:%B;req:%B= %s\n%!"(term_str rhs) is_frame required
(String.concat " "(List.map literal_str body)) in
let print_tup i (legal_tup, n_cls) =
Printf.printf "CAND: #%d\nlegal_tup: %s\n%!" i
@@ -753,12 +817,12 @@
let add_legal_cond (legal_tup, next_cls) =
- let legal_tup, legal_cond = List.split legal_tup in
- let legal_cond = List.concat legal_cond in
- List.map (fun (case_cls, case_rhs, case_cond) ->
- legal_tup, Aux.unique_sorted case_rhs,
- Aux.unique_sorted (case_cond @ legal_cond)
- ) (rule_cases next_cls)
+ let legal_tup, legal_conds = List.split legal_tup in
+ let legal_cls = List.map (* required clauses *)
+ (fun body -> ignore_rhs, true, body) legal_conds in
+ List.map
+ (fun (case_rhs, case_cond) -> legal_tup, case_rhs, case_cond)
+ (rule_cases (legal_cls @ next_cls))
let turnbased_rule_cases loc_noops used_vars f_paths next_cls
@@ -1037,11 +1101,16 @@
rule_names := Aux.Strings.add rname !rule_names;
let label =
{Arena.lb_rule = rname; time_in = 0.1, 0.1; parameters_in = []} in
- let precond =
- Formula.And
- (synch_precond @
- (* singleton disjunct, i.e. no disjunction *)
- [TranslateFormula.translate transl_data [case_cond]]) in
+ let case_precond =
+ (* singleton disjunct, i.e. no disjunction *)
+ TranslateFormula.translate transl_data [case_cond] in
+ let precond = Formula.And (synch_precond @ [case_precond]) in
+ (* {{{ log entry *)
+ if !debug_level > 2 then (
+ Printf.printf "build_toss_rule: synch precond = %s; main precond = %s\n%!"
+ (Formula.str (Formula.And synch_precond)) (Formula.str case_precond)
+ );
+ (* }}} *)
let rhs_add = Aux.concat_map
(fun sterm ->
let s_subterms =
Modified: trunk/Toss/GGP/TranslateGameTest.ml
===================================================================
--- trunk/Toss/GGP/TranslateGameTest.ml 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/TranslateGameTest.ml 2011-08-13 21:19:21 UTC (rev 1539)
@@ -272,11 +272,12 @@
TranslateGame.generate_test_case := None
let a () =
- regenerate ~debug:false ~game_name:"tictactoe" ~player:"xplayer";
+ regenerate ~debug:true ~game_name:"tictactoe" ~player:"xplayer";
(* regenerate ~debug:false ~game_name:"connect5" ~player:"x"; *)
(* regenerate ~debug:true ~game_name:"breakthrough" ~player:"white"; *)
(* regenerate ~debug:true ~game_name:"pawn_whopping" ~player:"x"; *)
(* regen_with_debug ~game_name:"connect4" ~player:"white"; *)
+ (* failwith "generated"; *)
()
let exec () =
Modified: trunk/Toss/GGP/tests/tictactoe-raw.toss
===================================================================
--- trunk/Toss/GGP/tests/tictactoe-raw.toss 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/tests/tictactoe-raw.toss 2011-08-13 21:19:21 UTC (rev 1539)
@@ -192,43 +192,65 @@
_opt_cell_2b (control__BLANK_);
_opt_cell_2o {cell_x6_y__BLANK_; control__BLANK_};
_opt_cell_2x {cell_x6_y__BLANK_; control__BLANK_};
- _opt_control_0oplayer {cell_x6_y__BLANK_; control__BLANK_};
- _opt_control_0xplayer {cell_x6_y__BLANK_; control__BLANK_};
- cell_2b (cell_x6_y__BLANK_);
- cell__BLANK___BLANK___BLANK_ (cell_x6_y__BLANK_)
+ _opt_control_0oplayer (cell_x6_y__BLANK_);
+ _opt_control_0xplayer (cell_x6_y__BLANK_); cell_2b (cell_x6_y__BLANK_);
+ cell__BLANK___BLANK___BLANK_ (cell_x6_y__BLANK_);
+ control_0xplayer (control__BLANK_); control__BLANK_ (control__BLANK_)
|
] ->
[cell_x6_y__BLANK_, control__BLANK_ |
+ cell_2x (cell_x6_y__BLANK_); control_0oplayer (control__BLANK_) |
+ ]
+ emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
+RULE mark_x6_y_noop0:
+ [cell_x6_y__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x6_y__BLANK_);
+ _opt_control_0xplayer (cell_x6_y__BLANK_); cell_2b (cell_x6_y__BLANK_);
+ cell__BLANK___BLANK___BLANK_ (cell_x6_y__BLANK_);
+ control_0oplayer (control__BLANK_); control_0xplayer (control__BLANK_);
+ control__BLANK_ (control__BLANK_)
+ |
+ ] ->
+ [cell_x6_y__BLANK_, control__BLANK_ |
cell_2x (cell_x6_y__BLANK_); control_0oplayer (control__BLANK_);
control_0xplayer (control__BLANK_)
|
] emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
- pre
- (not (cell_0x6(cell_x6_y__BLANK_) and cell_1y(cell_x6_y__BLANK_)) and
- ex control__BLANK_
- (control_0oplayer(control__BLANK_) and
- control_0xplayer(control__BLANK_) and control__BLANK_(control__BLANK_)))
RULE noop_mark_x7_y0:
[cell_x7_y0__BLANK_, control__BLANK_ |
_opt_cell_2b (control__BLANK_);
_opt_cell_2o {cell_x7_y0__BLANK_; control__BLANK_};
_opt_cell_2x {cell_x7_y0__BLANK_; control__BLANK_};
- _opt_control_0oplayer {cell_x7_y0__BLANK_; control__BLANK_};
- _opt_control_0xplayer {cell_x7_y0__BLANK_; control__BLANK_};
- cell_2b (cell_x7_y0__BLANK_);
- cell__BLANK___BLANK___BLANK_ (cell_x7_y0__BLANK_)
+ _opt_control_0oplayer (cell_x7_y0__BLANK_);
+ _opt_control_0xplayer (cell_x7_y0__BLANK_); cell_2b (cell_x7_y0__BLANK_);
+ cell__BLANK___BLANK___BLANK_ (cell_x7_y0__BLANK_);
+ control_0oplayer (control__BLANK_); control__BLANK_ (control__BLANK_)
|
] ->
[cell_x7_y0__BLANK_, control__BLANK_ |
+ cell_2o (cell_x7_y0__BLANK_); control_0xplayer (control__BLANK_) |
+ ]
+ emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
+RULE noop_mark_x7_y00:
+ [cell_x7_y0__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x7_y0__BLANK_);
+ _opt_control_0xplayer (cell_x7_y0__BLANK_); cell_2b (cell_x7_y0__BLANK_);
+ cell__BLANK___BLANK___BLANK_ (cell_x7_y0__BLANK_);
+ control_0oplayer (control__BLANK_); control_0xplayer (control__BLANK_);
+ control__BLANK_ (control__BLANK_)
+ |
+ ] ->
+ [cell_x7_y0__BLANK_, control__BLANK_ |
cell_2o (cell_x7_y0__BLANK_); control_0oplayer (control__BLANK_);
control_0xplayer (control__BLANK_)
|
] emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
- pre
- (not (cell_0x7(cell_x7_y0__BLANK_) and cell_1y0(cell_x7_y0__BLANK_)) and
- ex control__BLANK_
- (control_0oplayer(control__BLANK_) and
- control_0xplayer(control__BLANK_) and control__BLANK_(control__BLANK_)))
LOC 0 {
PLAYER xplayer {
@@ -236,7 +258,7 @@
100. * :((true and line__x() and true)) +
50. *
:((true and not line__x() and not line__o() and not open() and true))
- MOVES [mark_x6_y_noop -> 1] }
+ MOVES [mark_x6_y_noop -> 1]; [mark_x6_y_noop0 -> 1] }
PLAYER oplayer {
PAYOFF
100. * :((true and line__o() and true)) +
@@ -257,7 +279,7 @@
100. * :((true and line__o() and true)) +
50. *
:((true and not line__x() and not line__o() and not open() and true))
- MOVES [noop_mark_x7_y0 -> 0] }
+ MOVES [noop_mark_x7_y0 -> 0]; [noop_mark_x7_y00 -> 0] }
}
MODEL
[cell_1_1__BLANK_, cell_1_2__BLANK_, cell_1_3__BLANK_, cell_2_1__BLANK_,
Modified: trunk/Toss/GGP/tests/tictactoe-simpl.toss
===================================================================
--- trunk/Toss/GGP/tests/tictactoe-simpl.toss 2011-08-13 01:47:40 UTC (rev 1538)
+++ trunk/Toss/GGP/tests/tictactoe-simpl.toss 2011-08-13 21:19:21 UTC (rev 1539)
@@ -1,427 +1,228 @@
+REL column__b(v0) =
+ ex cell_1_n4__BLANK_, cell_2_n4__BLANK_, cell_3_n4__BLANK_
+ (EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_3_n4__BLANK_) and
+ EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_2_n4__BLANK_) and
+ cell_03(cell_3_n4__BLANK_) and cell_02(cell_2_n4__BLANK_) and
+ cell_01(cell_1_n4__BLANK_) and cell_2b(cell_1_n4__BLANK_) and
+ cell_2b(cell_2_n4__BLANK_) and cell_2b(cell_3_n4__BLANK_) and
+ v0 = cell_1_n4__BLANK_ and not control__BLANK_(cell_1_n4__BLANK_) and
+ not control__BLANK_(cell_2_n4__BLANK_) and
+ not control__BLANK_(cell_3_n4__BLANK_))
+REL column__o(v0) =
+ ex cell_1_n4__BLANK_, cell_2_n4__BLANK_, cell_3_n4__BLANK_
+ (EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_3_n4__BLANK_) and
+ EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_2_n4__BLANK_) and
+ cell_03(cell_3_n4__BLANK_) and cell_02(cell_2_n4__BLANK_) and
+ cell_01(cell_1_n4__BLANK_) and cell_2o(cell_1_n4__BLANK_) and
+ cell_2o(cell_2_n4__BLANK_) and cell_2o(cell_3_n4__BLANK_) and
+ v0 = cell_1_n4__BLANK_ and not control__BLANK_(cell_1_n4__BLANK_) and
+ not control__BLANK_(cell_2_n4__BLANK_) and
+ not control__BLANK_(cell_3_n4__BLANK_))
+REL column__x(v0) =
+ ex cell_1_n4__BLANK_, cell_2_n4__BLANK_, cell_3_n4__BLANK_
+ (EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_3_n4__BLANK_) and
+ EQ___cell_1__cell_1(cell_1_n4__BLANK_, cell_2_n4__BLANK_) and
+ cell_03(cell_3_n4__BLANK_) and cell_02(cell_2_n4__BLANK_) and
+ cell_01(cell_1_n4__BLANK_) and cell_2x(cell_1_n4__BLANK_) and
+ cell_2x(cell_2_n4__BLANK_) and cell_2x(cell_3_n4__BLANK_) and
+ v0 = cell_1_n4__BLANK_ and not control__BLANK_(cell_1_n4__BLANK_) and
+ not control__BLANK_(cell_2_n4__BLANK_) and
+ not control__BLANK_(cell_3_n4__BLANK_))
+REL diagonal__b() =
+ ex cell_1_1__BLANK_, cell_2_2__BLANK_, cell_3_3__BLANK_
+ (R(cell_1_1__BLANK_) and R0(cell_2_2__BLANK_) and R1(cell_3_3__BLANK_) and
+ cell_2b(cell_1_1__BLANK_) and cell_2b(cell_2_2__BLANK_) and
+ cell_2b(cell_3_3__BLANK_) and not control__BLANK_(cell_1_1__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_3__BLANK_)) or
+ ex cell_1_3__BLANK_, cell_2_2__BLANK_, cell_3_1__BLANK_
+ (R2(cell_1_3__BLANK_) and R0(cell_2_2__BLANK_) and
+ R3(cell_3_1__BLANK_) and cell_2b(cell_1_3__BLANK_) and
+ cell_2b(cell_2_2__BLANK_) and cell_2b(cell_3_1__BLANK_) and
+ not control__BLANK_(cell_1_3__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_1__BLANK_))
+REL diagonal__o() =
+ ex cell_1_1__BLANK_, cell_2_2__BLANK_, cell_3_3__BLANK_
+ (R(cell_1_1__BLANK_) and R0(cell_2_2__BLANK_) and R1(cell_3_3__BLANK_) and
+ cell_2o(cell_1_1__BLANK_) and cell_2o(cell_2_2__BLANK_) and
+ cell_2o(cell_3_3__BLANK_) and not control__BLANK_(cell_1_1__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_3__BLANK_)) or
+ ex cell_1_3__BLANK_, cell_2_2__BLANK_, cell_3_1__BLANK_
+ (R2(cell_1_3__BLANK_) and R0(cell_2_2__BLANK_) and
+ R3(cell_3_1__BLANK_) and cell_2o(cell_1_3__BLANK_) and
+ cell_2o(cell_2_2__BLANK_) and cell_2o(cell_3_1__BLANK_) and
+ not control__BLANK_(cell_1_3__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_1__BLANK_))
+REL diagonal__x() =
+ ex cell_1_1__BLANK_, cell_2_2__BLANK_, cell_3_3__BLANK_
+ (R(cell_1_1__BLANK_) and R0(cell_2_2__BLANK_) and R1(cell_3_3__BLANK_) and
+ cell_2x(cell_1_1__BLANK_) and cell_2x(cell_2_2__BLANK_) and
+ cell_2x(cell_3_3__BLANK_) and not control__BLANK_(cell_1_1__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_3__BLANK_)) or
+ ex cell_1_3__BLANK_, cell_2_2__BLANK_, cell_3_1__BLANK_
+ (R2(cell_1_3__BLANK_) and R0(cell_2_2__BLANK_) and
+ R3(cell_3_1__BLANK_) and cell_2x(cell_1_3__BLANK_) and
+ cell_2x(cell_2_2__BLANK_) and cell_2x(cell_3_1__BLANK_) and
+ not control__BLANK_(cell_1_3__BLANK_) and
+ not control__BLANK_(cell_2_2__BLANK_) and
+ not control__BLANK_(cell_3_1__BLANK_))
+REL line__b() =
+ diagonal__b() or
+ ex cell__BLANK__m6__BLANK_ column__b(cell__BLANK__m6__BLANK_) or
+ ex cell_m5__BLANK___BLANK_ row__b(cell_m5__BLANK___BLANK_)
+REL line__o() =
+ diagonal__o() or
+ ex cell__BLANK__m6__BLANK_ column__o(cell__BLANK__m6__BLANK_) or
+ ex cell_m5__BLANK___BLANK_ row__o(cell_m5__BLANK___BLANK_)
+REL line__x() =
+ diagonal__x() or
+ ex cell__BLANK__m6__BLANK_ column__x(cell__BLANK__m6__BLANK_) or
+ ex cell_m5__BLANK___BLANK_ row__x(cell_m5__BLANK___BLANK_)
+REL open() =
+ ex cell_m7_n5__BLANK_
+ (cell_2b(cell_m7_n5__BLANK_) and not control__BLANK_(cell_m7_n5__BLANK_))
+REL row__b(v0) =
+ ex cell_m4_1__BLANK_, cell_m4_2__BLANK_, cell_m4_3__BLANK_
+ (EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_3__BLANK_) and
+ EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_2__BLANK_) and
+ cell_13(cell_m4_3__BLANK_) and cell_12(cell_m4_2__BLANK_) and
+ cell_11(cell_m4_1__BLANK_) and cell_2b(cell_m4_1__BLANK_) and
+ cell_2b(cell_m4_2__BLANK_) and cell_2b(cell_m4_3__BLANK_) and
+ v0 = cell_m4_1__BLANK_ and not control__BLANK_(cell_m4_1__BLANK_) and
+ not control__BLANK_(cell_m4_2__BLANK_) and
+ not control__BLANK_(cell_m4_3__BLANK_))
+REL row__o(v0) =
+ ex cell_m4_1__BLANK_, cell_m4_2__BLANK_, cell_m4_3__BLANK_
+ (EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_3__BLANK_) and
+ EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_2__BLANK_) and
+ cell_13(cell_m4_3__BLANK_) and cell_12(cell_m4_2__BLANK_) and
+ cell_11(cell_m4_1__BLANK_) and cell_2o(cell_m4_1__BLANK_) and
+ cell_2o(cell_m4_2__BLANK_) and cell_2o(cell_m4_3__BLANK_) and
+ v0 = cell_m4_1__BLANK_ and not control__BLANK_(cell_m4_1__BLANK_) and
+ not control__BLANK_(cell_m4_2__BLANK_) and
+ not control__BLANK_(cell_m4_3__BLANK_))
+REL row__x(v0) =
+ ex cell_m4_1__BLANK_, cell_m4_2__BLANK_, cell_m4_3__BLANK_
+ (EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_3__BLANK_) and
+ EQ___cell_0__cell_0(cell_m4_1__BLANK_, cell_m4_2__BLANK_) and
+ cell_13(cell_m4_3__BLANK_) and cell_12(cell_m4_2__BLANK_) and
+ cell_11(cell_m4_1__BLANK_) and cell_2x(cell_m4_1__BLANK_) and
+ cell_2x(cell_m4_2__BLANK_) and cell_2x(cell_m4_3__BLANK_) and
+ v0 = cell_m4_1__BLANK_ and not control__BLANK_(cell_m4_1__BLANK_) and
+ not control__BLANK_(cell_m4_2__BLANK_) and
+ not control__BLANK_(cell_m4_3__BLANK_))
PLAYERS xplayer, oplayer
-DATA R3: cell_3_n_MV1__AND__cell_m_3_MV1,
- R2: cell_1_n_MV1__AND__cell_m_1_MV1, R1: cell_3_n_MV1__AND__cell_m_1_MV1,
- R0: cell_2_n_MV1__AND__cell_m_2_MV1, R: cell_1_n_MV1__AND__cell_m_3_MV1
-RULE mark_x64_y19_0:
- [cell_x64_y19__blank_, control__blank_ |
- _opt_cell_m_n_b (control__blank_);
- _opt_cell_m_n_o {cell_x64_y19__blank_; control__blank_};
- _opt_cell_m_n_x {cell_x64_y19__blank_; control__blank_};
- _opt_control_oplayer (cell_x64_y19__blank_);
- _opt_control_xplayer (cell_x64_y19__blank_);
- cell_m_n_b (cell_x64_y19__blank_); control_xplayer (control__blank_)
+DATA R3: cell_03__AND__cell_11, R2: cell_01__AND__cell_13,
+ R1: cell_03__AND__cell_13, R0: cell_02__AND__cell_12,
+ R: cell_01__AND__cell_11
+RULE mark_x6_y_noop:
+ [cell_x6_y__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x6_y__BLANK_);
+ _opt_control_0xplayer (cell_x6_y__BLANK_); cell_2b (cell_x6_y__BLANK_);
+ control_0xplayer (control__BLANK_); control__BLANK_ (control__BLANK_)
|
] ->
- [cell_x64_y19__blank_, control__blank_ |
- cell_m_n_x (cell_x64_y19__blank_); control_oplayer (control__blank_) |
+ [cell_x6_y__BLANK_, control__BLANK_ |
+ cell_2x (cell_x6_y__BLANK_); control_0oplayer (control__BLANK_) |
]
- emb cell_m_n_b, cell_m_n_o, cell_m_n_x, control_oplayer, control_xplayer
- pre
- not
- (not ex cell_m48_n23__blank_ cell_m_n_b(cell_m48_n23__blank_) or
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m45__blank_, cell_2_m45__blank_, cell_1_m45__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m45__blank_, cell_3_m45__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m45__blank_, cell_2_m45__blank_) and
- cell_3_n_MV1(cell_3_m45__blank_) and
- cell_2_n_MV1(cell_2_m45__blank_) and
- cell_1_n_MV1(cell_1_m45__blank_) and
- cell_m_n_x(cell_1_m45__blank_) and cell_m_n_x(cell_2_m45__blank_) and
- cell_m_n_x(cell_3_m45__blank_)) or
- ex cell_3_m47__blank_, cell_2_m47__blank_, cell_1_m47__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m47__blank_, cell_3_m47__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m47__blank_, cell_2_m47__blank_) and
- cell_3_n_MV1(cell_3_m47__blank_) and
- cell_2_n_MV1(cell_2_m47__blank_) and
- cell_1_n_MV1(cell_1_m47__blank_) and
- cell_m_n_o(cell_1_m47__blank_) and cell_m_n_o(cell_2_m47__blank_) and
- cell_m_n_o(cell_3_m47__blank_)) or
- ex cell_m44_3__blank_, cell_m44_2__blank_, cell_m44_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m44_1__blank_, cell_m44_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m44_1__blank_, cell_m44_2__blank_) and
- cell_m_3_MV1(cell_m44_3__blank_) and
- cell_m_2_MV1(cell_m44_2__blank_) and
- cell_m_1_MV1(cell_m44_1__blank_) and
- cell_m_n_x(cell_m44_1__blank_) and cell_m_n_x(cell_m44_2__blank_) and
- cell_m_n_x(cell_m44_3__blank_)) or
- ex cell_m46_3__blank_, cell_m46_2__blank_, cell_m46_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m46_1__blank_, cell_m46_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m46_1__blank_, cell_m46_2__blank_) and
- cell_m_3_MV1(cell_m46_3__blank_) and
- cell_m_2_MV1(cell_m46_2__blank_) and
- cell_m_1_MV1(cell_m46_1__blank_) and
- cell_m_n_o(cell_m46_1__blank_) and cell_m_n_o(cell_m46_2__blank_) and
- cell_m_n_o(cell_m46_3__blank_)))
-RULE mark_x71_y26_1:
- [cell_x71_y26__blank_, control__blank_ |
- _opt_cell_m_n_b (control__blank_);
- _opt_cell_m_n_o {cell_x71_y26__blank_; control__blank_};
- _opt_cell_m_n_x {cell_x71_y26__blank_; control__blank_};
- _opt_control_oplayer (cell_x71_y26__blank_);
- _opt_control_xplayer (cell_x71_y26__blank_);
- cell_m_n_b (cell_x71_y26__blank_); control_oplayer (control__blank_)
+ emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
+RULE mark_x6_y_noop0:
+ [cell_x6_y__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x6_y__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x6_y__BLANK_);
+ _opt_control_0xplayer (cell_x6_y__BLANK_); cell_2b (cell_x6_y__BLANK_);
+ control_0oplayer (control__BLANK_); control_0xplayer (control__BLANK_);
+ control__BLANK_ (control__BLANK_)
|
] ->
- [cell_x71_y26__blank_, control__blank_ |
- cell_m_n_o (cell_x71_y26__blank_); control_xplayer (control__blank_) |
+ [cell_x6_y__BLANK_, control__BLANK_ |
+ cell_2x (cell_x6_y__BLANK_); control_0oplayer (control__BLANK_);
+ control_0xplayer (control__BLANK_)
+ |
+ ] emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
+RULE noop_mark_x7_y0:
+ [cell_x7_y0__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x7_y0__BLANK_);
+ _opt_control_0xplayer (cell_x7_y0__BLANK_); cell_2b (cell_x7_y0__BLANK_);
+ control_0oplayer (control__BLANK_); control__BLANK_ (control__BLANK_)
+ |
+ ] ->
+ [cell_x7_y0__BLANK_, control__BLANK_ |
+ cell_2o (cell_x7_y0__BLANK_); control_0xplayer (control__BLANK_) |
]
- emb cell_m_n_b, cell_m_n_o, cell_m_n_x, control_oplayer, control_xplayer
- pre
- not
- (not ex cell_m48_n23__blank_ cell_m_n_b(cell_m48_n23__blank_) or
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m45__blank_, cell_2_m45__blank_, cell_1_m45__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m45__blank_, cell_3_m45__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m45__blank_, cell_2_m45__blank_) and
- cell_3_n_MV1(cell_3_m45__blank_) and
- cell_2_n_MV1(cell_2_m45__blank_) and
- cell_1_n_MV1(cell_1_m45__blank_) and
- cell_m_n_x(cell_1_m45__blank_) and cell_m_n_x(cell_2_m45__blank_) and
- cell_m_n_x(cell_3_m45__blank_)) or
- ex cell_3_m47__blank_, cell_2_m47__blank_, cell_1_m47__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m47__blank_, cell_3_m47__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m47__blank_, cell_2_m47__blank_) and
- cell_3_n_MV1(cell_3_m47__blank_) and
- cell_2_n_MV1(cell_2_m47__blank_) and
- cell_1_n_MV1(cell_1_m47__blank_) and
- cell_m_n_o(cell_1_m47__blank_) and cell_m_n_o(cell_2_m47__blank_) and
- cell_m_n_o(cell_3_m47__blank_)) or
- ex cell_m44_3__blank_, cell_m44_2__blank_, cell_m44_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m44_1__blank_, cell_m44_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m44_1__blank_, cell_m44_2__blank_) and
- cell_m_3_MV1(cell_m44_3__blank_) and
- cell_m_2_MV1(cell_m44_2__blank_) and
- cell_m_1_MV1(cell_m44_1__blank_) and
- cell_m_n_x(cell_m44_1__blank_) and cell_m_n_x(cell_m44_2__blank_) and
- cell_m_n_x(cell_m44_3__blank_)) or
- ex cell_m46_3__blank_, cell_m46_2__blank_, cell_m46_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m46_1__blank_, cell_m46_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m46_1__blank_, cell_m46_2__blank_) and
- cell_m_3_MV1(cell_m46_3__blank_) and
- cell_m_2_MV1(cell_m46_2__blank_) and
- cell_m_1_MV1(cell_m46_1__blank_) and
- cell_m_n_o(cell_m46_1__blank_) and cell_m_n_o(cell_m46_2__blank_) and
- cell_m_n_o(cell_m46_3__blank_)))
+ emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
+RULE noop_mark_x7_y00:
+ [cell_x7_y0__BLANK_, control__BLANK_ |
+ _opt_cell_2b (control__BLANK_);
+ _opt_cell_2o {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_cell_2x {cell_x7_y0__BLANK_; control__BLANK_};
+ _opt_control_0oplayer (cell_x7_y0__BLANK_);
+ _opt_control_0xplayer (cell_x7_y0__BLANK_); cell_2b (cell_x7_y0__BLANK_);
+ control_0oplayer (control__BLANK_); control_0xplayer (control__BLANK_);
+ control__BLANK_ (control__BLANK_)
+ |
+ ] ->
+ [cell_x7_y0__BLANK_, control__BLANK_ |
+ cell_2o (cell_x7_y0__BLANK_); control_0oplayer (control__BLANK_);
+ control_0xplayer (control__BLANK_)
+ |
+ ] emb cell_2b, cell_2o, cell_2x, control_0oplayer, control_0xplayer
LOC 0 {
PLAYER xplayer {
PAYOFF
- 50. +
- -50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_m9__blank_, cell_2_m9__blank_, cell_1_m9__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m9__blank_, cell_3_m9__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m9__blank_, cell_2_m9__blank_) and
- cell_3_n_MV1(cell_3_m9__blank_) and
- cell_2_n_MV1(cell_2_m9__blank_) and
- cell_1_n_MV1(cell_1_m9__blank_) and
- cell_m_n_o(cell_1_m9__blank_) and cell_m_n_o(cell_2_m9__blank_) and
- cell_m_n_o(cell_3_m9__blank_)) or
- ex cell_m8_3__blank_, cell_m8_2__blank_, cell_m8_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m8_1__blank_, cell_m8_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m8_1__blank_, cell_m8_2__blank_) and
- cell_m_3_MV1(cell_m8_3__blank_) and
- cell_m_2_MV1(cell_m8_2__blank_) and
- cell_m_1_MV1(cell_m8_1__blank_) and
- cell_m_n_o(cell_m8_1__blank_) and cell_m_n_o(cell_m8_2__blank_) and
- cell_m_n_o(cell_m8_3__blank_))
- )
- +
- 50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m2__blank_, cell_2_m2__blank_, cell_1_m2__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m2__blank_, cell_3_m2__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m2__blank_, cell_2_m2__blank_) and
- cell_3_n_MV1(cell_3_m2__blank_) and
- cell_2_n_MV1(cell_2_m2__blank_) and
- cell_1_n_MV1(cell_1_m2__blank_) and
- cell_m_n_x(cell_1_m2__blank_) and cell_m_n_x(cell_2_m2__blank_) and
- cell_m_n_x(cell_3_m2__blank_)) or
- ex cell_m1_3__blank_, cell_m1_2__blank_, cell_m1_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m1_1__blank_, cell_m1_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m1_1__blank_, cell_m1_2__blank_) and
- cell_m_3_MV1(cell_m1_3__blank_) and
- cell_m_2_MV1(cell_m1_2__blank_) and
- cell_m_1_MV1(cell_m1_1__blank_) and
- cell_m_n_x(cell_m1_1__blank_) and cell_m_n_x(cell_m1_2__blank_) and
- cell_m_n_x(cell_m1_3__blank_))
- )
- MOVES [mark_x64_y19_0 -> 1] }
+ 100. * :(line__x()) +
+ 50. * :((not line__o() and not line__x() and not open()))
+ MOVES [mark_x6_y_noop -> 1]; [mark_x6_y_noop0 -> 1] }
PLAYER oplayer {
PAYOFF
- 50. +
- -50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m18__blank_, cell_2_m18__blank_, cell_1_m18__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m18__blank_, cell_3_m18__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m18__blank_, cell_2_m18__blank_) and
- cell_3_n_MV1(cell_3_m18__blank_) and
- cell_2_n_MV1(cell_2_m18__blank_) and
- cell_1_n_MV1(cell_1_m18__blank_) and
- cell_m_n_x(cell_1_m18__blank_) and
- cell_m_n_x(cell_2_m18__blank_) and cell_m_n_x(cell_3_m18__blank_)) or
- ex cell_m17_3__blank_, cell_m17_2__blank_, cell_m17_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m17_1__blank_, cell_m17_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m17_1__blank_, cell_m17_2__blank_) and
- cell_m_3_MV1(cell_m17_3__blank_) and
- cell_m_2_MV1(cell_m17_2__blank_) and
- cell_m_1_MV1(cell_m17_1__blank_) and
- cell_m_n_x(cell_m17_1__blank_) and
- cell_m_n_x(cell_m17_2__blank_) and cell_m_n_x(cell_m17_3__blank_))
- )
- +
- 50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_m11__blank_, cell_2_m11__blank_, cell_1_m11__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m11__blank_, cell_3_m11__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m11__blank_, cell_2_m11__blank_) and
- cell_3_n_MV1(cell_3_m11__blank_) and
- cell_2_n_MV1(cell_2_m11__blank_) and
- cell_1_n_MV1(cell_1_m11__blank_) and
- cell_m_n_o(cell_1_m11__blank_) and
- cell_m_n_o(cell_2_m11__blank_) and cell_m_n_o(cell_3_m11__blank_)) or
- ex cell_m10_3__blank_, cell_m10_2__blank_, cell_m10_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m10_1__blank_, cell_m10_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m10_1__blank_, cell_m10_2__blank_) and
- cell_m_3_MV1(cell_m10_3__blank_) and
- cell_m_2_MV1(cell_m10_2__blank_) and
- cell_m_1_MV1(cell_m10_1__blank_) and
- cell_m_n_o(cell_m10_1__blank_) and
- cell_m_n_o(cell_m10_2__blank_) and cell_m_n_o(cell_m10_3__blank_))
- )
+ 100. * :(line__o()) +
+ 50. * :((not line__o() and not line__x() and not open()))
}
}
LOC 1 {
PLAYER xplayer {
PAYOFF
- 50. +
- -50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_m9__blank_, cell_2_m9__blank_, cell_1_m9__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m9__blank_, cell_3_m9__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m9__blank_, cell_2_m9__blank_) and
- cell_3_n_MV1(cell_3_m9__blank_) and
- cell_2_n_MV1(cell_2_m9__blank_) and
- cell_1_n_MV1(cell_1_m9__blank_) and
- cell_m_n_o(cell_1_m9__blank_) and cell_m_n_o(cell_2_m9__blank_) and
- cell_m_n_o(cell_3_m9__blank_)) or
- ex cell_m8_3__blank_, cell_m8_2__blank_, cell_m8_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m8_1__blank_, cell_m8_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m8_1__blank_, cell_m8_2__blank_) and
- cell_m_3_MV1(cell_m8_3__blank_) and
- cell_m_2_MV1(cell_m8_2__blank_) and
- cell_m_1_MV1(cell_m8_1__blank_) and
- cell_m_n_o(cell_m8_1__blank_) and cell_m_n_o(cell_m8_2__blank_) and
- cell_m_n_o(cell_m8_3__blank_))
- )
- +
- 50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m2__blank_, cell_2_m2__blank_, cell_1_m2__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m2__blank_, cell_3_m2__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m2__blank_, cell_2_m2__blank_) and
- cell_3_n_MV1(cell_3_m2__blank_) and
- cell_2_n_MV1(cell_2_m2__blank_) and
- cell_1_n_MV1(cell_1_m2__blank_) and
- cell_m_n_x(cell_1_m2__blank_) and cell_m_n_x(cell_2_m2__blank_) and
- cell_m_n_x(cell_3_m2__blank_)) or
- ex cell_m1_3__blank_, cell_m1_2__blank_, cell_m1_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m1_1__blank_, cell_m1_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m1_1__blank_, cell_m1_2__blank_) and
- cell_m_3_MV1(cell_m1_3__blank_) and
- cell_m_2_MV1(cell_m1_2__blank_) and
- cell_m_1_MV1(cell_m1_1__blank_) and
- cell_m_n_x(cell_m1_1__blank_) and cell_m_n_x(cell_m1_2__blank_) and
- cell_m_n_x(cell_m1_3__blank_))
- )
+ 100. * :(line__x()) +
+ 50. * :((not line__o() and not line__x() and not open()))
}
PLAYER oplayer {
PAYOFF
- 50. +
- -50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_x(cell_1_3__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_x(cell_1_1__blank_) and
- cell_m_n_x(cell_2_2__blank_) and cell_m_n_x(cell_3_3__blank_)) or
- ex cell_3_m18__blank_, cell_2_m18__blank_, cell_1_m18__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m18__blank_, cell_3_m18__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m18__blank_, cell_2_m18__blank_) and
- cell_3_n_MV1(cell_3_m18__blank_) and
- cell_2_n_MV1(cell_2_m18__blank_) and
- cell_1_n_MV1(cell_1_m18__blank_) and
- cell_m_n_x(cell_1_m18__blank_) and
- cell_m_n_x(cell_2_m18__blank_) and cell_m_n_x(cell_3_m18__blank_)) or
- ex cell_m17_3__blank_, cell_m17_2__blank_, cell_m17_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m17_1__blank_, cell_m17_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m17_1__blank_, cell_m17_2__blank_) and
- cell_m_3_MV1(cell_m17_3__blank_) and
- cell_m_2_MV1(cell_m17_2__blank_) and
- cell_m_1_MV1(cell_m17_1__blank_) and
- cell_m_n_x(cell_m17_1__blank_) and
- cell_m_n_x(cell_m17_2__blank_) and cell_m_n_x(cell_m17_3__blank_))
- )
- +
- 50. *
- :(
- ex cell_3_1__blank_, cell_2_2__blank_, cell_1_3__blank_
- (R(cell_1_3__blank_) and R0(cell_2_2__blank_) and
- R1(cell_3_1__blank_) and cell_m_n_o(cell_1_3__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_1__blank_)) or
- ex cell_3_3__blank_, cell_2_2__blank_, cell_1_1__blank_
- (R2(cell_1_1__blank_) and R0(cell_2_2__blank_) and
- R3(cell_3_3__blank_) and cell_m_n_o(cell_1_1__blank_) and
- cell_m_n_o(cell_2_2__blank_) and cell_m_n_o(cell_3_3__blank_)) or
- ex cell_3_m11__blank_, cell_2_m11__blank_, cell_1_m11__blank_
- (EQ___cell_m_n_MV1_n(cell_1_m11__blank_, cell_3_m11__blank_) and
- EQ___cell_m_n_MV1_n(cell_1_m11__blank_, cell_2_m11__blank_) and
- cell_3_n_MV1(cell_3_m11__blank_) and
- cell_2_n_MV1(cell_2_m11__blank_) and
- cell_1_n_MV1(cell_1_m11__blank_) and
- cell_m_n_o(cell_1_m11__blank_) and
- cell_m_n_o(cell_2_m11__blank_) and cell_m_n_o(cell_3_m11__blank_)) or
- ex cell_m10_3__blank_, cell_m10_2__blank_, cell_m10_1__blank_
- (EQ___cell_m_n_MV1_m(cell_m10_1__blank_, cell_m10_3__blank_) and
- EQ___cell_m_n_MV1_m(cell_m10_1__blank_, cell_m10_2__blank_) and
- cell_m_3_MV1(cell_m10_3__blank_) and
- cell_m_2_MV1(cell_m10_2__blank_) and
- cell_m_1_MV1(cell_m10_1__blank_) and
- cell_m_n_o(cell_m10_1__blank_) and
- cell_m_n_o(cell_m10_2__blank_) and cell_m_n_o(cell_m10_3__blank_))
- )
- MOVES [mark_x71_y26_1 -> 0] }
+ 100. * :(line__o()) +
+ 50. * :((not line__o() and not line__x() and not open()))
+ MOVES [noop_mark_x7_y0 -> 0]; [noop_mark_x7_y00 -> 0] }
}
MODEL
- [control_MV1, cell_3_3_MV1, cell_3_2_MV1, cell_3_1_MV1, cell_2_3_MV1,
- cell_2_2_MV1, cell_2_1_MV1, cell_1_3_MV1, cell_1_2_MV1, cell_1_1_MV1 |
- EQ___cell_m_n_MV1_m {
- (cell_3_3_MV1, cell_3_3_MV1); (cell_3_3_MV1, cell_3_2_MV1);
- (cell_3_3_MV1, cell_3_1_MV1); (cell_3_2_MV1, cell_3_3_MV1);
- (cell_3_2_MV1, cell_3_2_MV1); (cell_3_2_MV1, cell_3_1_MV1);
- (cell_3_1_MV1, cell_3_3_MV1); (cell_3_1_MV1, cell_3_2_MV1);
- (cell_3_1_MV1, cell_3_1_MV1); (cell_2_3_MV1, cell_2_3_MV1);
- (cell_2_3_MV1, cell_2_2_MV1); (cell_2_3_MV1, cell_2_1_MV1);
- (cell_2_2_MV1, cell_2_3_MV1); (cell_2_2_MV1, cell_2_2_MV1);
- (cell_2_2_MV1, cell_2_1_MV1); (cell_2_1_MV1, cell_2_3_MV1);
- (cell_2_1_MV1, cell_2_2_MV1); (cell_2_1_MV1, cell_2_1_MV1);
- (cell_1_3_MV1, cell_1_3_MV1); (cell_1_3_MV1, cell_1_2_MV1);
- (cell_1_3_MV1, cell_1_1_MV1); (cell_1_2_MV1, cell_1_3_MV1);
- (cell_1_2_MV1, cell_1_2_MV1); (cell_1_2_MV1, cell_1_1_MV1);
- (cell_1_1_MV1, cell_1_3_MV1); (cell_1_1_MV1, cell_1_2_MV1);
- (cell_1_1_MV1, cell_1_1_MV1)
+ [cell_1_1__BLANK_, cell_1_2__BLANK_, cell_1_3__BLANK_, cell_2_1__BLANK_,
+ cell_2_2__BLANK_, cell_2_3__BLANK_, cell_3_1__BLANK_, cell_3_2__BLANK_,
+ cell_3_3__BLANK_, control__BLANK_ |
+ R (cell_1_1__BLANK_); R0 (cell_2_2__BLANK_); R1 (cell_3_3__BLANK_);
+ R2 (cell_1_3__BLANK_); R3 (cell_3_1__BLANK_);
+ cell_01 {cell_1_1__BLANK_; cell_1_2__BLANK_; cell_1_3__BLANK_};
+ cell_02 {cell_2_1__BLANK_; cell_2_2__BLANK_; cell_2_3__BLANK_};
+ cell_03 {cell_3_1__BLANK_; cell_3_2__BLANK_; cell_3_3__BLANK_};
+ cell_11 {cell_1_1__BLANK_; cell_2_1__BLANK_; cell_3_1__BLANK_};
+ cell_12 {cell_1_2__BLANK_; cell_2_2__BLANK_; cell_3_2__BLANK_};
+ cell_13 {cell_1_3__BLANK_; cell_2_3__BLANK_; cell_3_3__BLANK_};
+ cell_2b {
+ cell_1_1__BLANK_; cell_1_2__BLANK_; cell_1_3__BLANK_; cell_2_1__BLANK_;
+ cell_2_2__BLANK_; cell_2_3__BLANK_; cell_3_1__BLANK_; cell_3_2__BLANK_;
+ cell_3_3__BLANK_
};
- EQ___cell_m_n_MV1_n {
- (cell_3_3_MV1, cell_3_3_MV1); (cell_3_3_MV1, cell_2_3_MV1);
- (cell_3_3_MV1, cell_1_3_MV1); (cell_3_2_MV1, cell_3_2_MV1);
- (cell_3_2_MV1, cell_2_2_MV1); (cell_3_2_MV1, cell_1_2_MV1);
- (cell_3_1_MV1, cell_3_1_MV1); (cell_3_1_MV1, cell_2_1_MV1);
- (cell_3_1_MV1, cell_1_1_MV1); (cell_2_3_MV1, cell_3_3_MV1);
- (cell_2_3_MV1, cell_2_3_MV1); (cell_2_3_MV1, cell_1_3_MV1);
- (cell_2_2_MV1, cell_3_2_MV1); (cell_2_2_MV1, cell_2_2_MV1);
- (cell_2_2_MV1, cell_1_2_MV1); (cell_2_1_MV1, cell_3_1_MV1);
- (cell_2_1_MV1, cell_2_1_MV1); (cell_2_1_MV1, cell_1_1_MV1);
- (cell_1_3_MV1, cell_3_3_MV1); (cell_1_3_MV1, cell_2_3_MV1);
- (cell_1_3_MV1, cell_1_3_MV1); (cell_1_2_MV1, cell_3_2_MV1);
- (cell_1_2_MV1, cell_2_2_MV1); (cell_1_2_MV1, cell_1_2_MV1);
- (cell_1_1_MV1, cell_3_1_MV1); (cell_1_1_MV1, cell_2_1_MV1);
- (cell_1_1_MV1, cell_1_1_MV1)
- };
- R (cell_1_3_MV1); R0 (cell_2_2_MV1); R1 (cell_3_1_MV1);
- R2 (cell_1_1_MV1); R3 (cell_3_3_MV1);
- cell_1_n_MV1 {cell_1_3_MV1; cell_1_2_MV1; cell_1_1_MV1};
- cell_2_n_MV1 {cell_2_3_MV1; cell_2_2_MV1; cell_2_1_MV1};
- cell_3_n_MV1 {cell_3_3_MV1; cell_3_2_MV1; cell_3_1_MV1};
- cell_m_1_MV1 {cell_3_1_MV1; cell_2_1_MV1; cell_1_1_MV1};
- cell_m_2_MV1 {cell_3_2_MV1; cell_2_2_MV1; cell_1_2_MV1};
- cell_m_3_MV1 {cell_3_3_MV1; cell_2_3_MV1; cell_1_3_MV1};
- cell_m_n_b {
- cell_3_3_MV1; cell_3_2_MV1; cell_3_1_MV1; cell_2_3_MV1; cell_2_2_MV1;
- cell_2_1_MV1; cell_1_3_MV1; cell_1_2_MV1; cell_1_1_MV1
- };
- cell_m_n_o:1 {}; cell_m_n_x:1 {}; control_MV1 (control_MV1);
- control_oplayer:1 {}; control_xplayer (control_MV1)
+ cell_2o:1 {}; cell_2x:1 {}; control_0oplayer:1 {};
+ control_0xplayer (control__BLANK_); control__BLANK_ (control__BLANK_)
|
]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|