def assist_early.k

minebender-game@1.0.0.0 · proof_assist.bend:308

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_laws.bend as PW

308def assist_early.k(+w: Nat, +h: Nat, +layout: T.Grid(Bool), +g: G.Game,
309  +playing: {G.status(g) == T.Playing{} : T.Status}, +q: T.Pos, option: L.ProvablySafe(G.knowledge(g), q), +k: Nat,
310  c: PW.Canon(w, h, layout, g)) ->
311  Exists(T.Pos, p => L.ProvablySafe(G.knowledge(g), p) &
312    ({G.status(G.step(g, T.Assist{k})) == T.Lost{T.AssistTooEarly{p}} : T.Status} &
313     {G.knowledge(G.step(g, T.Assist{k})) == G.knowledge(g) : T.Knowledge})):
314  match c:
315    case (+eg, facts):
316      +s = PW.shown_of(g)
317      +f = PW.flags_of(g)
318      +gp = {G.Game{w, h, layout, s, f, T.Playing{}} : G.Game}
319      %Equal.sym(G.Game, g, G.Game{w, h, layout, s, f, G.status(g)}, eg) :
320        Exists(T.Pos, p => L.ProvablySafe(G.knowledge(_), p) &
321          ({G.status(G.step(_, T.Assist{k})) == T.Lost{T.AssistTooEarly{p}} : T.Status} &
322           {G.knowledge(G.step(_, T.Assist{k})) == G.knowledge(_) : T.Knowledge}))
323      %Equal.sym(T.Status, G.status(g), T.Playing{}, playing) :
324        Exists(T.Pos, p => L.ProvablySafe(G.knowledge(G.Game{w, h, layout, s, f, _}), p) &
325          ({G.status(G.step(G.Game{w, h, layout, s, f, _}, T.Assist{k})) == T.Lost{T.AssistTooEarly{p}} : T.Status} &
326           {G.knowledge(G.step(G.Game{w, h, layout, s, f, _}, T.Assist{k})) == G.knowledge(G.Game{w, h, layout, s, f, _}) : T.Knowledge}))
327      early_pick(w, h, layout, s, f, q,
328        {%playing : L.ProvablySafe(G.knowledge(G.Game{w, h, layout, s, f, _}), q);
329          %eg : L.ProvablySafe(G.knowledge(_), q); option : L.ProvablySafe(G.knowledge(gp), q)},
330        S.solve(G.knowledge(gp)), {==}, k)

Uses (22)

Used by (1)