-- Jan 29 2018 abstract sig Player {} one sig PX extends Player {} one sig PO extends Player {} abstract sig Index {} one sig One extends Index {} one sig Two extends Index {} one sig Three extends Index {} one sig Board { places: (Index -> Index) -> Player } fact atMostOneMarkPerSquare { all b: Board | all r,c: Index | #b.places[r][c] <= 1 } run {#Board > 1} run {#places > 7} for 5 int pred xturn[b: Board] { #{r,c : Index | b.places[r][c] = PX} = #{r,c : Index | b.places[r][c] = PO} } run xturn