def closed_explode.nbrs
minebender-game@1.0.0.0 · proof_inv.bend:197
import minebender-game@1.0.0.0/proof_inv.bend as ProofInv
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/proof_base.bend as P
import minebender-game@1.0.0.0/proof_cells.bend as PS
197def closed_explode.nbrs(+w: Nat, +h: Nat, +layout: T.Grid(Bool), +shown: T.Grid(Bool), +p: T.Pos,
198 +mp: {B.mine(layout, p) == True{} : Bool}, +cl: {closed(w, h, layout, shown) == True{} : Bool},
199 +q: T.Pos, +on: {B.on_board(w, h, q) == True{} : Bool},
200 +after: {B.at(Bool, False{}, B.set_at(Bool, shown, p, True{}), q) == True{} : Bool},
201 +z: {B.zero(w, h, layout, q) == True{} : Bool}, ns: List<&2, T.Pos>,
202 +adj: {PS.allp(~PS.WHS, ~PS.adj_on, PS.WHS{w, h, q}, ns) == True{} : Bool}) ->
203 {PS.allp(~T.Grid(Bool), ~shown_in, B.set_at(Bool, shown, p, True{}), ns) == True{} : Bool}:
204 match ns:
205 case Nil{}:
206 {==}
207 case +r <> +t:
208 +ar = PS.allp_head(~PS.WHS, ~PS.adj_on, PS.WHS{w, h, q}, r, t, adj)
209 +rm = PS.neighbours_member(w, h, q, r, P.and_true_r(B.adjacent(q, r), B.on_board(w, h, r), ar),
210 P.and_true_l(B.adjacent(q, r), B.on_board(w, h, r), ar))
211 +s2 = B.set_at(Bool, shown, p, True{})
212 %Equal.sym(Bool, B.at(Bool, False{}, s2, r), True{},
213 explode_fact.go(w, h, layout, shown, p, mp, cl, q, on, after, z, r, rm, B.same(p, q), {==})) :
214 {Bool.and(_, PS.allp(~T.Grid(Bool), ~shown_in, s2, t)) == True{} : Bool}
215 closed_explode.nbrs(w, h, layout, shown, p, mp, cl, q, on, after, z, t,
216 PS.allp_tail(~PS.WHS, ~PS.adj_on, PS.WHS{w, h, q}, r, t, adj))