Skip to content

Commit 4d88217

Browse files
Merge pull request #50 from kth-step/dev_polyml
Update to Poly/ML 5.9.2 and trindemossen-2
2 parents 1e943af + fe49275 commit 4d88217

File tree

13 files changed

+332
-326
lines changed

13 files changed

+332
-326
lines changed

.github/workflows/build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ jobs:
1515

1616
strategy:
1717
matrix:
18-
polyml: ['5.7.1', '5.9.1']
19-
hol4: ['trindemossen-1']
18+
polyml: ['5.7.1', '5.9.2']
19+
hol4: ['trindemossen-2']
2020

2121
env:
2222
CACHE_DIR: /home/runner/cache

INSTALL.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,21 @@ First, navigate to the directory where you want to put the source code of Poly/M
3434

3535
sudo apt-get install build-essential git
3636

37-
2. Install Poly/ML 5.9.1
37+
2. Install Poly/ML 5.9.2
3838

3939
git clone https://github.com/polyml/polyml.git
4040
cd polyml
41-
git checkout v5.9.1
41+
git checkout v5.9.2
4242
./configure --prefix=/usr
4343
make
4444
sudo make install
4545
cd ..
4646

47-
3. Install HOL4 Trindemossen-1
47+
3. Install HOL4 Trindemossen-2
4848

4949
git clone https://github.com/HOL-Theorem-Prover/HOL.git
5050
cd HOL
51-
git checkout trindemossen-1
51+
git checkout trindemossen-2
5252
poly < tools/smart-configure.sml
5353
bin/build
5454
cd ..
@@ -124,4 +124,4 @@ The same tools used to edit HOL4 theories and run the HOL4 REPL can also be used
124124

125125
The `scripts` directory contains installation scripts. These may be run when installing HOL4P4 e.g. on a fresh virtual machine by
126126

127-
scripts/install.sh
127+
scripts/install.sh

hol/ottLib.sml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ in
7676
HO_MATCH_MP_TAC list_induction THEN STRIP_TAC THENL
7777
[ALL_TAC, STRIP_TAC THEN STRIP_TAC THEN PAIR_CASES_TAC] THEN
7878
SRW_TAC [] [] THEN
79-
CONV_TAC TotalDefn.TC_SIMP_CONV THEN
79+
TotalDefn.TC_SIMP_TAC std_ss [] THEN
8080
SRW_TAC [] [] THEN
8181
RES_TAC THEN
8282
DECIDE_TAC THEN NO_TAC
8383
end;
8484

8585
fun ONE_TERM_TAC measure =
8686
WF_REL_TAC `^measure` THEN
87-
CONV_TAC TotalDefn.TC_SIMP_CONV THEN
87+
TotalDefn.TC_SIMP_TAC std_ss [] THEN
8888
SRW_TAC [] [] THEN
8989
APPLY_FILTER_SIZE THEN
9090
TRY (ASSUM_LIST (MAP_FIRST MEM_IND_TAC o List.filter is_mem o List.map concl))

hol/p4_auxScript.sml

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open pairTheory optionTheory arithmeticTheory;
77
open p4Theory;
88

99
(* OPTION_BIND as infix *)
10-
Definition app_opt_def:
10+
Definition app_opt_def[simp]:
1111
$>>= x_opt f =
1212
OPTION_BIND x_opt f
1313
End
@@ -1335,7 +1335,6 @@ Theorem EL_relation_to_INDEX_lesseq:
13351335
i <= LENGTH l ==>
13361336
m = n
13371337
Proof
1338-
13391338
Induct >>
13401339
REPEAT STRIP_TAC >>
13411340
fs[INDEX_FIND_def] >>
@@ -1464,32 +1463,23 @@ Theorem index_find_concat1:
14641463
! l1 l2 n P.
14651464
INDEX_FIND 0 P l1 = NONE /\
14661465
INDEX_FIND 0 P (l2 ⧺ l1) = SOME n ==>
1467-
INDEX_FIND 0 P (l2) = SOME n
1466+
INDEX_FIND 0 P (l2) = SOME n
14681467
Proof
14691468
Induct_on `l1` >>
14701469
Induct_on `l2` >>
1471-
fs[INDEX_FIND_def] >>
1472-
REPEAT STRIP_TAC >>
1473-
CASE_TAC >| [
1474-
rfs[]
1475-
,
1476-
Cases_on `P h'` >| [
1477-
gvs[]
1478-
,
1479-
gvs[] >>
1480-
1481-
ASSUME_TAC P_hold_on_next>>
1482-
FIRST_X_ASSUM
1483-
(STRIP_ASSUME_TAC o (Q.SPECL [`0`,`(l2 ⧺ h'::l1)`,`P`,`n`])) >>
1484-
gvs[GSYM ADD1] >>
1485-
RES_TAC >>
1486-
gvs[] >>
1487-
1488-
IMP_RES_TAC P_implies_next >>
1489-
Cases_on `n` >>
1490-
fs[]
1491-
]
1492-
]
1470+
gs[INDEX_FIND_def, AllCaseEqs()] >>
1471+
REPEAT STRIP_TAC >> (
1472+
gs[]
1473+
) >>
1474+
ASSUME_TAC P_hold_on_next >>
1475+
FIRST_X_ASSUM
1476+
(STRIP_ASSUME_TAC o (Q.SPECL [`0`,`(l2 ⧺ h'::l1)`,`P`,`n`])) >>
1477+
gvs[GSYM ADD1] >>
1478+
RES_TAC >>
1479+
gvs[] >>
1480+
IMP_RES_TAC P_implies_next >>
1481+
Cases_on `n` >>
1482+
fs[]
14931483
QED
14941484

14951485

@@ -1835,17 +1825,16 @@ QED
18351825
Theorem index_find_not_mem:
18361826
! l P e n. (INDEX_FIND n P l = NONE) /\ P e ==> ~ MEM e l
18371827
Proof
1838-
18391828
Induct >>
18401829
fs[INDEX_FIND_def] >>
18411830
REPEAT GEN_TAC >>
1842-
CASE_TAC >>
1831+
gs[AllCaseEqs()] >>
18431832
STRIP_TAC >>
1844-
FIRST_X_ASSUM (STRIP_ASSUME_TAC o (Q.SPECL
1845-
[`P`, `e` , `SUC n`])) >>
1833+
FIRST_X_ASSUM (STRIP_ASSUME_TAC o (Q.SPECL [`P`, `e` , `SUC n`])) >>
18461834
IMP_RES_TAC P_NONE_hold2 >>
1847-
Cases_on `e=h` >>
1848-
fs[]
1835+
Cases_on `e=h` >> (
1836+
fs[]
1837+
)
18491838
QED
18501839

18511840

@@ -2573,8 +2562,6 @@ Definition deparameterise_tau_def:
25732562
deparameterise_tau p_tau >>=
25742563
\tau. deparameterise_x_taus t >>=
25752564
\tau_l. SOME ((name, tau)::tau_l))
2576-
Termination
2577-
WF_REL_TAC `measure ( \ t. case t of | (INL p_tau) => p_tau_size p_tau | (INR p_tau_list) => p_tau1_size p_tau_list)`
25782565
End
25792566

25802567
Definition deparameterise_taus_def:
@@ -2594,8 +2581,6 @@ Definition parameterise_tau_def:
25942581
| tau_ext => p_tau_ext "") /\
25952582
(parameterise_x_taus [] = []) /\
25962583
(parameterise_x_taus ((name, tau)::t) = ((name, parameterise_tau tau)::(parameterise_x_taus t)))
2597-
Termination
2598-
WF_REL_TAC `measure ( \ t. case t of | (INL tau) => tau_size tau | (INR tau_list) => tau1_size tau_list)`
25992584
End
26002585

26012586
Definition parameterise_taus_def:

hol/p4_coreScript.sml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,6 @@ Definition set_fields_def:
183183
| NONE => NONE)
184184
| NONE => NONE)
185185
| _ => NONE)
186-
Termination
187-
WF_REL_TAC `measure ( \ (t, acc, packet_in). v1_size t)`
188186
End
189187

190188
Definition set_header_def:
@@ -389,8 +387,6 @@ Definition header_entries2v_def:
389387
| (v_header validity x_v_l) => header_entries2v x_v_l
390388
| _ => NONE
391389
)
392-
Termination
393-
WF_REL_TAC `measure ( \ t. case t of | (INL x_v_l) => v1_size x_v_l | (INR (x,v)) => v_size v)`
394390
End
395391

396392

hol/p4_e_progressScript.sml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ IMP_RES_TAC bit_range >>
629629
fs[] >>
630630
631631
fs[bitv_binop_def] >>
632-
RW.ONCE_RW_TAC [bitv_binop_inner_def] >>
632+
ONCE_REWRITE_TAC [bitv_binop_inner_def] >>
633633
fs[] >>
634634
srw_tac [numSimps.SUC_FILTER_ss][]
635635
);
@@ -663,7 +663,7 @@ RES_TAC >>
663663
gvs[NOT_CLAUSES] >>
664664

665665
fs[bitv_binop_def] >>
666-
RW.ONCE_RW_TAC [bitv_binop_inner_def] >>
666+
ONCE_REWRITE_TAC [bitv_binop_inner_def] >>
667667
fs[] >>
668668
srw_tac [numSimps.SUC_FILTER_ss][]
669669
);
@@ -698,7 +698,7 @@ RES_TAC >>
698698
gvs[NOT_CLAUSES] >>
699699

700700
fs[] >>
701-
RW.ONCE_RW_TAC [bitv_binpred_inner_def] >>
701+
ONCE_REWRITE_TAC [bitv_binpred_inner_def] >>
702702
fs[] >>
703703
srw_tac [numSimps.SUC_FILTER_ss][]
704704
);

hol/p4_from_json/parse_jsonScript.sml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,6 @@ Definition json_to_string_def:
159159
(mem_to_string n_obj = let (n, obj) = n_obj in
160160
[CONCAT ["\""; n; "\""]]
161161
++ [":"] ++ json_to_string obj)
162-
Termination
163-
WF_REL_TAC `measure (\x. case x of
164-
| INL obj => json_size obj
165-
| INR p => json2_size p)`
166-
>> rw[]
167-
>> imp_res_tac json_size_MEM1
168-
>> imp_res_tac json_size_MEM2
169-
>> fs[]
170162
End
171163

172164
(* lexing *)
@@ -582,14 +574,6 @@ Definition json_to_tok_def:
582574
/\
583575
(mem_to_tok n_obj = let (n, obj) = n_obj in
584576
json_to_tok obj ++ [COLON;Str n])
585-
Termination
586-
WF_REL_TAC `measure (\x. case x of
587-
| INL obj => json_size obj
588-
| INR p => json2_size p)`
589-
>> rw[]
590-
>> imp_res_tac json_size_MEM1
591-
>> imp_res_tac json_size_MEM2
592-
>> fs[]
593577
End
594578

595579
(*

hol/p4_from_json/petr4_to_hol4p4Script.sml

Lines changed: 65 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -393,33 +393,36 @@ Triviality json_parse_obj_size:
393393
Proof
394394
Induct_on ‘json_list’ >- (
395395
rpt strip_tac >>
396-
fs[json_parse_obj_def, json_dest_obj_def, app_opt_def] >>
396+
gs[json_parse_obj_def, json_dest_obj_def] >>
397397
Cases_on ‘json’ >> (fs[json_size_def])
398398
) >>
399399
rpt strip_tac >>
400-
fs[json_parse_obj_def, app_opt_def] >>
401-
Cases_on ‘json’ >> (fs[json_dest_obj_def]) >>
402-
rw[] >>
403-
Cases_on ‘str_list’ >> (fs[json_parse_obj'_def, json_size_def]) >>
404-
(Cases_on ‘l’ >> (fs[json_parse_obj'_def, json_size_def])) >>
405-
406-
Cases_on ‘h''’ >> (fs[json_parse_obj'_def, json_size_def, app_opt_def]) >>
407-
Cases_on ‘json_parse_obj' t t'’ >> (fs[json_parse_obj'_def, json_size_def]) >>
408-
rw[] >>
409-
subgoal ‘(case (Object t') of
400+
gs[json_parse_obj_def] >>
401+
Cases_on ‘str_list’ >> (Cases_on ‘x’ >> (gs[json_parse_obj'_def, json_size_def])) >>
402+
PairCases_on ‘h''’ >>
403+
gvs[json_parse_obj'_def, json_size_def] >>
404+
Cases_on ‘json’ >> (gvs[json_dest_obj_def]) >>
405+
subgoal ‘?x. (case (Object t') of
410406
Object obj => SOME obj
411407
| Array v8 => NONE
412408
| String v9 => NONE
413409
| Number v10 v11 v12 => NONE
414410
| Bool v13 => NONE
415411
| Null => NONE) =
416412
SOME t'’ >- (
417-
fs[]
413+
gs[]
418414
) >>
419-
subgoal ‘json3_size json_list < json_size (Object t')’ >- (
420-
metis_tac[]
421-
) >>
422-
fs[json_size_def]
415+
res_tac >>
416+
gs[]
417+
QED
418+
419+
Theorem list_size_json3:
420+
!json_list.
421+
list_size json_size json_list = json3_size json_list
422+
Proof
423+
Induct >> (
424+
gs[list_size_def, json_size_def]
425+
)
423426
QED
424427

425428
(* Parses compile-time known constants, e.g. in bitstring widths *)
@@ -1227,24 +1230,24 @@ Definition petr4_parse_expression_gen_def:
12271230
| SOME_msg (SetExp e) => get_error_msg "set expression in unsupported location: " h1
12281231
| NONE_msg exp_msg => NONE_msg ("could not parse expression: "++exp_msg))
12291232
Termination
1230-
WF_REL_TAC `measure ( \ t. case t of
1233+
WF_REL_TAC measure ( \ t. case t of
12311234
| (INL (maps, json, p_tau_opt)) => json_size json
12321235
| (INR $ INL (maps, json_list)) => json_p_tau_opt_list_size json_list
1233-
| (INR $ INR (maps, json_list)) => json_p_tau_opt_list_size json_list)` >>
1234-
fs[json_p_tau_opt_list_size_def] >>
1235-
rpt strip_tac >> (fs[json_size_def]) >- (
1236-
subgoal ‘?l1 l2. UNZIP t = (l1, l2)’ >- (fs[UNZIP_MAP]) >>
1237-
fs []
1236+
| (INR $ INR (maps, json_list)) => json_p_tau_opt_list_size json_list)’ >>
1237+
gs[json_p_tau_opt_list_size_def] >>
1238+
rpt strip_tac >> (gs[json_size_def]) >- (
1239+
gs[UNZIP_MAP]
12381240
) >- (
1239-
subgoal ‘?l1 l2. UNZIP t = (l1, l2)’ >- (fs[UNZIP_MAP]) >>
1240-
fs []
1241+
gs[UNZIP_MAP]
12411242
) >- (
1242-
subgoal ‘?l1 l2. UNZIP t = (l1, l2)’ >- (fs[UNZIP_MAP]) >>
1243-
fs []
1243+
gs[UNZIP_MAP]
12441244
) >- (
1245-
subgoal ‘LENGTH args = LENGTH p_1'5'’ >- (imp_res_tac find_fty_match_args_LENGTH >> fs[]) >>
1246-
fs[listTheory.UNZIP_ZIP]
1247-
)
1245+
gs[list_size_json3]
1246+
) >- (
1247+
gs[list_size_json3]
1248+
) >>
1249+
‘LENGTH args = LENGTH p_1'5'’ by (imp_res_tac find_fty_match_args_LENGTH >> gs[]) >>
1250+
gs[UNZIP_MAP, listTheory.MAP_ZIP, list_size_json3]
12481251
End
12491252

12501253
(* TODO: Baking this into the above messes up the termination proof... *)
@@ -2282,25 +2285,48 @@ Definition petr4_parse_stmts_def:
22822285
| NONE_msg msg' => NONE_msg msg')
22832286
| NONE_msg msg => NONE_msg msg)
22842287
Termination
2285-
WF_REL_TAC `measure ( \ t. case t of | (INL (maps, json_list)) => json3_size json_list | (INR (maps, json_list_list)) => SUM (MAP (\ el . json3_size el + 1) json_list_list))` >>
2288+
WF_REL_TAC measure ( \ t. case t of | (INL (maps, json_list)) => json3_size json_list | (INR (maps, json_list_list)) => SUM (MAP (\ el . json3_size el + 1) json_list_list)) >>
22862289
rpt strip_tac >> (fs[json_size_def]) >- (
2287-
fs[json_parse_obj_def, json_dest_obj_def, app_opt_def] >>
2290+
fs[json_parse_obj_def, json_dest_obj_def] >>
22882291
Cases_on ‘p_2'’ >> (fs[]) >>
22892292
rw[] >>
2290-
Cases_on ‘l’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2291-
Cases_on ‘h’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2292-
Cases_on ‘t'’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2293-
Cases_on ‘h’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2293+
Cases_on ‘l’ >> (fs[json_parse_obj'_def]) >>
2294+
Cases_on ‘h’ >> (fs[json_parse_obj'_def]) >>
2295+
Cases_on ‘t'’ >> (fs[json_parse_obj'_def]) >>
2296+
Cases_on ‘h’ >> (fs[json_parse_obj'_def]) >>
22942297
Cases_on ‘q' = "annotations"’ >> (fs[]) >>
2295-
Cases_on ‘t''’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2296-
Cases_on ‘h’ >> (fs[json_parse_obj'_def, app_opt_def]) >>
2298+
Cases_on ‘t''’ >> (fs[json_parse_obj'_def]) >>
2299+
Cases_on ‘h’ >> (fs[json_parse_obj'_def]) >>
22972300
Cases_on ‘q'' = "statements"’ >> (fs[]) >>
2298-
Cases_on ‘json_parse_obj' [] t'’ >> (fs[json_size_def, app_opt_def])
2301+
Cases_on ‘json_parse_obj' [] t'’ >> (fs[json_size_def]) >>
2302+
2303+
gvs[char_size_def] >>
2304+
‘json3_size t +
2305+
(json_size annotations +
2306+
(json_size p_2 +
2307+
(json_size r +
2308+
(list_size json_size stmts +
2309+
(list_size (pair_size (list_size char_size) json_size) t' + 57))))) =
2310+
json3_size stmts + 1 +
2311+
json3_size t +
2312+
(json_size annotations +
2313+
(json_size p_2 +
2314+
(json_size r +
2315+
(list_size (pair_size (list_size char_size) json_size) t' + 56))))’ suffices_by (
2316+
gs[]
2317+
) >>
2318+
gvs[] >>
2319+
‘list_size json_size stmts = json3_size stmts’ by (
2320+
Induct_on ‘stmts’ >> (
2321+
fs[json_size_def, list_size_def]
2322+
)
2323+
) >>
2324+
gs[]
22992325
) >- (
23002326
(* Switch case *)
23012327
IMP_RES_TAC petr4_parse_switch_cases_size >>
23022328
res_tac >>
2303-
fs[json_size_def, app_opt_def]
2329+
fs[json_size_def]
23042330
)
23052331
End
23062332

0 commit comments

Comments
 (0)