| ⊦ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)) ∧ FLITLInv(gs, lsf(t), pcf(t)) → ⟪pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)) ∧ FLITLInv(gs, lsf(t), pcf(t))) |
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)) ∧ FLITLInv(gs, lsf(t), pcf(t)))
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters)) ∧ FLITLInv(gs, lsf(t), pcf(t))) |
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t)))
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pq := gs.pq, fctr := gs.fctr, bq := gs.bq, fwriters := gs.fwriters, freaders := gs.freaders, rfo := gs.rfo; CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t))) |
bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t)))
| bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf); gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t))) |
bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []; gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t)))
Used simplifier rules: decl: CRASH(; pq, fctr, bq, fwriters, freaders, rfo, pcf) {pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. [] };
| bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪pcf := λ t. (pcf(t) = idle ⊃ idle;crashed), pq := λ l. [], fctr := λ l. 0, freaders := λ l. ∅, fwriters := λ l. ∅, bq := λ t. [], rfo := λ t. []; gs := (((((gs.pq:= pq).fctr:= fctr).bq:= bq).fwriters:= fwriters).freaders:= freaders).rfo:= rfo⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), pcf(t))) |
bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪gs := (((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), (pcf(t) = idle ⊃ idle;crashed)))
| bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ⟪gs := (((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])⟫ ( ctrok(gs.fctr, gs.fwriters) ∧ writersOk(gs.bq, gs.pq, gs.fwriters) ∧ pendingOk(gs.bq, gs.pq) ∧ SFTrailing(gs.bq) ∧ readFOsOk(gs.rfo, gs.fwriters) ∧ FLITLInv(gs, lsf(t), (pcf(t) = idle ⊃ idle;crashed))) |
bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ctrok (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fctr, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ writersOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ pendingOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq) ∧ SFTrailing(((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq) ∧ readFOsOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed))
| bq = gs.bq, fctr = gs.fctr, freaders = gs.freaders, fwriters = gs.fwriters, pq = gs.pq, rfo = gs.rfo, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ctrok (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fctr, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ writersOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ pendingOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq) ∧ SFTrailing(((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq) ∧ readFOsOk (((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters) ∧ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) |
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ctrok(λ l. 0, λ l. ∅) ∧ writersOk(λ t. [], λ l. [], λ l. ∅) ∧ pendingOk(λ t. [], λ l. []) ∧ SFTrailing(λ t. []) ∧ readFOsOk(λ t. [], λ l. ∅) ∧ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed))
Used simplifier rules: ⊦ (gs.fwriters:= fwriters).fwriters = fwriters; (s) ⊦ (gs.freaders:= fwriters0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.fwriters:= fwriters).bq = gs.bq; (s) ⊦ (gs.freaders:= fwriters0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.fctr:= fctr).pq = gs.pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.fwriters:= fwriters).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s) ⊦ (gs.fctr:= fctr).fctr = fctr; (s) ⊦ (gs.bq:= bq).fctr = gs.fctr; (s) ⊦ (gs.fwriters:= fwriters).fctr = gs.fctr; (s) ⊦ (gs.freaders:= fwriters0).fctr = gs.fctr; (s) ⊦ (gs.rfo:= bq0).fctr = gs.fctr; (s)
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters) ⊦ ctrok(λ l. 0, λ l. ∅) ∧ writersOk(λ t. [], λ l. [], λ l. ∅) ∧ pendingOk(λ t. [], λ l. []) ∧ SFTrailing(λ t. []) ∧ readFOsOk(λ t. [], λ l. ∅) ∧ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) |
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ctrok(λ l. 0, λ l. ∅) ⊦
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ writersOk(λ t. [], λ l. [], λ l. ∅) ⊦
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ pendingOk(λ t. [], λ l. []) ⊦
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ SFTrailing(λ t. []) ⊦
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ readFOsOk(λ t. [], λ l. ∅) ⊦
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) ⊦
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ctrok(λ l. 0, λ l. ∅) ⊦ |
⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l))
Used simplifier rules: ⊦ # ∅ = 0; (s) Used terms: λ l. 0, λ l. ∅
| ⊦ ctrok(ctr, writers) ↔ (∀ l. # writers(l) = ctr(l)) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ writersOk(λ t. [], λ l. [], λ l. ∅) ⊦ |
⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = []))
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) ⊦ [] |W = []; (s) ⊦ [] | t = []; (s) ⊦ [] |WL l = []; (s) Used terms: λ t. [], λ l. [], λ l. ∅
| ⊦ writersOk(bq, p, writers) ↔ (∀ l, t. (t ∈ writers(l) → (∀ l0. l0 ≠ l → ¬ t ∈ writers(l0))) ∧ (¬ t ∈ writers(l) → p(l) |W | t = [] ∧ bq(t) |WL l = [])) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ pendingOk(λ t. [], λ l. []) ⊦ |
⊦ pendingOk(bq, p) ↔ (∀ l, t. #(p(l) |W | t) + #(bq(t) |WL l) ≤ 1)
Used simplifier rules: ⊦ [] |W = []; (s) ⊦ [] | t = []; (s) ⊦ [] |WL l = []; (s) ⊦ # [] = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ t. [], λ l. []
| ⊦ pendingOk(bq, p) ↔ (∀ l, t. #(p(l) |W | t) + #(bq(t) |WL l) ≤ 1) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ SFTrailing(λ t. []) ⊦ |
⊦ SFTrailing(bq) ↔ (∀ t. bq(t) = [] ∨ ¬ SF ∈ bq(t).butlast)
Used terms: λ t. []
| ⊦ SFTrailing(bq) ↔ (∀ t. bq(t) = [] ∨ ¬ SF ∈ bq(t).butlast) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ readFOsOk(λ t. [], λ l. ∅) ⊦ |
⊦ readFOsOk(rfo, writers) ↔ rfo.FOs? ∧ (∀ t, l. t ∈ writers(l) → rfo(t) = [])
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ (λ t. []).FOs? ∨ (∃ t, l. ¬(t ∈ ∅ → [] = [])) ⊦
Used terms: λ t. [], λ l. ∅
| ⊦ readFOsOk(rfo, writers) ↔ rfo.FOs? ∧ (∀ t, l. t ∈ writers(l) → rfo(t) = []) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ (λ t. []).FOs? ∨ (∃ t, l. ¬(t ∈ ∅ → [] = [])) ⊦ |
FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ (λ t. []).FOs? ⊦
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ (λ t. []).FOs? ⊦ |
⊦ rfo.FOs? ↔ (∀ t. rfo(t).forall(.FO?))
Used simplifier rules: ⊦ [].forall(p); (s) Used terms: λ t. []
| ⊦ rfo.FOs? ↔ (∀ t. rfo(t).forall(.FO?)) |
| FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), (pcf(t) = idle ⊃ idle;crashed)) ⊦ |
pcf(t) = idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), idle) ⊦
pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), crashed) ⊦
| pcf(t) = idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), idle) ⊦ |
pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), idle) ⊦
| pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), idle) ⊦ |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = W1 ∨ idle = W2 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = W3 ∨ idle = W7 → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = W5 ∨ idle = W6 → FOFollowsW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t), ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq(lsf(t).loc), lsf(t).loc)) ∨ ¬ ( idle = W1 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W7 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = []) ∨ ¬ (idle = W3 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = []) ∨ ¬ ( idle = W4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ') ∨ ¬ ( idle = W5 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ') ∨ ¬ ( idle = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ') ∨ ¬ ( idle = W4 ∨ idle = W5 ∨ idle = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ≠ [] ∧ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head.W? → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val)) ∨ ¬ ( idle = W1 ∨ idle = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = W2 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) + SF ' = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = R1 ∨ idle = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = R2 ∨ idle = R3 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = idle ∨ idle = crashed → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ⊦
Used terms: ( ( (((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])) .fwriters:= (λ l. ∅)) .freaders:= (λ l. ∅)) .rfo:= (λ t. []), lsf(t), idle
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = W1 ∨ idle = W2 ∨ idle = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = W1 ∨ idle = W2 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = W3 ∨ idle = W7 → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = W5 ∨ idle = W6 → FOFollowsW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t), ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq(lsf(t).loc), lsf(t).loc)) ∨ ¬ ( idle = W1 ∨ idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W7 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = W3 ∨ idle = W4 ∨ idle = W5 ∨ idle = W6 ∨ idle = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = []) ∨ ¬ (idle = W3 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = []) ∨ ¬ ( idle = W4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ') ∨ ¬ ( idle = W5 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ') ∨ ¬ ( idle = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ') ∨ ¬ ( idle = W4 ∨ idle = W5 ∨ idle = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ≠ [] ∧ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head.W? → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val)) ∨ ¬ ( idle = W1 ∨ idle = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = W2 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) + SF ' = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = R1 ∨ idle = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = R2 ∨ idle = R3 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = R1 ∨ idle = R2 ∨ idle = R3 ∨ idle = R4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = idle ∨ idle = crashed → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( idle = idle ∨ idle = ready ∨ idle = crashed → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ⊦ |
pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ t. [], λ l. []) ⊦
Used simplifier rules: ⊦ noPending(t, bq, pq) → noPendingW(t, bq, pq); (ss) ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.fwriters:= fwriters).bq = gs.bq; (s) ⊦ (gs.freaders:= fwriters0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ ¬ a ∈ []; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.fctr:= fctr).pq = gs.pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.fwriters:= fwriters).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).freaders = fwriters0; (s) ⊦ (gs.rfo:= bq0).freaders = gs.freaders; (s) ⊦ (gs.fwriters:= fwriters).fwriters = fwriters; (s) ⊦ (gs.freaders:= fwriters0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s) ⊦ R4 ≠ idle; (s) ⊦ R3 ≠ idle; (s) ⊦ R2 ≠ idle; (s) ⊦ R1 ≠ idle; (s) ⊦ W2 ≠ idle; (s) ⊦ W7 ≠ idle; (s) ⊦ W1 ≠ idle; (s) ⊦ W6 ≠ idle; (s) ⊦ W5 ≠ idle; (s) ⊦ W4 ≠ idle; (s) ⊦ W3 ≠ idle; (s)
| pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ t. [], λ l. []) ⊦ |
⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = [])
pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = [] ∧ [] = []) ⊦
Used terms: lsf(t).t, λ t. [], λ l. []
| ⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = []) |
| pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = [] ∧ [] = []) ⊦ |
pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ⊦
Used simplifier rules: ⊦ [] | t = []; (s)
| pcf(t) = idle, FLITLInv(gs, lsf(t), idle), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ⊦ |
⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l))
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: lsf(t).t, λ l. ∅
| ⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l)) |
| pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ FLITLInv((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. []), lsf(t), crashed) ⊦ |
⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t))
pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ( crashed = W1 ∨ crashed = W2 ∨ crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 ∨ crashed = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = W1 ∨ crashed = W2 ∨ crashed = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = W1 ∨ crashed = W2 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = W3 ∨ crashed = W7 → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = W5 ∨ crashed = W6 → FOFollowsW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t), ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq(lsf(t).loc), lsf(t).loc)) ∨ ¬ ( crashed = W1 ∨ crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W7 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 ∨ crashed = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = []) ∨ ¬ ( crashed = W3 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = []) ∨ ¬ ( crashed = W4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ') ∨ ¬ ( crashed = W5 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ') ∨ ¬ ( crashed = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ') ∨ ¬ ( crashed = W4 ∨ crashed = W5 ∨ crashed = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ≠ [] ∧ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head.W? → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val)) ∨ ¬ ( crashed = W1 ∨ crashed = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = W2 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) + SF ' = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = R1 ∨ crashed = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = R2 ∨ crashed = R3 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = idle ∨ crashed = crashed → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ⊦
Used terms: ( ( (((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])) .fwriters:= (λ l. ∅)) .freaders:= (λ l. ∅)) .rfo:= (λ t. []), lsf(t), crashed
| ⊦ FLITLInv(gs, ls, pc) ↔ (pc = W1 ∨ pc = W2 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → notMember(ls.t, gs.freaders)) ∧ (pc = W1 ∨ pc = W2 ∨ pc = W7 → notMember(ls.t, gs.fwriters)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 → oneMember(ls.t, ls.loc, gs.fwriters)) ∧ (pc = W1 ∨ pc = W2 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = W3 ∨ pc = W7 → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = W5 ∨ pc = W6 → FOFollowsW(ls.t, gs.bq(ls.t), gs.pq(ls.loc), ls.loc)) ∧ (pc = W1 ∨ pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W7 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = W3 ∨ pc = W4 ∨ pc = W5 ∨ pc = W6 ∨ pc = W7 → gs.rfo(ls.t) = []) ∧ (pc = W3 → gs.bq(ls.t) = []) ∧ (pc = W4 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ') ∧ (pc = W5 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = FO(ls.loc) ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ') ∧ (pc = W6 → gs.bq(ls.t) = [] ∨ gs.bq(ls.t) = SF ' ∨ gs.bq(ls.t) = FO(ls.loc) ' + SF ' ∨ gs.bq(ls.t) = W(ls.loc, ls.val) ' + FO(ls.loc) ' + SF ') ∧ (pc = W4 ∨ pc = W5 ∨ pc = W6 → gs.bq(ls.t) ≠ [] ∧ gs.bq(ls.t).head.W? → gs.bq(ls.t).head = W(ls.loc, ls.val)) ∧ (pc = W1 ∨ pc = W7 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = W2 → gs.rfo(ls.t) = gs.bq(ls.t) ∨ gs.rfo(ls.t) + SF ' = gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → notMember(ls.t, gs.fwriters)) ∧ (pc = R1 ∨ pc = R4 → notMember(ls.t, gs.freaders)) ∧ (pc = R2 ∨ pc = R3 → oneMember(ls.t, ls.loc, gs.freaders)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = R1 ∨ pc = R2 ∨ pc = R3 ∨ pc = R4 → gs.rfo(ls.t) = gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.fwriters)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → notMember(ls.t, gs.freaders)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → noPendingW(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = crashed → noPending(ls.t, gs.bq, gs.pq)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → ¬ SF ∈ gs.bq(ls.t)) ∧ (pc = idle ∨ pc = ready ∨ pc = crashed → gs.rfo(ls.t) = gs.bq(ls.t)) |
| pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ ( crashed = W1 ∨ crashed = W2 ∨ crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 ∨ crashed = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = W1 ∨ crashed = W2 ∨ crashed = W7 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = W1 ∨ crashed = W2 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = W3 ∨ crashed = W7 → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = W5 ∨ crashed = W6 → FOFollowsW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t), ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq(lsf(t).loc), lsf(t).loc)) ∨ ¬ ( crashed = W1 ∨ crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W7 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = W3 ∨ crashed = W4 ∨ crashed = W5 ∨ crashed = W6 ∨ crashed = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = []) ∨ ¬ ( crashed = W3 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = []) ∨ ¬ ( crashed = W4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ') ∨ ¬ ( crashed = W5 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ') ∨ ¬ ( crashed = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = [] ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = FO(lsf(t).loc) ' + SF ' ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) = W(lsf(t).loc, lsf(t).val) ' + FO(lsf(t).loc) ' + SF ') ∨ ¬ ( crashed = W4 ∨ crashed = W5 ∨ crashed = W6 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ≠ [] ∧ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head.W? → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t).head = W(lsf(t).loc, lsf(t).val)) ∨ ¬ ( crashed = W1 ∨ crashed = W7 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = W2 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t) ∨ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) + SF ' = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = R1 ∨ crashed = R4 → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = R2 ∨ crashed = R3 → oneMember (lsf(t).t, lsf(t).loc, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = R1 ∨ crashed = R2 ∨ crashed = R3 ∨ crashed = R4 → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).fwriters)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → notMember (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).freaders)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → noPendingW (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = idle ∨ crashed = crashed → noPending (lsf(t).t, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq, ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).pq)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → ¬ SF ∈ ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ∨ ¬ ( crashed = idle ∨ crashed = ready ∨ crashed = crashed → ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).rfo(lsf(t).t) = ((((((gs.pq:= (λ l. [])).fctr:= (λ l. 0)).bq:= (λ t. [])).fwriters:= (λ l. ∅)).freaders:= (λ l. ∅)).rfo:= (λ t. [])).bq(lsf(t).t)) ⊦ |
pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ t. [], λ l. []) ⊦
Used simplifier rules: ⊦ noPending(t, bq, pq) → noPendingW(t, bq, pq); (ss) ⊦ (gs.bq:= bq).bq = bq; (s) ⊦ (gs.fwriters:= fwriters).bq = gs.bq; (s) ⊦ (gs.freaders:= fwriters0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).bq = gs.bq; (s) ⊦ (gs.rfo:= bq0).rfo = bq0; (s) ⊦ crashed ≠ ready; (s) ⊦ crashed ≠ idle; (s) ⊦ ¬ a ∈ []; (s) ⊦ (gs.pq:= pq).pq = pq; (s) ⊦ (gs.fctr:= fctr).pq = gs.pq; (s) ⊦ (gs.bq:= bq).pq = gs.pq; (s) ⊦ (gs.fwriters:= fwriters).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).pq = gs.pq; (s) ⊦ (gs.rfo:= bq0).pq = gs.pq; (s) ⊦ (gs.freaders:= fwriters0).freaders = fwriters0; (s) ⊦ (gs.rfo:= bq0).freaders = gs.freaders; (s) ⊦ (gs.fwriters:= fwriters).fwriters = fwriters; (s) ⊦ (gs.freaders:= fwriters0).fwriters = gs.fwriters; (s) ⊦ (gs.rfo:= bq0).fwriters = gs.fwriters; (s) ⊦ R4 ≠ crashed; (s) ⊦ R3 ≠ crashed; (s) ⊦ R2 ≠ crashed; (s) ⊦ R1 ≠ crashed; (s) ⊦ W2 ≠ crashed; (s) ⊦ W7 ≠ crashed; (s) ⊦ W1 ≠ crashed; (s) ⊦ W6 ≠ crashed; (s) ⊦ W5 ≠ crashed; (s) ⊦ W4 ≠ crashed; (s) ⊦ W3 ≠ crashed; (s)
| pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬ noPending(lsf(t).t, λ t. [], λ l. []) ⊦ |
⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = [])
pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = [] ∧ [] = []) ⊦
Used terms: lsf(t).t, λ t. [], λ l. []
| ⊦ noPending(t, bq, p) ↔ (∀ l. p(l) | t = [] ∧ bq(t) = []) |
| pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ∨ ¬(∀ l. [] | lsf(t).t = [] ∧ [] = []) ⊦ |
pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ⊦
Used simplifier rules: ⊦ [] | t = []; (s)
| pcf(t) ≠ idle, FLITLInv(gs, lsf(t), pcf(t)), SFTrailing(gs.bq), ctrok(gs.fctr, gs.fwriters), pendingOk(gs.bq, gs.pq), readFOsOk(gs.rfo, gs.fwriters), writersOk(gs.bq, gs.pq, gs.fwriters), ¬ notMember(lsf(t).t, λ l. ∅) ⊦ |
⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l))
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: lsf(t).t, λ l. ∅
| ⊦ notMember(t, tsf) ↔ (∀ l. ¬ t ∈ tsf(l)) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.