def item_open_sound
minebender-game@1.0.0.0 · proof_solver.bend:329
import minebender-game@1.0.0.0/proof_solver.bend as ProofSolver
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/solver.bend as S
import minebender-game@1.0.0.0/proof_base.bend as P
import minebender-game@1.0.0.0/proof_cells.bend as PS
import minebender-game@1.0.0.0/proof_sums.bend as PU
329def item_open_sound(+w: Nat, +h: Nat, +part: T.Grid(Maybe<&2, Bool>), +layout: T.Grid(Bool),
330 +comp: {completes(w, h, part, layout) == True{} : Bool}, +p: T.Pos, +s: T.Seen, +ns: List<&2, T.Pos>,
331 ok: {S.item_ok(s, p, ns, layout) == True{} : Bool},
332 +on: {PS.allp(~PS.WH, ~PS.onb, PS.WH{w, h}, ns) == True{} : Bool}) ->
333 {S.item_open(s, part, ns) == True{} : Bool}:
334 match s:
335 case T.Shown{k}:
336 +c = B.count_mines(layout, ns)
337 +ck = P.eq_sound(c, k, P.and_true_r(Bool.not(B.mine(layout, p)), Nat.is_eq(c, k), ok))
338 %ck : {S.between(S.true_among(part, ns), S.none_among(part, ns), _) == True{} : Bool}
339 %Equal.sym(Nat, S.true_among(part, ns), PU.csum(~Maybe<&2, Bool>, ~tf, None{}, part, ns), true_among_sum(part, ns)) :
340 {S.between(_, S.none_among(part, ns), c) == True{} : Bool}
341 %Equal.sym(Nat, S.none_among(part, ns), PU.csum(~Maybe<&2, Bool>, ~nf, None{}, part, ns), none_among_sum(part, ns)) :
342 {S.between(PU.csum(~Maybe<&2, Bool>, ~tf, None{}, part, ns), _, c) == True{} : Bool}
343 %Equal.sym(Nat, c, PU.csum(~Bool, ~one, False{}, layout, ns), count_sum(layout, ns)) :
344 {S.between(PU.csum(~Maybe<&2, Bool>, ~tf, None{}, part, ns), PU.csum(~Maybe<&2, Bool>, ~nf, None{}, part, ns), _)
345 == True{} : Bool}
346 %Equal.sym(Bool, Nat.is_le(PU.csum(~Maybe<&2, Bool>, ~tf, None{}, part, ns), PU.csum(~Bool, ~one, False{}, layout, ns)),
347 True{}, among_lo(w, h, part, layout, comp, ns, on)) :
348 {Bool.and(_, Nat.is_le(PU.csum(~Bool, ~one, False{}, layout, ns),
349 Nat.add(PU.csum(~Maybe<&2, Bool>, ~tf, None{}, part, ns), PU.csum(~Maybe<&2, Bool>, ~nf, None{}, part, ns)))) == True{} : Bool}
350 among_hi(w, h, part, layout, comp, ns, on)
351 case T.Hidden{}:
352 {==}
353 case T.Boom{}:
354 {==}