[Imprint][Data Privacy Statement][E-Mail]

Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Theorem base for Specification path-reachable

This is a listing of all goals defined over the current specification. Axioms are marked yellow, proved theorems green and unproved theorems blue. Click on individual names to get more information on the proof.

Name: Sequent: Type:
modified-stays-reachable ⊦ reachable(r, r0, h) → (reachable(r, r0, h[r0, ce]) ↔ true) A User Theorem
rem-reachable-rev-weak⊦ reachable(r, r0, H[r1, ce]) ∧ ce.nxt = H[H[r1].nxt].nxt ∧ r0 ≠ H[r1].nxt ∧ H[r1].nxt ∈ H ∧ H[r1].nxt ≠ null ∧ r1 ≠ null ∧ r1 ∈ H → (reachable(r, r0, H) ↔ true) A User Theorem
reachable-def ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) An Axiom
rem-stays-reachable-aux1r0 ∈ h, h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt ⊦ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) A User Theorem
acyclic-rem-not-reachable∀ r. r ∈ h → ¬ reachable(h[r].nxt, r, h), reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h, ce.nxt = h[h[r0].nxt].nxt ⊦ ¬ reachable(r, h[r0].nxt, h[r0, ce]) A User Theorem
reachable-modbehind ⊦ reachable(r, r0, h) ∧ reachable(r0, r1, h) ∧ ¬ reachable(r1, r0, h) → (reachable(r, r0, h[r1, ce]) ↔ true) A User Theorem
reachable-addnewtonull-rev ⊦ reachable(r, r1, h[r2, ce]) ∧ ce.nxt = null ∧ r1 ∈ h ∧ ¬ r2 ∈ h → (reachable(r, r1, h) ↔ true) A User Theorem
reachable-n-rec-rev2 ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)) A User Theorem
linearityreachable(r, r0, h), reachable(r, r1, h) ⊦ reachable(r0, r1, h) ∨ reachable(r1, r0, h) A User Theorem
reachable-n-base ⊦ reachable-n(h, 0, r, r0) ↔ r = r0 An Axiom
modnotreachable-reachable-rev ⊦ ¬ reachable(r, r0, h) ∧ ¬ reachable(r, r1, h) ∧ r0 ∈ h → (reachable(r, r1, h[r0, ce]) ↔ false) A User Theorem
path-prelast ⊦ path(r ' + x + r0 ', h) → ((r ' + x).last ∈ h ↔ true) A User Theorem
rem-reachable-rev⊦ ce.nxt = h[h[r1].nxt].nxt ∧ r0 ≠ h[r1].nxt ∧ h[r1].nxt ∈ h ∧ h[r1].nxt ≠ null ∧ r1 ≠ null ∧ r1 ∈ h → (reachable(r, r0, h[r1, ce]) ↔ reachable(r, r0, h)) A User Theorem
reach-alloc ⊦ reachable(r, r1, h) → r1 ∈ h A User Theorem
path-split-last ⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ h[(r ' + x).last].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null A User Theorem
reach-n-splitreachable-n(h, n, r, r0), m < n ⊦ ∃ r1. reachable-n(h, m, r, r1) ∧ reachable-n(h, n - m, r1, r0) A User Theorem
fromnext-reachable-rev ⊦ reachable(h[r].nxt, r0, h) ∧ r ≠ r0 ∧ r ≠ null ∧ r ∈ h → (reachable(r, r0, h) ↔ true) A User Theorem
changenonnxt-reachable-rev ⊦ reachable(r, r0, h[r1, ce]) ∧ ce.nxt = h[r1].nxt ∧ r1 ∈ h → (reachable(r, r0, h) ↔ true) A User Theorem
reachable-trans-simp ⊦ reachable(r, r0, h) ∧ reachable(r0, r1, h) → (reachable(r, r1, h) ↔ true) A User Theorem
reach-n-unique ⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n, r, r1) → r0 = r1 A User Theorem
modnotreachable-reachable ⊦ reachable(r, r0, h) ∧ ¬ reachable(r, r1, h) → (reachable(r, r0, h[r1, ce]) ↔ true) A User Theorem
fromnext-reachable ⊦ reachable(r, r0, h) ∧ r ≠ r0 → (reachable(h[r].nxt, r0, h) ↔ true) A User Theorem
reach-reachnext ⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h)) A User Theorem
linearity-pathpath(r ' + x, h), path(r ' + y, h) ⊦ x = y ∨ (∃ r0, y0. x = y + r0 ' + y0) ∨ (∃ r0, x0. y = x + r0 ' + x0) A User Theorem
add-preserves-reachable-rev⊦ h[r1].nxt = h[r2].nxt ∧ r0 ≠ r2 ∧ ce.nxt = r2 ∧ ¬ reachable(r, r0, h) ∧ ¬ reachable(r, r2, h) ∧ r2 ≠ null ∧ r2 ∈ h ∧ reachable(r, r1, h) → (reachable(r, r0, h[r1, ce]) ↔ false) A User Theorem
path-two ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ h[r].nxt = r0 An Axiom
path-cons ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ h[r].nxt = r0 ∧ path(r0 ' + x, h) An Axiom
k-path⊦ path(x, h) ↔ # x = 1 ∧ hd x ∈ h ∧ hd x ≠ null ∨ # x = 1 + 1 ∧ hd x ∈ h ∧ hd tl x ∈ h ∧ hd x ≠ null ∧ hd tl x ≠ null ∧ h[hd x].nxt = hd tl x ∨ # x ≥ 1 + 1 ∧ hd x ∈ h ∧ hd x ≠ null ∧ h[hd x].nxt = hd tl x ∧ path(tl x, h) A User Theorem
modified-stays-reachable-rev ⊦ r0 ∈ h ∧ reachable(r, r0, h[r0, ce]) → (reachable(r, r0, h) ↔ true) A User Theorem
path-last ⊦ path(r ' + x, h) → ((r ' + x).last ∈ h ↔ true) A User Theorem
reachable-n-rec-rev ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)) A User Theorem
reachable-n-rec2 ⊦ reachable-n(h, 2, r, r0) ↔ reachable-1(h, r, h[r].nxt) ∧ reachable-1(h, h[r].nxt, r0) A User Theorem
path-delnonmember ⊦ path(x, h) ∧ ¬ r ∈ x → path(x, h -- r) A User Theorem
reachable-notnullinH ⊦ reachable(r, r1, h) ∧ r1 ≠ null → (r1 ∈ h ↔ true) A User Theorem
k-reachable-def ⊦ reachable(r, r0, h) ↔ r ≠ null ∧ r ∈ h ∧ reachable*(h, r, r0) A User Theorem
null-not-start-of-path ⊦ ¬ path(null ' + x, h) A User Theorem
path-last-not-null ⊦ ¬ path(r ' + x + null ', h) A User Theorem
path-modify ⊦ ¬ r0 ∈ x → (path(x, h[r0, ce]) ↔ path(x, h)) A User Theorem
reachable-n-trans ⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n0, r0, r1) → (reachable-n(h, n + n0, r, r1) ↔ true) A User Theorem
path-prefix ⊦ path(r ' + x + y, h) → (path(r ' + x, h) ↔ true) A User Theorem
path-transpath(x, h) ∧ x.last = r ∧ path(r ' + y, h) ⊦ path(x + y, h) A User Theorem
reachable-star-def ⊦ reachable*(h, r, r0) ↔ (∃ n. reachable-n(h, n, r, r0)) An Axiom
frommodified ⊦ r ≠ null ∧ ce.nxt ≠ r → (reachable(r, r0, h[r, ce]) ↔ r = r0 ∨ ce.nxt ≠ null ∧ ce.nxt ∈ h ∧ reachable(ce.nxt, r0, h[r, ce])) A User Theorem
removed-stays-reachable⊦ reachable(r, r0, h) ∧ h[r0].nxt ≠ null ∧ h[r0].nxt ∈ h ∧ ce.nxt = h[h[r0].nxt].nxt → ( reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))) A User Theorem
modnotreachable-reachable-rev-weak ⊦ ¬ reachable(r, r0, H) ∧ ¬ reachable(r, r1, H) ∧ r0 ≠ null ∧ r0 ∈ H → (reachable(r, r1, H[r0, ce]) ↔ false) A User Theorem
reachable-1-def ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0 An Axiom
rem-stays-reachable-aux2reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h ⊦ (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) A User Theorem
path-new-irrelevant-strong ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)) A User Theorem
rem-reachable⊦ reachable(r, r0, h) ∧ ce.nxt = h[h[r1].nxt].nxt ∧ r0 ≠ h[r1].nxt ∧ h[r1].nxt ∈ h ∧ h[r1].nxt ≠ null ∧ r1 ≠ null ∧ r1 ∈ h → (reachable(r, r0, h[r1, ce]) ↔ true) A User Theorem
path-empty ⊦ ¬ path([], h) An Axiom
reach-n-split-lereachable-n(h, n, r, r0), m ≤ n ⊦ ∃ r1. reachable-n(h, m, r, r1) ∧ reachable-n(h, n - m, r1, r0) A User Theorem
path-first-in-H ⊦ path(r ' + x, h) → (r ∈ h ↔ true) A User Theorem
endnotinH-notreachable ⊦ ¬ r0 ∈ h → (reachable(r, r0, h) ↔ false) A User Theorem
path-last-nxt ⊦ path(r ' + x + r0 ', h) → (h[(r ' + x).last].nxt = r0 ↔ true) A User Theorem
reach-n-path-n ⊦ n ≠ 0 → (reachable-n(h, n, r, r0) ↔ (∃ x. path(x, h) ∧ hd x = r ∧ x.last = r0 ∧ # x = n + 1)) A User Theorem
startnotinH-notreachable ⊦ ¬ r ∈ h → (reachable(r, r0, h) ↔ false) A User Theorem
reachable-trans ⊦ reachable(r, r0, h) ∧ reachable(r0, r1, h) → reachable(r, r1, h) A User Theorem
modnotreachable-reachable-weak ⊦ ¬ reachable(r, r0, H) ∧ reachable(r, r1, H) ∧ r0 ≠ null ∧ r0 ∈ H → (reachable(r, r1, H[r0, ce]) ↔ true) A User Theorem
reachable-n-rec-strong2 ⊦ reachable-n(h, n + 2, r, r0) ↔ reachable-1(h, r, h[r].nxt) ∧ reachable-n(h, n + 1, h[r].nxt, r0) A User Theorem
path-one ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null An Axiom
null-not-reachable ⊦ ¬ reachable(r, null, h) A User Theorem
path-butlast ⊦ path(r ' + x + r0 ', h) → (path(r ' + x, h) ↔ true) A User Theorem
reachable-n-rec-strong ⊦ reachable-n(h, n + 1, r, r0) ↔ reachable-1(h, r, h[r].nxt) ∧ reachable-n(h, n, h[r].nxt, r0) A User Theorem
notnull-reachable ⊦ ¬ reachable(null, r1, h) A User Theorem
id-reachable ⊦ h[r].nxt = null → (reachable(r, r0, h) ↔ r ∈ h ∧ r ≠ null ∧ r = r0) A User Theorem
add-preserves-reachable⊦ h[r1].nxt = h[r2].nxt ∧ ce.nxt = r2 ∧ reachable(r, r0, h) ∧ ¬ reachable(r, r2, h) ∧ r2 ≠ null ∧ r2 ∈ h ∧ reachable(r, r1, h) → reachable(r, r0, h[r1, ce]) A User Theorem
reachable-addnew ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true) A User Theorem
changenonnxt-reachable ⊦ reachable(r, r0, h) ∧ ce.nxt = h[r1].nxt → (reachable(r, r0, h[r1, ce]) ↔ true) A User Theorem
reachable-split-first ⊦ r ≠ r0 → (reachable(r, r0, h) ↔ r ≠ null ∧ r ∈ h ∧ (∃ r1. h[r].nxt = r1 ∧ r1 ∈ h ∧ r1 ≠ null ∧ reachable(r1, r0, h))) A User Theorem
reachnext ⊦ reachable(r0, h[r0].nxt, h) ↔ r0 ≠ null ∧ r0 ∈ h ∧ h[r0].nxt ∈ h ∧ h[r0].nxt ≠ null A User Theorem
path-postfix ⊦ path(x + r ' + y, h) → (path(r ' + y, h) ↔ true) A User Theorem
reachable-split-last ⊦ r ≠ r0 → (reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null)) A User Theorem
path-modify-strong ⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h[r0, ce]) ↔ path(x + r1 ', h)) A User Theorem
self-reachable ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h A User Theorem
reachable-nodups-def ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) A User Theorem
rem-stays-reachable-auxreachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt, ce.nxt = h[h[r0].nxt].nxt ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) A User Theorem
reachable-n-rec ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-1(h, r, r1) ∧ reachable-n(h, n, r1, r0)) An Axiom
reachable-n-1 ⊦ reachable-n(h, 1, r, r0) ↔ reachable-1(h, r, r0) A User Theorem
reachable-addnew-rev⊦ ¬ r2 ∈ h ∧ r ∈ h ∧ ¬ reachable(r, r1, h) → (reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ r2 ≠ null ∧ (r1 = r2 ∨ reachable(ce.nxt, r1, h)))) A User Theorem