diff --git a/tutorial/proofs/t03_list/generated_code.v b/tutorial/proofs/t03_list/generated_code.v
index ed709d635dd17d53c0bcee10f3920fe696bf2106..5e27f24b4621e27c699b2a15ca046eea6eaa68c9 100644
--- a/tutorial/proofs/t03_list/generated_code.v
+++ b/tutorial/proofs/t03_list/generated_code.v
@@ -6,163 +6,163 @@ Set Default Proof Using "Type".
 (* Generated from [tutorial/t03_list.c]. *)
 Section code.
   Definition file_0 : string := "tutorial/t03_list.c".
-  Definition loc_2 : location_info := LocationInfo file_0 124 4 124 25.
-  Definition loc_3 : location_info := LocationInfo file_0 125 4 125 42.
-  Definition loc_4 : location_info := LocationInfo file_0 126 4 126 42.
-  Definition loc_5 : location_info := LocationInfo file_0 127 4 127 42.
-  Definition loc_6 : location_info := LocationInfo file_0 129 4 129 28.
-  Definition loc_7 : location_info := LocationInfo file_0 131 4 131 15.
-  Definition loc_8 : location_info := LocationInfo file_0 132 4 132 15.
-  Definition loc_9 : location_info := LocationInfo file_0 133 4 133 15.
-  Definition loc_10 : location_info := LocationInfo file_0 135 4 135 29.
-  Definition loc_11 : location_info := LocationInfo file_0 136 4 136 29.
-  Definition loc_12 : location_info := LocationInfo file_0 137 4 137 29.
-  Definition loc_13 : location_info := LocationInfo file_0 139 4 139 29.
-  Definition loc_14 : location_info := LocationInfo file_0 141 4 141 25.
-  Definition loc_15 : location_info := LocationInfo file_0 143 4 143 29.
-  Definition loc_16 : location_info := LocationInfo file_0 145 4 145 23.
-  Definition loc_17 : location_info := LocationInfo file_0 146 4 146 23.
-  Definition loc_18 : location_info := LocationInfo file_0 147 4 147 23.
-  Definition loc_19 : location_info := LocationInfo file_0 149 4 149 28.
-  Definition loc_20 : location_info := LocationInfo file_0 151 4 151 32.
-  Definition loc_21 : location_info := LocationInfo file_0 152 4 152 32.
-  Definition loc_22 : location_info := LocationInfo file_0 153 4 153 32.
-  Definition loc_23 : location_info := LocationInfo file_0 155 4 155 32.
-  Definition loc_24 : location_info := LocationInfo file_0 156 4 156 32.
-  Definition loc_25 : location_info := LocationInfo file_0 157 4 157 32.
-  Definition loc_26 : location_info := LocationInfo file_0 157 4 157 8.
-  Definition loc_27 : location_info := LocationInfo file_0 157 4 157 8.
-  Definition loc_28 : location_info := LocationInfo file_0 157 9 157 23.
-  Definition loc_29 : location_info := LocationInfo file_0 157 25 157 30.
-  Definition loc_30 : location_info := LocationInfo file_0 157 25 157 30.
-  Definition loc_31 : location_info := LocationInfo file_0 156 4 156 8.
-  Definition loc_32 : location_info := LocationInfo file_0 156 4 156 8.
-  Definition loc_33 : location_info := LocationInfo file_0 156 9 156 23.
-  Definition loc_34 : location_info := LocationInfo file_0 156 25 156 30.
-  Definition loc_35 : location_info := LocationInfo file_0 156 25 156 30.
-  Definition loc_36 : location_info := LocationInfo file_0 155 4 155 8.
-  Definition loc_37 : location_info := LocationInfo file_0 155 4 155 8.
-  Definition loc_38 : location_info := LocationInfo file_0 155 9 155 23.
-  Definition loc_39 : location_info := LocationInfo file_0 155 25 155 30.
-  Definition loc_40 : location_info := LocationInfo file_0 155 25 155 30.
-  Definition loc_41 : location_info := LocationInfo file_0 153 11 153 30.
-  Definition loc_42 : location_info := LocationInfo file_0 153 11 153 17.
-  Definition loc_43 : location_info := LocationInfo file_0 153 11 153 17.
-  Definition loc_44 : location_info := LocationInfo file_0 153 12 153 17.
-  Definition loc_45 : location_info := LocationInfo file_0 153 12 153 17.
-  Definition loc_46 : location_info := LocationInfo file_0 153 21 153 30.
-  Definition loc_47 : location_info := LocationInfo file_0 153 29 153 30.
-  Definition loc_48 : location_info := LocationInfo file_0 152 11 152 30.
-  Definition loc_49 : location_info := LocationInfo file_0 152 11 152 17.
-  Definition loc_50 : location_info := LocationInfo file_0 152 11 152 17.
-  Definition loc_51 : location_info := LocationInfo file_0 152 12 152 17.
-  Definition loc_52 : location_info := LocationInfo file_0 152 12 152 17.
-  Definition loc_53 : location_info := LocationInfo file_0 152 21 152 30.
-  Definition loc_54 : location_info := LocationInfo file_0 152 29 152 30.
-  Definition loc_55 : location_info := LocationInfo file_0 151 11 151 30.
-  Definition loc_56 : location_info := LocationInfo file_0 151 11 151 17.
-  Definition loc_57 : location_info := LocationInfo file_0 151 11 151 17.
-  Definition loc_58 : location_info := LocationInfo file_0 151 12 151 17.
-  Definition loc_59 : location_info := LocationInfo file_0 151 12 151 17.
-  Definition loc_60 : location_info := LocationInfo file_0 151 21 151 30.
-  Definition loc_61 : location_info := LocationInfo file_0 151 29 151 30.
-  Definition loc_62 : location_info := LocationInfo file_0 149 11 149 26.
-  Definition loc_63 : location_info := LocationInfo file_0 149 11 149 19.
-  Definition loc_64 : location_info := LocationInfo file_0 149 11 149 19.
-  Definition loc_65 : location_info := LocationInfo file_0 149 20 149 25.
-  Definition loc_66 : location_info := LocationInfo file_0 149 21 149 25.
-  Definition loc_67 : location_info := LocationInfo file_0 147 4 147 9.
-  Definition loc_68 : location_info := LocationInfo file_0 147 12 147 22.
-  Definition loc_69 : location_info := LocationInfo file_0 147 12 147 15.
-  Definition loc_70 : location_info := LocationInfo file_0 147 12 147 15.
-  Definition loc_71 : location_info := LocationInfo file_0 147 16 147 21.
-  Definition loc_72 : location_info := LocationInfo file_0 147 17 147 21.
-  Definition loc_73 : location_info := LocationInfo file_0 146 4 146 9.
-  Definition loc_74 : location_info := LocationInfo file_0 146 12 146 22.
-  Definition loc_75 : location_info := LocationInfo file_0 146 12 146 15.
-  Definition loc_76 : location_info := LocationInfo file_0 146 12 146 15.
-  Definition loc_77 : location_info := LocationInfo file_0 146 16 146 21.
-  Definition loc_78 : location_info := LocationInfo file_0 146 17 146 21.
-  Definition loc_79 : location_info := LocationInfo file_0 145 4 145 9.
-  Definition loc_80 : location_info := LocationInfo file_0 145 12 145 22.
-  Definition loc_81 : location_info := LocationInfo file_0 145 12 145 15.
-  Definition loc_82 : location_info := LocationInfo file_0 145 12 145 15.
-  Definition loc_83 : location_info := LocationInfo file_0 145 16 145 21.
-  Definition loc_84 : location_info := LocationInfo file_0 145 17 145 21.
-  Definition loc_85 : location_info := LocationInfo file_0 143 11 143 27.
-  Definition loc_86 : location_info := LocationInfo file_0 143 11 143 17.
-  Definition loc_87 : location_info := LocationInfo file_0 143 11 143 17.
-  Definition loc_88 : location_info := LocationInfo file_0 143 18 143 23.
-  Definition loc_89 : location_info := LocationInfo file_0 143 19 143 23.
-  Definition loc_90 : location_info := LocationInfo file_0 143 25 143 26.
-  Definition loc_91 : location_info := LocationInfo file_0 141 4 141 8.
-  Definition loc_92 : location_info := LocationInfo file_0 141 11 141 24.
-  Definition loc_93 : location_info := LocationInfo file_0 141 11 141 18.
-  Definition loc_94 : location_info := LocationInfo file_0 141 11 141 18.
-  Definition loc_95 : location_info := LocationInfo file_0 141 19 141 23.
-  Definition loc_96 : location_info := LocationInfo file_0 141 19 141 23.
-  Definition loc_97 : location_info := LocationInfo file_0 139 11 139 27.
-  Definition loc_98 : location_info := LocationInfo file_0 139 11 139 17.
-  Definition loc_99 : location_info := LocationInfo file_0 139 11 139 17.
-  Definition loc_100 : location_info := LocationInfo file_0 139 18 139 23.
-  Definition loc_101 : location_info := LocationInfo file_0 139 19 139 23.
-  Definition loc_102 : location_info := LocationInfo file_0 139 25 139 26.
-  Definition loc_103 : location_info := LocationInfo file_0 137 4 137 8.
-  Definition loc_104 : location_info := LocationInfo file_0 137 11 137 28.
-  Definition loc_105 : location_info := LocationInfo file_0 137 11 137 15.
-  Definition loc_106 : location_info := LocationInfo file_0 137 11 137 15.
-  Definition loc_107 : location_info := LocationInfo file_0 137 16 137 20.
-  Definition loc_108 : location_info := LocationInfo file_0 137 16 137 20.
-  Definition loc_109 : location_info := LocationInfo file_0 137 22 137 27.
-  Definition loc_110 : location_info := LocationInfo file_0 137 22 137 27.
-  Definition loc_111 : location_info := LocationInfo file_0 136 4 136 8.
-  Definition loc_112 : location_info := LocationInfo file_0 136 11 136 28.
-  Definition loc_113 : location_info := LocationInfo file_0 136 11 136 15.
-  Definition loc_114 : location_info := LocationInfo file_0 136 11 136 15.
-  Definition loc_115 : location_info := LocationInfo file_0 136 16 136 20.
-  Definition loc_116 : location_info := LocationInfo file_0 136 16 136 20.
-  Definition loc_117 : location_info := LocationInfo file_0 136 22 136 27.
-  Definition loc_118 : location_info := LocationInfo file_0 136 22 136 27.
-  Definition loc_119 : location_info := LocationInfo file_0 135 4 135 8.
-  Definition loc_120 : location_info := LocationInfo file_0 135 11 135 28.
-  Definition loc_121 : location_info := LocationInfo file_0 135 11 135 15.
-  Definition loc_122 : location_info := LocationInfo file_0 135 11 135 15.
-  Definition loc_123 : location_info := LocationInfo file_0 135 16 135 20.
-  Definition loc_124 : location_info := LocationInfo file_0 135 16 135 20.
-  Definition loc_125 : location_info := LocationInfo file_0 135 22 135 27.
-  Definition loc_126 : location_info := LocationInfo file_0 135 22 135 27.
-  Definition loc_127 : location_info := LocationInfo file_0 133 4 133 10.
-  Definition loc_128 : location_info := LocationInfo file_0 133 5 133 10.
-  Definition loc_129 : location_info := LocationInfo file_0 133 5 133 10.
-  Definition loc_130 : location_info := LocationInfo file_0 133 13 133 14.
-  Definition loc_131 : location_info := LocationInfo file_0 132 4 132 10.
-  Definition loc_132 : location_info := LocationInfo file_0 132 5 132 10.
-  Definition loc_133 : location_info := LocationInfo file_0 132 5 132 10.
-  Definition loc_134 : location_info := LocationInfo file_0 132 13 132 14.
-  Definition loc_135 : location_info := LocationInfo file_0 131 4 131 10.
-  Definition loc_136 : location_info := LocationInfo file_0 131 5 131 10.
-  Definition loc_137 : location_info := LocationInfo file_0 131 5 131 10.
-  Definition loc_138 : location_info := LocationInfo file_0 131 13 131 14.
-  Definition loc_139 : location_info := LocationInfo file_0 129 11 129 26.
-  Definition loc_140 : location_info := LocationInfo file_0 129 11 129 19.
-  Definition loc_141 : location_info := LocationInfo file_0 129 11 129 19.
-  Definition loc_142 : location_info := LocationInfo file_0 129 20 129 25.
-  Definition loc_143 : location_info := LocationInfo file_0 129 21 129 25.
-  Definition loc_144 : location_info := LocationInfo file_0 127 20 127 41.
-  Definition loc_145 : location_info := LocationInfo file_0 127 20 127 25.
-  Definition loc_146 : location_info := LocationInfo file_0 127 20 127 25.
-  Definition loc_147 : location_info := LocationInfo file_0 127 26 127 40.
-  Definition loc_150 : location_info := LocationInfo file_0 126 20 126 41.
-  Definition loc_151 : location_info := LocationInfo file_0 126 20 126 25.
-  Definition loc_152 : location_info := LocationInfo file_0 126 20 126 25.
-  Definition loc_153 : location_info := LocationInfo file_0 126 26 126 40.
-  Definition loc_156 : location_info := LocationInfo file_0 125 20 125 41.
-  Definition loc_157 : location_info := LocationInfo file_0 125 20 125 25.
-  Definition loc_158 : location_info := LocationInfo file_0 125 20 125 25.
-  Definition loc_159 : location_info := LocationInfo file_0 125 26 125 40.
-  Definition loc_162 : location_info := LocationInfo file_0 124 18 124 24.
-  Definition loc_163 : location_info := LocationInfo file_0 124 18 124 22.
-  Definition loc_164 : location_info := LocationInfo file_0 124 18 124 22.
+  Definition loc_2 : location_info := LocationInfo file_0 141 4 141 25.
+  Definition loc_3 : location_info := LocationInfo file_0 142 4 142 42.
+  Definition loc_4 : location_info := LocationInfo file_0 143 4 143 42.
+  Definition loc_5 : location_info := LocationInfo file_0 144 4 144 42.
+  Definition loc_6 : location_info := LocationInfo file_0 146 4 146 28.
+  Definition loc_7 : location_info := LocationInfo file_0 148 4 148 15.
+  Definition loc_8 : location_info := LocationInfo file_0 149 4 149 15.
+  Definition loc_9 : location_info := LocationInfo file_0 150 4 150 15.
+  Definition loc_10 : location_info := LocationInfo file_0 152 4 152 29.
+  Definition loc_11 : location_info := LocationInfo file_0 153 4 153 29.
+  Definition loc_12 : location_info := LocationInfo file_0 154 4 154 29.
+  Definition loc_13 : location_info := LocationInfo file_0 156 4 156 29.
+  Definition loc_14 : location_info := LocationInfo file_0 158 4 158 25.
+  Definition loc_15 : location_info := LocationInfo file_0 160 4 160 29.
+  Definition loc_16 : location_info := LocationInfo file_0 162 4 162 23.
+  Definition loc_17 : location_info := LocationInfo file_0 163 4 163 23.
+  Definition loc_18 : location_info := LocationInfo file_0 164 4 164 23.
+  Definition loc_19 : location_info := LocationInfo file_0 166 4 166 28.
+  Definition loc_20 : location_info := LocationInfo file_0 168 4 168 32.
+  Definition loc_21 : location_info := LocationInfo file_0 169 4 169 32.
+  Definition loc_22 : location_info := LocationInfo file_0 170 4 170 32.
+  Definition loc_23 : location_info := LocationInfo file_0 172 4 172 32.
+  Definition loc_24 : location_info := LocationInfo file_0 173 4 173 32.
+  Definition loc_25 : location_info := LocationInfo file_0 174 4 174 32.
+  Definition loc_26 : location_info := LocationInfo file_0 174 4 174 8.
+  Definition loc_27 : location_info := LocationInfo file_0 174 4 174 8.
+  Definition loc_28 : location_info := LocationInfo file_0 174 9 174 23.
+  Definition loc_29 : location_info := LocationInfo file_0 174 25 174 30.
+  Definition loc_30 : location_info := LocationInfo file_0 174 25 174 30.
+  Definition loc_31 : location_info := LocationInfo file_0 173 4 173 8.
+  Definition loc_32 : location_info := LocationInfo file_0 173 4 173 8.
+  Definition loc_33 : location_info := LocationInfo file_0 173 9 173 23.
+  Definition loc_34 : location_info := LocationInfo file_0 173 25 173 30.
+  Definition loc_35 : location_info := LocationInfo file_0 173 25 173 30.
+  Definition loc_36 : location_info := LocationInfo file_0 172 4 172 8.
+  Definition loc_37 : location_info := LocationInfo file_0 172 4 172 8.
+  Definition loc_38 : location_info := LocationInfo file_0 172 9 172 23.
+  Definition loc_39 : location_info := LocationInfo file_0 172 25 172 30.
+  Definition loc_40 : location_info := LocationInfo file_0 172 25 172 30.
+  Definition loc_41 : location_info := LocationInfo file_0 170 11 170 30.
+  Definition loc_42 : location_info := LocationInfo file_0 170 11 170 17.
+  Definition loc_43 : location_info := LocationInfo file_0 170 11 170 17.
+  Definition loc_44 : location_info := LocationInfo file_0 170 12 170 17.
+  Definition loc_45 : location_info := LocationInfo file_0 170 12 170 17.
+  Definition loc_46 : location_info := LocationInfo file_0 170 21 170 30.
+  Definition loc_47 : location_info := LocationInfo file_0 170 29 170 30.
+  Definition loc_48 : location_info := LocationInfo file_0 169 11 169 30.
+  Definition loc_49 : location_info := LocationInfo file_0 169 11 169 17.
+  Definition loc_50 : location_info := LocationInfo file_0 169 11 169 17.
+  Definition loc_51 : location_info := LocationInfo file_0 169 12 169 17.
+  Definition loc_52 : location_info := LocationInfo file_0 169 12 169 17.
+  Definition loc_53 : location_info := LocationInfo file_0 169 21 169 30.
+  Definition loc_54 : location_info := LocationInfo file_0 169 29 169 30.
+  Definition loc_55 : location_info := LocationInfo file_0 168 11 168 30.
+  Definition loc_56 : location_info := LocationInfo file_0 168 11 168 17.
+  Definition loc_57 : location_info := LocationInfo file_0 168 11 168 17.
+  Definition loc_58 : location_info := LocationInfo file_0 168 12 168 17.
+  Definition loc_59 : location_info := LocationInfo file_0 168 12 168 17.
+  Definition loc_60 : location_info := LocationInfo file_0 168 21 168 30.
+  Definition loc_61 : location_info := LocationInfo file_0 168 29 168 30.
+  Definition loc_62 : location_info := LocationInfo file_0 166 11 166 26.
+  Definition loc_63 : location_info := LocationInfo file_0 166 11 166 19.
+  Definition loc_64 : location_info := LocationInfo file_0 166 11 166 19.
+  Definition loc_65 : location_info := LocationInfo file_0 166 20 166 25.
+  Definition loc_66 : location_info := LocationInfo file_0 166 21 166 25.
+  Definition loc_67 : location_info := LocationInfo file_0 164 4 164 9.
+  Definition loc_68 : location_info := LocationInfo file_0 164 12 164 22.
+  Definition loc_69 : location_info := LocationInfo file_0 164 12 164 15.
+  Definition loc_70 : location_info := LocationInfo file_0 164 12 164 15.
+  Definition loc_71 : location_info := LocationInfo file_0 164 16 164 21.
+  Definition loc_72 : location_info := LocationInfo file_0 164 17 164 21.
+  Definition loc_73 : location_info := LocationInfo file_0 163 4 163 9.
+  Definition loc_74 : location_info := LocationInfo file_0 163 12 163 22.
+  Definition loc_75 : location_info := LocationInfo file_0 163 12 163 15.
+  Definition loc_76 : location_info := LocationInfo file_0 163 12 163 15.
+  Definition loc_77 : location_info := LocationInfo file_0 163 16 163 21.
+  Definition loc_78 : location_info := LocationInfo file_0 163 17 163 21.
+  Definition loc_79 : location_info := LocationInfo file_0 162 4 162 9.
+  Definition loc_80 : location_info := LocationInfo file_0 162 12 162 22.
+  Definition loc_81 : location_info := LocationInfo file_0 162 12 162 15.
+  Definition loc_82 : location_info := LocationInfo file_0 162 12 162 15.
+  Definition loc_83 : location_info := LocationInfo file_0 162 16 162 21.
+  Definition loc_84 : location_info := LocationInfo file_0 162 17 162 21.
+  Definition loc_85 : location_info := LocationInfo file_0 160 11 160 27.
+  Definition loc_86 : location_info := LocationInfo file_0 160 11 160 17.
+  Definition loc_87 : location_info := LocationInfo file_0 160 11 160 17.
+  Definition loc_88 : location_info := LocationInfo file_0 160 18 160 23.
+  Definition loc_89 : location_info := LocationInfo file_0 160 19 160 23.
+  Definition loc_90 : location_info := LocationInfo file_0 160 25 160 26.
+  Definition loc_91 : location_info := LocationInfo file_0 158 4 158 8.
+  Definition loc_92 : location_info := LocationInfo file_0 158 11 158 24.
+  Definition loc_93 : location_info := LocationInfo file_0 158 11 158 18.
+  Definition loc_94 : location_info := LocationInfo file_0 158 11 158 18.
+  Definition loc_95 : location_info := LocationInfo file_0 158 19 158 23.
+  Definition loc_96 : location_info := LocationInfo file_0 158 19 158 23.
+  Definition loc_97 : location_info := LocationInfo file_0 156 11 156 27.
+  Definition loc_98 : location_info := LocationInfo file_0 156 11 156 17.
+  Definition loc_99 : location_info := LocationInfo file_0 156 11 156 17.
+  Definition loc_100 : location_info := LocationInfo file_0 156 18 156 23.
+  Definition loc_101 : location_info := LocationInfo file_0 156 19 156 23.
+  Definition loc_102 : location_info := LocationInfo file_0 156 25 156 26.
+  Definition loc_103 : location_info := LocationInfo file_0 154 4 154 8.
+  Definition loc_104 : location_info := LocationInfo file_0 154 11 154 28.
+  Definition loc_105 : location_info := LocationInfo file_0 154 11 154 15.
+  Definition loc_106 : location_info := LocationInfo file_0 154 11 154 15.
+  Definition loc_107 : location_info := LocationInfo file_0 154 16 154 20.
+  Definition loc_108 : location_info := LocationInfo file_0 154 16 154 20.
+  Definition loc_109 : location_info := LocationInfo file_0 154 22 154 27.
+  Definition loc_110 : location_info := LocationInfo file_0 154 22 154 27.
+  Definition loc_111 : location_info := LocationInfo file_0 153 4 153 8.
+  Definition loc_112 : location_info := LocationInfo file_0 153 11 153 28.
+  Definition loc_113 : location_info := LocationInfo file_0 153 11 153 15.
+  Definition loc_114 : location_info := LocationInfo file_0 153 11 153 15.
+  Definition loc_115 : location_info := LocationInfo file_0 153 16 153 20.
+  Definition loc_116 : location_info := LocationInfo file_0 153 16 153 20.
+  Definition loc_117 : location_info := LocationInfo file_0 153 22 153 27.
+  Definition loc_118 : location_info := LocationInfo file_0 153 22 153 27.
+  Definition loc_119 : location_info := LocationInfo file_0 152 4 152 8.
+  Definition loc_120 : location_info := LocationInfo file_0 152 11 152 28.
+  Definition loc_121 : location_info := LocationInfo file_0 152 11 152 15.
+  Definition loc_122 : location_info := LocationInfo file_0 152 11 152 15.
+  Definition loc_123 : location_info := LocationInfo file_0 152 16 152 20.
+  Definition loc_124 : location_info := LocationInfo file_0 152 16 152 20.
+  Definition loc_125 : location_info := LocationInfo file_0 152 22 152 27.
+  Definition loc_126 : location_info := LocationInfo file_0 152 22 152 27.
+  Definition loc_127 : location_info := LocationInfo file_0 150 4 150 10.
+  Definition loc_128 : location_info := LocationInfo file_0 150 5 150 10.
+  Definition loc_129 : location_info := LocationInfo file_0 150 5 150 10.
+  Definition loc_130 : location_info := LocationInfo file_0 150 13 150 14.
+  Definition loc_131 : location_info := LocationInfo file_0 149 4 149 10.
+  Definition loc_132 : location_info := LocationInfo file_0 149 5 149 10.
+  Definition loc_133 : location_info := LocationInfo file_0 149 5 149 10.
+  Definition loc_134 : location_info := LocationInfo file_0 149 13 149 14.
+  Definition loc_135 : location_info := LocationInfo file_0 148 4 148 10.
+  Definition loc_136 : location_info := LocationInfo file_0 148 5 148 10.
+  Definition loc_137 : location_info := LocationInfo file_0 148 5 148 10.
+  Definition loc_138 : location_info := LocationInfo file_0 148 13 148 14.
+  Definition loc_139 : location_info := LocationInfo file_0 146 11 146 26.
+  Definition loc_140 : location_info := LocationInfo file_0 146 11 146 19.
+  Definition loc_141 : location_info := LocationInfo file_0 146 11 146 19.
+  Definition loc_142 : location_info := LocationInfo file_0 146 20 146 25.
+  Definition loc_143 : location_info := LocationInfo file_0 146 21 146 25.
+  Definition loc_144 : location_info := LocationInfo file_0 144 20 144 41.
+  Definition loc_145 : location_info := LocationInfo file_0 144 20 144 25.
+  Definition loc_146 : location_info := LocationInfo file_0 144 20 144 25.
+  Definition loc_147 : location_info := LocationInfo file_0 144 26 144 40.
+  Definition loc_150 : location_info := LocationInfo file_0 143 20 143 41.
+  Definition loc_151 : location_info := LocationInfo file_0 143 20 143 25.
+  Definition loc_152 : location_info := LocationInfo file_0 143 20 143 25.
+  Definition loc_153 : location_info := LocationInfo file_0 143 26 143 40.
+  Definition loc_156 : location_info := LocationInfo file_0 142 20 142 41.
+  Definition loc_157 : location_info := LocationInfo file_0 142 20 142 25.
+  Definition loc_158 : location_info := LocationInfo file_0 142 20 142 25.
+  Definition loc_159 : location_info := LocationInfo file_0 142 26 142 40.
+  Definition loc_162 : location_info := LocationInfo file_0 141 18 141 24.
+  Definition loc_163 : location_info := LocationInfo file_0 141 18 141 22.
+  Definition loc_164 : location_info := LocationInfo file_0 141 18 141 22.
   Definition loc_169 : location_info := LocationInfo file_0 27 4 27 26.
   Definition loc_170 : location_info := LocationInfo file_0 27 11 27 25.
   Definition loc_173 : location_info := LocationInfo file_0 35 4 35 32.
@@ -264,113 +264,143 @@ Section code.
   Definition loc_282 : location_info := LocationInfo file_0 74 16 74 30.
   Definition loc_283 : location_info := LocationInfo file_0 70 4 70 5.
   Definition loc_284 : location_info := LocationInfo file_0 70 8 70 22.
-  Definition loc_287 : location_info := LocationInfo file_0 87 2 87 19.
-  Definition loc_288 : location_info := LocationInfo file_0 91 2 93 3.
-  Definition loc_289 : location_info := LocationInfo file_0 94 2 94 12.
-  Definition loc_290 : location_info := LocationInfo file_0 94 2 94 6.
-  Definition loc_291 : location_info := LocationInfo file_0 94 3 94 6.
-  Definition loc_292 : location_info := LocationInfo file_0 94 3 94 6.
-  Definition loc_293 : location_info := LocationInfo file_0 94 9 94 11.
-  Definition loc_294 : location_info := LocationInfo file_0 94 9 94 11.
-  Definition loc_295 : location_info := LocationInfo file_0 91 2 93 3.
-  Definition loc_296 : location_info := LocationInfo file_0 91 31 93 3.
-  Definition loc_297 : location_info := LocationInfo file_0 92 4 92 26.
-  Definition loc_298 : location_info := LocationInfo file_0 91 2 93 3.
-  Definition loc_299 : location_info := LocationInfo file_0 91 2 93 3.
-  Definition loc_300 : location_info := LocationInfo file_0 92 4 92 7.
-  Definition loc_301 : location_info := LocationInfo file_0 92 10 92 25.
-  Definition loc_302 : location_info := LocationInfo file_0 92 11 92 25.
-  Definition loc_303 : location_info := LocationInfo file_0 92 12 92 18.
-  Definition loc_304 : location_info := LocationInfo file_0 92 12 92 18.
-  Definition loc_305 : location_info := LocationInfo file_0 92 14 92 17.
-  Definition loc_306 : location_info := LocationInfo file_0 92 14 92 17.
-  Definition loc_307 : location_info := LocationInfo file_0 91 8 91 30.
-  Definition loc_308 : location_info := LocationInfo file_0 91 8 91 12.
-  Definition loc_309 : location_info := LocationInfo file_0 91 8 91 12.
-  Definition loc_310 : location_info := LocationInfo file_0 91 9 91 12.
-  Definition loc_311 : location_info := LocationInfo file_0 91 9 91 12.
-  Definition loc_312 : location_info := LocationInfo file_0 91 16 91 30.
-  Definition loc_313 : location_info := LocationInfo file_0 87 16 87 18.
-  Definition loc_314 : location_info := LocationInfo file_0 87 16 87 18.
-  Definition loc_319 : location_info := LocationInfo file_0 104 4 104 21.
-  Definition loc_320 : location_info := LocationInfo file_0 109 4 118 5.
-  Definition loc_321 : location_info := LocationInfo file_0 119 4 119 13.
-  Definition loc_322 : location_info := LocationInfo file_0 119 11 119 12.
-  Definition loc_323 : location_info := LocationInfo file_0 109 4 118 5.
-  Definition loc_324 : location_info := LocationInfo file_0 109 35 118 5.
-  Definition loc_325 : location_info := LocationInfo file_0 110 8 110 27.
-  Definition loc_326 : location_info := LocationInfo file_0 112 8 112 33.
-  Definition loc_327 : location_info := LocationInfo file_0 113 8 115 9.
-  Definition loc_328 : location_info := LocationInfo file_0 117 8 117 26.
-  Definition loc_329 : location_info := LocationInfo file_0 109 4 118 5.
-  Definition loc_330 : location_info := LocationInfo file_0 109 4 118 5.
-  Definition loc_331 : location_info := LocationInfo file_0 117 8 117 12.
-  Definition loc_332 : location_info := LocationInfo file_0 117 15 117 25.
-  Definition loc_333 : location_info := LocationInfo file_0 117 16 117 25.
-  Definition loc_334 : location_info := LocationInfo file_0 117 16 117 19.
-  Definition loc_335 : location_info := LocationInfo file_0 117 16 117 19.
-  Definition loc_336 : location_info := LocationInfo file_0 113 23 115 9.
-  Definition loc_337 : location_info := LocationInfo file_0 114 12 114 21.
-  Definition loc_338 : location_info := LocationInfo file_0 114 19 114 20.
-  Definition loc_340 : location_info := LocationInfo file_0 113 11 113 21.
-  Definition loc_341 : location_info := LocationInfo file_0 113 11 113 16.
-  Definition loc_342 : location_info := LocationInfo file_0 113 11 113 16.
-  Definition loc_343 : location_info := LocationInfo file_0 113 12 113 16.
-  Definition loc_344 : location_info := LocationInfo file_0 113 12 113 16.
-  Definition loc_345 : location_info := LocationInfo file_0 113 20 113 21.
-  Definition loc_346 : location_info := LocationInfo file_0 113 20 113 21.
-  Definition loc_347 : location_info := LocationInfo file_0 112 23 112 32.
-  Definition loc_348 : location_info := LocationInfo file_0 112 23 112 32.
-  Definition loc_349 : location_info := LocationInfo file_0 112 23 112 26.
-  Definition loc_350 : location_info := LocationInfo file_0 112 23 112 26.
-  Definition loc_353 : location_info := LocationInfo file_0 110 21 110 26.
-  Definition loc_354 : location_info := LocationInfo file_0 110 21 110 26.
-  Definition loc_355 : location_info := LocationInfo file_0 110 22 110 26.
-  Definition loc_356 : location_info := LocationInfo file_0 110 22 110 26.
-  Definition loc_359 : location_info := LocationInfo file_0 109 10 109 33.
-  Definition loc_360 : location_info := LocationInfo file_0 109 10 109 15.
-  Definition loc_361 : location_info := LocationInfo file_0 109 10 109 15.
-  Definition loc_362 : location_info := LocationInfo file_0 109 11 109 15.
-  Definition loc_363 : location_info := LocationInfo file_0 109 11 109 15.
-  Definition loc_364 : location_info := LocationInfo file_0 109 19 109 33.
-  Definition loc_365 : location_info := LocationInfo file_0 104 19 104 20.
-  Definition loc_366 : location_info := LocationInfo file_0 104 19 104 20.
-  Definition loc_371 : location_info := LocationInfo file_0 164 2 164 18.
-  Definition loc_372 : location_info := LocationInfo file_0 174 2 179 3.
-  Definition loc_373 : location_info := LocationInfo file_0 174 2 179 3.
-  Definition loc_374 : location_info := LocationInfo file_0 174 31 179 3.
-  Definition loc_375 : location_info := LocationInfo file_0 175 4 175 25.
-  Definition loc_376 : location_info := LocationInfo file_0 176 4 176 20.
-  Definition loc_377 : location_info := LocationInfo file_0 177 4 177 14.
-  Definition loc_378 : location_info := LocationInfo file_0 178 4 178 19.
-  Definition loc_379 : location_info := LocationInfo file_0 174 2 179 3.
-  Definition loc_380 : location_info := LocationInfo file_0 174 2 179 3.
-  Definition loc_381 : location_info := LocationInfo file_0 178 4 178 7.
-  Definition loc_382 : location_info := LocationInfo file_0 178 10 178 18.
-  Definition loc_383 : location_info := LocationInfo file_0 178 10 178 18.
-  Definition loc_384 : location_info := LocationInfo file_0 177 4 177 7.
-  Definition loc_385 : location_info := LocationInfo file_0 177 5 177 7.
-  Definition loc_386 : location_info := LocationInfo file_0 177 5 177 7.
-  Definition loc_387 : location_info := LocationInfo file_0 177 10 177 13.
-  Definition loc_388 : location_info := LocationInfo file_0 177 10 177 13.
-  Definition loc_389 : location_info := LocationInfo file_0 176 4 176 13.
-  Definition loc_390 : location_info := LocationInfo file_0 176 4 176 7.
-  Definition loc_391 : location_info := LocationInfo file_0 176 4 176 7.
-  Definition loc_392 : location_info := LocationInfo file_0 176 16 176 19.
-  Definition loc_393 : location_info := LocationInfo file_0 176 16 176 19.
-  Definition loc_394 : location_info := LocationInfo file_0 176 17 176 19.
-  Definition loc_395 : location_info := LocationInfo file_0 176 17 176 19.
-  Definition loc_396 : location_info := LocationInfo file_0 175 4 175 12.
-  Definition loc_397 : location_info := LocationInfo file_0 175 15 175 24.
-  Definition loc_398 : location_info := LocationInfo file_0 175 15 175 24.
-  Definition loc_399 : location_info := LocationInfo file_0 175 15 175 18.
-  Definition loc_400 : location_info := LocationInfo file_0 175 15 175 18.
-  Definition loc_401 : location_info := LocationInfo file_0 174 8 174 29.
-  Definition loc_402 : location_info := LocationInfo file_0 174 8 174 11.
-  Definition loc_403 : location_info := LocationInfo file_0 174 8 174 11.
-  Definition loc_404 : location_info := LocationInfo file_0 174 15 174 29.
-  Definition loc_405 : location_info := LocationInfo file_0 164 15 164 17.
-  Definition loc_406 : location_info := LocationInfo file_0 164 15 164 17.
+  Definition loc_287 : location_info := LocationInfo file_0 89 2 89 17.
+  Definition loc_288 : location_info := LocationInfo file_0 93 2 96 3.
+  Definition loc_289 : location_info := LocationInfo file_0 97 2 97 13.
+  Definition loc_290 : location_info := LocationInfo file_0 97 9 97 12.
+  Definition loc_291 : location_info := LocationInfo file_0 97 9 97 12.
+  Definition loc_292 : location_info := LocationInfo file_0 93 2 96 3.
+  Definition loc_293 : location_info := LocationInfo file_0 93 31 96 3.
+  Definition loc_294 : location_info := LocationInfo file_0 94 4 94 20.
+  Definition loc_295 : location_info := LocationInfo file_0 95 4 95 13.
+  Definition loc_296 : location_info := LocationInfo file_0 93 2 96 3.
+  Definition loc_297 : location_info := LocationInfo file_0 93 2 96 3.
+  Definition loc_298 : location_info := LocationInfo file_0 95 4 95 7.
+  Definition loc_299 : location_info := LocationInfo file_0 95 4 95 12.
+  Definition loc_300 : location_info := LocationInfo file_0 95 4 95 7.
+  Definition loc_301 : location_info := LocationInfo file_0 95 4 95 7.
+  Definition loc_302 : location_info := LocationInfo file_0 95 11 95 12.
+  Definition loc_303 : location_info := LocationInfo file_0 94 4 94 5.
+  Definition loc_304 : location_info := LocationInfo file_0 94 8 94 19.
+  Definition loc_305 : location_info := LocationInfo file_0 94 9 94 19.
+  Definition loc_306 : location_info := LocationInfo file_0 94 9 94 13.
+  Definition loc_307 : location_info := LocationInfo file_0 94 9 94 13.
+  Definition loc_308 : location_info := LocationInfo file_0 94 11 94 12.
+  Definition loc_309 : location_info := LocationInfo file_0 94 11 94 12.
+  Definition loc_310 : location_info := LocationInfo file_0 93 9 93 29.
+  Definition loc_311 : location_info := LocationInfo file_0 93 9 93 11.
+  Definition loc_312 : location_info := LocationInfo file_0 93 9 93 11.
+  Definition loc_313 : location_info := LocationInfo file_0 93 10 93 11.
+  Definition loc_314 : location_info := LocationInfo file_0 93 10 93 11.
+  Definition loc_315 : location_info := LocationInfo file_0 93 15 93 29.
+  Definition loc_316 : location_info := LocationInfo file_0 89 15 89 16.
+  Definition loc_321 : location_info := LocationInfo file_0 104 2 104 19.
+  Definition loc_322 : location_info := LocationInfo file_0 108 2 110 3.
+  Definition loc_323 : location_info := LocationInfo file_0 111 2 111 12.
+  Definition loc_324 : location_info := LocationInfo file_0 111 2 111 6.
+  Definition loc_325 : location_info := LocationInfo file_0 111 3 111 6.
+  Definition loc_326 : location_info := LocationInfo file_0 111 3 111 6.
+  Definition loc_327 : location_info := LocationInfo file_0 111 9 111 11.
+  Definition loc_328 : location_info := LocationInfo file_0 111 9 111 11.
+  Definition loc_329 : location_info := LocationInfo file_0 108 2 110 3.
+  Definition loc_330 : location_info := LocationInfo file_0 108 31 110 3.
+  Definition loc_331 : location_info := LocationInfo file_0 109 4 109 26.
+  Definition loc_332 : location_info := LocationInfo file_0 108 2 110 3.
+  Definition loc_333 : location_info := LocationInfo file_0 108 2 110 3.
+  Definition loc_334 : location_info := LocationInfo file_0 109 4 109 7.
+  Definition loc_335 : location_info := LocationInfo file_0 109 10 109 25.
+  Definition loc_336 : location_info := LocationInfo file_0 109 11 109 25.
+  Definition loc_337 : location_info := LocationInfo file_0 109 12 109 18.
+  Definition loc_338 : location_info := LocationInfo file_0 109 12 109 18.
+  Definition loc_339 : location_info := LocationInfo file_0 109 14 109 17.
+  Definition loc_340 : location_info := LocationInfo file_0 109 14 109 17.
+  Definition loc_341 : location_info := LocationInfo file_0 108 8 108 30.
+  Definition loc_342 : location_info := LocationInfo file_0 108 8 108 12.
+  Definition loc_343 : location_info := LocationInfo file_0 108 8 108 12.
+  Definition loc_344 : location_info := LocationInfo file_0 108 9 108 12.
+  Definition loc_345 : location_info := LocationInfo file_0 108 9 108 12.
+  Definition loc_346 : location_info := LocationInfo file_0 108 16 108 30.
+  Definition loc_347 : location_info := LocationInfo file_0 104 16 104 18.
+  Definition loc_348 : location_info := LocationInfo file_0 104 16 104 18.
+  Definition loc_353 : location_info := LocationInfo file_0 121 4 121 21.
+  Definition loc_354 : location_info := LocationInfo file_0 126 4 135 5.
+  Definition loc_355 : location_info := LocationInfo file_0 136 4 136 13.
+  Definition loc_356 : location_info := LocationInfo file_0 136 11 136 12.
+  Definition loc_357 : location_info := LocationInfo file_0 126 4 135 5.
+  Definition loc_358 : location_info := LocationInfo file_0 126 35 135 5.
+  Definition loc_359 : location_info := LocationInfo file_0 127 8 127 27.
+  Definition loc_360 : location_info := LocationInfo file_0 129 8 129 33.
+  Definition loc_361 : location_info := LocationInfo file_0 130 8 132 9.
+  Definition loc_362 : location_info := LocationInfo file_0 134 8 134 26.
+  Definition loc_363 : location_info := LocationInfo file_0 126 4 135 5.
+  Definition loc_364 : location_info := LocationInfo file_0 126 4 135 5.
+  Definition loc_365 : location_info := LocationInfo file_0 134 8 134 12.
+  Definition loc_366 : location_info := LocationInfo file_0 134 15 134 25.
+  Definition loc_367 : location_info := LocationInfo file_0 134 16 134 25.
+  Definition loc_368 : location_info := LocationInfo file_0 134 16 134 19.
+  Definition loc_369 : location_info := LocationInfo file_0 134 16 134 19.
+  Definition loc_370 : location_info := LocationInfo file_0 130 23 132 9.
+  Definition loc_371 : location_info := LocationInfo file_0 131 12 131 21.
+  Definition loc_372 : location_info := LocationInfo file_0 131 19 131 20.
+  Definition loc_374 : location_info := LocationInfo file_0 130 11 130 21.
+  Definition loc_375 : location_info := LocationInfo file_0 130 11 130 16.
+  Definition loc_376 : location_info := LocationInfo file_0 130 11 130 16.
+  Definition loc_377 : location_info := LocationInfo file_0 130 12 130 16.
+  Definition loc_378 : location_info := LocationInfo file_0 130 12 130 16.
+  Definition loc_379 : location_info := LocationInfo file_0 130 20 130 21.
+  Definition loc_380 : location_info := LocationInfo file_0 130 20 130 21.
+  Definition loc_381 : location_info := LocationInfo file_0 129 23 129 32.
+  Definition loc_382 : location_info := LocationInfo file_0 129 23 129 32.
+  Definition loc_383 : location_info := LocationInfo file_0 129 23 129 26.
+  Definition loc_384 : location_info := LocationInfo file_0 129 23 129 26.
+  Definition loc_387 : location_info := LocationInfo file_0 127 21 127 26.
+  Definition loc_388 : location_info := LocationInfo file_0 127 21 127 26.
+  Definition loc_389 : location_info := LocationInfo file_0 127 22 127 26.
+  Definition loc_390 : location_info := LocationInfo file_0 127 22 127 26.
+  Definition loc_393 : location_info := LocationInfo file_0 126 10 126 33.
+  Definition loc_394 : location_info := LocationInfo file_0 126 10 126 15.
+  Definition loc_395 : location_info := LocationInfo file_0 126 10 126 15.
+  Definition loc_396 : location_info := LocationInfo file_0 126 11 126 15.
+  Definition loc_397 : location_info := LocationInfo file_0 126 11 126 15.
+  Definition loc_398 : location_info := LocationInfo file_0 126 19 126 33.
+  Definition loc_399 : location_info := LocationInfo file_0 121 19 121 20.
+  Definition loc_400 : location_info := LocationInfo file_0 121 19 121 20.
+  Definition loc_405 : location_info := LocationInfo file_0 181 2 181 18.
+  Definition loc_406 : location_info := LocationInfo file_0 191 2 196 3.
+  Definition loc_407 : location_info := LocationInfo file_0 191 2 196 3.
+  Definition loc_408 : location_info := LocationInfo file_0 191 31 196 3.
+  Definition loc_409 : location_info := LocationInfo file_0 192 4 192 25.
+  Definition loc_410 : location_info := LocationInfo file_0 193 4 193 20.
+  Definition loc_411 : location_info := LocationInfo file_0 194 4 194 14.
+  Definition loc_412 : location_info := LocationInfo file_0 195 4 195 19.
+  Definition loc_413 : location_info := LocationInfo file_0 191 2 196 3.
+  Definition loc_414 : location_info := LocationInfo file_0 191 2 196 3.
+  Definition loc_415 : location_info := LocationInfo file_0 195 4 195 7.
+  Definition loc_416 : location_info := LocationInfo file_0 195 10 195 18.
+  Definition loc_417 : location_info := LocationInfo file_0 195 10 195 18.
+  Definition loc_418 : location_info := LocationInfo file_0 194 4 194 7.
+  Definition loc_419 : location_info := LocationInfo file_0 194 5 194 7.
+  Definition loc_420 : location_info := LocationInfo file_0 194 5 194 7.
+  Definition loc_421 : location_info := LocationInfo file_0 194 10 194 13.
+  Definition loc_422 : location_info := LocationInfo file_0 194 10 194 13.
+  Definition loc_423 : location_info := LocationInfo file_0 193 4 193 13.
+  Definition loc_424 : location_info := LocationInfo file_0 193 4 193 7.
+  Definition loc_425 : location_info := LocationInfo file_0 193 4 193 7.
+  Definition loc_426 : location_info := LocationInfo file_0 193 16 193 19.
+  Definition loc_427 : location_info := LocationInfo file_0 193 16 193 19.
+  Definition loc_428 : location_info := LocationInfo file_0 193 17 193 19.
+  Definition loc_429 : location_info := LocationInfo file_0 193 17 193 19.
+  Definition loc_430 : location_info := LocationInfo file_0 192 4 192 12.
+  Definition loc_431 : location_info := LocationInfo file_0 192 15 192 24.
+  Definition loc_432 : location_info := LocationInfo file_0 192 15 192 24.
+  Definition loc_433 : location_info := LocationInfo file_0 192 15 192 18.
+  Definition loc_434 : location_info := LocationInfo file_0 192 15 192 18.
+  Definition loc_435 : location_info := LocationInfo file_0 191 8 191 29.
+  Definition loc_436 : location_info := LocationInfo file_0 191 8 191 11.
+  Definition loc_437 : location_info := LocationInfo file_0 191 8 191 11.
+  Definition loc_438 : location_info := LocationInfo file_0 191 15 191 29.
+  Definition loc_439 : location_info := LocationInfo file_0 181 15 181 17.
+  Definition loc_440 : location_info := LocationInfo file_0 181 15 181 17.
 
   (* Definition of struct [list]. *)
   Program Definition struct_list := {|
@@ -663,6 +693,53 @@ Section code.
     )%E
   |}.
 
+  (* Definition of function [length]. *)
+  Definition impl_length : function := {|
+    f_args := [
+      ("p", LPtr)
+    ];
+    f_local_vars := [
+      ("len", it_layout size_t)
+    ];
+    f_init := "#0";
+    f_code := (
+      <[ "#0" :=
+        "len" <-{ it_layout size_t }
+          LocInfoE loc_316 (UnOp (CastOp $ IntOp size_t) (IntOp i32) (LocInfoE loc_316 (i2v 0 i32))) ;
+        locinfo: loc_288 ;
+        Goto "#1"
+      ]> $
+      <[ "#1" :=
+        locinfo: loc_310 ;
+        if: LocInfoE loc_310 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_310 ((LocInfoE loc_311 (use{LPtr} (LocInfoE loc_313 (!{LPtr} (LocInfoE loc_314 ("p")))))) !={PtrOp, PtrOp} (LocInfoE loc_315 (NULL)))))
+        then
+        locinfo: loc_294 ;
+          Goto "#2"
+        else
+        locinfo: loc_289 ;
+          Goto "#3"
+      ]> $
+      <[ "#2" :=
+        locinfo: loc_294 ;
+        LocInfoE loc_303 ("p") <-{ LPtr }
+          LocInfoE loc_304 (&(LocInfoE loc_305 ((LocInfoE loc_306 (!{LPtr} (LocInfoE loc_308 (!{LPtr} (LocInfoE loc_309 ("p")))))) at{struct_list} "tail"))) ;
+        locinfo: loc_295 ;
+        LocInfoE loc_298 ("len") <-{ it_layout size_t }
+          LocInfoE loc_299 ((LocInfoE loc_300 (use{it_layout size_t} (LocInfoE loc_301 ("len")))) +{IntOp size_t, IntOp size_t} (LocInfoE loc_302 (UnOp (CastOp $ IntOp size_t) (IntOp i32) (LocInfoE loc_302 (i2v 1 i32))))) ;
+        locinfo: loc_296 ;
+        Goto "continue15"
+      ]> $
+      <[ "#3" :=
+        locinfo: loc_289 ;
+        Return (LocInfoE loc_290 (use{it_layout size_t} (LocInfoE loc_291 ("len"))))
+      ]> $
+      <[ "continue15" :=
+        locinfo: loc_288 ;
+        Goto "#1"
+      ]> $∅
+    )%E
+  |}.
+
   (* Definition of function [append]. *)
   Definition impl_append : function := {|
     f_args := [
@@ -676,35 +753,35 @@ Section code.
     f_code := (
       <[ "#0" :=
         "end" <-{ LPtr }
-          LocInfoE loc_313 (use{LPtr} (LocInfoE loc_314 ("l1"))) ;
-        locinfo: loc_288 ;
+          LocInfoE loc_347 (use{LPtr} (LocInfoE loc_348 ("l1"))) ;
+        locinfo: loc_322 ;
         Goto "#1"
       ]> $
       <[ "#1" :=
-        locinfo: loc_307 ;
-        if: LocInfoE loc_307 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_307 ((LocInfoE loc_308 (use{LPtr} (LocInfoE loc_310 (!{LPtr} (LocInfoE loc_311 ("end")))))) !={PtrOp, PtrOp} (LocInfoE loc_312 (NULL)))))
+        locinfo: loc_341 ;
+        if: LocInfoE loc_341 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_341 ((LocInfoE loc_342 (use{LPtr} (LocInfoE loc_344 (!{LPtr} (LocInfoE loc_345 ("end")))))) !={PtrOp, PtrOp} (LocInfoE loc_346 (NULL)))))
         then
-        locinfo: loc_297 ;
+        locinfo: loc_331 ;
           Goto "#2"
         else
-        locinfo: loc_289 ;
+        locinfo: loc_323 ;
           Goto "#3"
       ]> $
       <[ "#2" :=
-        locinfo: loc_297 ;
-        LocInfoE loc_300 ("end") <-{ LPtr }
-          LocInfoE loc_301 (&(LocInfoE loc_302 ((LocInfoE loc_303 (!{LPtr} (LocInfoE loc_305 (!{LPtr} (LocInfoE loc_306 ("end")))))) at{struct_list} "tail"))) ;
-        locinfo: loc_298 ;
-        Goto "continue15"
+        locinfo: loc_331 ;
+        LocInfoE loc_334 ("end") <-{ LPtr }
+          LocInfoE loc_335 (&(LocInfoE loc_336 ((LocInfoE loc_337 (!{LPtr} (LocInfoE loc_339 (!{LPtr} (LocInfoE loc_340 ("end")))))) at{struct_list} "tail"))) ;
+        locinfo: loc_332 ;
+        Goto "continue19"
       ]> $
       <[ "#3" :=
-        locinfo: loc_289 ;
-        LocInfoE loc_291 (!{LPtr} (LocInfoE loc_292 ("end"))) <-{ LPtr }
-          LocInfoE loc_293 (use{LPtr} (LocInfoE loc_294 ("l2"))) ;
+        locinfo: loc_323 ;
+        LocInfoE loc_325 (!{LPtr} (LocInfoE loc_326 ("end"))) <-{ LPtr }
+          LocInfoE loc_327 (use{LPtr} (LocInfoE loc_328 ("l2"))) ;
         Return (VOID)
       ]> $
-      <[ "continue15" :=
-        locinfo: loc_288 ;
+      <[ "continue19" :=
+        locinfo: loc_322 ;
         Goto "#1"
       ]> $∅
     )%E
@@ -725,54 +802,54 @@ Section code.
     f_code := (
       <[ "#0" :=
         "prev" <-{ LPtr }
-          LocInfoE loc_365 (use{LPtr} (LocInfoE loc_366 ("p"))) ;
-        locinfo: loc_320 ;
+          LocInfoE loc_399 (use{LPtr} (LocInfoE loc_400 ("p"))) ;
+        locinfo: loc_354 ;
         Goto "#1"
       ]> $
       <[ "#1" :=
-        locinfo: loc_359 ;
-        if: LocInfoE loc_359 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_359 ((LocInfoE loc_360 (use{LPtr} (LocInfoE loc_362 (!{LPtr} (LocInfoE loc_363 ("prev")))))) !={PtrOp, PtrOp} (LocInfoE loc_364 (NULL)))))
+        locinfo: loc_393 ;
+        if: LocInfoE loc_393 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_393 ((LocInfoE loc_394 (use{LPtr} (LocInfoE loc_396 (!{LPtr} (LocInfoE loc_397 ("prev")))))) !={PtrOp, PtrOp} (LocInfoE loc_398 (NULL)))))
         then
         Goto "#2"
         else
-        locinfo: loc_321 ;
+        locinfo: loc_355 ;
           Goto "#3"
       ]> $
       <[ "#2" :=
         "cur" <-{ LPtr }
-          LocInfoE loc_353 (use{LPtr} (LocInfoE loc_355 (!{LPtr} (LocInfoE loc_356 ("prev"))))) ;
+          LocInfoE loc_387 (use{LPtr} (LocInfoE loc_389 (!{LPtr} (LocInfoE loc_390 ("prev"))))) ;
         "head" <-{ LPtr }
-          LocInfoE loc_347 (UnOp (CastOp $ PtrOp) (PtrOp) (LocInfoE loc_347 (use{LPtr} (LocInfoE loc_348 ((LocInfoE loc_349 (!{LPtr} (LocInfoE loc_350 ("cur")))) at{struct_list} "head"))))) ;
-        locinfo: loc_340 ;
-        if: LocInfoE loc_340 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_340 ((LocInfoE loc_341 (use{it_layout size_t} (LocInfoE loc_343 (!{LPtr} (LocInfoE loc_344 ("head")))))) ={IntOp size_t, IntOp size_t} (LocInfoE loc_345 (use{it_layout size_t} (LocInfoE loc_346 ("k")))))))
+          LocInfoE loc_381 (UnOp (CastOp $ PtrOp) (PtrOp) (LocInfoE loc_381 (use{LPtr} (LocInfoE loc_382 ((LocInfoE loc_383 (!{LPtr} (LocInfoE loc_384 ("cur")))) at{struct_list} "head"))))) ;
+        locinfo: loc_374 ;
+        if: LocInfoE loc_374 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_374 ((LocInfoE loc_375 (use{it_layout size_t} (LocInfoE loc_377 (!{LPtr} (LocInfoE loc_378 ("head")))))) ={IntOp size_t, IntOp size_t} (LocInfoE loc_379 (use{it_layout size_t} (LocInfoE loc_380 ("k")))))))
         then
-        locinfo: loc_337 ;
+        locinfo: loc_371 ;
           Goto "#5"
         else
-        locinfo: loc_328 ;
+        locinfo: loc_362 ;
           Goto "#6"
       ]> $
       <[ "#3" :=
-        locinfo: loc_321 ;
-        Return (LocInfoE loc_322 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_322 (i2v 0 i32))))
+        locinfo: loc_355 ;
+        Return (LocInfoE loc_356 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_356 (i2v 0 i32))))
       ]> $
       <[ "#4" :=
-        locinfo: loc_328 ;
-        LocInfoE loc_331 ("prev") <-{ LPtr }
-          LocInfoE loc_332 (&(LocInfoE loc_333 ((LocInfoE loc_334 (!{LPtr} (LocInfoE loc_335 ("cur")))) at{struct_list} "tail"))) ;
-        locinfo: loc_329 ;
-        Goto "continue19"
+        locinfo: loc_362 ;
+        LocInfoE loc_365 ("prev") <-{ LPtr }
+          LocInfoE loc_366 (&(LocInfoE loc_367 ((LocInfoE loc_368 (!{LPtr} (LocInfoE loc_369 ("cur")))) at{struct_list} "tail"))) ;
+        locinfo: loc_363 ;
+        Goto "continue23"
       ]> $
       <[ "#5" :=
-        locinfo: loc_337 ;
-        Return (LocInfoE loc_338 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_338 (i2v 1 i32))))
+        locinfo: loc_371 ;
+        Return (LocInfoE loc_372 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_372 (i2v 1 i32))))
       ]> $
       <[ "#6" :=
-        locinfo: loc_328 ;
+        locinfo: loc_362 ;
         Goto "#4"
       ]> $
-      <[ "continue19" :=
-        locinfo: loc_320 ;
+      <[ "continue23" :=
+        locinfo: loc_354 ;
         Goto "#1"
       ]> $∅
     )%E
@@ -792,40 +869,40 @@ Section code.
     f_code := (
       <[ "#0" :=
         "cur" <-{ LPtr }
-          LocInfoE loc_405 (use{LPtr} (LocInfoE loc_406 ("l1"))) ;
-        locinfo: loc_372 ;
+          LocInfoE loc_439 (use{LPtr} (LocInfoE loc_440 ("l1"))) ;
+        locinfo: loc_406 ;
         Goto "#1"
       ]> $
       <[ "#1" :=
-        locinfo: loc_401 ;
-        if: LocInfoE loc_401 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_401 ((LocInfoE loc_402 (use{LPtr} (LocInfoE loc_403 ("cur")))) !={PtrOp, PtrOp} (LocInfoE loc_404 (NULL)))))
+        locinfo: loc_435 ;
+        if: LocInfoE loc_435 (UnOp (CastOp $ IntOp bool_it) (IntOp i32) (LocInfoE loc_435 ((LocInfoE loc_436 (use{LPtr} (LocInfoE loc_437 ("cur")))) !={PtrOp, PtrOp} (LocInfoE loc_438 (NULL)))))
         then
-        locinfo: loc_375 ;
+        locinfo: loc_409 ;
           Goto "#2"
         else
         Goto "#3"
       ]> $
       <[ "#2" :=
-        locinfo: loc_375 ;
-        LocInfoE loc_396 ("cur_tail") <-{ LPtr }
-          LocInfoE loc_397 (use{LPtr} (LocInfoE loc_398 ((LocInfoE loc_399 (!{LPtr} (LocInfoE loc_400 ("cur")))) at{struct_list} "tail"))) ;
-        locinfo: loc_376 ;
-        LocInfoE loc_389 ((LocInfoE loc_390 (!{LPtr} (LocInfoE loc_391 ("cur")))) at{struct_list} "tail") <-{ LPtr }
-          LocInfoE loc_392 (use{LPtr} (LocInfoE loc_394 (!{LPtr} (LocInfoE loc_395 ("l2"))))) ;
-        locinfo: loc_377 ;
-        LocInfoE loc_385 (!{LPtr} (LocInfoE loc_386 ("l2"))) <-{ LPtr }
-          LocInfoE loc_387 (use{LPtr} (LocInfoE loc_388 ("cur"))) ;
-        locinfo: loc_378 ;
-        LocInfoE loc_381 ("cur") <-{ LPtr }
-          LocInfoE loc_382 (use{LPtr} (LocInfoE loc_383 ("cur_tail"))) ;
-        locinfo: loc_379 ;
-        Goto "continue26"
+        locinfo: loc_409 ;
+        LocInfoE loc_430 ("cur_tail") <-{ LPtr }
+          LocInfoE loc_431 (use{LPtr} (LocInfoE loc_432 ((LocInfoE loc_433 (!{LPtr} (LocInfoE loc_434 ("cur")))) at{struct_list} "tail"))) ;
+        locinfo: loc_410 ;
+        LocInfoE loc_423 ((LocInfoE loc_424 (!{LPtr} (LocInfoE loc_425 ("cur")))) at{struct_list} "tail") <-{ LPtr }
+          LocInfoE loc_426 (use{LPtr} (LocInfoE loc_428 (!{LPtr} (LocInfoE loc_429 ("l2"))))) ;
+        locinfo: loc_411 ;
+        LocInfoE loc_419 (!{LPtr} (LocInfoE loc_420 ("l2"))) <-{ LPtr }
+          LocInfoE loc_421 (use{LPtr} (LocInfoE loc_422 ("cur"))) ;
+        locinfo: loc_412 ;
+        LocInfoE loc_415 ("cur") <-{ LPtr }
+          LocInfoE loc_416 (use{LPtr} (LocInfoE loc_417 ("cur_tail"))) ;
+        locinfo: loc_413 ;
+        Goto "continue30"
       ]> $
       <[ "#3" :=
         Return (VOID)
       ]> $
-      <[ "continue26" :=
-        locinfo: loc_372 ;
+      <[ "continue30" :=
+        locinfo: loc_406 ;
         Goto "#1"
       ]> $∅
     )%E
diff --git a/tutorial/proofs/t03_list/generated_proof_length.v b/tutorial/proofs/t03_list/generated_proof_length.v
new file mode 100644
index 0000000000000000000000000000000000000000..3cf1c083966010220ff57b66b6a23104a975c872
--- /dev/null
+++ b/tutorial/proofs/t03_list/generated_proof_length.v
@@ -0,0 +1,34 @@
+From refinedc.typing Require Import typing.
+From refinedc.tutorial.t03_list Require Import generated_code.
+From refinedc.tutorial.t03_list Require Import generated_spec.
+Set Default Proof Using "Type".
+
+(* Generated from [tutorial/t03_list.c]. *)
+Section proof_length.
+  Context `{!typeG Σ} `{!globalG Σ}.
+
+  (* Typing proof for [length]. *)
+  Lemma type_length :
+    ⊢ typed_function impl_length type_of_length.
+  Proof.
+    start_function "length" ([p l]) => arg_p local_len.
+    split_blocks ((
+      <[ "#1" :=
+        ∃ q : loc,
+        ∃ l1 : list type,
+        arg_p ◁ₗ (q @ (&own (l1 @ (list_t)))) ∗
+        local_len ◁ₗ ((length l - length l1) @ (int (size_t))) ∗
+        (p ◁ₗ (wand (q ◁ₗ l1 @ list_t) (l @ (list_t))))
+    ]> $
+      ∅
+    )%I : gmap label (iProp Σ)) ((
+      ∅
+    )%I : gmap label (iProp Σ)).
+    - repeat liRStep; liShow.
+      all: print_typesystem_goal "length" "#0".
+    - repeat liRStep; liShow.
+      all: print_typesystem_goal "length" "#1".
+    Unshelve. all: prepare_sideconditions; normalize_and_simpl_goal; try solve_goal.
+    all: print_sidecondition_goal "length".
+  Qed.
+End proof_length.
diff --git a/tutorial/proofs/t03_list/generated_spec.v b/tutorial/proofs/t03_list/generated_spec.v
index 8403dce3f1f44c603514848ab27ee83e77c82d4d..e403b481eb494cb2ee0f889c12fb35e66a984d9c 100644
--- a/tutorial/proofs/t03_list/generated_spec.v
+++ b/tutorial/proofs/t03_list/generated_spec.v
@@ -122,6 +122,11 @@ Section spec.
     fn(∀ l : (list type); (l @ (list_t)); True)
       → ∃ () : (), ((rev l) @ (list_t)); True.
 
+  (* Specifications for function [length]. *)
+  Definition type_of_length :=
+    fn(∀ (p, l) : loc * (list type); (p @ (&own (l @ (list_t)))); ⌜length l <= max_int size_t⌝)
+      → ∃ () : (), ((length l) @ (int (size_t))); (p ◁ₗ (l @ (list_t))).
+
   (* Specifications for function [append]. *)
   Definition type_of_append :=
     fn(∀ (p, l1, l2) : loc * (list type) * (list type); (p @ (&own (l1 @ (list_t)))), (l2 @ (list_t)); True)
diff --git a/tutorial/proofs/t03_list/proof_files b/tutorial/proofs/t03_list/proof_files
index 709c2e2d7d9958f17e0b4abe4bcd8a6fddc03d70..4f3248c6ee0babb6fcb631386b020f666599766d 100644
--- a/tutorial/proofs/t03_list/proof_files
+++ b/tutorial/proofs/t03_list/proof_files
@@ -5,6 +5,7 @@ generated_proof_free.v
 generated_proof_free_array.v
 generated_proof_init.v
 generated_proof_is_empty.v
+generated_proof_length.v
 generated_proof_member.v
 generated_proof_pop.v
 generated_proof_push.v
diff --git a/tutorial/t03_list.c b/tutorial/t03_list.c
index 72ccbd2562962cdd19e1d05692ea0de7b70bdaac..ddf745a31a388d020fd2fdea16325826ce3b0636 100644
--- a/tutorial/t03_list.c
+++ b/tutorial/t03_list.c
@@ -80,6 +80,23 @@ list_t reverse (list_t p) {
     return w;
 }
 
+[[rc::parameters("p : loc", "l : {list type}")]]
+[[rc::args("p @ &own<l @ list_t>")]]
+[[rc::requires("{length l <= max_int size_t}")]]
+[[rc::returns("{length l} @ int<size_t>")]]
+[[rc::ensures("p @ &own<l @ list_t>")]]
+size_t length (list_t *p) {
+  size_t len = 0;
+  [[rc::exists("q : loc", "l1 : {list type}")]]
+  [[rc::inv_vars("p : q @ &own<l1 @ list_t>", "len : {length l - length l1} @ int<size_t>")]]
+  [[rc::constraints("p @ &own<wand<{q ◁ₗ l1 @ list_t}, l @ list_t>>")]]
+  while (*p != NULL) {
+    p = &(*p)->tail;
+    len += 1;
+  }
+  return len;
+}
+
 [[rc::parameters("p : loc", "l1 : {list type}", "l2 : {list type}")]]
 [[rc::args("p @ &own<l1 @ list_t>", "l2 @ list_t")]]
 [[rc::ensures("p @ &own<{l1 ++ l2} @ list_t>")]]