asortedasnocV0V1Ia<=alastV0V1IasortedV0Ia>alengthV0c0F
empty_shape
asortedaV2c1Ia>=alengthV2c1IasortedV2F
asortedaV3c2Ia>=alengthV3c2IasortedV3F
a>alengthasc0
asortedas
a>a+alengthasalengthaemptyc0
loop invariant init
a=a+asumasasumaemptyasumas
asortedaempty
a>=alengthasc2
a>=alengthaemptyc1
a<=alastaemptya+aasc0aasc1
a<=alastaemptya+aasc0aasc1Ia>=alengthaemptyc1Ia>=alengthasc2
a>=alengthasc1
a>=alengthaemptyc2
a<=alastaemptya+aasc0aaemptyc0
a<=alastaemptya+aasc0aaemptyc0Ia>=alengthaemptyc2Ia>=alengthasc1
a<=alastaemptya+aaemptyc0aaemptyc1
a>a+alengthaxalengthayc0
a=a+asumaxasumayasumas
asortedax
asorteday
a<=alastaya+aaxc0aaxc1Ia>=alengthayc1Ia>=alengthaxc2
a<=alastaya+aaxc0aayc0Ia>=alengthayc2Ia>=alengthaxc1
a<=alastaya+aayc0aayc1Ia>=alengthayc2
a>=a+alengthaxalengthayc2
a=alengthayc0
a=alengthasnocaya+aaxc0aaxc1a+c1alengthay
a=aasnocaya+aaxc0aaxc1alengthaya+aaxc0aaxc1
a=aasnocaya+aaxc0aaxc1V4aayV4Ia<V4alengthayAa<=c0V4F
a=ay1asnocaya+aaxc0aaxc1
a<=c2alengthaxAa<=c0c2
precondition
a=ax1aaxc2
a<a+alengthax1alengthay1a+alengthaxalengthayAa<=c0a+alengthaxalengthay
loop variant decrease
a>a+alengthax1alengthay1c0
loop invariant preservation
a=a+asumax1asumay1asumas
asortedax1
asorteday1
a>=alengthax1c2
a>=alengthay1c1
a<=alastay1a+aax1c0aax1c1
a<=alastay1a+aax1c0aax1c1Ia>=alengthay1c1Ia>=alengthax1c2
a>=alengthax1c1
a>=alengthay1c2
a<=alastay1a+aax1c0aay1c0
a<=alastay1a+aax1c0aay1c0Ia>=alengthay1c2Ia>=alengthax1c1
a<=alastay1a+aay1c0aay1c1
Na=alengthayc0
a=alengthaxc0
a<=c2alengthayAa<=c0c2
a=alengthasnocaayc2a+aayc0aayc1a+c1alengthaayc2
a=aasnocaayc2a+aayc0aayc1alengthaayc2a+aayc0aayc1
a=aasnocaayc2a+aayc0aayc1V4aaayc2V4Ia<V4alengthaayc2Aa<=c0V4F
a=ay1asnocaayc2a+aayc0aayc1
a<a+alengthaxalengthay1a+alengthaxalengthayAa<=c0a+alengthaxalengthay
a>a+alengthaxalengthay1c0
a=a+asumaxasumay1asumas
a>=alengthayc2
asserted formula
asortedaayc2
a>=alengthaxc2
a<=alastay1a+aaxc0aaxc1
a<=alastay1a+aaxc0aaxc1Ia>=alengthay1c1Ia>=alengthaxc2
a>=alengthaxc1
a<=alastay1a+aaxc0aay1c0
a<=alastay1a+aaxc0aay1c0Ia>=alengthay1c2Ia>=alengthaxc1
Na=alengthaxc0
a<=aaxc0aayc0
a<=aaxc1aayc0
Na<=aaxc1aayc0Aa>=alengthaxc2
a<=c1alengthayAa<=c0c1
a=alengthasnocaayc1a+aaxc0aayc0a+c1alengthaayc1
a=aasnocaayc1a+aaxc0aayc0alengthaayc1a+aaxc0aayc0
a=aasnocaayc1a+aaxc0aayc0V4aaayc1V4Ia<V4alengthaayc1Aa<=c0V4F
a=ay1asnocaayc1a+aaxc0aayc0
a<=c1alengthaxAa<=c0c1
a=ax1aaxc1
a=a+asumax1asumay1asum1ea=a@V5V6aasV6Fc0alengthas
Na<=aaxc0aayc0
a<=aayc1aaxc0
Na<=aayc1aaxc0Aa>=alengthayc2
Na>=a+alengthaxalengthayc2
ia=aresultaayc0a=aresultaaxc0a>alengthaxc0
a=aresultasumas
postcondition
ia=V7asumV4Iia=V7aV5c0a=V7aV6c0a>alengthV6c0Fiiiia<=alastV11a+aV11c0aV11c1Ia>=alengthV11c2Aa<=alastV11a+aV12c0aV11c0Ia>=alengthV11c2Ia>=alengthV12c1Aa<=alastV11a+aV12c0aV12c1Ia>=alengthV11c1Ia>=alengthV12c2AasortedV11AasortedV12Aa=a+asumV12asumV11asumV4Aa>a+alengthV12alengthV11c0Aa<a+alengthV12alengthV11a+alengthV6alengthV5Aa<=c0a+alengthV6alengthV5Ia=V12aV6c1FAa<=c1alengthV6Aa<=c0c1Ia=V11V10FIa=aV10V13aV9V13Ia<V13alengthV9Aa<=c0V13FAa=aV10alengthV9V8Aa=alengthV10a+c1alengthV9LasnocV9V8LaV5c1Aa<=c1alengthV5Aa<=c0c1La+aV6c0aV5c0a<=alastV17a+aV17c0aV17c1Ia>=alengthV17c2Aa<=alastV17a+aV6c0aV17c0Ia>=alengthV17c2Ia>=alengthV6c1Aa<=alastV17a+aV6c0aV6c1Ia>=alengthV17c1Ia>=alengthV6c2AasortedV17AasortedV6Aa=a+asumV6asumV17asumV4Aa>a+alengthV6alengthV17c0Aa<a+alengthV6alengthV17a+alengthV6alengthV5Aa<=c0a+alengthV6alengthV5Ia=V17V16FIa=aV16V18aV15V18Ia<V18alengthV15Aa<=c0V18FAa=aV16alengthV15V14Aa=alengthV16a+c1alengthV15LasnocV15V14LaV5c2Aa<=c2alengthV5Aa<=c0c2La+aV5c0aV5c1a<=aV5c1aV6c0Aa>=alengthV5c2ia<=alastV22a+aV
VC for huffman_coding

b6c019671640d6eb80d34827b7696c94 1H0
c686d70e3d7801ae864377a3a4543e2f 1H2H0
4bd2d4d12c8b876d0d9fafe0bba7b7eb 1H3H2H0
e835ea6cd9e2daadfcece330f0690aae 90H89H3H2H0
9f055157208ecdd61f53726143059726 7H6H5H4H3H2H0
d8271651cb1c5c5f0c26b79c09bbc620 7H8H6H5H4H3H2H0
c0832cdb1c78fb2972714b558ef92dbd 7H5H8H6H5H4H3H2H0
ed3f2c156896c7c004f1a3f212179b52 7H9H5H8H6H5H4H3H2H0
0fae1037025b4aa58ecd73c87b9e8a90 7H12H11H10H9H5H8H6H5H4H3H2H0
5810aa13bf4af67c25475719a59ca378 7H16H15H14H13H9H5H8H6H5H4H3H2H0
3566efd093ad1c7ec8b0d5a6a1cc707a 7H18H15H17H13H9H5H8H6H5H4H3H2H0
59ffc68924c04fbdd1c16541283d1fba 33H32H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
8729a4ca026226844dcc3b70dee0edc5 36H35H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
f47a68a031f601e91c52dcb6f9d2d7c1 38H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
9858827edc771280b31734ae6a3c6a11 38H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
83124fcf8da6d5cf8928e60e9628d14c 38H40H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
8e90e1a775ba32081f4e337c064ca9cf 38H41H40H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
18c9e9885a8ef7dc7c2a3ff0ef01bdf4 38H44H43H42H41H40H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
1ab05307459d2203249fb24bd60240a3 38H48H47H46H45H41H40H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
412b2bc6324c1756c1d8553c99b17629 38H50H47H49H45H41H40H39H37H34H31H30H29H28H27H26H25H24H23H22H21H20H19H5H4H3H2H0
e092160108c2dfd8e124d40c28866785 33H53H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
2e0eef9e7fb32032092c558c14f9259c 36H58H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
7e2642a9ff86d5ffe78071646854d302 38H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
75cc75e7149a7c8493f60d9ae9d3d570 38H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
e0f134006a53aa8c493b07ebea25635e 38H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
65f0712c23542e30dfa4e69ec7a50455 38H41H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
f744179929c216229e63154ed7e1ca68 62H63H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
b802b4c692efb71fd5f3fa81a8b00739 62H61H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
c6388ceca36c246a1165aa29f78a66fb 62H63H61H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
57fc33ed2fcc8ad9419457712a6a2181 62H63H61H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
0009743ed8b655ba9787810f105fbd0b 38H41H63H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
4f4943258c3cc767cc9d41e32c22c614 38H65H43H64H41H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
113fbc805f6a967f79aac0096e8cd3a3 38H68H47H67H66H41H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
a8b55c3d8953b28d0f1cddd0d7f2e328 38H50H47H69H66H41H21H60H59H57H56H55H54H52H51H26H25H24H23H22H21H20H19H5H4H3H2H0
f3fcfc416eb0951917a9d65ec3af2a9d 33H32H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
e84a201a32677727b2b0258f22a22b07 36H35H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
43cff4077941967238343fd51cdee724 38H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
f49ee2cf95ed125967ca50bd89d623d7 38H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
bf4000ab6cb273c37bf77121e78b53b0 38H40H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
f6369b8ed160ab97099272093422666b 38H41H40H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
532be401438b130b1e7be9d5f609a38c 38H44H43H42H41H40H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
737c8bb2ac74d2ba7f2644fbfedb6dfc 38H48H47H46H45H41H40H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
4e5d5f6dbbeb201c546394ba685dc8c8 38H50H47H49H45H41H40H39H37H34H31H30H29H28H72H64H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
0c6a33bb850ebada700c013d01d1131f 33H74H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
0260f9969e7c2162ec40055723844e60 33H79H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
01b9f86e2cadc88a85d3c94c89a66da2 36H35H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
9e1d72003df98eb23158d382149354b3 38H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
08fd514129ca791bae9e644d374538b2 38H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
18584737de3e4b55407ff3cc98507d5e 38H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
2710b5a8a68ed9fed96496f796c689a0 38H81H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
fe0b3e4de059a5800b78686ba32f593b 38H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
fc3a658c463a7326b751d5a8ff3ea4da 38H41H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
65d5a5449aba7688a08671fb805e48f7 38H41H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
dbd339c3d92fb37e6ad931891c1c637e 38H44H43H42H41H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
29998172f0084b81979112d9fedf90a9 38H48H47H46H45H41H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
875caf28040b6bd4eafbc447e6872618 38H50H47H49H45H41H40H39H37H80H78H77H76H75H73H71H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
ac4ec6f4919f4c0ea6f53bee02ea2a4d 33H53H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
d211e2e062219af66c7e6fd5cfa2cecf 36H58H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
846a39889175445230489659a86d9bef 38H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
3f42751a28625cd8befa42e9368832c2 38H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
9957c6b7ba88c2531bd9f706a85161b0 38H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
1b37b6c07bcb7c88ecdab1db9645ed0f 38H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
6460b32c975dc78b4eceac052fe7f7c3 38H41H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
d974b44d21c66728666c76334733735a 38H41H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
b1c1c06ba3c9ed394faaa088e756ee2b 38H65H43H64H41H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
1580d220dc29ddba58f0b562be68d8f9 38H68H47H67H66H41H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
d87e89328ff4b78271b567542386655e 38H50H47H69H66H41H21H60H59H57H56H55H54H83H61H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
37b1d8b4844c1e89150e333f88dfc2e4 33H74H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
9646b69641d9357e596587eb6a7aa923 33H79H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
572f573707011909fc65db9486563467 36H35H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
cba21155319c24b3c752833750958c79 38H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
61df9f0d4358eee2f6ee861a4103c65e 38H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
963dc2b7ce9c91f9a19ff71781be2a89 38H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
84a9d08261a4ec88cf75de2b282c39ee 38H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
6325f91c7c33559e88699522f50d2aad 38H41H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
6ce52d68228b815249a5d2fce3a7d3cc 38H41H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
3c8a902e34bb6104b785282f25871242 38H44H43H42H41H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
da737f9a9c34934c044b589b80cfd3fd 38H48H47H46H45H41H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
e9f79a670aa41ad7b818a96dfeb3d72a 38H50H47H49H45H41H40H39H37H80H78H77H76H75H84H82H70H51H26H25H24H23H22H21H20H19H5H4H3H2H0
4bffbed4361945303aace4e524f0ac50 88H87H86H85H25H24H23H22H21H20H19H5H4H3H2H0
