Skip to content

Commit 5aee7f9

Browse files
committed
introduce two sided active memory for typing
1 parent b1ea108 commit 5aee7f9

15 files changed

Lines changed: 120 additions & 91 deletions

src/ecEnv.ml

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ type preenv = {
176176
env_comps : mc Mip.t;
177177
env_locals : (EcIdent.t * EcTypes.ty) MMsym.t;
178178
env_memories : EcMemory.memtype Mmem.t;
179-
env_actmem : EcMemory.memory option;
179+
env_actmem_ss: EcMemory.memory option;
180+
env_actmem_ts: (EcMemory.memory * EcMemory.memory) option;
180181
env_abs_st : EcModules.abs_uses Mid.t;
181182
env_tci : ((ty_params * ty) * tcinstance) list;
182183
env_tc : TC.graph;
@@ -305,7 +306,8 @@ let empty gstate =
305306
env_comps = Mip.singleton (IPPath path) (empty_mc None);
306307
env_locals = MMsym.empty;
307308
env_memories = Mmem.empty;
308-
env_actmem = None;
309+
env_actmem_ss= None;
310+
env_actmem_ts= None;
309311
env_abs_st = Mid.empty;
310312
env_tci = [];
311313
env_tc = TC.Graph.empty;
@@ -1258,18 +1260,36 @@ module Memory = struct
12581260
try Some (Mmem.bysym me env.env_memories)
12591261
with Not_found -> None
12601262

1261-
let set_active (me : memory) (env : env) =
1263+
let set_active_ss (me : memory) (env : env) =
12621264
match byid me env with
12631265
| None -> raise (MEError (UnknownMemory (`Memory me)))
1264-
| Some _ -> { env with env_actmem = Some me }
1266+
| Some _ -> { env with env_actmem_ss = Some me }
12651267

1266-
let get_active (env : env) =
1267-
env.env_actmem
1268+
let get_active_ss (env : env) =
1269+
env.env_actmem_ss
12681270

1269-
let current (env : env) =
1270-
match env.env_actmem with
1271+
let current_ss (env : env) =
1272+
match env.env_actmem_ss with
12711273
| None -> None
12721274
| Some me -> byid me env
1275+
1276+
let set_active_ts (ml: memory) (mr: memory) (env : env) =
1277+
match byid ml env, byid mr env with
1278+
| None, _ -> raise (MEError (UnknownMemory (`Memory ml)))
1279+
| _, None -> raise (MEError (UnknownMemory (`Memory mr)))
1280+
| Some _, Some _ ->
1281+
{ env with env_actmem_ts = Some (ml, mr) }
1282+
1283+
let get_active_ts (env : env) =
1284+
env.env_actmem_ts
1285+
1286+
let current_ts (env : env) =
1287+
match env.env_actmem_ts with
1288+
| None -> None
1289+
| Some (ml, mr) ->
1290+
match byid ml env, byid mr env with
1291+
| Some mel, Some mer -> Some (mel, mer)
1292+
| _ -> None
12731293

12741294
let update (me: EcMemory.memenv) (env : env) =
12751295
{ env with env_memories = Mmem.add (fst me) (snd me) env.env_memories; }
@@ -1284,10 +1304,14 @@ module Memory = struct
12841304
(fun env m -> push m env)
12851305
env memenvs
12861306

1287-
let push_active memenv env =
1288-
set_active (EcMemory.memory memenv)
1307+
let push_active_ss memenv env =
1308+
set_active_ss (EcMemory.memory memenv)
12891309
(push memenv env)
12901310

1311+
let push_active_ts mel mer env =
1312+
set_active_ts (EcMemory.memory mel) (EcMemory.memory mer)
1313+
(push mer (push mel env))
1314+
12911315
end
12921316

12931317
(* -------------------------------------------------------------------- *)
@@ -1690,15 +1714,15 @@ module Fun = struct
16901714
16911715
let inv_memenv1 env =
16921716
let mem = EcMemory.abstract EcCoreFol.mhr in
1693-
Memory.push_active mem env
1717+
Memory.push_active_ss mem env
16941718
16951719
let prF_memenv m path env =
16961720
let fun_ = by_xpath path env in
16971721
actmem_post m fun_
16981722
16991723
let prF path env =
17001724
let post = prF_memenv EcCoreFol.mhr path env in
1701-
Memory.push_active post env
1725+
Memory.push_active_ss post env
17021726
17031727
let hoareF_memenv mem path env =
17041728
let (ip, _) = oget (ipath_of_xpath path) in
@@ -1709,12 +1733,12 @@ module Fun = struct
17091733
17101734
let hoareF mem path env =
17111735
let pre, post = hoareF_memenv mem path env in
1712-
Memory.push_active pre env, Memory.push_active post env
1736+
Memory.push_active_ss pre env, Memory.push_active_ss post env
17131737
17141738
let hoareS mem path env =
17151739
let fun_ = by_xpath path env in
17161740
let fd, memenv = actmem_body mem fun_ in
1717-
memenv, fd, Memory.push_active memenv env
1741+
memenv, fd, Memory.push_active_ss memenv env
17181742
17191743
let equivF_memenv ml mr path1 path2 env =
17201744
let (ip1, _) = oget (ipath_of_xpath path1) in
@@ -3588,8 +3612,11 @@ module LDecl = struct
35883612
let fresh_ids hyps s = snd (fresh_ids (tohyps hyps) s)
35893613
35903614
(* ------------------------------------------------------------------ *)
3591-
let push_active m lenv =
3592-
{ lenv with le_env = Memory.push_active m lenv.le_env }
3615+
let push_active_ss m lenv =
3616+
{ lenv with le_env = Memory.push_active_ss m lenv.le_env }
3617+
3618+
let push_active_ts ml mr lenv =
3619+
{ lenv with le_env = Memory.push_active_ts ml mr lenv.le_env }
35933620
35943621
let push_all l lenv =
35953622
{ lenv with le_env = Memory.push_all l lenv.le_env }

src/ecEnv.mli

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,20 @@ type meerror =
6464
exception MEError of meerror
6565

6666
module Memory : sig
67-
val all : env -> memenv list
68-
val set_active : memory -> env -> env
69-
val get_active : env -> memory option
70-
71-
val byid : memory -> env -> memenv option
72-
val lookup : symbol -> env -> memenv option
73-
val current : env -> memenv option
74-
val push : memenv -> env -> env
75-
val push_all : memenv list -> env -> env
76-
val push_active : memenv -> env -> env
67+
val all : env -> memenv list
68+
val set_active_ss : memory -> env -> env
69+
val get_active_ss : env -> memory option
70+
val set_active_ts : memory -> memory -> env -> env
71+
val get_active_ts : env -> (memory * memory) option
72+
73+
val byid : memory -> env -> memenv option
74+
val lookup : symbol -> env -> memenv option
75+
val current_ss : env -> memenv option
76+
val current_ts : env -> (memenv * memenv) option
77+
val push : memenv -> env -> env
78+
val push_all : memenv list -> env -> env
79+
val push_active_ss: memenv -> env -> env
80+
val push_active_ts: memenv -> memenv -> env -> env
7781
end
7882

7983
(* -------------------------------------------------------------------- *)
@@ -502,8 +506,9 @@ module LDecl : sig
502506

503507
val clear : ?leniant:bool -> EcIdent.Sid.t -> hyps -> hyps
504508

505-
val push_all : memenv list -> hyps -> hyps
506-
val push_active : memenv -> hyps -> hyps
509+
val push_all : memenv list -> hyps -> hyps
510+
val push_active_ss : memenv -> hyps -> hyps
511+
val push_active_ts : memenv -> memenv -> hyps -> hyps
507512

508513
val hoareF : memory -> xpath -> hyps -> hyps * hyps
509514
val equivF : memory -> memory -> xpath -> xpath -> hyps -> hyps * hyps

src/ecPrinting.ml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ module PPEnv = struct
5858
| None -> ppe
5959
| Some m ->
6060
{ ppe with
61-
ppe_env = EcEnv.Memory.set_active (fst m) ppe.ppe_env }
61+
ppe_env = EcEnv.Memory.set_active_ss (fst m) ppe.ppe_env }
6262

6363
let push_mem ppe ?(active = false) m =
6464
let ppe = { ppe with ppe_env = EcEnv.Memory.push m ppe.ppe_env } in
@@ -568,7 +568,7 @@ let msymbol_of_pv (ppe : PPEnv.t) p =
568568
| PVglob xp ->
569569
let mem =
570570
let env = ppe.PPEnv.ppe_env in
571-
obind (EcEnv.Memory.byid^~ env) (EcEnv.Memory.get_active env) in
571+
obind (EcEnv.Memory.byid^~ env) (EcEnv.Memory.get_active_ss env) in
572572

573573
let exception Default in
574574

@@ -598,7 +598,7 @@ let pp_pv ppe fmt p = pp_msymbol fmt (msymbol_of_pv ppe p)
598598
exception NoProjArg
599599

600600
let get_projarg_for_var ppe x i =
601-
let m = oget ~exn:NoProjArg (EcEnv.Memory.current ppe.PPEnv.ppe_env) in
601+
let m = oget ~exn:NoProjArg (EcEnv.Memory.current_ss ppe.PPEnv.ppe_env) in
602602
if is_glob x then raise NoProjArg;
603603
oget ~exn:NoProjArg (EcMemory.get_name (get_loc x) (Some i) m)
604604

@@ -1749,7 +1749,7 @@ and match_pp_notations
17491749
let ue = EcUnify.UniEnv.create None in
17501750
let ov = EcUnify.UniEnv.opentvi ue tv None in
17511751
let hy = EcEnv.LDecl.init ppe.PPEnv.ppe_env [] in
1752-
let bd = match (EcEnv.Memory.get_active ppe.PPEnv.ppe_env) with
1752+
let bd = match (EcEnv.Memory.get_active_ss ppe.PPEnv.ppe_env) with
17531753
| None -> form_of_expr nt.ont_body
17541754
| Some m -> (ss_inv_of_expr m nt.ont_body).inv in
17551755
let bd = Fsubst.f_subst_tvar ~freshen:true ov bd in
@@ -1863,15 +1863,15 @@ and pp_form_core_r
18631863

18641864
if force || debug_mode then default true else
18651865

1866-
match EcEnv.Memory.get_active ppe.PPEnv.ppe_env with
1866+
match EcEnv.Memory.get_active_ss ppe.PPEnv.ppe_env with
18671867
| Some i' when EcMemory.mem_equal i i' ->
18681868
Format.fprintf fmt "%a" (pp_pv ppe) x
18691869
| _ ->
18701870
default false
18711871
end
18721872

18731873
| Fglob (mp, i) -> begin
1874-
match EcEnv.Memory.get_active ppe.PPEnv.ppe_env with
1874+
match EcEnv.Memory.get_active_ss ppe.PPEnv.ppe_env with
18751875
| Some i' when EcMemory.mem_equal i i' ->
18761876
Format.fprintf fmt "(glob %a)" (pp_topmod ppe) (EcPath.mident mp)
18771877
| _ ->
@@ -2087,7 +2087,7 @@ and pp_form ppe fmt f =
20872087
pp_form_r ppe (min_op_prec, `NonAssoc) fmt f
20882088

20892089
and pp_expr ppe fmt e =
2090-
let f = match (EcEnv.Memory.get_active ppe.PPEnv.ppe_env) with
2090+
let f = match (EcEnv.Memory.get_active_ss ppe.PPEnv.ppe_env) with
20912091
| None -> form_of_expr e
20922092
| Some m -> (ss_inv_of_expr m e).inv in
20932093
pp_form ppe fmt f

src/ecProofTyping.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ let tc1_process_prhl_formula tc pf =
122122
(* ------------------------------------------------------------------ *)
123123
let tc1_process_stmt ?map tc mt c =
124124
let hyps = FApi.tc1_hyps tc in
125-
let hyps = LDecl.push_active (mhr,mt) hyps in
125+
let hyps = LDecl.push_active_ss (mhr,mt) hyps in
126126
let env = LDecl.toenv hyps in
127127
let ue = unienv_of_hyps hyps in
128128
let c = Exn.recast_pe !!tc hyps (fun () -> EcTyping.transstmt ?map env ue c) in
@@ -142,7 +142,7 @@ let tc1_process_Xhl_exp tc side ty e =
142142
let hyps, concl = FApi.tc1_flat tc in
143143
let m = fst (EcFol.destr_programS side concl) in
144144

145-
let hyps = LDecl.push_active m hyps in
145+
let hyps = LDecl.push_active_ss m hyps in
146146
pf_process_exp !!tc hyps `InProc ty e
147147

148148
(* ------------------------------------------------------------------ *)
@@ -158,7 +158,7 @@ let tc1_process_Xhl_form ?side tc ty pf =
158158
| _ -> None
159159
in
160160

161-
let hyps = LDecl.push_active m hyps in
161+
let hyps = LDecl.push_active_ss m hyps in
162162

163163
let mv =
164164
Option.map
@@ -180,21 +180,21 @@ let tc1_process_Xhl_formula_xreal tc pf =
180180
let tc1_process_codepos_range tc (side, cpr) =
181181
let me, _ = EcLowPhlGoal.tc1_get_stmt side tc in
182182
let env = FApi.tc1_env tc in
183-
let env = EcEnv.Memory.push_active me env in
183+
let env = EcEnv.Memory.push_active_ss me env in
184184
EcTyping.trans_codepos_range env cpr
185185

186186
(* ------------------------------------------------------------------ *)
187187
let tc1_process_codepos tc (side, cpos) =
188188
let me, _ = EcLowPhlGoal.tc1_get_stmt side tc in
189189
let env = FApi.tc1_env tc in
190-
let env = EcEnv.Memory.push_active me env in
190+
let env = EcEnv.Memory.push_active_ss me env in
191191
EcTyping.trans_codepos env cpos
192192

193193
(* ------------------------------------------------------------------ *)
194194
let tc1_process_codepos1 tc (side, cpos) =
195195
let me, _ = EcLowPhlGoal.tc1_get_stmt side tc in
196196
let env = FApi.tc1_env tc in
197-
let env = EcEnv.Memory.push_active me env in
197+
let env = EcEnv.Memory.push_active_ss me env in
198198
EcTyping.trans_codepos1 env cpos
199199

200200
(* ------------------------------------------------------------------ *)

0 commit comments

Comments
 (0)