a<=c0alengthV0F
a=alengthaemptyc0
a=V1V2Ia==V1V2F
a=alengthaappV3V4a+alengthV3alengthV4F
a=aaappV5V6V7aV5V7Ia<V7alengthV5Aa<=c0V7F
a=aaappV8V9V10aV9a-V10alengthV8Ia<V10a+alengthV8alengthV9Aa<=alengthV8V10F
a==aappV11aappV12V13aappaappV11V12V13F
empty_shape
Ca=alengthastringV0alength1V0IainvV0aEmpa=alengthastringV0alength1V0IainvV0aStrVVVa=alengthastringV0alength1V0IainvV0Ia=alengthastringV4alength1V4IainvV4Ia=alengthastringV5alength1V5IainvV5aAppVVVV0F
a=alengthastringV0alength1V0IainvV0F
a==astringV1aemptyAainvV1Aa=alength1V1c0LaEmp
VC for empty
a==astringaemptyaempty1AainvaemptyAa=alength1aemptyc0
a==astringV1aempty1qa=V2aTrueICa=V2aTrueaEmpa=V2aFalsewV1FIainvV1F
VC for is_empty
ainvV3Aa==astringV3V1Iia=V3aStrV1c0V4Aa<=c0V4LalengthV1a=V3aEmpa=V2c0FIa<=c0V2LalengthV1Ia<=c0alengthV1F
VC for of_string
a=V3aastringV1V2ICfaEmpa=V3aV4a+V5V2aStrVVwia=V3aastringV7a-V2V8a=V3aastringV6V2a<V2V8Lalength1V6aAppVVwV1FACfaEmpa<V11alengthV9Aa<=c0V11La+V10V2aStrVVwia<V15alength1V13Aa<=c0V15AainvV13ACfaEmpfaStrwwwa=V17V13Oa=V16V13aAppVVwV1La-V2V14a<V2alength1V12Aa<=c0V2AainvV12ACfaEmpfaStrwwwa=V19V12Oa=V18V12aAppVVwV1a<V2V14Lalength1V12aAppVVwV1Ia<V2alength1V1Aa<=c0V2AainvV1F
VC for get
a==astringV3aappastringV1astringV2AainvV3ICCa=V3V2aEmpa=V3V1wV1aEmpCa=V3V2aEmpa=V3aAppV1V2a+alength1V1alength1V2wV1wV2FIainvV2AainvV1F
VC for concat
a==astringV4asubastringV1V2V3AainvV4ICa=V4aEmpAa=V3c0aEmpia=V4aStrV5a+V6V2V3a=V4aEmpa=V3c0aStrVVwiia==astringV4aappastringV12astringV11AainvV4Aa==astringV12asubastringV7V2V9AainvV12EAa==astringV11asubastringV8c0V10AainvV11Ea==astringV4asubastringV8a-V9V3AainvV4a>=c0V9a==astringV4asubastringV7V2V3AainvV4a<=V10c0La-V3V9La-alength1V7V2aAppVVwV1FACa=V3c0aEmptaStrVVwiiainvV19AainvV20Ia==astringV20asubastringV15V2V17AainvV20FAa<=a+V2V17alength1V15Aa<=V2alength1V15Aa<=c0V2Aa<=c0V17AainvV15ACfaEmpfaStrwwwa=V22V15Oa=V21V15aAppVVwV1Ia==astringV19asubastringV16c0V18AainvV19FAa<=a+c0V18alength1V16Aa<=c0alength1V16Aa<=c0c0Aa<=c0V18AainvV16ACfaEmpfaStrwwwa=V24V16Oa=V23V16aAppVVwV1a<=a+V25V3alength1V16Aa<=V25alength1V16Aa<=c0V25Aa<=c0V3AainvV16ACfaEmpfaStrwwwa=V27V16Oa=V26V16aAppVVwV1La-V17a>=c0V17a<=a+V2V3alength1V15Aa<=V2alength1V15Aa<=c0V2Aa<=c0V3AainvV15ACfaEmpfaStrwwwa=V29V15Oa=V28V15aAppVVwV1a<=V18c0La-V3V17La-alength1V15V2aAppVVwV1Ia<=a+V2V3alength1V1Aa<=V2alength1V1Aa<=c0V2Aa<=c0V3AainvV1F
VC for sub
a<=c2amax
a==astring_of_arrayV0V1V1aemptyIa<=V1alengthV0Aa<=c0V1F
a==astring_of_arrayV2V3V4aappastring_of_arrayV2a+V3c1V4astringaV2V3Ia<=V4alengthV2Aa<V3V4Aa<=c0V3F
a==astring_of_arrayV5V6V8aappastring_of_arrayV5V7V8astring_of_arrayV5V6V7Ia==astring_of_arrayV5V9V8aappastring_of_arrayV5V7V8astring_of_arrayV5V9V7La+V6c1ONa<V6V7Aa<=V8alengthV5Aa<=V7V8Aa<=V10V7Aa<=c0V10Aa<a-V7V10a-V7V6Aa<=c0a-V7V6La+V6c1Ia<V6V7Ia<=V8alengthV5Aa<=V7V8Aa<=V6V7Aa<=c0V6F
VC for string_of_array_concat
a==astring_of_arrayV5V6V8aappastring_of_arrayV5V7V8astring_of_arrayV5V6V7Ia<=V8alengthV5Aa<=V7V8Aa<=V6V7Aa<=c0V6F
a==astring_of_arrayV9V10V11aappastringaV9a-V11c1astring_of_arrayV9V10a-V11c1Ia==astring_of_arrayV9V12V11aappastringaV9a-V11c1astring_of_arrayV9V12a-V11c1La+V10c1ONa<V10a-V11c1Aa<=V11alengthV9Aa<V13V11Aa<=c0V13Aa<a-V11V13a-V11V10Aa<=c0a-V11V10La+V10c1Ia<V10a-V11c1Ia<=V11alengthV9Aa<V10V11Aa<=c0V10F
VC for string_of_array_concat_right
a==astring_of_arrayV9V10V11aappastringaV9a-V11c1astring_of_arrayV9V10a-V11c1Ia<=V11alengthV9Aa<V10V11Aa<=c0V10F
a>=alength1astring_of_arrayV12V13V14alength1astringaV12V15Aa==astring_of_arrayV12V13V14aappastring_of_arrayV12a+V15c1V14astring_of_arrayV12V13a+V15c1Aa==astring_of_arrayV12V13a+V15c1aappastringaV12V15astring_of_arrayV12V13V15IainvaV12V16Ia<V16V14Aa<=V13V16FAa<=V14alengthV12Aa<V15V14Aa<=V13V15Aa<=c0V13F
VC for string_of_array_length
a>=alength1astring_of_arrayV12V13V14alength1astringaV12V15IainvaV12V16Ia<V16V14Aa<=V13V16FIa<=V14alengthV12Aa<V15V14Aa<=V13V15Aa<=c0V13F
a==astring_of_arrayV17V19V20astring_of_arrayV18V19V20Ia==astring_of_arrayV17V21V20astring_of_arrayV18V21V20La+V19c1ONa<V19V20Aa=aV17V23aV18V23Ia<V23V20Aa<=V22V23FAa=alengthV17alengthV18Aa<=V20alengthV17Aa<=V22V20Aa<=c0V22Aa<a-V20V22a-V20V19Aa<=c0a-V20V19La+V19c1Ia<V19V20Ia=aV17V24aV18V24Ia<V24V20Aa<=V19V24FAa=alengthV17alengthV18Aa<=V20alengthV17Aa<=V19V20Aa<=c0V19F
VC for string_of_array_eq
a==astring_of_arrayV17V19V20astring_of_arrayV18V19V20Ia=aV17V21aV18V21Ia<V21V20Aa<=V19V21FIa=alengthV17alengthV18Aa<=V20alengthV17Aa<=V19V20Aa<=c0V19F
a==astring_of_arrayV22V23V24astring_of_arrayaV22V25V26V23V24Ia<V25alengthV22Aa<=V24V25Oa<V25V23Aa<=c0V25FIa<=V24alengthV22Aa<=V23V24Aa<=c0V23F
a==astring_of_arrayV27V28V29aemptyIa==astring_of_arrayV27a+V28c1V29aemptyONa<V28V29Aa=aV27V31aEmpIa<V31V29Aa<=V30V31FAa<=V29alengthV27Aa<=V30V29Aa<=c0V30Aa<a-V29V30a-V29V28Aa<=c0a-V29V28La+V28c1Ia<V28V29Ia=aV27V32aEmpIa<V32V29Aa<=V28V32FAa<=V29alengthV27Aa<=V28V29Aa<=c0V28F
VC for string_of_array_concat_empty
a==astring_of_arrayV27V28V29aemptyIa=aV27V30aEmpIa<V30V29Aa<=V28V30FIa<=V29alengthV27Aa<=V28V29Aa<=c0V28F
a<=c2ai
a<aialengthaq
a=alengthaqa+amaxc1
ainvar
ainvaaqV31Ia<=V31amaxAa<=c2V31F
a<a+alength1astring_of_arrayaqaia+amaxc1alength2arafiba+amaxc1
a<aialengthaqAa<=c0ai
index in array bounds
ainvarAainvaaqai
precondition
ainvar'
a==astringar'aappastringaaqaiastringar
a>=a+aic1c0
a<alength2ar'afiba+aic1
a=alengthaq1alengthaq
a=aeltsaq1asetaeltsaqaiar'
a=aq1aaqaiar'
a==astring_of_arrayaq1a+aic1a+amaxc1astring_of_arrayaqa+aic1a+amaxc1
assertion
a<=c2aj
a<=ajamax
ainvaaq1aj
postcondition
ainvaaq1V32Ia<=V32amaxAa<=c2V32F
a<ajai
a=aaq1ajaaqaj
a=aaq1V33aaqV33Ia<V33aiAa<=c2V33F
a==astring_of_arrayaq1aia+amaxc1aappastring_of_arrayaqaia+amaxc1astringar
Na<alength2ar'afiba+aic1
a=aeltsaq1asetaeltsaqaiaEmp
a=aq1aaqaiaEmp
a==astring_of_arrayaq1aia+amaxc1astring_of_arrayaqa+aic1a+amaxc1
a==aappastring_of_arrayaq1aia+amaxc1astringar'aappastring_of_arrayaqaia+amaxc1astringar
a<a-amaxa+aic1a-amaxaiAa<=c0a-amaxai
variant decrease
a=alengthaq1a+amaxc1Aa<a+aic1alengthaq1Aa<=c2a+aic1
a<a+alength1astring_of_arrayaq1a+aic1a+amaxc1alength2ar'afiba+amaxc1
a=alengthaq2alengthaq1
ainvaaq2V32Ia<=V32amaxAa<=c2V32F
a=aaq2V33aaq1V33Ia<V33a+aic1Aa<=c2V33F
a==astring_of_arrayaq2a+aic1a+amaxc1aappastring_of_arrayaq1a+aic1a+amaxc1astringar'
a=alength1astring_of_arrayaq2aia+amaxc1alength1astring_of_arrayaq2a+aic1a+amaxc1
a<=c0ai1
a<ai1alength1astring_of_arrayaq2aia+amaxc1
a=aastring_of_arrayaq2aia+amaxc1ai1aastring_of_arrayaq2a+aic1a+amaxc1ai1
a=aastring_of_arrayaq2aia+amaxc1V34aastring_of_arrayaq2a+aic1a+amaxc1V34Ia<V34alength1astring_of_arrayaq2aia+amaxc1Aa<=c0V34FAa=alength1astring_of_arrayaq2aia+amaxc1alength1astring_of_arrayaq2a+aic1a+amaxc1
a==astring_of_arrayaq2aia+amaxc1astring_of_arrayaq2a+aic1a+amaxc1
ainvaaq2aj
ainvaaq2V34Ia<=V34amaxAa<=c2V34F
a=aaq2ajaaqaj
a=aaq2V35aaqV35Ia<V35aiAa<=c2V35F
a==astring_of_arrayaq2aia+amaxc1aappastring_of_arrayaqaia+amaxc1astringar
ia==astring_of_arrayV40V32a+amaxc1aappastring_of_arrayV31V32a+amaxc1astringV33Aa=aV40V41aV31V41Ia<V41V32Aa<=c2V41FAainvaV40V42Ia<=V42amaxAa<=c2V42FAa==astring_of_arrayV40V32a+amaxc1astring_of_arrayV40a+V32c1a+amaxc1Ia==astring_of_arrayV40V39a+amaxc1aappastring_of_arrayV38V39a+amaxc1astringV35Aa=aV40V43aV38V43Ia<V43V39Aa<=c2V43FAainvaV40V44Ia<=V44amaxAa<=c2V44FIa=alengthV40alengthV38FAa<a+alength1astring_of_arrayV38V39a+amaxc1alength2V35afiba+amaxc1AainvaV38V45Ia<=V45amaxAa<=c2V45FAainvV35Aa=alengthV38a+amaxc1Aa<V39alengthV38Aa<=c2V39Aa<a-amaxV39a-amaxV32Aa<=c0a-amaxV32La+V32c1Aa==aappastring_of_arrayV38V32a+amaxc1astringV35aappastring_of_arrayV31V32a+amaxc1astringV33Aa==astring_of_arrayV38V32a+amaxc1astring_of_arrayV31a+V32c1a+amaxc1Ia=V38aV31V32V37Aa=aeltsV38asetaeltsV31V32V37Ia=alengthV38alengthV31FAa<V32alengthV31Aa<=c0V32LaEmpa==astring_of_arrayV46V32a+amaxc1aappastring_of_arrayV31V32a+amaxc1astringV33Aa=aV46V47aV31V47Ia<V47V32Aa<=c2V47FAainvaV46V48Ia<=V48amaxAa<=c2V48FAa==astring_of_arrayV46a+V32c1a+amax
VC for insert
Ca==astring_of_queueV31aappastring_of_queueV31astringV32AainvaV31V33Ia<=V33amaxAa<=c2V33FaEmpa==astring_of_queueV34aappastring_of_queueV31astringV32AainvaV34V35Ia<=V35amaxAa<=c2V35FIa==astring_of_arrayV34c2a+amaxc1aappastring_of_arrayV31c2a+amaxc1astringV32Aa=aV34V36aV31V36Ia<V36c2Aa<=c2V36FAainvaV34V37Ia<=V37amaxAa<=c2V37FIa=alengthV34alengthV31FAa<a+alength1astring_of_arrayV31c2a+amaxc1alength2V32afiba+amaxc1AainvaV31V38Ia<=V38amaxAa<=c2V38FAainvV32Aa=alengthV31a+amaxc1Aa<c2alengthV31Aa<=c2c2aStrwwwa==astring_of_queueV42aappastring_of_queueV31astringV32AainvaV42V43Ia<=V43amaxAa<=c2V43FIa==astring_of_queueV42aappastring_of_queueV41astringV40AainvaV42V44Ia<=V44amaxAa<=c2V44FIa=alengthV42alengthV41FAa<a+alength1astring_of_queueV41alength2V40afiba+amaxc1AainvaV41V45Ia<=V45amaxAa<=c2V45FAainvV40Aa=alengthV41a+amaxc1Aa<c2alengthV41ACfaEmpfaStrwwwa=V47V40Oa=V46V40aAppVVwV32Ia==astring_of_queueV41aappastring_of_queueV31astringV39AainvaV41V48Ia<=V48amaxAa<=c2V48FIa=alengthV41alengthV31FAa<a+alength1astring_of_queueV
VC for insert_leaves
a==astringV36astringV31AainvV36LaEmpIa>c2a+V35c1Aa==astringV37astringV31AainvV37Ia==astringV37astring_of_arrayV34c2a+V35c1AainvV37Aa==astringV41astring_of_arrayV34c2a+V38c1AainvV41Ia=V41V40FIa==astringV40aappastringV39astringV37AainvV40FAainvV37AainvV39LaV34V38Aa<V38alengthV34Aa<=c0V38Ia==astringV37astring_of_arrayV34c2V38AainvV37Aa<=V38V35Aa<=c2V38FFAa==astringaEmpastring_of_arrayV34c2c2AainvaEmpIa<=c2a+V35c1LamaxAa==astring_of_queueV34astringV31Ia==astring_of_queueV34aappastring_of_queueV33astringV31AainvaV34V42Ia<=V42amaxAa<=c2V42FIa=alengthV34alengthV33FAa<a+alength1astring_of_queueV33alength2V31afiba+amaxc1AainvaV33V43Ia<=V43amaxAa<=c2V43FAainvV31Aa=alengthV33a+amaxc1Aa<c2alengthV33Aa==astring_of_queueV33aemptyIa=alengthV33V32Aa=aV33V44aEmpIa<V44V32Aa<=c0V44FFAa>=V32c0La+amaxc1Ia<alength2V31afiba+amaxc1AainvV31F
VC for balance

9c6430cec880134edb7ed4128dc5e88d 7H6H5H4H3H2H1H0
00683e48950920b3eb1cebe3631625b4 7H9
f4166d4a82fad06bc63e4b83e36e7c39 7H8
7fe7bcae1b7afebc4103b28170b44055 11H10H9
41eb356b930d6066e6598ed9efdf47ea 14H13H12H9
937bc0e3505f9e73a501d8c47c14eeb3 16H15H12H9
7528bb9f29a0ae5956c958b99fe3fba6 18H17H12H9
b978970eefde65aceba532ddf18402de 20H19H12H9
a4491f97f0838039dff8581ceac57155 22H21H12H9
5e241a1cd5caabad126e7c77af1c5e72 27H26H25H24H23
a84cf993fad75a3fb68c9a08c71ed245 30H29H28H25H24H23
16a48fdb0db165338f3e7538ec791e28 33H32H31H28H25H24H23
048e762434242f6a9dfdc6a394327f8d 36H35H34H31H28H25H24H23
b5af73d11ddb2f3a4742a44486faeb2e 7H38H37H34H31H28H25H24H23
a018d73a9d5f6dfe780967a9cf91e66b 40H39H38H37H34H31H28H25H24H23
4b832ffec3ecf7f0606b64a961aab701 95H94H41H38H37H34H31H28H25H24H23
142782b6a83d60ec0ecebba2e8ee2abf 49H48H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
a933cefb8ed038c87126fab0ef8eecd9 51H50H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
991f95776cb373ee6e287b4b244fa4ff 51H54H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
6e415d4f5f47a227e70b62a69c97dc94 49H48H55H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
d1898fc261bc770f280373b353605475 60H59H58H57H56H55H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
99148bd789557fb9a799db85546ad58b 64H63H62H61H59H58H57H56H55H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
ef90663b0f151684aaa6f3faebd07f04 64H67H66H61H65H59H58H57H56H55H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
a265fd00faa631ef127177d22e0ea9c6 64H69H68H65H59H58H57H56H55H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
9d6ed775c5639cdabef0ef37f86a4b2b 49H48H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
0c76c1e6eef0b9f9c0941a83ee3a6d91 60H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
90e6f32b26d048438fcd025d5e9f4554 60H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
dda1d07b684095b81a9eaa6326da0440 76H75H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
62f24891dffde7ab6ed0a20698b9d0e3 51H77H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
4435005735d95453eb6cbf979e6a8d6b 51H52H77H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
76ba05571edffa75cbd77a435f97e155 51H63H62H61H52H77H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
49bf1b2b96da9ff19f86485f901b04e4 51H78H65H52H77H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
693d48e0b3a6944d621bc4662f02ea0f 60H88H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
2c5e070812db5bb592568fb3da7c7541 60H87H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
2fb5375e737b6b5a355bfe6a29de9942 60H83H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
e939d7d591217157bcb0632a7d271795 60H86H85H84H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
f7d25770d8ee53453dab88fc734afbfa 64H89H62H61H88H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
73e7d103ecbe009f6b4677d134c54e3d 64H91H66H61H90H88H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
0009f6ead9779fb928fce0b5cbc71a85 64H93H92H90H88H82H81H80H79H74H73H72H71H56H70H53H52H47H46H45H44H43H42H41H38H37H34H31H28H25H24H23
e13cbbc94fad8329100567bff86e3804 97H96H41H38H37H34H31H28H25H24H23
ab539d6a9ab82a146c180c1b14c71a98 99H98H41H38H37H34H31H28H25H24H23
