Local Box Unfolding (Section 3.1) #
Preparation for Boxes: Test Profiles #
Equations
Equations
- instCoeOutTPUnion = { coe := fun (ℓ : TP (α⋓β)) (τ : { τ : Formula // τ ∈ testsOfProgram α }) => ℓ ⟨↑τ, ⋯⟩ }
Equations
- instCoeOutTPUnion_1 = { coe := fun (ℓ : TP (α⋓β)) (τ : { τ : Formula // τ ∈ testsOfProgram β }) => ℓ ⟨↑τ, ⋯⟩ }
Equations
- instCoeOutTPSequence = { coe := fun (ℓ : TP (α;'β)) (τ : { τ : Formula // τ ∈ testsOfProgram α }) => ℓ ⟨↑τ, ⋯⟩ }
Equations
- instCoeOutTPSequence_1 = { coe := fun (ℓ : TP (α;'β)) (τ : { τ : Formula // τ ∈ testsOfProgram β }) => ℓ ⟨↑τ, ⋯⟩ }
Equations
- instCoeOutTPStar = { coe := fun (l : TP (∗α)) (x : { τ : Formula // τ ∈ testsOfProgram α }) => match x with | ⟨f, f_in⟩ => l ⟨f, ⋯⟩ }
List of all test profiles for a given program.
Note that in contrast to Fintype.elems : Finset (TP α)
here we get a computable List (TP α).
Equations
Instances For
All test profiles are in the list of all test profiles. Thanks to Floris van Doorn https://leanprover.zulipchat.com/#narrow/stream/217875-Is-there-code-for-X.3F/topic/List.20of.20.28provably.29.20all.20functions.20from.20given.20List.20to.20Bool
theorem
signature_contradiction_of_neq_TPs
{α : Program}
{ℓ ℓ' : TP α}
:
ℓ ≠ ℓ' → contradiction (signature α ℓ⋀signature α ℓ')
Boxes: F, P, X and unfoldBox #
Note: In P and Xset we use lists not sets, to eventually make formulas.
Equations
- F (·a) x_2 = ∅
- F (?'τ) ℓ = if ℓ ⟨τ, ⋯⟩ = true then ∅ else [~τ]
- F (α⋓β) ℓ = (F α fun (τ : { τ : Formula // τ ∈ testsOfProgram α }) => ℓ ⟨↑τ, ⋯⟩) ∪ F β fun (τ : { τ : Formula // τ ∈ testsOfProgram β }) => ℓ ⟨↑τ, ⋯⟩
- F (α;'β) ℓ = (F α fun (τ : { τ : Formula // τ ∈ testsOfProgram α }) => ℓ ⟨↑τ, ⋯⟩) ∪ F β fun (τ : { τ : Formula // τ ∈ testsOfProgram β }) => ℓ ⟨↑τ, ⋯⟩
- F (∗α) ℓ = F α ℓ
Instances For
Equations
- One or more equations did not get rendered due to their size.
- P (·a) x_2 = [[·a]]
- P (?'τ) ℓ = if ℓ ⟨τ, ⋯⟩ = true then [[]] else ∅
- P (α⋓β) ℓ = (P α fun (τ : { τ : Formula // τ ∈ testsOfProgram α }) => ℓ ⟨↑τ, ⋯⟩) ∪ P β fun (τ : { τ : Formula // τ ∈ testsOfProgram β }) => ℓ ⟨↑τ, ⋯⟩
- P (∗α) ℓ = [[]] ∪ List.map (fun (as : List Program) => as ++ [∗α]) (List.filter (fun (x : List Program) => x != []) (P α ℓ))
Instances For
theorem
P_goes_down
{δ : List Program}
{γ α : Program}
{ℓ : TP α}
:
γ ∈ δ →
δ ∈ P α ℓ →
if α.isAtomic then γ = α
else if α.isStar then lengthOfProgram γ ≤ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
theorem
F_goes_down
{α : Program}
{ℓ : TP α}
{φ : Formula}
:
φ ∈ F α ℓ → lengthOfFormula φ < lengthOfProgram α
Where formulas in the unfolding can come from.
The article also says φ ∈ fischerLadner [⌈α⌉ψ]
which we omit here.