Useful but insignificant changes in Prover

Reviewed By: jeremydubreil

Differential Revision: D5366249

fbshipit-source-id: 3f0b7c1
master
Jia Chen 8 years ago committed by Facebook Github Bot
parent d1bc510cd5
commit 89ef9356d0

@ -607,8 +607,8 @@ let check_disequal tenv prop e1 e2 =
let spatial_part = prop.Prop.sigma in
let n_e1 = Prop.exp_normalize_prop tenv prop e1 in
let n_e2 = Prop.exp_normalize_prop tenv prop e2 in
let check_disequal_const () =
match n_e1, n_e2 with
let rec check_expr_disequal ce1 ce2 =
match ce1, ce2 with
| Exp.Const c1, Exp.Const c2 ->
(Const.kind_equal c1 c2) && not (Const.equal c1 c2)
| Exp.Const c1, Exp.Lindex(Exp.Const c2, Exp.Const (Const.Cint d)) ->
@ -638,6 +638,14 @@ let check_disequal tenv prop e1 e2 =
| Exp.Lvar pv, Exp.Var id | Exp.Var id, Exp.Lvar pv ->
(* Address of any non-global var must be different from the value of any footprint var *)
(not (Pvar.is_global pv)) && Ident.is_footprint id
| Exp.UnOp (op1, e1, _), Exp.UnOp (op2, e2, _) ->
if Unop.equal op1 op2 then check_expr_disequal e1 e2
else false
| Exp.Lfield (e1, f1, _), Exp.Lfield (e2, f2, _) ->
if Typ.Fieldname.equal f1 f2 then check_expr_disequal e1 e2
else false
| Exp.Exn e1, Exp.Exn e2 ->
check_expr_disequal e1 e2
| _, _ -> false in
let ineq = lazy (Inequalities.from_prop tenv prop) in
let check_pi_implies_disequal e1 e2 =
@ -701,9 +709,11 @@ let check_disequal tenv prop e1 e2 =
(match f_null_check [] n_e2 spatial_part_leftover with
| None -> false
| Some ((e2_allocated : bool), _) -> e1_allocated || e2_allocated) in
let check_disequal_expr () =
check_expr_disequal n_e1 n_e2 in
let neq_pure_part () =
check_pi_implies_disequal n_e1 n_e2 in
check_disequal_const () || neq_pure_part () || neq_spatial_part ()
check_disequal_expr () || neq_pure_part () || neq_spatial_part ()
(** Check [prop |- e1<=e2], to be called from normalized atom *)
let check_le_normalized tenv prop e1 e2 =
@ -1249,6 +1259,8 @@ let exp_imply tenv calc_missing subs e1_in e2_in : subst2 =
do_imply subs e1 e2
| Exp.Lindex(e1, f1), Exp.Lindex(e2, f2) ->
do_imply (do_imply subs e1 e2) f1 f2
| Exp.Exn e1, Exp.Exn e2 ->
do_imply subs e1 e2
| _ ->
d_impl_err ("exp_imply not implemented", subs, (EXC_FALSE_EXPS (e1, e2)));
raise (Exceptions.Abduction_case_not_implemented __POS__) in

Loading…
Cancel
Save