From bd346e44c8993b758013d98855b71404e4d0ad7f Mon Sep 17 00:00:00 2001 From: Chantal Keller Date: Tue, 7 Dec 2021 18:53:40 +0100 Subject: Solved bug in delayed ComDec --- src/trace/smtBtype.ml | 5 ++--- src/trace/smtMisc.ml | 2 +- src/trace/smtMisc.mli | 2 +- unit-tests/Tests_verit_tactics.v | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/trace/smtBtype.ml b/src/trace/smtBtype.ml index 3b6d107..7c08157 100644 --- a/src/trace/smtBtype.ml +++ b/src/trace/smtBtype.ml @@ -304,10 +304,9 @@ let of_coq_compdec reify t compdec = (match i.hval with | CompDec _ -> ty | Delayed _ -> - Hashtbl.remove reify.tbl t; let ce = mklApp cTyp_compdec [|t; compdec|] in - let res = Tindex {index = i.index; hval = CompDec ce} in - Hashtbl.add reify.tbl t res; + i.hval <- CompDec ce; + let res = Tindex i in res ) | _ -> ty diff --git a/src/trace/smtMisc.ml b/src/trace/smtMisc.ml index 2080a64..e4747dd 100644 --- a/src/trace/smtMisc.ml +++ b/src/trace/smtMisc.ml @@ -21,7 +21,7 @@ let mkInt i = ci (** Generic representation of shared object *) -type 'a gen_hashed = { index : int; hval : 'a } +type 'a gen_hashed = { index : int; mutable hval : 'a } (** Functions over constr *) diff --git a/src/trace/smtMisc.mli b/src/trace/smtMisc.mli index a6f5db8..6378627 100644 --- a/src/trace/smtMisc.mli +++ b/src/trace/smtMisc.mli @@ -12,7 +12,7 @@ val cInt_tbl : (int, Structures.constr) Hashtbl.t val mkInt : int -> Structures.constr -type 'a gen_hashed = { index : int; hval : 'a; } +type 'a gen_hashed = { index : int; mutable hval : 'a; } val mklApp : Structures.constr Lazy.t -> Structures.constr array -> Structures.constr val string_of_name_def : string -> Structures.name -> string val string_coq_constr : Structures.constr -> string diff --git a/unit-tests/Tests_verit_tactics.v b/unit-tests/Tests_verit_tactics.v index ce530bd..1bbf484 100644 --- a/unit-tests/Tests_verit_tactics.v +++ b/unit-tests/Tests_verit_tactics.v @@ -1475,3 +1475,26 @@ Section QInstAnd. Proof. verit. Qed. End QInstAnd. + + +Section OCamlCompDec. + Variable A : Type. + Variable HA : CompDec A. + Variable H2 : forall (h : A) (l x : list A), (h :: l) ++ x = h :: l ++ x. + Variable H4 : forall x : list A, nil ++ x = x. + Variable H5 : forall (x : A) (x0 : list A), nil = x :: x0 -> False. + Variable H6 : forall (x : list A) (x0 : list (list A)), nil = x :: x0 -> False. + Variable H8 : forall (x x0 : list A) (x1 x2 : list (list A)), x :: x1 = x0 :: x2 -> x = x0 /\ x1 = x2. + Variable proj_list : forall A : Type, list A -> list A -> list A. + Variable H0 : forall (H : list A) (H0 : A) (H1 : list A), proj_list A H (H0 :: H1) = H1. + Variable H10 : forall (H : list (list A)) (H0 : list A) (H1 : list (list A)), + proj_list (list A) H (H0 :: H1) = H1. + Variable proj_list0 : forall A : Type, A -> list A -> A. + Variable H9 : forall (H H0 : A) (H1 : list A), proj_list0 A H (H0 :: H1) = H0. + Variable H12 : forall (H H0 : list A) (H1 : list (list A)), proj_list0 (list A) H (H0 :: H1) = H0. + Variable H11 : forall (x : A) (x0 x1 : list A), x1 = nil \/ x1 = proj_list0 A x x1 :: proj_list A x0 x1. + + Goal forall (x y : list A) (a0 : A), + x ++ y = a0::nil -> x = nil /\ y = a0::nil \/ x = a0::nil /\ y = nil. + Proof. verit_no_check. Qed. +End OCamlCompDec. -- cgit