| # str < # stringvar0, # stringvar < # stringvar0, r -- mkfs(stringvar .class, ty, fieldvar) ' ∈ rks, # str ≤ # stringvar, r0 -- mkfs(stringvar0 .class, ty0, fieldvar0) ' ∈ rks, ∀ rk0. rk0 ≠ r -- mkfs(stringvar .class, ty, fieldvar) ' ∧ rk0 ∈ rks ∧ is_fskey(rk0 .key) → # rk0 .key .fs .class .class < # str, ∀ rks0. # rks0 < # rks → (true → (∃ str. ∀ rk. rk ∈ rks0 ∧ is_fskey(rk .key) → ¬ # str ≤ # rk .key .fs .class .class)) ⊦ # rks = 0, rks = ∅, ∃ str. ∀ rk. rk ∈ rks ∧ is_fskey(rk .key) → ¬ # str ≤ # rk .key .fs .class .class |
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ stringvar .class = stringvar0 .class ↔ stringvar = stringvar0], [CSIMPSEQ : ⊦ (r -- sk) .key = sk], [CSIMPSEQ : ⊦ is_fskey(fs ')], [CSIMPSEQ : ⊦ fs ' .fs = fs], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .class = class], [CSIMPSEQ : ⊦ stringvar .class .class = stringvar], [CSIMPSEQ : ⊦ m < n → ¬ n < m], [CSIMPSEQ : ⊦ m < n → m ≤ n], [CSIMPSEQ : ⊦ ¬ n < n])], [EXTRATERMS : (r0 -- mkfs(stringvar0 .class, ty0, fieldvar0) ')]]