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)