Skip to content

Commit 254410d

Browse files
committed
revise univ encoding
1 parent b7e317b commit 254410d

File tree

3 files changed

+25
-19
lines changed

3 files changed

+25
-19
lines changed

pulse/lib/pulse/lib/Pulse.Lib.Array.Core.fst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ ghost fn pcm_rw u#a (#t: Type u#a)
292292
fold pts_to_mask a2 #p2 s2 m2;
293293
}
294294

295+
#push-options "--z3rlimit 20 --fuel 1 --ifuel 1 --z3version 4.15.3"
295296
ghost fn pcm_share u#a (#t: Type u#a) #l
296297
(a: array t) p s m
297298
(a1: array t) p1 s1 m1
@@ -330,7 +331,9 @@ ghost fn pcm_share u#a (#t: Type u#a) #l
330331
Some? (Map.sel (mk_carrier' a p s m (a.vis l)) (i2 + a2.offset)));
331332
fold pts_to_mask a2 #p2 s2 m2;
332333
}
334+
#pop-options
333335

336+
#push-options "--z3rlimit 20 --fuel 1 --ifuel 1 --z3version 4.15.3"
334337
ghost fn pcm_gather u#a (#t: Type u#a) #l
335338
(a: array t) p s m
336339
(a1: array t) p1 s1 m1
@@ -371,7 +374,9 @@ ghost fn pcm_gather u#a (#t: Type u#a) #l
371374
Map.sel (mk_carrier' a p s m (a.vis l)) (i + a.offset) == Some ((Seq.index s i, a.vis l), p));
372375
fold pts_to_mask a #p s m;
373376
}
377+
#pop-options
374378

379+
#push-options "--z3rlimit 40 --fuel 0 --ifuel 0 --z3version 4.15.3"
375380
ghost
376381
fn mask_share_gen u#a (#a: Type u#a) (arr:array a) #s #p (p1: perm) (p2: perm) #mask
377382
requires pts_to_mask arr #p s mask
@@ -386,6 +391,7 @@ fn mask_share_gen u#a (#a: Type u#a) (arr:array a) #s #p (p1: perm) (p2: perm) #
386391
arr p1 s mask
387392
arr p2 s mask;
388393
}
394+
#pop-options
389395

390396
ghost
391397
fn mask_share u#a (#a: Type u#a) (arr:array a) #s #p #mask
@@ -418,6 +424,7 @@ ghost fn mask_gather u#a (#t: Type u#a) (arr: array t) #p1 #p2 #s1 #s2 #mask1 #m
418424
Some ((Seq.index s1 i, process_of l), p1));
419425
}
420426

427+
#push-options "--z3rlimit 40 --z3refresh --fuel 1 --ifuel 1 --z3version 4.15.3"
421428
ghost fn split_mask u#a (#t: Type u#a) (arr: array t) #f #v #mask (pred: nat -> prop)
422429
requires pts_to_mask arr #f v mask
423430
ensures pts_to_mask arr #f v (mask_isect mask pred)
@@ -430,6 +437,7 @@ ghost fn split_mask u#a (#t: Type u#a) (arr: array t) #f #v #mask (pred: nat ->
430437
arr f v (mask_isect mask pred)
431438
arr f v (mask_diff mask pred);
432439
}
440+
#pop-options
433441

434442
let mix #t (v1: Seq.seq t) (v2: Seq.seq t { Seq.length v1 == Seq.length v2 }) (mask: nat -> prop) :
435443
GTot (res: Seq.seq t { Seq.length res == Seq.length v1 /\
@@ -439,6 +447,7 @@ let mix #t (v1: Seq.seq t) (v2: Seq.seq t { Seq.length v1 == Seq.length v2 }) (m
439447
Seq.init_ghost (Seq.length v1) fun i ->
440448
if IndefiniteDescription.strong_excluded_middle (mask i) then Seq.index v1 i else Seq.index v2 i
441449

450+
#push-options "--z3rlimit 40 --fuel 0 --ifuel 0 --z3version 4.15.3"
442451
[@@allow_ambiguous]
443452
ghost fn join_mask u#a (#t: Type u#a) (arr: array t) #f #v1 #v2 #mask1 #mask2
444453
requires pts_to_mask arr #f v1 mask1
@@ -461,6 +470,7 @@ ghost fn join_mask u#a (#t: Type u#a) (arr: array t) #f #v1 #v2 #mask1 #mask2
461470
arr f v1 mask1
462471
arr f v2 mask2;
463472
}
473+
#pop-options
464474

465475
[@@allow_ambiguous]
466476
ghost fn join_mask' u#a (#t: Type u#a) (arr: array t) #f #v #mask1 #mask2

src/smtencoding/FStarC.SMTEncoding.Encode.fst

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1981,9 +1981,7 @@ let encode_env_bindings (env:env_t) (bindings:list S.binding) : ML (decls_t & en
19811981
let encode_binding b (i, decls, env) = match b with
19821982
| S.Binding_univ u ->
19831983
let u_fv, u_tm = EncodeTerm.encode_univ_name u in
1984-
let decls' = [
1985-
Term.DeclFun(fv_name u_fv, [], univ_sort, Some "universe local constant");
1986-
Util.mkAssume (mkApp("univ_ok", [u_tm]), Some ("univ_ok_" ^ fv_name u_fv), "univ_ok_" ^ fv_name u_fv)] |> mk_decls_trivial in
1984+
let decls' = [Term.DeclFun(fv_name u_fv, [], univ_sort, Some "universe local constant")] |> mk_decls_trivial in
19871985
i+1, decls@decls', env
19881986

19891987
| S.Binding_var x ->

src/smtencoding/FStarC.SMTEncoding.Term.fst

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -966,22 +966,20 @@ and mkPrelude z3options : ML string =
966966
(declare-fun FString_constr_id (FString) Int)\n\
967967
\n\
968968
(declare-sort Term)\n\
969-
(declare-datatypes () ((Universe \n\
970-
(Univ (ulevel Int)))))\n\
971-
(define-fun imax ((i Int) (j Int)) Int \n\
972-
(ite (<= i 0) j \n\
973-
(ite (<= j 0) i \n\
974-
(ite (<= i j) j i)))) \n\
975-
(define-fun U_zero () Universe (Univ 0))\n\
976-
(define-fun U_succ ((u Universe)) Universe\n\
977-
(Univ (+ (ulevel u) 1)))\n\
978-
(declare-fun U_max (Universe Universe) Universe) \n\
979-
(assert (forall ((u1 Universe) (u2 Universe)) \n\
980-
(! (= (U_max u1 u2)\n\
981-
(Univ (imax (ulevel u1) (ulevel u2))))\n\
982-
:pattern ((U_max u1 u2)))))\n\
983-
(define-fun univ_ok ((u Universe)) Bool\n\
984-
(>= (ulevel u) 0))\n\
969+
(declare-datatypes () ((Universe (U_zero) (U_succ (prev Universe)))))\n\
970+
(declare-fun ulevel ((Universe)) Int)\n\
971+
(declare-fun Univ (Int) Universe)\n\
972+
(assert (= (ulevel U_zero) 0))\n\
973+
(assert (forall ((u Universe)) (! (= (ulevel (U_succ u)) (+ 1 (ulevel u))) :weight 0 :pattern ((ulevel (U_succ u))))))\n\
974+
(assert (forall ((u Universe)) (! (>= (ulevel u) 0) :weight 0 :pattern ((ulevel u)))))\n\
975+
(assert (forall ((u Universe)) (! (= (Univ (ulevel u)) u) :weight 0 :pattern ((ulevel u)))))\n\
976+
(assert (forall ((i Int)) (! (implies (>= i 0) (= (ulevel (Univ i)) i)) :weight 0 :pattern ((Univ i)))))\n\
977+
(declare-fun U_max (Universe Universe) Universe)\n\
978+
(assert (forall ((u1 Universe) (u2 Universe))\n\
979+
(! (= (U_max u1 u2)\n\
980+
(ite (<= (ulevel u1) (ulevel u2)) u2 u1))\n\
981+
:weight 0\n\
982+
:pattern ((U_max u1 u2)))))\n\
985983
(declare-fun U_unif (Int) Universe)\n\
986984
(declare-fun U_unknown () Universe)\n\
987985
(declare-fun Term_constr_id (Term) Int)\n\

0 commit comments

Comments
 (0)