- BFT_ALL_DISTINCT
-
⊢ ∀G seen fringe.
FINITE (Parents G) ⇒ ALL_DISTINCT (BFT G CONS seen fringe [])
- BFT_CONS
-
⊢ ∀G f seen fringe acc a b.
FINITE (Parents G) ∧ (f = CONS) ∧ (acc = a ++ b) ⇒
(BFT G f seen fringe acc = BFT G f seen fringe a ++ b)
- BFT_FOLD
-
⊢ ∀G f seen fringe acc.
FINITE (Parents G) ⇒
(BFT G f seen fringe acc = FOLDR f acc (BFT G CONS seen fringe []))
- BFT_REACH_1
-
⊢ ∀G f seen fringe acc.
FINITE (Parents G) ∧ (f = CONS) ⇒
∀x. MEM x (BFT G f seen fringe acc) ⇒ x ∈ REACH_LIST G fringe ∨ MEM x acc
- BFT_REACH_2
-
⊢ ∀G f seen fringe acc x.
FINITE (Parents G) ∧ (f = CONS) ∧
x ∈ REACH_LIST (EXCLUDE G (LIST_TO_SET seen)) fringe ∧ ¬MEM x seen ⇒
MEM x (BFT G f seen fringe acc)
- BFT_REACH_THM
-
⊢ ∀G fringe.
FINITE (Parents G) ⇒
∀x. x ∈ REACH_LIST G fringe ⇔ MEM x (BFT G CONS [] fringe [])
- BFT_def
-
⊢ FINITE (Parents G) ⇒
(BFT G f seen [] acc = acc) ∧
(BFT G f seen (h::t) acc =
if MEM h seen then BFT G f seen t acc
else BFT G f (h::seen) (t ++ G h) (f h acc))
- BFT_ind
-
⊢ ∀P. (∀G f seen h t acc.
P G f seen [] acc ∧
((FINITE (Parents G) ∧ ¬MEM h seen ⇒
P G f (h::seen) (t ++ G h) (f h acc)) ∧
(FINITE (Parents G) ∧ MEM h seen ⇒ P G f seen t acc) ⇒
P G f seen (h::t) acc)) ⇒
∀v v1 v2 v3 v4. P v v1 v2 v3 v4