- stateMax : State
- initials : Std.HashSet State
- finals : Std.HashSet State
- trans : Std.HashMap (State × A) (Std.HashSet State)
Instances For
def
NFA.addTrans
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m : NFA A)
(a : A)
(s : State)
(s' : State)
:
NFA A
Equations
Instances For
def
NFA.addManyTrans
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m : NFA A)
(a : List A)
(s : State)
(s' : State)
:
NFA A
Equations
- m.addManyTrans a s s' = List.foldl (fun (m : NFA A) (a : A) => m.addTrans a s s') m a
Instances For
def
NFA.transSet
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m : NFA A)
(ss : Std.HashSet State)
(a : A)
:
Equations
- m.transSet ss a = Std.HashSet.fold (fun (ss' : Std.HashSet State) (s : State) => ss'.insertMany (m.trans.getD (s, a) ∅)) ∅ ss
Instances For
Equations
- NFA_Inhabited = { default := NFA.empty }
theorem
Std.HashMap.keys_nodup
{K : Type u_1}
{V : Type u_2}
[BEq K]
[Hashable K]
(m : Std.HashMap K V)
:
m.keys.Nodup
@[simp]
theorem
Std.HashMap.mem_keys_iff_mem
{K : Type u_1}
{V : Type u_2}
[BEq K]
[Hashable K]
(m : Std.HashMap K V)
(k : K)
:
theorem
Std.HashMap.mem_keys_insert_new
{K : Type u_1}
{V : Type u_2}
{v : V}
[BEq K]
[LawfulBEq K]
[Hashable K]
[LawfulHashable K]
(m : Std.HashMap K V)
(k : K)
:
k ∈ m.insert k v
theorem
Std.HashMap.mem_keys_insert_old
{K : Type u_1}
{V : Type u_2}
{v : V}
[BEq K]
[LawfulBEq K]
[Hashable K]
[LawfulHashable K]
(m : Std.HashMap K V)
(k : K)
(k' : K)
:
theorem
Std.HashMap.get?_none_not_mem
{K : Type u_1}
{V : Type u_2}
[BEq K]
[LawfulBEq K]
[Hashable K]
[LawfulHashable K]
(m : Std.HashMap K V)
(k : K)
:
m.get? k = none → k ∉ m
theorem
addOrCreateState_grow
(A : Type)
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
{S : Type}
[BEq S]
[LawfulBEq S]
[Hashable S]
[DecidableEq S]
(stateSpace : Finset S)
(st : worklist.St A stateSpace)
(b : Bool)
(sa : inSS stateSpace)
:
theorem
processOneElem_grow
(A : Type)
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
{S : Type}
[BEq S]
[LawfulBEq S]
[Hashable S]
[DecidableEq S]
(stateSpace : Finset S)
(st : worklist.St A stateSpace)
(final : S → Bool)
(a : A)
(sa' : inSS stateSpace)
(s : State)
:
def
worklist.initState
(A : Type)
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
{S : Type}
[Hashable S]
[DecidableEq S]
(stateSpace : Finset S)
(init : inSS stateSpace)
:
worklist.St A stateSpace
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
worklistRunAux
(A : Type)
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
{S : Type}
[BEq S]
[LawfulBEq S]
[Hashable S]
[DecidableEq S]
(stateSpace : Finset S)
(final : S → Bool)
(f : S → Array (A × inSS stateSpace))
(init : inSS stateSpace)
:
NFA A
Equations
- worklistRunAux A stateSpace final f init = worklistRunAux.go A stateSpace final f init (worklist.initState A stateSpace init)
Instances For
@[irreducible]
def
worklistRunAux.go
(A : Type)
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
{S : Type}
[BEq S]
[LawfulBEq S]
[Hashable S]
[DecidableEq S]
(stateSpace : Finset S)
(final : S → Bool)
(f : S → Array (A × inSS stateSpace))
(init : inSS stateSpace)
(st0 : worklist.St A stateSpace)
:
NFA A
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
product.init
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m1 : NFA A)
(m2 : NFA A)
(st : product.State)
:
product.State
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- HashSet.inter m1 m2 = Std.HashSet.fold (fun (mi : Std.HashSet A) (x : A) => if m2.contains x = true then mi.insert x else mi) Std.HashSet.empty m1
Instances For
def
Std.HashSet.isDisjoint
{A : Type u_1}
[BEq A]
[Hashable A]
(m1 : Std.HashSet A)
(m2 : Std.HashSet A)
:
Equations
- m1.isDisjoint m2 = (HashSet.inter m1 m2).isEmpty
Instances For
def
HashSet.areIncluded
{A : Type u_1}
[BEq A]
[Hashable A]
(m1 : Std.HashSet A)
(m2 : Std.HashSet A)
:
Equations
- HashSet.areIncluded m1 m2 = m1.all fun (x : A) => m2.contains x
Instances For
Equations
- hashableHashSet = { hash := fun (s : Std.HashSet A) => Std.HashSet.fold (fun (h : UInt64) (x : A) => mixHash h (hash x)) 0 s }
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[irreducible]
def
NFA.determinize.go
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(mi : NFA A)
(st : NFA.determinize.St)
:
NFA A
Equations
- One or more equations did not get rendered due to their size.
Instances For
def
NFA.isIncluded
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m1 : NFA A)
(m2 : NFA A)
:
Returns true when L(m1) ⊆ L(m2)
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[irreducible]
def
NFA.isIncluded.go
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m1 : NFA A)
(m2 : NFA A)
(st : isIncluded.State)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns true when L(m) = A*
Equations
- m.isUniversal = NFA.isUniversal.go m { visited := [], worklist := [m.initials] }
Instances For
@[irreducible]
def
NFA.isUniversal.go
{A : Type}
[BEq A]
[Hashable A]
[DecidableEq A]
[FinEnum A]
(m : NFA A)
(st : isUniversal.State)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
Recognizes the empty word
Equations
- NFA.emptyWord = match NFA.empty.newState with | (s, m) => let m := m.addInitial s; let m := m.addFinal s; m
Instances For
Returns true when L(m) ∪ {ε} = A*
. This is useful because the
bitvector of with width zero has strange properties.
Equations
- m.isUniversal' = (m.union NFA.emptyWord).isUniversal
Instances For
Equations
- m.isEmpty = m.finals.isEmpty