aboutsummaryrefslogtreecommitdiffstats
path: root/src/verit
diff options
context:
space:
mode:
authorChantal Keller <Chantal.Keller@lri.fr>2016-04-26 00:30:35 +0200
committerChantal Keller <Chantal.Keller@lri.fr>2016-04-26 00:30:35 +0200
commit9f9699c8134ed0ded42aad64e00cfb9f0a60c914 (patch)
tree2e34b34bf43380bfbdcf6e57fd41cc5773b0b3c6 /src/verit
parent5ebe1f1c3684609dc0c2f360cf4d86486795ab54 (diff)
downloadsmtcoq-9f9699c8134ed0ded42aad64e00cfb9f0a60c914.tar.gz
smtcoq-9f9699c8134ed0ded42aad64e00cfb9f0a60c914.zip
- Solved the Coq 8.5 problem relating to declaring section variables
- Correct equality check of atoms and formulas for processing congruence closure
Diffstat (limited to 'src/verit')
-rw-r--r--src/verit/veritSyntax.ml16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/verit/veritSyntax.ml b/src/verit/veritSyntax.ml
index c60d34f..3ff11e9 100644
--- a/src/verit/veritSyntax.ml
+++ b/src/verit/veritSyntax.ml
@@ -55,14 +55,14 @@ let is_eq l =
let rec process_trans a b prem res =
try
- let (l,(c,c')) = List.find (fun (l,(a',b')) -> (a' = b || b' = b)) prem in
- let prem = List.filter (fun l' -> l' <> (l,(c,c'))) prem in
- let c = if c = b then c' else c in
- if a = c
+ let (l,(c,c')) = List.find (fun (l,(a',b')) -> ((Atom.equal a' b) || (Atom.equal b' b))) prem in
+ let prem = List.filter (fun (l',(d,d')) -> (not (Form.equal l' l)) || (not (Atom.equal d c)) || (not (Atom.equal d' c'))) prem in
+ let c = if Atom.equal c b then c' else c in
+ if Atom.equal a c
then List.rev (l::res)
else process_trans a c prem (l::res)
with
- |Not_found -> if a = b then [] else assert false
+ |Not_found -> if Atom.equal a b then [] else assert false
let mkTrans p =
@@ -84,7 +84,7 @@ let rec process_congr a_args b_args prem res =
(* if a = b *)
(* then process_congr a_args b_args prem (None::res) *)
(* else *)
- let (l,(a',b')) = List.find (fun (l,(a',b')) -> (a = a' && b = b')||(a = b' && b = a')) prem in
+ let (l,(a',b')) = List.find (fun (l,(a',b')) -> ((Atom.equal a a') && (Atom.equal b b'))||((Atom.equal a b') && (Atom.equal b a'))) prem in
process_congr a_args b_args prem ((Some l)::res)
| [],[] -> List.rev res
| _ -> failwith "VeritSyntax.process_congr: incorrect number of arguments in function application"
@@ -108,7 +108,7 @@ let mkCongr p =
let cert = process_congr a_args b_args prem_val [] in
Other (EqCgr (c,cert))
| Aapp (a_f,a_args), Aapp (b_f,b_args) ->
- if a_f = b_f then
+ if indexed_op_index a_f = indexed_op_index b_f then
let cert = process_congr (Array.to_list a_args) (Array.to_list b_args) prem_val [] in
Other (EqCgr (c,cert))
else failwith "VeritSyntax.mkCongr: left function is different from right fucntion"
@@ -131,7 +131,7 @@ let mkCongrPred p =
let cert = process_congr a_args b_args prem_val [] in
Other (EqCgrP (p_p,c,cert))
| Aapp (a_f,a_args), Aapp (b_f,b_args) ->
- if a_f = b_f then
+ if indexed_op_index a_f = indexed_op_index b_f then
let cert = process_congr (Array.to_list a_args) (Array.to_list b_args) prem_val [] in
Other (EqCgrP (p_p,c,cert))
else failwith "VeritSyntax.mkCongrPred: unmatching predicates"