Skip to content

Commit e026a91

Browse files
committed
Fix mlvector given changes in HOL
1 parent 191db55 commit e026a91

File tree

1 file changed

+68
-52
lines changed

1 file changed

+68
-52
lines changed

basis/pure/mlvectorScript.sml

+68-52
Original file line numberDiff line numberDiff line change
@@ -243,23 +243,27 @@ QED
243243

244244

245245

246-
val exists_aux_def = Define`
246+
Definition exists_aux_def:
247247
(exists_aux f vec n 0 = F) /\
248248
(exists_aux f vec n (SUC len) =
249249
if f (sub vec n)
250250
then T
251-
else exists_aux f vec (n + 1) len)`;
251+
else exists_aux f vec (n + 1) len)
252+
End
252253

253-
val exists_def = Define`
254-
exists f vec = exists_aux f vec 0 (length vec)`;
254+
Definition exists_def:
255+
exists f vec = exists_aux f vec 0 (length vec)
256+
End
255257

256-
val exists_aux_thm = Q.prove(
257-
`!f vec n len. (n + len = length (vec)) ==>
258-
(exists_aux f vec n len = EXISTS f (DROP n (toList vec)))`,
259-
Induct_on `len` \\ Cases_on `vec` \\ rw[toList_thm, length_def, sub_def, exists_aux_def] THEN1
260-
rw [DROP_LENGTH_NIL, EVERY_DEF] \\
258+
Theorem exists_aux_thm[local]:
259+
!f vec n len.
260+
n + len = length vec ==>
261+
exists_aux f vec n len = EXISTS f (DROP n (toList vec))
262+
Proof
263+
Induct_on `len` \\ Cases_on `vec` \\
264+
rw[toList_thm, length_def, sub_def, exists_aux_def] \\
261265
rw [DROP_EL_CONS]
262-
);
266+
QED
263267

264268
Theorem exists_thm:
265269
!f vec. exists f vec = EXISTS f (toList vec)
@@ -268,79 +272,91 @@ Proof
268272
rw [exists_def, exists_aux_thm]
269273
QED
270274

271-
272-
273-
val all_aux_def = Define`
275+
Definition all_aux_def:
274276
(all_aux f vec n 0 = T) /\
275277
(all_aux f vec n (SUC len) =
276278
if f (sub vec n)
277279
then all_aux f vec (n + 1) len
278-
else F)`;
280+
else F)
281+
End
279282

280-
val all_def = Define`
281-
all f vec = all_aux f vec 0 (length vec)`;
283+
Definition all_def: all f vec = all_aux f vec 0 (length vec)
284+
End
282285

283-
val all_aux_thm = Q.prove (
284-
`!f vec n len. (n + len = length vec) ==> (all_aux f vec n len = EVERY f (DROP n (toList vec)))`,
285-
Induct_on `len` \\ Cases_on `vec` \\ rw[toList_thm, length_def, sub_def, all_aux_def] THEN1
286-
rw [DROP_LENGTH_NIL] \\
286+
Theorem all_aux_thm[local]:
287+
!f vec n len.
288+
n + len = length vec ==>
289+
all_aux f vec n len = EVERY f (DROP n (toList vec))
290+
Proof
291+
Induct_on `len` \\ Cases_on `vec` \\
292+
rw[toList_thm, length_def, sub_def, all_aux_def] \\
287293
rw [DROP_EL_CONS]
288-
);
294+
QED
289295

290296
Theorem all_thm:
291297
!f vec. all f vec = EVERY f (toList vec)
292298
Proof
293299
Cases_on `vec` \\ rw[all_def, all_aux_thm]
294300
QED
295301

296-
297-
298-
val collate_aux_def = Define`
302+
Definition collate_aux_def:
299303
(collate_aux f vec1 vec2 n ord 0 = ord) /\
300304
(collate_aux f vec1 vec2 n ord (SUC len) =
301305
if f (sub vec1 n) (sub vec2 n) = EQUAL
302306
then collate_aux f vec1 vec2 (n + 1) ord len
303-
else f (sub vec1 n) (sub vec2 n))`;
307+
else f (sub vec1 n) (sub vec2 n))
308+
End
304309

305-
val collate_def = Define`
310+
Definition collate_def:
306311
collate f vec1 vec2 =
307312
if (length vec1) < (length vec2)
308313
then collate_aux f vec1 vec2 0 LESS (length vec1)
309314
else if (length vec2) < (length vec1)
310315
then collate_aux f vec1 vec2 0 GREATER (length vec2)
311-
else collate_aux f vec1 vec2 0 EQUAL (length vec2)`;
312-
313-
val collate_aux_less_thm = Q.prove (
314-
`!f vec1 vec2 n len. (n + len = length vec1) /\ (length vec1 < length vec2) ==>
315-
(collate_aux f vec1 vec2 n Less len = mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2)))`,
316-
Cases_on `vec1` \\ Cases_on `vec2` \\ Induct_on `len` \\
317-
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm, sub_def, DROP_EL_CONS]
318-
>- rw [DROP_LENGTH_TOO_LONG, mllistTheory.collate_def]
319-
);
316+
else collate_aux f vec1 vec2 0 EQUAL (length vec2)
317+
End
318+
319+
Theorem collate_aux_less_thm[local]:
320+
!f vec1 vec2 n len.
321+
n + len = length vec1 /\ length vec1 < length vec2 ==>
322+
collate_aux f vec1 vec2 n Less len =
323+
mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2))
324+
Proof
325+
Cases_on ‘vec1’ \\ Cases_on ‘vec2’ \\ Induct_on ‘len’ \\
326+
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm,
327+
sub_def, DROP_EL_CONS]
328+
QED
320329

321-
val collate_aux_equal_thm = Q.prove (
322-
`!f vec1 vec2 n len. (n + len = length vec2) /\ (length vec1 = length vec2) ==>
323-
(collate_aux f vec1 vec2 n Equal len =
324-
mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2)))`,
325-
Cases_on `vec1` \\ Cases_on `vec2` \\ Induct_on `len` \\
326-
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm, sub_def]
330+
Theorem collate_aux_equal_thm[local]:
331+
!f vec1 vec2 n len.
332+
n + len = length vec2 /\ length vec1 = length vec2 ==>
333+
collate_aux f vec1 vec2 n Equal len =
334+
mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2))
335+
Proof
336+
Cases_on ‘vec1’ \\ Cases_on ‘vec2’ \\ Induct_on ‘len’ \\
337+
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm,
338+
sub_def]
327339
>- rw [DROP_LENGTH_TOO_LONG, mllistTheory.collate_def] \\
328340
fs [DROP_EL_CONS, mllistTheory.collate_def]
329-
);
341+
QED
330342

331-
val collate_aux_greater_thm = Q.prove (
332-
`!f vec1 vec2 n len. (n + len = length vec2) /\ (length vec2 < length vec1) ==>
333-
(collate_aux f vec1 vec2 n Greater len =
334-
mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2)))`,
335-
Cases_on `vec1` \\ Cases_on `vec2` \\ Induct_on `len` \\
336-
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm, sub_def, DROP_EL_CONS]
337-
>- rw [DROP_LENGTH_TOO_LONG, mllistTheory.collate_def]
338-
);
343+
Theorem collate_aux_greater_thm[local]:
344+
!f vec1 vec2 n len.
345+
n + len = length vec2 /\ length vec2 < length vec1 ==>
346+
collate_aux f vec1 vec2 n Greater len =
347+
mllist$collate f (DROP n (toList vec1)) (DROP n (toList vec2))
348+
Proof
349+
Cases_on ‘vec1’ \\ Cases_on ‘vec2’ \\ Induct_on ‘len’ \\
350+
rw [collate_aux_def, mllistTheory.collate_def, length_def, toList_thm,
351+
sub_def, DROP_EL_CONS]
352+
QED
339353

340354
Theorem collate_thm:
341-
!f vec1 vec2. collate f vec1 vec2 = mllist$collate f (toList vec1) (toList vec2)
355+
!f vec1 vec2.
356+
collate f vec1 vec2 = mllist$collate f (toList vec1) (toList vec2)
342357
Proof
343-
rw [collate_def, collate_aux_greater_thm, collate_aux_equal_thm, collate_aux_less_thm]
358+
rw [collate_def, collate_aux_greater_thm, collate_aux_equal_thm,
359+
collate_aux_less_thm]
344360
QED
345361

346362
val _ = export_theory()

0 commit comments

Comments
 (0)