def flood_path.take

minebender-game@1.0.0.0 · proof_flood.bend:582

import minebender-game@1.0.0.0/proof_flood.bend as ProofFlood
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_lists.bend as PL

582def flood_path.take(+c: T.Pos, +back: List<&2, T.Pos>, +rest: List<&2, G.Work>, +w: Nat, +h: Nat,
583  +layout: T.Grid(Bool), +shown: T.Grid(Bool), +p0: T.Pos, +q: T.Pos,
584  +ok: {Bool.and(L.zero_walk(List.reverse(&2, T.Pos, back), w, h, layout, p0, c), works_ok(rest, w, h, layout, p0)) == True{} : Bool},
585  before: {B.at(Bool, False{}, shown, q) == False{} : Bool}, +b: Bool, be: {B.same(c, q) == b : Bool},
586  ih: {works_ok(G.push(B.zero(w, h, layout, c), B.neighbours(w, h, c), back, rest), w, h, layout, p0) == True{} : Bool} ->
587    {B.at(Bool, False{}, B.set_at(Bool, shown, c, True{}), q) == False{} : Bool} -> Walk(w, h, layout, p0, q)) ->
588  Walk(w, h, layout, p0, q):
589  match b:
590    case True{}:
591      +hd = L.zero_walk(List.reverse(&2, T.Pos, back), w, h, layout, p0, c)
592      +okc = P.and_true_l(hd, works_ok(rest, w, h, layout, p0), ok)
593      (List.reverse(&2, T.Pos, back),
594        %PG.same_sound(c, q, be) : {L.zero_walk(List.reverse(&2, T.Pos, back), w, h, layout, p0, _) == True{} : Bool};
595        okc)
596    case False{}:
597      +hd = L.zero_walk(List.reverse(&2, T.Pos, back), w, h, layout, p0, c)
598      +okc = P.and_true_l(hd, works_ok(rest, w, h, layout, p0), ok)
599      ih(works_ok_push(B.zero(w, h, layout, c), c, back, rest, w, h, layout, p0, {==}, okc,
600          P.and_true_r(hd, works_ok(rest, w, h, layout, p0), ok)),
601        %Equal.sym(Bool, B.at(Bool, False{}, B.set_at(Bool, shown, c, True{}), q), B.at(Bool, False{}, shown, q),
602          PL.at_set_ne(Bool, shown, c, q, True{}, False{}, be)) : {_ == False{} : Bool}; before)

Uses (24)

Used by (1)