@@ -294,7 +294,7 @@ and pr = {
294294
295295and exnpost = {
296296 main : form ;
297- exnmap : form Mp .t * form option ;
297+ exnmap : form Mp .t ;
298298}
299299
300300let map_ss_inv ?m (fn : form list -> form ) (invs : ss_inv list ): ss_inv =
@@ -565,33 +565,33 @@ let map_inv3 (fn: form -> form -> form -> form)
565565 failwith " incompatible invariants for map_inv3"
566566
567567(* ----------------------------------------------------------------- *)
568- type 'a prepoe = 'a * ('a Mp .t * 'a option )
568+ type 'a prepoe = 'a * ('a Mp .t )
569569
570570module POE = struct
571- let mk (main : form ) (exnmap : form Mp.t * form option ) =
571+ let mk (main : form ) (exnmap : form Mp.t ) =
572572 { main; exnmap; }
573573
574574 let destruct (poe : exnpost ) =
575575 (poe.main, poe.exnmap)
576576
577577 let empty (f : form ) : exnpost =
578- { main = f; exnmap = ( Mp. empty, None ) ; }
578+ { main = f; exnmap = Mp. empty; }
579579
580- let is_empty ({ exnmap = ( m , dfl ) } : exnpost ) =
581- Option. is_none dfl && Mp. is_empty m
580+ let is_empty ({ exnmap } : exnpost ) =
581+ Mp. is_empty exnmap
582582
583583 let lift (f : ss_inv ) =
584584 { hsi_m = f.m; hsi_inv = empty f.inv; }
585585
586586 let lower (f : hs_inv ) =
587587 { m = f.hsi_m; inv = f.hsi_inv.main; }
588588
589- let map (f : form -> form ) ({ main; exnmap = ( m , d ) } : exnpost ) : exnpost =
590- { main = f main; exnmap = ( Mp. map f m, omap f d) }
589+ let map (f : form -> form ) ({ main; exnmap } : exnpost ) : exnpost =
590+ { main = f main; exnmap = Mp. map f exnmap }
591591
592592 let map2_pre (f : 'a -> 'b -> 'c ) (poe1 : 'a prepoe ) (poe2 : 'b prepoe ) : 'c prepoe =
593- let (main1, ( map1, d1) ) = poe1 in
594- let (main2, ( map2, d2) ) = poe2 in
593+ let (main1, map1) = poe1 in
594+ let (main2, map2) = poe2 in
595595
596596 let merge (a : 'a option ) (b : 'b option ) =
597597 match a, b with
@@ -602,9 +602,8 @@ module POE = struct
602602
603603 let main = f main1 main2 in
604604 let map = Mp. merge (fun _ -> merge) map1 map2 in
605- let dfl = merge d1 d2 in
606605
607- (main, ( map, dfl) )
606+ (main, map)
608607
609608 let map2 (f : form -> form -> form ) (poe1 : exnpost ) (poe2 : exnpost ) =
610609 let main, exnmap =
@@ -614,34 +613,28 @@ module POE = struct
614613
615614 let exists (f : form -> bool ) (poe : exnpost ) =
616615 f poe.main
617- || Mp. exists (fun _ -> f) (fst poe.exnmap)
618- || omap_dfl f false (snd poe.exnmap)
616+ || Mp. exists (fun _ -> f) poe.exnmap
619617
620618 let forall (f : form -> bool ) (poe : exnpost ) =
621619 f poe.main
622- && Mp. for_all (fun _ -> f) (fst poe.exnmap)
623- && omap_dfl f true (snd poe.exnmap)
620+ && Mp. for_all (fun _ -> f) poe.exnmap
624621
625622 let forall2 (f : form -> form -> bool ) (poe1 : exnpost ) (poe2 : exnpost ) =
626623 f poe1.main poe2.main
627- && Mp. equal f (fst poe1.exnmap) (fst poe2.exnmap)
628- && oeq f (snd poe1.exnmap) (snd poe2.exnmap)
624+ && Mp. equal f poe1.exnmap poe2.exnmap
629625
630- let to_list_pre ((main , (map , d )) : 'a prepoe ) =
631- let l =
632- Mp. fold
633- (fun _ p1 a -> p1 :: a)
634- map
635- [main]
636- in otolist d @ l
626+ let to_list_pre ((main , map ) : 'a prepoe ) =
627+ Mp. fold
628+ (fun _ p1 a -> p1 :: a)
629+ map
630+ [main]
637631
638632 let to_list (poe : exnpost ) =
639633 to_list_pre (destruct poe)
640634
641635 let fold (tx : 'a -> form -> 'a ) (state : 'a ) (poe : exnpost ) =
642636 let state = tx state poe.main in
643- let state = Mp. fold (fun _ f state -> tx state f) (fst poe.exnmap) state in
644- let state = ofold (fun f state -> tx state f) state (snd poe.exnmap) in
637+ let state = Mp. fold (fun _ f state -> tx state f) poe.exnmap state in
645638 state
646639
647640 let iter (tx : form -> unit ) (poe : exnpost ) =
@@ -657,13 +650,7 @@ module POE = struct
657650 f poe1.main poe2.main;
658651 Mp. iter
659652 (fun _ (a , b ) -> f a b)
660- (Mp. merge (fun _ -> merge) (fst poe1.exnmap) (fst poe2.exnmap));
661- begin
662- match snd poe1.exnmap, snd poe2.exnmap with
663- | None , None -> ()
664- | Some a , Some b -> f a b
665- | _ , _ -> assert false
666- end
653+ (Mp. merge (fun _ -> merge) poe1.exnmap poe2.exnmap)
667654end
668655
669656(* ----------------------------------------------------------------- *)
@@ -1059,8 +1046,7 @@ let b_hash (bs : bindings) =
10591046(* -------------------------------------------------------------------- *)
10601047let posts_equal (poe1 : exnpost ) (poe2 : exnpost ) =
10611048 f_equal poe1.main poe2.main
1062- && Mp. equal f_equal (fst poe1.exnmap) (fst poe2.exnmap)
1063- && oeq f_equal (snd poe1.exnmap) (snd poe2.exnmap)
1049+ && Mp. equal f_equal poe1.exnmap poe2.exnmap
10641050
10651051(* -------------------------------------------------------------------- *)
10661052let hf_equal hf1 hf2 =
@@ -1141,13 +1127,9 @@ let post_hash (p : path) (f : form) =
11411127 Why3.Hashcons. combine (EcPath. p_hash p) (f_hash f)
11421128
11431129let posts_hash (poe : exnpost ) =
1144- let h =
1145- Why3.Hashcons. combine
1146- (f_hash poe.main) (omap_dfl f_hash 0 (snd poe.exnmap))
1147- in
1148- Mp. fold
1149- (fun e f a -> Why3.Hashcons. combine a (post_hash e f))
1150- (fst poe.exnmap) h
1130+ Mp. fold
1131+ (fun e f a -> Why3.Hashcons. combine a (post_hash e f))
1132+ poe.exnmap (f_hash poe.main)
11511133
11521134(* -------------------------------------------------------------------- *)
11531135let hf_hash hf =
@@ -1510,10 +1492,9 @@ module Hsform = Why3.Hashcons.Make (struct
15101492
15111493 let posts_fv (poe : exnpost ) =
15121494 let fv = f_fv poe.main in
1513- let fv = snd poe.exnmap |> omap f_fv |> odfl fv in
15141495 Mp. fold
15151496 (fun _ f acc -> fv_union (f_fv f) acc)
1516- (fst poe.exnmap) fv
1497+ poe.exnmap fv
15171498
15181499 let fv_node f =
15191500 let union ex nodes =
0 commit comments