@@ -181,7 +181,7 @@ type preenv = {
181181 env_tci : ((ty_params * ty ) * tcinstance ) list ;
182182 env_tc : TC .graph ;
183183 env_rwbase : Sp .t Mip .t ;
184- env_atbase : (path list Mint .t ) Msym .t ;
184+ env_atbase : (bool * path ) list Mint .t Msym .t ; (* maybe rename to atbases? *)
185185 env_redbase : mredinfo ;
186186 env_ntbase : ntbase Mop .t ;
187187 env_modlcs : Sid .t ; (* declared modules *)
@@ -221,6 +221,7 @@ and env_notation = ty_params * EcDecl.notation
221221
222222and ntbase = (path * env_notation) list
223223
224+
224225(* -------------------------------------------------------------------- *)
225226type env = preenv
226227
@@ -1502,39 +1503,39 @@ end
15021503module Auto = struct
15031504 let dname : symbol = " "
15041505
1505- let updatedb ~level ?base (ps : path list ) (db : (path list Mint.t) Msym.t ) =
1506+ let updatedb ~level ?base (ps : (bool * path) list ) (db : (bool * path) list Mint.t Msym.t ) =
15061507 let nbase = (odfl dname base) in
1507- let ps' = Msym. find_def Mint. empty nbase db in
1508- let ps' =
1508+ let base = Msym. find_def Mint. empty nbase db in
1509+ let levels =
15091510 let doit x = Some (ofold (fun x ps -> ps @ x) ps x) in
1510- Mint. change doit level ps' in
1511- Msym. add nbase ps' db
1511+ Mint. change doit level base in
1512+ Msym. add nbase levels db
15121513
1513- let add ?(import = import0) ~level ?base (ps : path list ) lc (env : env ) =
1514+ let add ?(import = import0) ~level ?base (axioms : (bool * path) list ) locality (env : env ) =
15141515 let env =
15151516 if import.im_immediate then
15161517 { env with
1517- env_atbase = updatedb ?base ~level ps env.env_atbase; }
1518+ env_atbase = updatedb ?base ~level axioms env.env_atbase; }
15181519 else env
15191520 in
15201521 { env with env_item = mkitem import
1521- (Th_auto ( level, base, ps, lc) ) :: env.env_item; }
1522+ (Th_auto { level; base; axioms; locality} ) :: env.env_item; }
15221523
1523- let add1 ?import ~level ?base (p : path ) lc (env : env ) =
1524+ let add1 ?import ~level ?base (p : (bool * path) ) lc (env : env ) =
15241525 add ?import ?base ~level [p] lc env
15251526
15261527 let get_core ?base (env : env ) =
15271528 Msym. find_def Mint. empty (odfl dname base) env.env_atbase
15281529
1529- let flatten_db (db : path list Mint.t ) =
1530+ let flatten_db (db : (bool * path) list Mint.t ) =
15301531 Mint. fold_left (fun ps _ ps' -> ps @ ps') [] db
15311532
15321533 let get ?base (env : env ) =
15331534 flatten_db (get_core ?base env)
15341535
1535- let getall (bases : symbol list ) (env : env ) =
1536+ let getall (bases : symbol list ) (env : env ) : (bool * path) list =
15361537 let dbs = List. map (fun base -> get_core ~base env) bases in
1537- let dbs =
1538+ let dbs =
15381539 List. fold_left (fun db mi ->
15391540 Mint. union (fun _ sp1 sp2 -> Some (sp1 @ sp2)) db mi)
15401541 Mint. empty dbs
@@ -1543,6 +1544,9 @@ module Auto = struct
15431544 let getx (base : symbol ) (env : env ) =
15441545 let db = Msym. find_def Mint. empty base env.env_atbase in
15451546 Mint. bindings db
1547+
1548+ let all (env : env ) : (bool * path) list =
1549+ Msym. values env.env_atbase |> List. map flatten_db |> List. flatten
15461550end
15471551
15481552(* -------------------------------------------------------------------- *)
@@ -2932,8 +2936,8 @@ module Theory = struct
29322936 (* ------------------------------------------------------------------ *)
29332937 let bind_at_th =
29342938 let for1 _path db = function
2935- | Th_auto ( level , base , ps , _ ) ->
2936- Some (Auto. updatedb ?base ~level ps db)
2939+ | Th_auto { level; base; axioms; _} ->
2940+ Some (Auto. updatedb ?base ~level axioms db)
29372941 | _ -> None
29382942
29392943 in bind_base_th for1
@@ -3106,9 +3110,9 @@ module Theory = struct
31063110 let ps = List. filter ((not ) |- inclear |- oget |- EcPath. prefix) ps in
31073111 if List. is_empty ps then None else Some (Th_addrw (p, ps,lc))
31083112
3109- | Th_auto (lvl , base , ps , lc ) ->
3110- let ps = List. filter (( not ) |- inclear |- oget |- EcPath. prefix) ps in
3111- if List. is_empty ps then None else Some (Th_auto (lvl, base, ps, lc) )
3113+ | Th_auto ({axioms} as auto_rl ) ->
3114+ let axioms = List. filter (fun ( _b , p ) -> (( not ) |- inclear |- oget |- EcPath. prefix) p) axioms in
3115+ if List. is_empty axioms then None else Some (Th_auto {auto_rl with axioms} )
31123116
31133117 | (Th_export (p , _ )) as item ->
31143118 if Sp. mem p cleared then None else Some item
0 commit comments