Skip to content

Commit 5c7a0c2

Browse files
committed
Remove val foo = Q.prove(..) automatically
Note we only remove instances where foo contains the result of Q.prove, not a modified version through use of |>. import os import re import sys def match_comment_parens(s, start_idx): if s[start_idx:start_idx + 2] == '(*': paren_count = 0 comment_content = "" for i, char in enumerate(s[start_idx:], start=start_idx): if char == '(' and s[i + 1] == '*': paren_count += 1 elif char == '*' and i + 1 < len(s) and s[i + 1] == ')': paren_count -= 1 comment_content += char if paren_count == 0: comment_content += ")" i += 1 while i + 1 < len(s) and s[i + 1].isspace(): i += 1 comment_content += s[i] return comment_content, i + 1 comment_content += char return None return "", start_idx def transform_definition(s): done_before = 0 pattern = re.compile(r"\nval[ \t]+([a-zA-Z0-9][a-zA-Z0-9_']*)\s*=\s*Q.prove\s*") match = pattern.search(s, done_before) while match: re_start, re_end = match.span() comment_parens, comment_end = match_comment_parens(s, re_end) if s[comment_end] == '(': paren_count = 0 paren_content = "" for i, char in enumerate(s[comment_end:]): if char == '(': paren_count += 1 elif char == ')': paren_count -= 1 paren_content += char if paren_count == 0: break paren_length = len(paren_content) paren_content = paren_content[1:paren_length-1] match2 = re.search(r"\s*(?:`|‘)([^`’]*?)(?:`|’)\s*,(.*)", paren_content, re.DOTALL) if match2: if comment_parens == "": replacement = f"\nTriviality {match.group(1)}:\n {match2.group(1).strip()}\nProof\n {match2.group(2).strip()}\nQED" else: replacement = f"\n{comment_parens}Triviality {match.group(1)}:\n {match2.group(1).strip()}\nProof\n {match2.group(2).strip()}\nQED" if comment_end + paren_length < len(s) and s[comment_end + paren_length] == ';': s = s[:re_start] + replacement + s[comment_end+paren_length+1:] elif comment_end + paren_length + 1< len(s) and s[(comment_end + paren_length):(comment_end + paren_length+2)] == "\n\n": s = s[:re_start] + replacement + s[comment_end+paren_length:] else: done_before = comment_end + paren_length else: done_before = comment_end else: done_before = comment_end match = pattern.search(s, done_before) return s def process_sml_file(filepath): with open(filepath, 'r') as file: content = file.read() transformed_content = transform_definition(content) with open(filepath, 'w') as file: file.write(transformed_content) def find_and_transform_sml_files(directory): for root, _, files in os.walk(directory): for file in files: if (file.endswith("Script.sml")): filepath = os.path.join(root, file) print(f"Processing file: {filepath}") process_sml_file(filepath) if __name__ == "__main__": if len(sys.argv) != 2: print("Usage: python script.py <directory>") sys.exit(1) directory_to_search = sys.argv[1] if not os.path.isdir(directory_to_search): print(f"Error: {directory_to_search} is not a valid directory.") sys.exit(1) find_and_transform_sml_files(directory_to_search)
1 parent b9843ac commit 5c7a0c2

File tree

208 files changed

+12038
-7754
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

208 files changed

+12038
-7754
lines changed

basis/ArrayProofScript.sml

+25-19
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,11 @@ QED
153153
val eq_v_thm = fetch "mlbasicsProg" "eq_v_thm"
154154
val eq_num_v_thm = MATCH_MP (DISCH_ALL eq_v_thm) (EqualityType_NUM_BOOL |> CONJUNCT1)
155155

156-
val num_eq_thm = Q.prove(
157-
`!n nv x xv. NUM n nv /\ NUM x xv ==> (n = x <=> nv = xv)`,
158-
metis_tac[EqualityType_NUM_BOOL, EqualityType_def]);
156+
Triviality num_eq_thm:
157+
!n nv x xv. NUM n nv /\ NUM x xv ==> (n = x <=> nv = xv)
158+
Proof
159+
metis_tac[EqualityType_NUM_BOOL, EqualityType_def]
160+
QED
159161

160162
Theorem array_tabulate_spec:
161163
!n nv f fv (A: 'a -> v -> bool).
@@ -251,27 +253,29 @@ val res = max_print_depth := 100
251253
*)
252254

253255

254-
val less_than_length_thm = Q.prove (
255-
`!xs n. (n < LENGTH xs) ==> (?ys z zs. (xs = ys ++ z::zs) /\ (LENGTH ys = n))`,
256+
Triviality less_than_length_thm:
257+
!xs n. (n < LENGTH xs) ==> (?ys z zs. (xs = ys ++ z::zs) /\ (LENGTH ys = n))
258+
Proof
256259
rw[] \\
257260
qexists_tac`TAKE n xs` \\
258261
rw[] \\
259262
qexists_tac`HD (DROP n xs)` \\
260263
qexists_tac`TL (DROP n xs)` \\
261264
Cases_on`DROP n xs` \\ fs[] \\
262265
metis_tac[TAKE_DROP,APPEND_ASSOC,CONS_APPEND]
263-
);
266+
QED
264267

265268

266-
val lupdate_breakdown_thm = Q.prove(
267-
`!l val n. n < LENGTH l
268-
==> LUPDATE val n l = TAKE n l ++ [val] ++ DROP (n + 1) l`,
269-
rw[] \\ drule less_than_length_thm
269+
Triviality lupdate_breakdown_thm:
270+
!l val n. n < LENGTH l
271+
==> LUPDATE val n l = TAKE n l ++ [val] ++ DROP (n + 1) l
272+
Proof
273+
rw[] \\ drule less_than_length_thm
270274
\\ rw[] \\ simp_tac std_ss [TAKE_LENGTH_APPEND, GSYM APPEND_ASSOC, GSYM CONS_APPEND]
271275
\\simp_tac std_ss [DROP_APPEND2]
272276
\\ simp_tac std_ss [GSYM CONS_APPEND]
273277
\\ EVAL_TAC \\ rw[lupdate_append2]
274-
);
278+
QED
275279

276280
Theorem array_copy_aux_spec:
277281
!src n srcv dstv di div nv max maxv bfr mid afr.
@@ -462,16 +466,18 @@ Proof
462466
rw [NUM_def]
463467
QED
464468

465-
val list_rel_take_thm = Q.prove(
466-
`!A xs ys n.
467-
LIST_REL A xs ys ==> LIST_REL A (TAKE n xs) (TAKE n ys)`,
468-
Induct_on `xs` \\ Induct_on `ys` \\ rw[LIST_REL_def, TAKE_def]
469-
);
469+
Triviality list_rel_take_thm:
470+
!A xs ys n.
471+
LIST_REL A xs ys ==> LIST_REL A (TAKE n xs) (TAKE n ys)
472+
Proof
473+
Induct_on `xs` \\ Induct_on `ys` \\ rw[LIST_REL_def, TAKE_def]
474+
QED
470475

471-
val drop_pre_length_thm = Q.prove(
472-
`!l. l <> [] ==> (DROP (LENGTH l - 1) l) = [(EL (LENGTH l - 1) l)]`,
476+
Triviality drop_pre_length_thm:
477+
!l. l <> [] ==> (DROP (LENGTH l - 1) l) = [(EL (LENGTH l - 1) l)]
478+
Proof
473479
rw[] \\ Induct_on `l` \\ rw[DROP, LENGTH, DROP_EL_CONS, DROP_LENGTH_NIL]
474-
);
480+
QED
475481

476482
(*
477483
Definition ARRAY_TYPE_def:

basis/ListProgScript.sml

+43-27
Original file line numberDiff line numberDiff line change
@@ -431,11 +431,13 @@ Definition AUPDATE_def:
431431
End
432432
val AUPDATE_eval = translate AUPDATE_def;
433433

434-
val FMAP_EQ_ALIST_UPDATE = Q.prove(
435-
`FMAP_EQ_ALIST f l ==> FMAP_EQ_ALIST (FUPDATE f (x,y)) (AUPDATE l (x,y))`,
434+
Triviality FMAP_EQ_ALIST_UPDATE:
435+
FMAP_EQ_ALIST f l ==> FMAP_EQ_ALIST (FUPDATE f (x,y)) (AUPDATE l (x,y))
436+
Proof
436437
SIMP_TAC (srw_ss()) [FMAP_EQ_ALIST_def,AUPDATE_def,ALOOKUP_def,FUN_EQ_THM,
437438
finite_mapTheory.FLOOKUP_DEF,finite_mapTheory.FAPPLY_FUPDATE_THM]
438-
THEN METIS_TAC []);
439+
THEN METIS_TAC []
440+
QED
439441

440442
val Eval_FUPDATE = Q.prove(
441443
`!v. ((LIST_TYPE (PAIR_TYPE a b) -->
@@ -473,22 +475,28 @@ val _ = next_ml_names := ["every","every"];
473475
val _ = translate AEVERY_AUX_def;
474476
val AEVERY_eval = translate AEVERY_def;
475477

476-
val AEVERY_AUX_THM = Q.prove(
477-
`!l aux P. AEVERY_AUX aux P l <=>
478-
!x y. (ALOOKUP l x = SOME y) /\ ~(MEM x aux) ==> P (x,y)`,
478+
Triviality AEVERY_AUX_THM:
479+
!l aux P. AEVERY_AUX aux P l <=>
480+
!x y. (ALOOKUP l x = SOME y) /\ ~(MEM x aux) ==> P (x,y)
481+
Proof
479482
Induct
480483
THEN FULL_SIMP_TAC std_ss [ALOOKUP_def,AEVERY_AUX_def,FORALL_PROD,
481484
MEM,GSYM MEMBER_INTRO] THEN REPEAT STRIP_TAC
482-
THEN SRW_TAC [] [] THEN METIS_TAC [SOME_11]);
485+
THEN SRW_TAC [] [] THEN METIS_TAC [SOME_11]
486+
QED
483487

484-
val AEVERY_THM = Q.prove(
485-
`AEVERY P l <=> !x y. (ALOOKUP l x = SOME y) ==> P (x,y)`,
486-
SIMP_TAC (srw_ss()) [AEVERY_def,AEVERY_AUX_THM]);
488+
Triviality AEVERY_THM:
489+
AEVERY P l <=> !x y. (ALOOKUP l x = SOME y) ==> P (x,y)
490+
Proof
491+
SIMP_TAC (srw_ss()) [AEVERY_def,AEVERY_AUX_THM]
492+
QED
487493

488-
val AEVERY_EQ_FEVERY = Q.prove(
489-
`FMAP_EQ_ALIST f l ==> (AEVERY P l <=> FEVERY P f)`,
494+
Triviality AEVERY_EQ_FEVERY:
495+
FMAP_EQ_ALIST f l ==> (AEVERY P l <=> FEVERY P f)
496+
Proof
490497
FULL_SIMP_TAC std_ss [FMAP_EQ_ALIST_def,FEVERY_DEF,AEVERY_THM]
491-
THEN FULL_SIMP_TAC std_ss [FLOOKUP_DEF]);
498+
THEN FULL_SIMP_TAC std_ss [FLOOKUP_DEF]
499+
QED
492500

493501
val Eval_FEVERY = Q.prove(
494502
`!v. (((PAIR_TYPE (a:'a->v->bool) (b:'b->v->bool) --> BOOL) -->
@@ -509,16 +517,20 @@ Definition AMAP_def:
509517
End
510518
val AMAP_eval = translate AMAP_def;
511519

512-
val ALOOKUP_AMAP = Q.prove(
513-
`!l. ALOOKUP (AMAP f l) a =
514-
case ALOOKUP l a of NONE => NONE | SOME x => SOME (f x)`,
520+
Triviality ALOOKUP_AMAP:
521+
!l. ALOOKUP (AMAP f l) a =
522+
case ALOOKUP l a of NONE => NONE | SOME x => SOME (f x)
523+
Proof
515524
Induct THEN SIMP_TAC std_ss [AMAP_def,ALOOKUP_def,FORALL_PROD]
516-
THEN SRW_TAC [] []);
525+
THEN SRW_TAC [] []
526+
QED
517527

518-
val FMAP_EQ_ALIST_o_f = Q.prove(
519-
`FMAP_EQ_ALIST m l ==> FMAP_EQ_ALIST (x o_f m) (AMAP x l)`,
528+
Triviality FMAP_EQ_ALIST_o_f:
529+
FMAP_EQ_ALIST m l ==> FMAP_EQ_ALIST (x o_f m) (AMAP x l)
530+
Proof
520531
SIMP_TAC std_ss [FMAP_EQ_ALIST_def,FUN_EQ_THM,FLOOKUP_DEF,
521-
o_f_DEF,ALOOKUP_AMAP] THEN REPEAT STRIP_TAC THEN SRW_TAC [] []);
532+
o_f_DEF,ALOOKUP_AMAP] THEN REPEAT STRIP_TAC THEN SRW_TAC [] []
533+
QED
522534

523535
val Eval_o_f = Q.prove(
524536
`!v. (((b --> c) --> LIST_TYPE (PAIR_TYPE (a:'a->v->bool) (b:'b->v->bool)) -->
@@ -567,17 +579,21 @@ Definition ADEL_def:
567579
End
568580
val ADEL_eval = translate ADEL_def;
569581

570-
val ALOOKUP_ADEL = Q.prove(
571-
`!l a x. ALOOKUP (ADEL l a) x = if x = a then NONE else ALOOKUP l x`,
582+
Triviality ALOOKUP_ADEL:
583+
!l a x. ALOOKUP (ADEL l a) x = if x = a then NONE else ALOOKUP l x
584+
Proof
572585
Induct THEN SRW_TAC [] [ALOOKUP_def,ADEL_def] THEN Cases_on `h`
573-
THEN SRW_TAC [] [ALOOKUP_def,ADEL_def]);
586+
THEN SRW_TAC [] [ALOOKUP_def,ADEL_def]
587+
QED
574588

575-
val FMAP_EQ_ALIST_ADEL = Q.prove(
576-
`!x l. FMAP_EQ_ALIST x l ==>
577-
FMAP_EQ_ALIST (x \\ a) (ADEL l a)`,
589+
Triviality FMAP_EQ_ALIST_ADEL:
590+
!x l. FMAP_EQ_ALIST x l ==>
591+
FMAP_EQ_ALIST (x \\ a) (ADEL l a)
592+
Proof
578593
FULL_SIMP_TAC std_ss [FMAP_EQ_ALIST_def,ALOOKUP_def,fmap_domsub,FUN_EQ_THM]
579594
THEN REPEAT STRIP_TAC THEN SRW_TAC [] [ALOOKUP_ADEL,FLOOKUP_DEF,DRESTRICT_DEF]
580-
THEN FULL_SIMP_TAC std_ss []);
595+
THEN FULL_SIMP_TAC std_ss []
596+
QED
581597

582598
val Eval_fmap_domsub = Q.prove(
583599
`!v. ((LIST_TYPE (PAIR_TYPE a b) --> a -->

basis/RatProgScript.sml

+40-26
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,11 @@ val _ = add_type_inv ``REAL_TYPE`` ``:rational``;
5252

5353
(* transfer *)
5454

55-
val RAT_RAT = Q.prove(
56-
`(!r1. real_of_rat (f1 r1) = f2 (real_of_rat r1)) ==>
55+
Triviality RAT_RAT:
56+
(!r1. real_of_rat (f1 r1) = f2 (real_of_rat r1)) ==>
5757
!v. (RAT_TYPE --> RAT_TYPE) f1 v ==>
58-
(REAL_TYPE --> REAL_TYPE) f2 v`,
58+
(REAL_TYPE --> REAL_TYPE) f2 v
59+
Proof
5960
strip_tac
6061
\\ SIMP_TAC (srw_ss()) [Arrow_def,AppReturns_def,REAL_TYPE_def,PULL_EXISTS,
6162
FORALL_PROD] \\ rw []
@@ -64,12 +65,14 @@ val RAT_RAT = Q.prove(
6465
mp_then.mp_then (mp_then.Pos hd)
6566
(qspec_then ‘R’ strip_assume_tac))
6667
\\ fs [] \\ asm_exists_tac \\ fs []
67-
\\ fs [] \\ asm_exists_tac \\ fs []);
68+
\\ fs [] \\ asm_exists_tac \\ fs []
69+
QED
6870

69-
val RAT_RAT_RAT = Q.prove(
70-
`(!r1 r2. real_of_rat (f1 r1 r2) = f2 (real_of_rat r1) (real_of_rat r2)) ==>
71+
Triviality RAT_RAT_RAT:
72+
(!r1 r2. real_of_rat (f1 r1 r2) = f2 (real_of_rat r1) (real_of_rat r2)) ==>
7173
!v. (RAT_TYPE --> RAT_TYPE --> RAT_TYPE) f1 v ==>
72-
(REAL_TYPE --> REAL_TYPE --> REAL_TYPE) f2 v`,
74+
(REAL_TYPE --> REAL_TYPE --> REAL_TYPE) f2 v
75+
Proof
7376
strip_tac
7477
\\ SIMP_TAC (srw_ss()) [Arrow_def,AppReturns_def,REAL_TYPE_def,PULL_EXISTS,
7578
FORALL_PROD] \\ rw []
@@ -81,12 +84,14 @@ val RAT_RAT_RAT = Q.prove(
8184
\\ rw [] \\ first_x_assum drule
8285
\\ qmatch_goalsub_rename_tac `(empty_state with refs := refs2)`
8386
\\ disch_then (qspec_then `refs2` mp_tac)
84-
\\ strip_tac \\ rpt (asm_exists_tac \\ fs []));
87+
\\ strip_tac \\ rpt (asm_exists_tac \\ fs [])
88+
QED
8589

86-
val RAT_RAT_BOOL = Q.prove(
87-
`(!r1 r2. f1 r1 r2 <=> f2 (real_of_rat r1) (real_of_rat r2)) ==>
90+
Triviality RAT_RAT_BOOL:
91+
(!r1 r2. f1 r1 r2 <=> f2 (real_of_rat r1) (real_of_rat r2)) ==>
8892
!v. (RAT_TYPE --> RAT_TYPE --> BOOL) f1 v ==>
89-
(REAL_TYPE --> REAL_TYPE --> BOOL) f2 v`,
93+
(REAL_TYPE --> REAL_TYPE --> BOOL) f2 v
94+
Proof
9095
strip_tac
9196
\\ SIMP_TAC (srw_ss()) [Arrow_def,AppReturns_def,REAL_TYPE_def,PULL_EXISTS,
9297
FORALL_PROD] \\ rw []
@@ -98,23 +103,28 @@ val RAT_RAT_BOOL = Q.prove(
98103
\\ rw [] \\ first_x_assum drule
99104
\\ qmatch_goalsub_rename_tac `(empty_state with refs := refs2)`
100105
\\ disch_then (qspec_then `refs2` mp_tac)
101-
\\ strip_tac \\ rpt (asm_exists_tac \\ fs []));
106+
\\ strip_tac \\ rpt (asm_exists_tac \\ fs [])
107+
QED
102108

103-
val RAT_BOOL = Q.prove(
104-
`(!r1. (f1 r1) = f2 (real_of_rat r1)) ==>
109+
Triviality RAT_BOOL:
110+
(!r1. (f1 r1) = f2 (real_of_rat r1)) ==>
105111
!v. (RAT_TYPE --> BOOL) f1 v ==>
106-
(REAL_TYPE --> BOOL) f2 v`,
112+
(REAL_TYPE --> BOOL) f2 v
113+
Proof
107114
strip_tac
108115
\\ SIMP_TAC (srw_ss()) [Arrow_def,AppReturns_def,REAL_TYPE_def,PULL_EXISTS,
109-
FORALL_PROD] \\ rw []);
116+
FORALL_PROD] \\ rw []
117+
QED
110118

111-
val RAT_INT = Q.prove(
112-
`(!r1. (f1 r1) = f2 (real_of_rat r1)) ==>
119+
Triviality RAT_INT:
120+
(!r1. (f1 r1) = f2 (real_of_rat r1)) ==>
113121
!v. (RAT_TYPE --> INT) f1 v ==>
114-
(REAL_TYPE --> INT) f2 v`,
122+
(REAL_TYPE --> INT) f2 v
123+
Proof
115124
strip_tac
116125
\\ SIMP_TAC (srw_ss()) [Arrow_def,AppReturns_def,REAL_TYPE_def,PULL_EXISTS,
117-
FORALL_PROD] \\ rw []);
126+
FORALL_PROD] \\ rw []
127+
QED
118128

119129

120130
(* -- *)
@@ -362,8 +372,9 @@ Proof
362372
arithmeticTheory.NOT_ZERO_LT_ZERO])
363373
QED
364374

365-
val INT_NEG_DIV_FACTOR = Q.prove(
366-
0 < (x:num) ==> (-&(x * y):int / &x = -&y)’,
375+
Triviality INT_NEG_DIV_FACTOR:
376+
0 < (x:num) ==> (-&(x * y):int / &x = -&y)
377+
Proof
367378
strip_tac >> qspec_then ‘&x’ mp_tac integerTheory.INT_DIVISION >>
368379
simp[] >> disch_then (qspec_then ‘-&(x * y)’ strip_assume_tac) >>
369380
map_every qabbrev_tac [`D:int = -&(x * y)`, `q = D / &x`, `r = D % &x`] >>
@@ -388,7 +399,8 @@ val INT_NEG_DIV_FACTOR = Q.prove(
388399
>- (rename [‘q + &y = 0’] >> disch_then kall_tac >>
389400
‘q + &y + -&y = -&y’ by metis_tac [integerTheory.INT_ADD_LID] >>
390401
metis_tac[integerTheory.INT_ADD_ASSOC, integerTheory.INT_ADD_RID,
391-
integerTheory.INT_ADD_RINV]))
402+
integerTheory.INT_ADD_RINV])
403+
QED
392404

393405
val PAIR_TYPE_IMP_RAT_TYPE = prove(
394406
``r = rat_of_int m / & n /\ n <> 0 ==>
@@ -424,9 +436,11 @@ End
424436
val _ = next_ml_names := ["+"];
425437
val pair_add_v_thm = translate pair_add_def;
426438

427-
val abs_rat_ONTO = Q.prove(
428-
‘!r. ?f. abs_rat f = r’,
429-
gen_tac >> qexists_tac ‘rep_rat r’ >> simp[rat_type_thm]);
439+
Triviality abs_rat_ONTO:
440+
!r. ?f. abs_rat f = r
441+
Proof
442+
gen_tac >> qexists_tac ‘rep_rat r’ >> simp[rat_type_thm]
443+
QED
430444

431445
val Eval_RAT_ADD = Q.prove(
432446
`!v.

0 commit comments

Comments
 (0)