def nfa.run

bend-osdev-apparmor@0.1.0.0 · PROOF.bend:2982

import bend-osdev-apparmor@0.1.0.0/PROOF.bend as PROOF
import Base
import bend-osdev-apparmor@0.1.0.0/glob.bend as G

2982# the run: the positions accept the path (a: whether some position is active)
2983def nfa.run(+s: List<&2, U32>, +a: Bool, +seq: List<&2, G.AaGTok>, +bs: List<&2, Bool>, +e: {G.AaGNfa.alive(bs) == a : Bool}) -> {G.AaGNfa.run(s, a, seq, bs) == G.AaGNfa.sem(seq, bs, s) : Bool}:
2984  match s:
2985    case Nil{}:
2986      {==}
2987    case Con{h, t}:
2988      match a:
2989        case False{}:
2990          Equal.sym(Bool, G.AaGNfa.sem(seq, bs, Con{h, t}), False{}, nfa.dead(seq, bs, Con{h, t}, e))
2991        case True{}:
2992          Equal.trans(Bool, G.AaGNfa.run(t, G.AaGNfa.alive(G.AaGNfa.next(seq, bs, False{}, False{}, h)), seq, G.AaGNfa.next(seq, bs, False{}, False{}, h)), G.AaGNfa.sem(seq, G.AaGNfa.next(seq, bs, False{}, False{}, h), t), G.AaGNfa.sem(seq, bs, Con{h, t}), nfa.run(t, G.AaGNfa.alive(G.AaGNfa.next(seq, bs, False{}, False{}, h)), seq, G.AaGNfa.next(seq, bs, False{}, False{}, h), {==}), nfa.step(seq, bs, False{}, False{}, h, t))

Uses (12)

Used by (1)