def stuck_pick

minebender-game@1.0.0.0 · proof_assist.bend:228

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/game.bend as G
import minebender-game@1.0.0.0/solver.bend as S
import minebender-game@1.0.0.0/LAWS.bend as L
import minebender-game@1.0.0.0/proof_solver.bend as PV

228def stuck_pick(+w: Nat, +h: Nat, +layout: T.Grid(Bool), +s: T.Grid(Bool), +f: List<&2, T.Pos>,
229  +nos: {G.all_safe(w, h, layout, s) == False{} : Bool},
230  stuck: L.Stuck(G.knowledge(G.Game{w, h, layout, s, f, T.Playing{}})),
231  +r: Maybe<&2, T.Pos>, re: {S.solve(G.knowledge(G.Game{w, h, layout, s, f, T.Playing{}})) == r : Maybe<&2, T.Pos>}, +k: Nat) ->
232  Exists(T.Pos, p => {L.mine(layout, p) == False{} : Bool} &
233    ({L.hidden(G.knowledge(G.Game{w, h, layout, s, f, T.Playing{}}), p) == True{} : Bool} &
234     {G.assist.pick(r, G.Game{w, h, layout, s, f, T.Playing{}}, k) == G.open(G.Game{w, h, layout, s, f, T.Playing{}}, p) : G.Game})):
235  match r:
236    case Some{q}:
237      +k0 = G.knowledge(G.Game{w, h, layout, s, f, T.Playing{}})
238      Empty.absurd(Exists(T.Pos, p => {L.mine(layout, p) == False{} : Bool} &
239        ({L.hidden(k0, p) == True{} : Bool} &
240         {G.assist.pick(Some{q}, G.Game{w, h, layout, s, f, T.Playing{}}, k) == G.open(G.Game{w, h, layout, s, f, T.Playing{}}, p) : G.Game})),
241        stuck(q, PV.solve_safe(k0, q, re)))
242    case None{}:
243      stuck_pick.none(w, h, layout, s, f, k, first_safe_some(layout, s, G.safe_list(w, h, s, k), nos_list(w, h, layout, s, k, nos)))

Uses (24)

Used by (1)