def stuck_pick.none

minebender-game@1.0.0.0 · proof_assist.bend:202

import minebender-game@1.0.0.0/proof_assist.bend as ProofAssist
import Base
import minebender-game@1.0.0.0/types.bend as T
import minebender-game@1.0.0.0/board.bend as B
import minebender-game@1.0.0.0/game.bend as G
import minebender-game@1.0.0.0/LAWS.bend as L
import minebender-game@1.0.0.0/proof_base.bend as P
import minebender-game@1.0.0.0/proof_grid.bend as PG
import minebender-game@1.0.0.0/proof_copy.bend as PC
import minebender-game@1.0.0.0/proof_cells.bend as PS

202def stuck_pick.none(+w: Nat, +h: Nat, +layout: T.Grid(Bool), +s: T.Grid(Bool), +f: List<&2, T.Pos>, +k: Nat,
203  sa: SafeAt(layout, s, G.safe_list(w, h, s, k))) ->
204  Exists(T.Pos, p => {L.mine(layout, p) == False{} : Bool} &
205    ({L.hidden(G.knowledge(G.Game{w, h, layout, s, f, T.Playing{}}), p) == True{} : Bool} &
206     {G.assist.safe(G.first_safe(layout, s, G.safe_list(w, h, s, k)), G.Game{w, h, layout, s, f, T.Playing{}})
207       == G.open(G.Game{w, h, layout, s, f, T.Playing{}}, p) : G.Game})):
208  match sa:
209    case (+p, pr):
210      match pr:
211        case (+fe, rest):
212          match rest:
213            case (+sf, m):
214              +g0 = {G.Game{w, h, layout, s, f, T.Playing{}} : G.Game}
215              +nm = P.not_true(B.mine(layout, p), P.and_true_l(Bool.not(B.mine(layout, p)), Bool.not(B.at(Bool, False{}, s, p)), sf))
216              +onp = PS.allp_member(~PS.WH, ~PS.onb, PS.WH{w, h}, G.safe_list(w, h, s, k), p, on_list(w, h, s, k), m)
217              (p,
218                (%PC.mine_eq(layout, p) : {_ == False{} : Bool}; nm,
219                 (%Equal.sym(Bool, L.hidden(G.knowledge(g0), p), G.unrevealed(w, h, s, p),
220                    PG.know_hidden(w, h, layout, s, f, T.Playing{}, p)) : {_ == True{} : Bool};
221                    %Equal.sym(Bool, B.on_board(w, h, p), True{}, onp) :
222                      {Bool.and(_, Bool.not(B.at(Bool, False{}, s, p))) == True{} : Bool};
223                    P.and_true_r(Bool.not(B.mine(layout, p)), Bool.not(B.at(Bool, False{}, s, p)), sf),
224                  %Equal.sym(Maybe<&2, T.Pos>, G.first_safe(layout, s, G.safe_list(w, h, s, k)), Some{p}, fe) :
225                    {G.assist.safe(_, g0) == G.open(g0, p) : G.Game};
226                  {==})))

Uses (35)

Used by (1)