|
| 1 | +Proving Full Correctness All-Path Reachability Claims |
| 2 | +===================================================== |
| 3 | + |
| 4 | +This document details Full Correctness All-Path Reachability without solving the |
| 5 | +most-general-unifier (MGU) problem. |
| 6 | +MGU will be detailed in a separate document. |
| 7 | + |
| 8 | +_Prepared by Traian Șerbănuță, based on [proving All-Path Reachability |
| 9 | +claims](2019-03-28-All-Path-Reachability-Proofs.md)_ |
| 10 | + |
| 11 | +Background |
| 12 | +---------- |
| 13 | + |
| 14 | +Similarly to the All-Path Reachability document, we assume all pattern variables |
| 15 | +used in this document to be _extended function-like patterns_, that is patterns |
| 16 | +which can be written as `t ∧ p` where the interpretation of `t` contains at most |
| 17 | +one element and `p` is a predicate. |
| 18 | + |
| 19 | +_Extended constructor patterns_ will be those extended function-like patterns |
| 20 | +for which `t` is a functional term, composed out of constructor-like symbols |
| 21 | +and variables. |
| 22 | + |
| 23 | + |
| 24 | +__Note:__ |
| 25 | +Whenever `φ` is a function-like pattern, |
| 26 | +``` |
| 27 | +φ ∧ ∃z.ψ = φ ∧ ∃z.⌈φ ∧ ψ⌉ |
| 28 | +``` |
| 29 | +and |
| 30 | +``` |
| 31 | +φ ∧ ¬∃z.ψ = φ ∧ ¬∃z.⌈φ ∧ ψ⌉ |
| 32 | +``` |
| 33 | + |
| 34 | +In this document we prefer the formulations on the right because they are of the |
| 35 | +form pattern and predicate. |
| 36 | + |
| 37 | +Moreover, suppose all free variables in the above formulae are from `x`, |
| 38 | +we will assume that the unification condition `⌈φ ∧ ψ⌉` can always be |
| 39 | +computed to be of the form `z = t ∧ p`, where |
| 40 | + |
| 41 | +* `t`s are functional patterns with no free variables from `z` |
| 42 | + * i.e., `[t / z]` is a substitution. |
| 43 | +* `p` is a predicate over `x ∪ z` |
| 44 | + |
| 45 | +Under this assumption, `∃z.⌈φ ∧ ψ⌉` can be rewritten without the existential |
| 46 | +quantification, as `p[t/z]`, i.e., `p` in which all ocurrences of the variables |
| 47 | +from `z` are substituted with the corresponding term in `t`. |
| 48 | + |
| 49 | + |
| 50 | +Definitions |
| 51 | +----------- |
| 52 | + |
| 53 | +### All-path finally |
| 54 | + |
| 55 | +Given a formula `φ`, let `♢φ` denote the formula “all-path finally” `φ`, |
| 56 | +defined by: |
| 57 | + |
| 58 | +``` |
| 59 | +♢φ := μX.φ ∨ (○X ∧ •⊤) |
| 60 | +``` |
| 61 | + |
| 62 | +one consequence of the above is that `♢φ ≡ φ ∨ (○♢φ ∧ •⊤)`. |
| 63 | + |
| 64 | +Given this definition of all-path finally, a full correctness all-path |
| 65 | +reachability claim |
| 66 | +``` |
| 67 | +∀x.φ(x) → ♢∃z.ψ(x,z) |
| 68 | +``` |
| 69 | +basically states that if `φ(x)` holds for a configuration `γ`, for some `x`, |
| 70 | +then `P(γ)` holds, where `P(G)` is recursively defined on configurations as: |
| 71 | +* there exists `z` such that `ψ(x,z)` holds for `G` |
| 72 | +* or |
| 73 | + * `G` is not stuck (`G → • T`) and |
| 74 | + * `P(G')` for all configurations `G'` in which `G` can transition |
| 75 | + |
| 76 | +__Note:__ |
| 77 | +Using the least fix-point (`μ`) instead of the greatest fix-point (`ν`) |
| 78 | +restricts paths to finite ones. Therefore, the intepretation of a reachability |
| 79 | +claim guarantees full-correctness, as it requires that the conclusion is |
| 80 | +reached in a finite number of steps. |
| 81 | + |
| 82 | +Problem Description |
| 83 | +------------------- |
| 84 | + |
| 85 | +Given a set of reachability claims, of the form `∀x.φ(x) → ♢∃z.ψ(x,z)`, |
| 86 | +we are trying to prove all of them together. |
| 87 | + |
| 88 | +### Additional complication |
| 89 | + |
| 90 | +Since proving a claim now also needs to guarantee termination, there are several |
| 91 | +extra requirements, as applications of circularities would now need to be |
| 92 | +guarded by a measure of decreasingness instead of a measure of progress |
| 93 | +(switching from coinduction to induction). |
| 94 | + |
| 95 | +## Proposal of syntax changes to address the above mentioned complication |
| 96 | + |
| 97 | +- claims need to mention the other claims (including themselves) which are |
| 98 | + needed to complete their proof; this induces a dependency relation |
| 99 | +- claims which are part of a dependency cycle (including self-dependencies) |
| 100 | + would need to be specified together as a "claim group" |
| 101 | +- a claim group would need to provide a metric on their input variables, which |
| 102 | + would be used as part of the decreasingness guard whenever one tries to apply |
| 103 | + a claim from the group during the proof of one the claims in the group |
| 104 | + |
| 105 | +A claim group would be something like |
| 106 | +``` |
| 107 | +claim group |
| 108 | + decreasing measure(x) |
| 109 | +
|
| 110 | + . . . |
| 111 | +
|
| 112 | + claim φᵢ(x) → ♢∃zᵢ.ψᵢ(x,zᵢ) [using(claimᵢ₁, ..., claimᵢₖ)] |
| 113 | +
|
| 114 | + . . . |
| 115 | +
|
| 116 | +end claim group |
| 117 | +``` |
| 118 | + |
| 119 | +where the claims in the `using` mention the dependencies which are not part of |
| 120 | +the cycle. |
| 121 | + |
| 122 | +## Algorithms |
| 123 | +------------- |
| 124 | +(detailed in the next section) |
| 125 | + |
| 126 | + |
| 127 | +### Algorithm `proveAllPath` |
| 128 | + |
| 129 | +__Input:__ claim group `∀x. (φ₁(x) → ♢∃z.ψ₁(x,z)) ∧ ... ∧ (φₙ(x) → ♢∃z.ψₙ(x,z)) [decreasing measure(x)]` |
| 130 | + |
| 131 | +__Output:__ Proved or Unproved |
| 132 | + |
| 133 | +* Fix an instance `x₀` for the variables `x` |
| 134 | +* Let `claims ::= { ∀ x . φᵢ(x) ∧ measure(x) <Int measure(x₀) → ♢∃z.ψᵢ(x,z) }` |
| 135 | +* For each claim `φᵢ(x₀) → ♢∃z.ψᵢ(x₀,z)` |
| 136 | + * check that `φᵢ(x₀) → measure(x) >=Int 0` |
| 137 | + * Let `claimsᵢ ::= claims ∪ { claimᵢ₁, ..., claimᵢₖ }` |
| 138 | + * Let `Goals := { φᵢ(x₀) }` |
| 139 | + * While `Goals` is not empty: |
| 140 | + * Extract and remove `goal` of the form `φ` from `Goals` |
| 141 | + * Let `goalᵣₑₘ := φ ∧ ¬∃z.⌈φ ∧ ψᵢ⌉` |
| 142 | + * If `goalᵣₑₘ` is bottom (`goalᵣₑₘ ≡ ⊥`) |
| 143 | + * continue to the next goal |
| 144 | + * `(Goals', goal'ᵣₑₘ) := derivePar(goalᵣₑₘ, claimsᵢ)` |
| 145 | + * Let `(Goals'', goal''ᵣₑₘ) := derivePar(goal'ᵣₑₘ, axioms)` |
| 146 | + * If `goal''ᵣₑₘ` is not trivially valid (its lhs is not equivalent to `⊥`) |
| 147 | + * Return `Unprovable` |
| 148 | + * Let `Goals := Goals ∪ Goals' ∪ Goals''` |
| 149 | +* Return `Provable` |
| 150 | + |
| 151 | +__Note:__ Since the derivation process can continue indefinitely, one could add |
| 152 | +a bound on the total number of (levels of) expansions attempted before |
| 153 | +returning `Unprovable`. |
| 154 | + |
| 155 | +__Note__: If the unfication condition `⌈φ ∧ ψ⌉ = (z=t)∧ p` |
| 156 | +with `t` functional, `p` predicate, and `t` free of `z`. |
| 157 | +Then `goalᵣₑₘ := φ ∧ ¬∃z.⌈φ ∧ ψ⌉` |
| 158 | +is equivalent to `φ ∧ ¬pᵢ[tᵢ/xᵢ]`. |
| 159 | + |
| 160 | +### Algorithm `derivePar` |
| 161 | + |
| 162 | +__Input:__: goal `φ` and set of tuples `{ (xᵢ,φᵢ,zᵢ,ψᵢ) : 1 ≤ i ≤ n }` representing either |
| 163 | + |
| 164 | +* claims `{ ∀xᵢ.φᵢ → ♢∃zᵢ.ψᵢ : 1 ≤ i ≤ n }`, or |
| 165 | +* axioms `{ ∀xᵢ.φᵢ → •∃zᵢ.ψᵢ : 1 ≤ i ≤ n }` |
| 166 | + |
| 167 | +__Output:__ `(Goals, goalᵣₑₘ)` |
| 168 | + |
| 169 | +* Let `goalᵣₑₘ := φ ∧ ¬∃x₁.⌈φ∧φ₁⌉ ∧ … ∧ ¬∃xₙ.⌈φ∧φₙ⌉` |
| 170 | +* Let `Goals := { ∀z₁.(∃x₁.ψ₁ ∧ ⌈φ∧φ₁⌉), … , ∀zₙ.(∃xₙ.ψₙ ∧ ⌈φ∧φₙ⌉) }` |
| 171 | + |
| 172 | +__Note__: `∀zᵢ.(∃xᵢ.ψᵢ ∧ ⌈φ∧φᵢ⌉)` is obtained from |
| 173 | +`(∃xᵢ.(∃zᵢ.ψᵢ) ∧ ⌈φ∧φᵢ⌉) → ♢∃z.ψ` |
| 174 | + |
| 175 | +__Note__: If the unfication condition `⌈φ ∧ φᵢ⌉ = (xᵢ=tᵢ)∧ pᵢ` |
| 176 | +with `tᵢ` functional, `pᵢ` predicate, and `tᵢ` free of `xi`. |
| 177 | +Then the goal `∀x∪zᵢ.(∃xᵢ.ψᵢ ∧ ⌈φ∧φᵢ⌉) → ♢∃z.ψ` |
| 178 | +is equivalent to `∀x∪zᵢ.ψᵢ[tᵢ/xᵢ] ∧ pᵢ[tᵢ/xᵢ] → ♢∃z.ψ`. |
| 179 | + |
| 180 | +Similarly `goalᵣₑₘ := (φ ∧ ¬∃x₁.⌈φ∧φ₁⌉ ∧ … ∧ ¬∃xₙ.⌈φ∧φₙ⌉)` |
| 181 | +is equivalent to `(φ ∧ ⋀ⱼ ¬pⱼ[tⱼ/xⱼ])` |
| 182 | +where `j` ranges over the set `{ i : 1 ≤ i ≤ n, φ unifies with φᵢ }`. |
| 183 | + |
| 184 | +__Note__: If `φ` does not unify with `φᵢ`, then `⌈φ∧φᵢ⌉ = ⊥`, hence |
| 185 | +the goal `∀x∪zᵢ.(∃xᵢ.ψᵢ ∧ ⌈φᵢʳᵉᵐ∧φᵢ⌉) → ♢∃z.ψ` is equivalent to |
| 186 | +`∀x.⊥ → ♢∃z.ψ` which can be discharged immediately. Also, in the |
| 187 | +remainder `¬∃x₁.⌈φ∧φ₁⌉ = ⊤` so the conjunct can be removed. |
| 188 | + |
| 189 | + |
| 190 | +Explanation |
| 191 | +----------- |
| 192 | + |
| 193 | +Say we want to prove `∀x. (φ₁(x) → ♢∃z.ψ₁(x,z)) ∧ ... ∧ (φₙ(x) → ♢∃z.ψₙ(x,z)) [decreasing measure(x)]`. |
| 194 | + |
| 195 | +We will do that by well-founded induction over `measure(x)`. |
| 196 | +To do that, we would need to ensure that `measure(x)` is always positive; |
| 197 | +this could be checked either syntactically, or using the SMT. |
| 198 | + |
| 199 | +Fix an arbitrary instance `x₀` of the variables. We have to prove each |
| 200 | +reachability claim `φᵢ(x₀) → ♢∃z.ψᵢ(x₀,z)`, using the induction hypothesis |
| 201 | +`∀x. measure(x) < measure(x₀) → (φ₁(x) → ♢∃z.ψ₁(x,z)) ∧ ... ∧ (φₙ(x) → ♢∃z.ψₙ(x,z))` |
| 202 | +which can be split into induction hypotheses for each claim |
| 203 | +`∀x. φᵢ(x) ∧ measure(x) < measure(x₀) → ♢∃z.ψᵢ(x,z)`. |
| 204 | + |
| 205 | +Since we might be using the claims to advance the proof of the claim, to avoid |
| 206 | +confusion (and to reduce caring about indices) we will denote a goal with |
| 207 | +`φ(x₀) → ♢∃z.ψ(x₀,z)` in all subsequent steps, although the exact goal might |
| 208 | +change from one step to the next. |
| 209 | + |
| 210 | +### Eliminating the conclusion |
| 211 | + |
| 212 | +First, let us eliminate the case when the conclusion holds now. We have |
| 213 | +the following sequence of equivalent claims: |
| 214 | + |
| 215 | +``` |
| 216 | +φ(x₀) → ♢∃z.ψ(x₀,z) |
| 217 | +φ(x₀) ∧ (∃z.ψ(x₀, z) ∨ ¬∃z.ψ(x₀, z)) → ♢∃z.ψ(x₀,z) |
| 218 | +(φ(x₀) ∧ ∃z.ψ(x₀, z)) ∨ (φ(x₀) ∧ ¬∃z.ψ(x₀, z)) → ♢∃z.ψ(x₀,z) |
| 219 | +(φ(x₀) ∧ ∃z.ψ(x₀, z) → ♢∃z.ψ(x₀,z)) ∧ (φ(x₀) ∧ ¬∃z.ψ(x₀, z) → ♢∃z.ψ(x₀,z)) |
| 220 | +``` |
| 221 | + |
| 222 | +The first conjunct, `φ(x₀) ∧ ∃z.ψ(x₀, z) → ♢∃z.ψ(x₀,z)` can be discharged by |
| 223 | +unrolling `♢∃z.ψ(x₀,z)` to `∃z.ψ(x₀,z) φ ∨ (○♢∃z.ψ(x₀,z) ∧ •⊤)`, and then |
| 224 | +using that `∃z.ψ(x₀, z)` appears in both lhs (as a conjunct) and rhs (as a |
| 225 | +disjunct). |
| 226 | + |
| 227 | +This reduces the above to proving the following remainder claim: |
| 228 | + |
| 229 | +```` |
| 230 | +φ(x₀) ∧ ¬∃z.ψ(x₀, z) → ♢∃z.ψ(x₀,z) |
| 231 | +``` |
| 232 | +
|
| 233 | +Let `φ(x₀)` denote `φ(x₀) ∧ ¬(∃z.ψ(x₀, z))` in the sequel. |
| 234 | +If `φ(x₀)` is equivalent to `⊥`, then the implication holds and we are done. |
| 235 | +
|
| 236 | +### Applying circularities (induction hypotheses) |
| 237 | +
|
| 238 | +To apply circularities we have to ensure that the measure has decreased. |
| 239 | +However, whenever circularities may be applied, we want to apply them |
| 240 | +immediately (to allow skipping over loops/recursive calls), and to only apply |
| 241 | +regular rules on the parts on which circularities cannot apply. |
| 242 | +
|
| 243 | +On the other hand, care should be taken when choosing the measure, to ensure |
| 244 | +it actually holds whenever one needs to reenter a loop/call a recursive |
| 245 | +function. Failing to have a good such measure would result in the circularities |
| 246 | +never being applied and the proof looping (and branching) forever. |
| 247 | +
|
| 248 | +In the following, let `∀x.φᵢ(x) → ♢∃z.ψᵢ(x,z)` denote the ith induction |
| 249 | +hypothesis, with `φᵢ(x)` including the `measure(x) < measure(x₀)` check. |
| 250 | +
|
| 251 | +``` |
| 252 | +φ(x₀) → ♢∃z.ψ(x₀,z) |
| 253 | +φ(x₀) ∧ (∃x.φ₁(x) ∨ … ∨ ∃x.φₙ(x) ∨ (¬∃x.φ₁(x) ∧ … ∧ ¬∃x.φₙ(x)) → ♢∃z.ψ(x₀,z) |
| 254 | +(φ(x₀) ∧ ∃x.φ₁(x)) ∨ … ∨ (φ(x₀) ∧ ∃x.φₙ(x)) ∨ (φ(x₀) ∧ (¬∃x.φ₁(x) ∧ … ∧ ¬∃x.φₙ(x))) → ♢∃z.ψ(x₀,z) |
| 255 | +(φ(x₀) ∧ ∃x.φ₁(x) → ♢∃z.ψ(x₀,z)) ∧ … (φ(x₀) ∧ ∃x.φₙ(x) → ♢∃z.ψ(x₀,z)) ∧ (φ(x₀) ∧ (¬∃x₁.φ₁ ∧ … ∧ ¬∃xₙ.φₙ)) → ♢∃z.ψ(x₀,z)) |
| 256 | +``` |
| 257 | +
|
| 258 | +Note that the remainder can be rewritten using the following equivalences: |
| 259 | +
|
| 260 | +``` |
| 261 | +φ(x₀) ∧ (¬∃x.φ₁(x) ∧ … ∧ ¬∃x.φₙ(x)) → ♢ψ(x₀,z) |
| 262 | +(φ(x₀) ∧ ¬∃x.φ₁(x)) ∧ … ∧ (φ(x₀) ∧ ¬∃x.φₙ(x)) → ♢ψ(x₀,z) |
| 263 | +(φ(x₀) ∧ ¬∃x.⌈φ(x₀) ∧ φ₁(x)⌉) ∧ … ∧ (φ(x₀) ∧ ¬∃x.⌈φ(x₀)∧φₙ(x)⌉) → ♢ψ(x₀,z) |
| 264 | +φ(x₀) ∧ (¬∃x.⌈φ(x₀) ∧ φ₁(x)⌉ ∧ … ∧ ¬∃x.⌈φ(x₀)∧φₙ(x)⌉) → ♢ψ(x₀,z) |
| 265 | +``` |
| 266 | +
|
| 267 | +In particular, part of the predicate of the remainder will include the negation |
| 268 | +of the measure check, `¬measure(x) < measure(x₀)` instantiated with the |
| 269 | +substitution associated with any term part of some `φᵢ(x)` matching `φ(x₀)`. |
| 270 | +
|
| 271 | +#### Using a claim to advance the corresponding goal |
| 272 | +
|
| 273 | +We want to prove that from the induction hypothesis `∀x. φᵢ(x) → ♢∃z.ψᵢ(x,z)` |
| 274 | +and the derived goal `∀zᵢ.∃x.(ψᵢ(x,zᵢ) ∧ ⌈φ(x₀) ∧ φᵢ(x)⌉) → ♢∃z.ψ(x₀, z)` |
| 275 | +we can deduce that `φ(x₀) ∧ ∃x.φᵢ(x) → ♢∃z.ψ(x₀,z)`. |
| 276 | +
|
| 277 | +This would allow us to replace goal `φ(x₀) ∧ ∃x.φᵢ(x) → ♢∃z.ψ(x₀,z)` |
| 278 | +with goal `∀zᵢ.∃x.(ψᵢ(x,zᵢ) ∧ ⌈φ(x₀) ∧ φᵢ(x)⌉) → ♢∃z.ψ(x₀,z)`. |
| 279 | +
|
| 280 | +_Proof:_ |
| 281 | +
|
| 282 | +The main step of our proof is to prove |
| 283 | +`φ(x₀) ∧ ∃x.φᵢ(x) → ♢∃x.((∃zᵢ.ψᵢ(x,z)) ∧ ⌈φ(x₀) ∧ φᵢ(x)⌉)` |
| 284 | +from `∀x. φᵢ(x) → ♢∃z.ψᵢ(x,z)`. |
| 285 | +
|
| 286 | +Assume `⌈φ(x₀) ∧ φᵢ(x)⌉ = (x=tᵢ(x₀))∧ pᵢ(x, x₀)` with `tᵢ(x₀)` functional and |
| 287 | +free of `x` and `pᵢ(x₀,x)` predicate. |
| 288 | +
|
| 289 | +Then, |
| 290 | +``` |
| 291 | +φᵢ(tᵢ) → ♢∃z.ψᵢ(tᵢ, z) // by induction hypothesis ∀x.φᵢ(x) → ♢∃z.ψᵢ(x,z) instantiated to x := tᵢ |
| 292 | +φᵢ(tᵢ) ∧ p(x₀,tᵢ) → (♢∃z.ψᵢ(tᵢ, z)) ∧ p(x₀,tᵢ) // framing |
| 293 | +φᵢ(tᵢ) ∧ p(x₀,tᵢ) → ♢((∃z.ψᵢ(tᵢ, z)) ∧ p(x₀,tᵢ)) // predicate properties |
| 294 | +∃x.φᵢ(x) ∧ x=tᵢ ∧ p(x₀,x) → ♢∃x.((∃z.ψᵢ(x,z)) ∧ x=tᵢ ∧ p(x₀,x)) // substitution properties |
| 295 | +∃x.φᵢ(x) ∧ ⌈φ(x₀)∧φᵢ(x)⌉ → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // definition of ⌈φ(x₀)∧φᵢ(x)⌉ |
| 296 | +φ(x₀) ∧ ∃x.φᵢ(x) ∧ ⌈φ(x₀)∧φᵢ(x)⌉ → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // Strengthening |
| 297 | +φ(x₀) ∧ ∃x.⌈φ(x₀) ∧ φᵢ(x) ∧ ⌈φ(x₀)∧φᵢ(x)⌉⌉ → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // φ is functional |
| 298 | +φ(x₀) ∧ ∃x.(⌈φ(x₀) ∧ φᵢ(x)⌉ ∧ ⌈φ(x₀)∧φᵢ(x)⌉) → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // predicate properties |
| 299 | +φ(x₀) ∧ ∃x.⌈φ(x₀) ∧ φᵢ(x)⌉ → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // idempotency |
| 300 | +φ(x₀) ∧ ∃x.φᵢ(x) → ♢∃x.((∃z.ψᵢ(x,z)) ∧ ⌈φ(x₀)∧φᵢ(x)⌉) // φ is functional |
| 301 | +``` |
| 302 | +
|
| 303 | +#### Summary of applying circularities |
| 304 | +
|
| 305 | +By applying the circularities, we will replace the existing goal with a set |
| 306 | +consisting of a goal for each circularity (some with the hypothesis equivalent |
| 307 | +with `⟂`) and a remainder. |
| 308 | +
|
| 309 | +For a given induction hypothesis ``∀x. φᵢ(x) → ♢∃z.ψᵢ(x,z)`, |
| 310 | +since `φ(x₀)` and `φᵢ(x)` are both function-like patterns (constrained terms), |
| 311 | +we can assume that `⌈φ(x₀) ∧ φᵢ(x)⌉` can be written of the form |
| 312 | +`(x=tᵢ(x₀)) ∧ pᵢ(x, x₀)` with `tᵢ(x₀)` functional and free of `x` and |
| 313 | +`pᵢ(x₀,x)` a predicate (which can be bottom to account for unification failure). |
| 314 | +
|
| 315 | +Then the derived goal associated to this induction hypothesis will be |
| 316 | +`∀zᵢ.∃x.(ψᵢ(x,zᵢ) ∧ ⌈φ(x₀) ∧ φᵢ(x)⌉) → ♢∃z.ψ(x₀,z)`, which, using the above |
| 317 | +identity, is equivalent to |
| 318 | +
|
| 319 | +``` |
| 320 | +∀zᵢ.∃x.(ψᵢ(x,zᵢ) ∧ (x=tᵢ(x₀)) ∧ pᵢ(x, x₀)) → ♢∃z.ψ(x₀,z) |
| 321 | +∀zᵢ.∃x.(ψᵢ(tᵢ(x₀),zᵢ) ∧ pᵢ(tᵢ(x₀), x₀)) → ♢∃z.ψ(x₀,z) |
| 322 | +∀zᵢ.ψᵢ(tᵢ(x₀),zᵢ) ∧ pᵢ(tᵢ(x₀), x₀) → ♢∃z.ψ(x₀,z) |
| 323 | +``` |
| 324 | +
|
| 325 | +Using the fact that the variables `zᵢ` only appear in the lhs, we can |
| 326 | +instantiate them to arbitrary (but fixed) symbolic variables `z₀`, and then |
| 327 | +let `φ(x₀)` denote ψᵢ(tᵢ(x₀),z₀) ∧ pᵢ(tᵢ(x₀), x₀)` for the next phase of the |
| 328 | +algorithm. |
| 329 | +
|
| 330 | +
|
| 331 | +### Applying axioms |
| 332 | +
|
| 333 | +We're back now to `φ(x₀) → (○♢∃z.ψ(x₀,z)) ∧ •⊤`, which is equivalent to |
| 334 | +`(φ(x₀) → ○♢∃z.ψ(x₀, z)) ∧ (φ(x₀) → •⊤)` |
| 335 | +
|
| 336 | +Therefore we need to check two things: |
| 337 | +
|
| 338 | +1. That `φ(x₀)` is not stuck |
| 339 | +1. That `φ(x₀) → ○♢∃z.ψ` |
| 340 | +
|
| 341 | +Assume `∀xᵢ.φᵢ(xᵢ) → •∃zᵢ.ψᵢ(xᵢ,zᵢ), 1 ≤ i ≤ n` are all the one-step axioms |
| 342 | +in the definition, and `P -> o ⋁ᵢ ∃xᵢ.⌈P ∧ φᵢ(xᵢ)⌉ ∧ ∃zᵢ.ψᵢ(xᵢ,zᵢ)` |
| 343 | +is the STEP rule associated to them. |
| 344 | +
|
| 345 | +Using the same reasoning as when applying all claims in parallel, |
| 346 | +`φ(x₀) → α` is equivalent with |
| 347 | +``` |
| 348 | +(φ(x₀) ∧ ∃x₁.φ₁(x₁) → α) ∧ … ∧ (φ(x₀) ∧ ∃xₙ.φₙ(xₙ) → α) ∧ (φ(x₀) ∧ ¬∃x₁.φ₁(x₁) ∧ … ∧ ¬∃xₙ.φₙ(xₙ) → α) |
| 349 | +``` |
| 350 | +
|
| 351 | +Now, for the first thing to check, take `α := •⊤`. |
| 352 | +Since all but the last conjunct are guaranteed to hold |
| 353 | +(because of the rewrite axioms), `φ` is stuck if the remainder after attempting |
| 354 | +to apply all axioms (i.e., the lhs of the last conjunct) is not equivalent to `⊥`. |
| 355 | +
|
| 356 | +We want to prove that from the STEP rule and |
| 357 | +``` |
| 358 | +(∀z₁.∃x₁.ψ₁(x₁,z₁) ∧ ⌈φ(x₀) ∧ φ₁(x₁)⌉ → ♢∃z.ψ(x₀,z)) ∧ … ∧ (∀zₙ.∃xₙ.ψₙ(xₙ,zₙ) ∧ ⌈φ(x₀) ∧ φₙ(xₙ)⌉ → ♢∃z.ψ(x₀,z)) |
| 359 | +``` |
| 360 | +
|
| 361 | +we can derive `φ(x₀) → ○♢∃z.ψ(x₀,z)` |
| 362 | +
|
| 363 | +This would allow us to replace the goal `φ(x₀) → ○♢∃z.ψ(x₀,z)` with the set of goals |
| 364 | +``` |
| 365 | +{ ∀zᵢ.∃xᵢ.ψᵢ(xᵢ,zᵢ) ∧ ⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ → ♢∃z.ψ(x₀,z) : 1 ≤ i ≤ n } |
| 366 | +``` |
| 367 | +
|
| 368 | +_Proof:_ |
| 369 | +
|
| 370 | +Apply `(STEP)` on `φ(x₀)`, and we obtain that |
| 371 | +``` |
| 372 | +φ(x₀) → o ⋁ᵢ ∃xᵢ.⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ ∧ ∃zᵢ.ψᵢ(xᵢ,zᵢ) |
| 373 | +``` |
| 374 | +
|
| 375 | +We can replace our goal succesively with: |
| 376 | +``` |
| 377 | +o ⋁ᵢ ∃xᵢ.⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ ∧ ∃zᵢ.ψᵢ(xᵢ,zᵢ) → ○♢∃z.ψ(x₀, z) // transitivity of → |
| 378 | +⋁ᵢ ∃xᵢ.⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ ∧ ∃zᵢ.ψᵢ(xᵢ,zᵢ) → ♢∃z.ψ(x₀, z) // framing on ○ |
| 379 | +∃xᵢ.⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ ∧ ∃zᵢ.ψᵢ(xᵢ,zᵢ) → ♢∃z.ψ(x₀, z) for all i |
| 380 | +``` |
| 381 | +
|
| 382 | +#### Summary of applying the claims |
| 383 | +
|
| 384 | +- Check that the remainder `φ(x₀) ∧ ¬∃x₁.φ₁(x₁) ∧ … ∧ ¬∃xₙ.φₙ(xₙ)` is equivalent to `⟂` |
| 385 | +- Replace the goal `φ(x₀) → ○♢∃z.ψ(x₀,z)` by the set of goals |
| 386 | + ``` |
| 387 | + { ∀zᵢ.∃xᵢ.ψᵢ(xᵢ,zᵢ) ∧ ⌈φ(x₀) ∧ φᵢ(xᵢ)⌉ → ♢∃z.ψ(x₀,z) : 1 ≤ i ≤ n } |
| 388 | + ``` |
| 389 | +
|
0 commit comments