@@ -734,12 +734,6 @@ let full_cell (c:cell) =
734
734
let full_heap_pred h =
735
735
forall a . contains_addr h a ==> full_cell ( select_addr h a )
736
736
737
- let ctr_empty () = ()
738
-
739
- let ctr_join h1 h2 a = ()
740
-
741
- let ctr_prop h = ()
742
-
743
737
////////////////////////////////////////////////////////////////////////////////
744
738
// sel
745
739
////////////////////////////////////////////////////////////////////////////////
@@ -778,7 +772,7 @@ let sel_lemma (#a:_) (#pcm:_) (r:ref a pcm) (m:full_hheap (ptr r))
778
772
#set-options "--fuel 2 --ifuel 2 "
779
773
# restart - solver
780
774
let sel_action (# a : _ ) (# pcm : _ ) ( r : ref a pcm ) ( v0 : erased a )
781
- : action # immut_heap # no_allocs
775
+ : action # immut_heap
782
776
( pts_to r v0 )
783
777
( v : a { compatible pcm v0 v })
784
778
( fun _ -> pts_to r v0 )
@@ -798,7 +792,7 @@ let sel_action' (#a:_) (#pcm:_)
798
792
compatible pcm frame v )}
799
793
= sel_v r v0 h
800
794
801
- let refined_pre_action (# immut :bool) (# allocates :bool)
795
+ let refined_pre_action (# immut :bool)
802
796
(#[ T. exact (` trivial_pre )] pre : heap -> prop )
803
797
(#[ T. exact (` trivial_pre )] post : heap -> prop )
804
798
( fp0 : slprop ) ( a :Type) ( fp1 : a -> slprop ) =
@@ -808,12 +802,12 @@ let refined_pre_action (#immut:bool) (#allocates:bool)
808
802
( requires pre m0 )
809
803
( ensures fun (| x , m1 |) ->
810
804
post m1 /\
811
- ( forall frame . frame_related_heaps m0 m1 fp0 ( fp1 x ) frame immut allocates ))
805
+ ( forall frame . frame_related_heaps m0 m1 fp0 ( fp1 x ) frame immut ))
812
806
813
807
# restart - solver
814
- let refined_pre_action_as_action # immut # allocs # pre # post (# fp0 : slprop ) (# a :Type) (# fp1 : a -> slprop )
815
- ($ f : refined_pre_action # immut # allocs # pre # post fp0 a fp1 )
816
- : action # immut # allocs # pre # post fp0 a fp1
808
+ let refined_pre_action_as_action # immut # pre # post (# fp0 : slprop ) (# a :Type) (# fp1 : a -> slprop )
809
+ ($ f : refined_pre_action # immut # pre # post fp0 a fp1 )
810
+ : action # immut # pre # post fp0 a fp1
817
811
= let g : pre_action fp0 a fp1 = fun m -> f m in
818
812
g
819
813
@@ -838,7 +832,7 @@ let select_refine_pre (#a:_) (#p:_)
838
832
( f :( v : a { compatible p x v }
839
833
-> GTot ( y : a { compatible p y v /\
840
834
frame_compatible p x v y })))
841
- : refined_pre_action # immut_heap # no_allocs
835
+ : refined_pre_action # immut_heap
842
836
( pts_to r x )
843
837
( v : a { compatible p x v /\ p . refine v })
844
838
( fun v -> pts_to r ( f v ))
@@ -927,7 +921,7 @@ let select_refine (#a:_) (#p:_)
927
921
( f :( v : a { compatible p x v }
928
922
-> GTot ( y : a { compatible p y v /\
929
923
frame_compatible p x v y })))
930
- : action # immut_heap # no_allocs ( pts_to r x )
924
+ : action # immut_heap ( pts_to r x )
931
925
( v : a { compatible p x v /\ p . refine v })
932
926
( fun v -> pts_to r ( f v ))
933
927
= refined_pre_action_as_action ( select_refine_pre r x f )
@@ -1068,7 +1062,7 @@ let upd_gen_fp3 #a p r
1068
1062
h3
1069
1063
1070
1064
# push - options " --z3rlimit 10"
1071
- let upd_gen_frame_preserving # a # p r x v f : Lemma ( is_frame_preserving mut_heap no_allocs ( upd_gen # a # p r x v f )) =
1065
+ let upd_gen_frame_preserving # a # p r x v f : Lemma ( is_frame_preserving mut_heap ( upd_gen # a # p r x v f )) =
1072
1066
introduce forall ( frame : slprop ) ( h0 : full_hheap ( pts_to r x ` star ` frame )).
1073
1067
( affine_star ( pts_to r x ) frame h0 ;
1074
1068
let (| _ , h1 |) = upd_gen r x v f h0 in
@@ -1201,7 +1195,7 @@ let extend_alt
1201
1195
(| r , h2 |)
1202
1196
1203
1197
# push - options " --z3rlimit 10"
1204
- let extend_fp # a # pcm x : Lemma ( is_frame_preserving mut_heap allocs ( extend_alt # a # pcm x )) =
1198
+ let extend_fp # a # pcm x : Lemma ( is_frame_preserving mut_heap ( extend_alt # a # pcm x )) =
1205
1199
introduce forall ( frame : slprop ) ( h0 : full_hheap ( emp ` star ` frame )).
1206
1200
( let (| r , h1 |) = extend_alt # a # pcm x h0 in
1207
1201
interp ( pts_to r x ` star ` frame ) h1 ) with (
@@ -1220,37 +1214,27 @@ let extend_fp #a #pcm x : Lemma (is_frame_preserving mut_heap allocs (extend_alt
1220
1214
1221
1215
let extend # a # pcm
1222
1216
( x : a { pcm . refine x })
1223
- : action # mut_heap # allocs emp ( ref a pcm ) ( fun r -> pts_to r x )
1217
+ : action # mut_heap emp ( ref a pcm ) ( fun r -> pts_to r x )
1224
1218
= extend_fp # a # pcm x ; extend_alt x
1225
1219
1226
- let extend_modifies_nothing
1227
- # a # pcm ( x : a { pcm . refine x })
1228
- ( h : full_hheap emp )
1229
- = ()
1230
-
1231
- let hprop_sub ( p q : slprop ) ( h0 h1 : heap )
1232
- : Lemma ( requires ( forall ( hp : hprop ( p ` star ` q )). hp h0 == hp h1 ))
1233
- ( ensures ( forall ( hp : hprop q ). hp h0 == hp h1 ))
1234
- = ()
1235
-
1236
1220
# push - options " --z3rlimit_factor 4 --max_fuel 1 --max_ifuel 1"
1237
1221
# restart - solver
1238
1222
let frame (# a :Type)
1239
- (# immut # allocates # hpre # hpost : _ )
1223
+ (# immut # hpre # hpost : _ )
1240
1224
(# pre : slprop )
1241
1225
(# post : a -> slprop )
1242
1226
( frame : slprop )
1243
1227
($ f : action pre a post )
1244
1228
= let g
1245
- : refined_pre_action # immut # allocates # hpre # hpost
1229
+ : refined_pre_action # immut # hpre # hpost
1246
1230
( pre ` star ` frame ) a ( fun x -> post x ` star ` frame )
1247
1231
= fun h0 ->
1248
1232
assert ( interp ( pre ` star ` frame ) h0 );
1249
1233
affine_star pre frame h0 ;
1250
1234
let (| x , h1 |) = f h0 in
1251
1235
assert ( interp ( post x ) h1 );
1252
1236
assert ( interp ( post x ` star ` frame ) h1 );
1253
- assert ( forall frame' . frame_related_heaps h0 h1 pre ( post x ) frame' immut allocates );
1237
+ assert ( forall frame' . frame_related_heaps h0 h1 pre ( post x ) frame' immut );
1254
1238
introduce forall frame' .
1255
1239
( interp (( pre ` star ` frame ) ` star ` frame' ) h0 ==>
1256
1240
interp (( post x ` star ` frame ) ` star ` frame' ) h1 )
@@ -1264,7 +1248,7 @@ let frame (#a:Type)
1264
1248
1265
1249
let change_slprop ( p q : slprop )
1266
1250
( proof : ( h : heap -> Lemma ( requires interp p h ) ( ensures interp q h )))
1267
- : action # immut_heap # no_allocs p unit ( fun _ -> q )
1251
+ : action # immut_heap p unit ( fun _ -> q )
1268
1252
= let g
1269
1253
: refined_pre_action p unit ( fun _ -> q )
1270
1254
= fun h ->
@@ -1273,46 +1257,22 @@ let change_slprop (p q:slprop)
1273
1257
in
1274
1258
refined_pre_action_as_action g
1275
1259
1276
- // let elim_pure (p:prop)
1277
- // : action (pure p) (u:unit{p}) (fun _ -> emp)
1278
- // = let f
1279
- // : refined_pre_action (pure p) (_:unit{p}) (fun _ -> emp)
1280
- // = fun h -> (| (), h |)
1281
- // in
1282
- // refined_pre_action_as_action f
1283
-
1284
- // let intro_pure (p:prop) (_:squash p)
1285
- // : action emp unit (fun _ -> pure p)
1286
- // = let f
1287
- // : refined_pre_action emp unit (fun _ -> pure p)
1288
- // = fun h -> (| (), h |)
1289
- // in
1290
- // refined_pre_action_as_action f
1291
-
1292
1260
let pts_to_evolve (# a :Type u# a ) (# pcm : _ ) ( r : ref a pcm ) ( x y : a ) ( h : heap )
1293
1261
: Lemma ( requires ( interp ( pts_to r x ) h /\ compatible pcm y x ))
1294
1262
( ensures ( interp ( pts_to r y ) h ))
1295
1263
= let Ref a' pcm' v' = ( select_addr h ( Addr ?. _0 r )) in
1296
1264
compatible_trans pcm y x v'
1297
1265
1298
- // let drop p
1299
- // = let f
1300
- // : refined_pre_action p unit (fun _ -> emp)
1301
- // = fun h -> (| (), h |)
1302
- // in
1303
- // refined_pre_action_as_action f
1304
-
1305
-
1306
1266
let erase_action_result
1307
1267
(# pre # post : _ )
1308
- (# immut # alloc : _ )
1268
+ (# immut : _ )
1309
1269
(# fp : slprop )
1310
1270
(# a :Type)
1311
1271
(# fp' : a -> slprop )
1312
- ( act : action # immut # alloc # pre # post fp a fp' )
1313
- : action # immut # alloc # pre # post fp ( erased a ) ( fun x -> fp' x )
1272
+ ( act : action # immut # pre # post fp a fp' )
1273
+ : action # immut # pre # post fp ( erased a ) ( fun x -> fp' x )
1314
1274
= let g
1315
- : refined_pre_action # immut # alloc # pre # post fp ( erased a ) ( fun x -> fp' x )
1275
+ : refined_pre_action # immut # pre # post fp ( erased a ) ( fun x -> fp' x )
1316
1276
= fun h ->
1317
1277
let (| x , h1 |) = act h in
1318
1278
let y : erased a = hide x in
@@ -1323,11 +1283,11 @@ let erase_action_result
1323
1283
1324
1284
let erase_action_result_identity
1325
1285
(# pre # post : _ )
1326
- (# immut # alloc : _ )
1286
+ (# immut : _ )
1327
1287
(# fp : slprop )
1328
1288
(# a :Type)
1329
1289
(# fp' : a -> slprop )
1330
- ( act : action # immut # alloc # pre # post fp a fp' )
1290
+ ( act : action # immut # pre # post fp a fp' )
1331
1291
( h : full_hheap fp { pre h })
1332
1292
: Lemma (
1333
1293
let (| x , h1 |) = act h in
0 commit comments