Skip to content

Commit 6be2e56

Browse files
forgotten a file
1 parent 99d88db commit 6be2e56

File tree

1 file changed

+57
-15
lines changed

1 file changed

+57
-15
lines changed

hol/policy_to_table/bdd_genScript.sml

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,9 @@ val _ = type_abbrev("distrub_st", ``:( (string, (num list) option) alist # num
11131113

11141114

11151115

1116+
1117+
1118+
11161119
Definition eliminable_new_def:
11171120
eliminable_new ((r,edges,labels):('a,'b)BDD) n =
11181121
case ALOOKUP edges n of
@@ -1127,6 +1130,28 @@ End
11271130

11281131

11291132

1133+
Definition eliminable_projection_def:
1134+
eliminable_projection edges_proj n =
1135+
case ALOOKUP edges_proj n of
1136+
|SOME (n1, n2) =>
1137+
if n1 = n2 ∧
1138+
n1 ≠ n ∧
1139+
n ≠ 0n ∧
1140+
has_parent edges_proj n1 n
1141+
then SOME n1
1142+
else NONE
1143+
| NONE => NONE
1144+
End
1145+
1146+
1147+
Definition mergable_projection_def:
1148+
mergable_projection edges_proj labels_proj n n' =
1149+
(n≠n' ∧ ALOOKUP edges_proj n = ALOOKUP edges_proj n' ∧
1150+
eq_vars_in_labels labels_proj n n' ∧ ALOOKUP labels_proj n' ≠ NONE )
1151+
End
1152+
1153+
1154+
11301155
Definition update_internals_def:
11311156
(update_internals pre [] n x = []) ∧
11321157
(update_internals pre (h::internals) n x =
@@ -1189,40 +1214,54 @@ End
11891214

11901215

11911216
Definition optimize_node_def:
1192-
(optimize_node (BDD:('a,'b) BDD) n [] = SND (eliminate_safe BDD n)) ∧
1217+
(optimize_node edges_proj labels_proj (BDD:('a,'b) BDD) n [] = SND (eliminate_safe BDD n)) ∧
11931218

1194-
(optimize_node BDD n (n'::nl) =
1195-
case eliminable_new BDD n of
1219+
(optimize_node edges_proj labels_proj BDD n (n'::nl) =
1220+
case eliminable_projection edges_proj n of
11961221
| SOME n' => SND (eliminate_safe BDD n)
11971222
| NONE => (
1198-
case mergable BDD n' n of
1223+
case mergable_projection edges_proj labels_proj n' n of
11991224
| T => ( case merge_safe BDD n' n of
12001225
| (T, BDD') => BDD'
1201-
| (F, BDD') => optimize_node BDD n nl
1226+
| (F, BDD') => optimize_node edges_proj labels_proj BDD n nl
12021227
)
12031228

1204-
| F => optimize_node BDD n nl)
1229+
| F => optimize_node edges_proj labels_proj BDD n nl)
12051230
)
12061231
End
12071232

12081233

12091234

12101235

12111236
Definition optimize_layer_def:
1212-
(optimize_layer (BDD:('a,'b) BDD) [] = BDD) /\
1213-
(optimize_layer BDD (n::nl)=
1214-
optimize_layer (optimize_node BDD n nl) nl
1237+
(optimize_layer edges_proj labels_proj (BDD:('a,'b) BDD) [] = BDD) /\
1238+
(optimize_layer edges_proj labels_proj BDD (n::nl)=
1239+
optimize_layer edges_proj labels_proj (optimize_node edges_proj labels_proj BDD n nl) nl
12151240
)
12161241
End
12171242

1218-
1243+
1244+
Definition project_edges_to_def:
1245+
project_edges_to ((r, edges,labels):('a,'b) BDD) nl =
1246+
MAP (\n. (n,THE(ALOOKUP edges n))) nl
1247+
End
1248+
1249+
Definition project_labels_to_def:
1250+
project_labels_to ((r, edges,labels):('a,'b) BDD) nl =
1251+
MAP (\n. (n,THE(ALOOKUP labels n))) nl
1252+
End
1253+
1254+
1255+
12191256
Definition optimize_internals_def:
12201257
(optimize_internals (BDD:('a,'b) BDD) [] = BDD) /\
12211258
(optimize_internals BDD ((var,NONE)::l) = optimize_internals BDD l) /\
12221259

12231260
(optimize_internals BDD ((var,SOME nl)::l)=
1224-
let BDD' = optimize_layer BDD nl in
1225-
optimize_internals BDD' l
1261+
let edges_proj = project_edges_to BDD nl in
1262+
let labels_proj = project_labels_to BDD nl in
1263+
let BDD' = optimize_layer edges_proj labels_proj BDD nl in
1264+
optimize_internals BDD' l
12261265
)
12271266
End
12281267

@@ -1232,9 +1271,11 @@ End
12321271
Definition optimize_bdd_def:
12331272
optimize_bdd (BDD:('a,'b) BDD) order =
12341273
let (internals,ntl,tl) = bdd_distribute (BDD:('a,'b) BDD) order in
1235-
let BDD1 = optimize_layer BDD tl in
1236-
let BDD2 = optimize_layer BDD1 ntl in
1237-
optimize_internals BDD2 internals
1274+
let labels_proj_tl = project_labels_to BDD tl in (* for terminals *)
1275+
let labels_proj_ntl = project_labels_to BDD ntl in (* for terminals *)
1276+
let BDD1 = optimize_layer [] labels_proj_tl BDD tl in
1277+
let BDD2 = optimize_layer [] labels_proj_ntl BDD1 ntl in
1278+
optimize_internals BDD2 internals
12381279
End
12391280

12401281

@@ -1253,5 +1294,6 @@ End
12531294

12541295

12551296

1297+
12561298

12571299
val _ = export_theory ();

0 commit comments

Comments
 (0)