| dirs0[m0] = mkdir(m3, md1, # links(m0, dirs0), m5, entries0), afs-cons ((dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0)[ino0, mkdir(0, md, 1, 0, ∅)] [m0, mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ], files), afs-cons(dirs0, files), icache-cons(icache0, dirs0, files), synced(dirs0, icache0, pcache), m0 ∈ dirs0, asynced1 → synced(files, icache0, pcache), links(m0, dirs0) ≠ ∅ ∨ m0 = ROOT_INO ⊦ ino0 = 0, str ∈ entries0, ino0 ∈ files, ino0 ∈ dirs0, ∀ ino. ino ∈ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] → icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino ∧ (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .dirty ⊃ valid-file-inode (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode, (dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0)[ino0, mkdir(0, md, 1, 0, ∅)] [m0, mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ], files) ; valid-ino (ino, (dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0)[ino0, mkdir(0, md, 1, 0, ∅)] [m0, mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ], files) ∧ valid-inode (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode, (dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0)[ino0, mkdir(0, md, 1, 0, ∅)] [m0, mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ], files) ) |
dirs0[m0] = mkdir(m3, md1, # links(m0, dirs0), m5, entries0), afs-cons(dirs0, files), afs-cons ((dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0)[ino0, mkdir(0, md, 1, 0, ∅)] [m0, mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ], files), icache-cons(icache0, dirs0, files), synced(dirs0, icache0, pcache), ino ∈ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ], m0 ∈ dirs0, asynced1 → synced(files, icache0, pcache), links(m0, dirs0) ≠ ∅ ∨ m0 = ROOT_INO ⊦ ino0 = 0, ino0 ∈ dirs0, ino0 ∈ files, str ∈ entries0, icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino ∧ (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .dirty ⊃ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ∈ files ∧ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .nlink = files [icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] .nlink ∧ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .nsubdirs = 0 ∧ ¬ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .directory ; (ino = ino0 ∨ ino ∈ dirs0 ∨ ino ∈ files) ∧ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode = ( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino0 ∨ icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ∈ dirs0 ⊃ mkinode (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino, ( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = m0 ⊃ mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ;( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino0 ⊃ mkdir(0, md, 1, 0, ∅) ;(dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0 )[icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] ) ) .meta, true, ( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = m0 ⊃ mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ;( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino0 ⊃ mkdir(0, md, 1, 0, ∅) ;(dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0 )[icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] ) ) .nlink, ( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = m0 ⊃ mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ;( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino0 ⊃ mkdir(0, md, 1, 0, ∅) ;(dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0 )[icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] ) ) .nsubdirs, ( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = m0 ⊃ mkdir(m3 + 1, md2, # links(m0, dirs0), m5 + 1, entries0[str, ino0]) ;( icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino = ino0 ⊃ mkdir(0, md, 1, 0, ∅) ;(dirs0[m0, mkdir(m3 + 1, md1, # links(m0, dirs0), m5 + 1, entries0[str, ino0])] ++ ino0 )[icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] ) ) .size) ;mkinode (icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino, files [icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] .meta, false, files [icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] .nlink, 0, files [icache0[m0, mkientry(false, mkinode(m0, md2, true, # links(m0, dirs0), m5 + 1, m3 + 1))] [ino0, mkientry(false, mkinode(ino0, md, true, 1, 0, 0)) ] [ino ] .inode .ino ] .size) ) )
Used simplifier rules: ⊦ dirs[ino, ad][ino0] = (ino0 = ino ∧ ino ∈ dirs ⊃ ad;dirs[ino0]); (s)%⊦ getinode(ino, dirs, files) = (ino ∈ dirs ⊃ mkinode (ino, dirs[ino].meta, true, dirs[ino].nlink, dirs[ino].nsubdirs, dirs[ino].size) ;mkinode (ino, files[ino].meta, false, files[ino].nlink, 0, files[ino].size) ); (s)%⊦ valid-inode(inode, dirs, files) ↔ inode = getinode(inode.ino, dirs, files); (s)%ino ≠ 0, ¬ ino ∈ dirs ⊦ ino0 ∈ dirs ++ ino ↔ ino0 = ino ∨ ino0 ∈ dirs; (s)% ⊦ ino ∈ dirs[ino0, ad] ↔ ino ∈ dirs; (s)% ⊦ valid-ino(ino, dirs, files) ↔ ino ∈ dirs ∨ ino ∈ files; (s)% ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)%⊦ valid-file-inode(inode, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ inode.nlink = files[inode.ino].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory; (s)