tAa=agetV2V3c0Ia<V3V0Aa<=c0V3FAavalidV2Lafenwick'mkV1V0Iia=alengthV1V4Aa=aV1V5c0Ia<V5V4Aa<=c0V5FLa-a*c2V0c1a=alengthV1c0Aa=aV1V6c0Ia<V6c0Aa<=c0V6Fa=V0c0FAia>=a-a*c2V0c1c0a>=c0c0a=V0c0Ia>=V0c0F
VC for make
a<=c0al
a<alaleavesaf
avalidaf
Na=c2c0
precondition
a<a+adivalengthatafc2alalengthatafAa<=c0a+adivalengthatafc2al
index in array bounds
a=alengthataf1alengthataf
a=af1afenwick'mkataf1aleavesaf
a=aeltsataf1asetaeltsatafa+adivalengthatafc2ala+aatafa+adivalengthatafc2alax
a=ataf1aatafa+adivalengthatafc2ala+aatafa+adivalengthatafc2alax
a<a+adivalengthatafc2alalengthataf1Aa<=c0a+adivalengthatafc2al
loop invariant init
a<=c0ai
a<aia-aleavesaf1c1
a=aataf1aia-a+aataf1a+a*c2aic1aataf1a+a*c2aic2ic0axa<=a+adivalengthatafc2ala+a*c2aic2Aa<=a+a*c2aic1a+adivalengthatafc2al
a=aataf1V0a-a+aataf1a+a*c2V0c1aataf1a+a*c2V0c2ic0axa<=a+adivalengthatafc2ala+a*c2V0c2Aa<=a+a*c2V0c1a+adivalengthatafc2alIa<V0a-aleavesaf1c1Aa<=c0V0F
a<=a-aleavesaf1c1ai
a<aialengthataf1
t
a=af2afenwick'mkataf2aleavesaf1
a=alengthataf2alengthataf1
a<=c0alc
a<alcalengthataf2
a=aataf2V0a-a+aataf2a+a*c2V0c1aataf2a+a*c2V0c2ic0axa<=alca+a*c2V0c2Aa<=a+a*c2V0c1alcIa<V0a-aleavesaf2c1Aa<=c0V0F
a=aataf2V1aataf1V1Ia<V1alengthataf2Aa<=a-aleavesaf2c1V1F
Na=alcc0
a=alc1adiva-alcc1c2
a<alc1alengthataf2Aa<=c0alc1
a=alengthataf3alengthataf2
a=af3afenwick'mkataf3aleavesaf2
a=aeltsataf3asetaeltsataf2alc1a+aataf2alc1ax
a=ataf3aataf2alc1a+aataf2alc1ax
a<alc1alcAa<=c0alc
loop variant decrease
a<alc1alengthataf3Aa<=c0alc1
loop invariant preservation
a<aia-aleavesaf3c1
a=aataf3aia-a+aataf3a+a*c2aic1aataf3a+a*c2aic2ic0axa<=alc1a+a*c2aic2Aa<=a+a*c2aic1alc1
a=aataf3V2a-a+aataf3a+a*c2V2c1aataf3a+a*c2V2c2ic0axa<=alc1a+a*c2V2c2Aa<=a+a*c2V2c1alc1Ia<V2a-aleavesaf3c1Aa<=c0V2F
a<=a-aleavesaf3c1ai
a<aialengthataf3
a=aataf3aiaataf1ai
NNa=alcc0
avalidaf2
postcondition
a<aialeavesaf2
Na=aial
a=agetaf2aiagetafai
a=agetaf2V2agetafV2INa=V2alAa<V2aleavesaf2Aa<=c0V2F
a=agetaf2ala+agetafalax
ia=agetV11V1a+agetV0V1V2Aa=agetV11V12agetV0V12INa=V12V1Aa<V12aleavesV11Aa<=c0V12FAavalidV11a=aatV17V19aatV8V19Ia<V19alengthatV17Aa<=a-aleavesV17c1V19FAa=aatV17V20a-a+aatV17a+a*c2V20c1aatV17a+a*c2V20c2ic0V2a<=V13a+a*c2V20c2Aa<=a+a*c2V20c1V13Ia<V20a-aleavesV17c1Aa<=c0V20FAa<V13alengthatV17Aa<=c0V13Aa<V13V10Aa<=c0V10Ia=V18aV16V13V15Aa=aeltsV18asetaeltsV16V13V15Ia=alengthatV17alengthatV11Aa=V17afenwick'mkatV17aleavesV11Ia=alengthatV17alengthV16LatV17FAa<V13alengthV16Aa<=c0V13LatV11La+aV14V13V2Aa<V13alengthV14Aa<=c0V13LatV11Ia=V13adiva-V10c1c2FANa=c2c0Na=V10c0Ia=aatV11V21aatV8V21Ia<V21alengthatV11Aa<=a-aleavesV11c1V21FAa=aatV11V22a-a+aatV11a+a*c2V22c1aatV11a+a*c2V22c2ic0V2a<=V10a+a*c2V22c2Aa<=a+a*c2V22c1V10Ia<V22a-aleavesV11c1Aa<=c0V22FAa<V10alengthatV11Aa<=c0V10Ia=alengthatV11alengthatV8Aa=V11afenwick'mkatV11aleavesV8FAtIa<V23alengthatV8Aa<=a-aleavesV8c1V23FAa=aatV8V24a-a+aatV8a+a*c2V24c1aatV8a+a*c2V24c2ic0V2a<=a+adivalengthatV0c2V1a+a*c2V24c2Aa<=a+a*c2V24c1a+adivalengthatV0c2V1Ia<V24a-aleavesV8c1Aa<=c0V24FAa<a+a
VC for add
a=asumV3V0V1asumV4a+V0V2a+V1V2Ia=a@V3V5a@V4a+V5V2Ia<V5V1Aa<=V0V5FFIa=asumV7V6V1asumV8a+V6V2a+V1V2Ia=a@V7V9a@V8a+V9V2Ia<V9V1Aa<=V6V9FFLa+V0c1ONa<V0V1Aa<=V10V1Aa<a-V1V10a-V1V0Aa<=c0a-V1V0La+V0c1Ia<V0V1Ia<=V0V1F
VC for sum_dec
a=asuma@ea=a@a@V3V4V5aV4V5FatV0V1V2asuma@ea=a@a@V6V7V8aV7V8FatV0a+a*c2V1c1a+a*c2V2c1Ia=asuma@ea=a@a@V10V11V12aV11V12FatV0V9V2asuma@ea=a@a@V13V14V15aV14V15FatV0a+a*c2V9c1a+a*c2V2c1La+V1c1ONa<V1V2AavalidV0Aa<a*c2V2alengthatV0Aa<=V16V2Aa<=c0V16Aa<a-V2V16a-V2V1Aa<=c0a-V2V1La+V1c1Ia<V1V2IavalidV0Aa<a*c2V2alengthatV0Aa<=V1V2Aa<=c0V1F
VC for fen_compact
a<=c0aa
a<=aaab
a<=abaleavesaf
a=asumV0aaabasumV1a+aaalva+abalvIa=a@V0V2a@V1a+V2alvIa<V2abAa<=aaV2FF
a<=a+abalvalengthatafAa<=a+aaalva+abalvAa<=c0a+aaalv
a=a+c0asuma@ea=a@a@V3V4V5aV4V5Fatafa+aaalva+abalvasuma@ea=a@a@V6V7V8agetV7V8Fafaaab
a=a+c0asuma@ea=a@a@V3V4V5aV4V5Fatafa+aaalva+abalvargetafaaab
a<=c0ara
a<=araarb
a<=arbalengthataf
a=a+aaccasuma@ea=a@a@V3V4V5aV4V5Fatafaraarbargetafaaab
Na=araarb
a=amodarac2c0
a<araalengthatafAa<=c0ara
a=aacc1a+aaccaatafara
a=ara1adivarac2
a=arb1a-arbc1
Na=amodarb1c2c0
a<arb1alengthatafAa<=c0arb1
a=aacc2a+aacc1aatafarb1
a=arb2adivarb1c2
avalidafAa<a*c2arb2alengthatafAa<=ara1arb2Aa<=c0ara1
a=asuma@ea=a@a@V6V7V8aV7V8Fatafara1arb2asuma@ea=a@a@V9V10V11aV10V11Fatafa+a*c2ara1c1a+a*c2arb2c1
a<a-arb2ara1a-arbaraAa<=c0a-arbara
a<=arb2alengthatafAa<=ara1arb2Aa<=c0ara1
a=a+aacc2asuma@ea=a@a@V12V13V14aV13V14Fatafara1arb2argetafaaab
NNa=amodarb1c2c0
a=a+aacc1asuma@ea=a@a@V12V13V14aV13V14Fatafara1arb2argetafaaab
Na=amodarac2c0
a=aacc1a+aaccaatafarb1
a=a+aaccasuma@ea=a@a@V12V13V14aV13V14Fatafara1arb2argetafaaab
NNa=araarb
a=aaccargetafaaab
ia=V4argetV0V1V2iia=a+V4asuma@ea=a@a@V10V11V12aV11V12FatV0V7V9argetV0V1V2Aa<=V9alengthatV0Aa<=V7V9Aa<=c0V7Aa<a-V9V7a-V5V6Aa<=c0a-V5V6Ia=asuma@ea=a@a@V13V14V15aV14V15FatV0V7V9asuma@ea=a@a@V16V17V18aV17V18FatV0a+a*c2V7c1a+a*c2V9c1AavalidV0Aa<a*c2V9alengthatV0Aa<=V7V9Aa<=c0V7Ia=V9adivV8c2FANa=c2c0a=a+V20asuma@ea=a@a@V22V23V24aV23V24FatV0V7V21argetV0V1V2Aa<=V21alengthatV0Aa<=V7V21Aa<=c0V7Aa<a-V21V7a-V5V6Aa<=c0a-V5V6Ia=asuma@ea=a@a@V25V26V27aV26V27FatV0V7V21asuma@ea=a@a@V28V29V30aV29V30FatV0a+a*c2V7c1a+a*c2V21c1AavalidV0Aa<a*c2V21alengthatV0Aa<=V7V21Aa<=c0V7Ia=V21adivV8c2FANa=c2c0Ia=V20a+V4aV19V8FAa<V8alengthV19Aa<=c0V8LatV0Na=amodV8c2c0ANa=c2c0Ia=V8a-V5c1FIa=V7adivV6c2FANa=c2c0ia=a+V32asuma@ea=a@a@V36V37V38aV37V38FatV0V33V35argetV0V1V2Aa<=V35alengthatV0Aa<=V33V35Aa<=c0V33Aa<a-V35V33a-V5V6Aa<=c0a-V5V6Ia=asuma@ea=a@a@V39V40V41aV40V41FatV0V33V35asuma@ea=a@a@V42V43V44aV43V44FatV0a+a*c2V33c1a+a*c2V35c1AavalidV0Aa<a*c2V35alengthatV0Aa<=V33V35Aa<=c0V33Ia=V35adivV34c2FANa=c2c0a=a+V46asuma@ea=a@a@V48V49V50aV49V50FatV0V33V
VC for query

071c51d595d34d80e303d00b6041010e 1H0
6df6af9b414cd7d85fa791f9aa0fecd6 54H53
adf8a95ba0d3e0b988b50d6cade86e08 6H5H4H3H2
0b0d90e3b4495e513c2a189da6de85f3 8H7H4H3H2
0b0d90e3b4495e513c2a189da6de85f3 8H7H4H3H2
e77c189ca659aabb7c2e852a64dad9d4 14H13H12H11H9H10H9H4H3H2
c15036ec7566f1775ef977b34288803a 14H17H16H15H13H12H11H9H10H9H4H3H2
a99cfcfef4ca854d14c8bfba192b7ef8 14H21H20H19H18H13H12H11H9H10H9H4H3H2
06652d584a9c327100ed5e579c735b8c 6H5H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
eee80183d140d76ae410ed9eb562cb19 8H30H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
eee80183d140d76ae410ed9eb562cb19 8H30H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
767472bf8cfa551d6b55d640f1d19ea6 36H35H34H33H31H32H31H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
6c1d0c35e9045bd37ca45bb6b37c4d61 38H37H34H33H31H32H31H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
2f17618fc93ab1337978b2b882cb9bd0 38H40H39H15H37H34H33H31H32H31H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
9f8d704f83003c87431ecfb198e9ca3a 38H44H43H42H41H37H34H33H31H32H31H29H28H27H26H25H24H23H22H12H11H9H10H9H4H3H2
223d6b947129b1dc80d22397f36be9b2 47H46H45H27H26H25H24H23H22H12H11H9H10H9H4H3H2
9f2dff09d438e06b4658fd3b5a911b9e 47H50H49H48H15H46H45H27H26H25H24H23H22H12H11H9H10H9H4H3H2
75864f2a2956cfef1fd497a71d602437 47H52H51H46H45H27H26H25H24H23H22H12H11H9H10H9H4H3H2
97e5ff10225d59c25942ab51114c39c3 56H55
8aa46dbad6ae498b55cd3fcd21b48cee 58H57
ec3cf8f882a23c8ac15c22a2a0c1d271 93H92
f6d13beb8fbaaded35e9ce6010fcc9d0 6H5H4H61H60H59
5a564346692d3beafe5f280dd5372189 6H60H4H61H60H59
2f5c2951e45f222acf93fb56846daa31 14H63H62H4H61H60H59
f867e6acf061f94de303b53dda27acfb 14H65H63H62H4H61H60H59
6d1f2b0f69e45059092d3dcc47e3e1b9 14H64H63H62H4H61H60H59
eec5f69e09419c66f6cd15dc86f706dd 6H5H70H69H68H67H66H62H4H61H60H59
2f3790880615cbf8b9dcc03f842b0c77 8H72H71H70H69H68H67H66H62H4H61H60H59
6b8324ebe3f759e9342e40632d39e9d6 6H5H73H71H70H69H68H67H66H62H4H61H60H59
b945c5d7ecd4324de8d2d51c21365f90 6H5H75H74H73H71H70H69H68H67H66H62H4H61H60H59
ba9ff475bca588ec0ca74fe0f919b810 8H77H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
ac579b6a61e8346c7cb26f32cfa2cd8d 6H5H78H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
5431e35f50376eae1371aa64a0d37dea 6H80H79H78H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
2f3ec93e937649462341fa6ddd7d4c03 36H82H81H79H78H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
cbe4f266b21229a0cc76b48f39653117 38H83H81H79H78H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
b17e2a77948f258330710208714dbe06 38H84H83H81H79H78H76H75H74H73H71H70H69H68H67H66H62H4H61H60H59
d413dd66b40cc7c64acae230040bacd0 6H5H85H75H74H73H71H70H69H68H67H66H62H4H61H60H59
6d24f2cc5cb67bd888871972ae4072d5 6H80H79H85H75H74H73H71H70H69H68H67H66H62H4H61H60H59
b478910393f99f89bfdbbcd66c143877 36H82H81H79H85H75H74H73H71H70H69H68H67H66H62H4H61H60H59
93e217f54104d43c4c506a06fea61ef2 38H83H81H79H85H75H74H73H71H70H69H68H67H66H62H4H61H60H59
85fad046924333389a71e2db2b2eb9a9 38H86H83H81H79H85H75H74H73H71H70H69H68H67H66H62H4H61H60H59
9841b1ad51a846b056296862c421f57e 6H5H87H70H69H68H67H66H62H4H61H60H59
e8ab109b5e9d40101b6564c61bf28ca5 6H5H75H74H87H70H69H68H67H66H62H4H61H60H59
c610e926164d049e315941a38a384ed6 8H77H76H75H74H87H70H69H68H67H66H62H4H61H60H59
810ab9b65d6b2dcdc4a0e4c538674474 6H5H88H76H75H74H87H70H69H68H67H66H62H4H61H60H59
fd7cab0a3ded8118c671ff9040debdcb 6H80H79H88H76H75H74H87H70H69H68H67H66H62H4H61H60H59
805693238d119598daa268aeea930ad1 36H82H81H79H88H76H75H74H87H70H69H68H67H66H62H4H61H60H59
6c0fe136c5f609cca474fc90d25d396f 38H83H81H79H88H76H75H74H87H70H69H68H67H66H62H4H61H60H59
6bd879bcd3a7423aa0ec06a20cc3eb59 38H86H83H81H79H88H76H75H74H87H70H69H68H67H66H62H4H61H60H59
a2b20d53c531336de4f3b3746db5ef61 6H5H85H75H74H87H70H69H68H67H66H62H4H61H60H59
3e89d8fe5aa1a40b7f3c7127c5844615 6H80H79H85H75H74H87H70H69H68H67H66H62H4H61H60H59
b13def9c44429cb1c3a8f1c19314d241 36H82H81H79H85H75H74H87H70H69H68H67H66H62H4H61H60H59
a2ffd6692bd73bbfc313dfcc88e08bd3 38H83H81H79H85H75H74H87H70H69H68H67H66H62H4H61H60H59
8cfab4812d319f3db75ee836ed4ff7c9 38H89H83H81H79H85H75H74H87H70H69H68H67H66H62H4H61H60H59
c51b402156ef6f85de732759314ff400 47H91H90H69H68H67H66H62H4H61H60H59
