diff options
| author | msozeau | 2009-05-27 22:51:46 +0000 |
|---|---|---|
| committer | msozeau | 2009-05-27 22:51:46 +0000 |
| commit | a3f3b8621fcee45ee9c622923fba5c442b9a5c2a (patch) | |
| tree | 8560bc5f93290846c0c61b489b2d91b14c7b7610 /library/lib.ml | |
| parent | a0df6a89bd29e7e058d0734c93549789ba477859 (diff) | |
Fix implicit args code so that declarations are added for all
definitions and variables (may increase the vo's size a bit), which in
turn fixes discharging with manual implicit args only.
Fix Context to correctly handle "kept" assumptions for typeclasses,
discharging a class variable when any variable bound in it is used.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12150 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'library/lib.ml')
| -rw-r--r-- | library/lib.ml | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/library/lib.ml b/library/lib.ml index dfe00fae51..356f90b227 100644 --- a/library/lib.ml +++ b/library/lib.ml @@ -452,7 +452,7 @@ type variable_context = variable_info list type abstr_list = variable_context Names.Cmap.t * variable_context Names.KNmap.t let sectab = - ref ([] : ((Names.identifier * binding_kind * Term.types option) list * Cooking.work_list * abstr_list) list) + ref ([] : ((Names.identifier * binding_kind * (Term.types * Names.identifier list) option) list * Cooking.work_list * abstr_list) list) let add_section () = sectab := ([],(Names.Cmap.empty,Names.KNmap.empty),(Names.Cmap.empty,Names.KNmap.empty)) :: !sectab @@ -460,11 +460,15 @@ let add_section () = let add_section_variable id impl keep = match !sectab with | [] -> () (* because (Co-)Fixpoint temporarily uses local vars *) - | (vars,repl,abs)::sl -> sectab := ((id,impl,keep)::vars,repl,abs)::sl + | (vars,repl,abs)::sl -> + sectab := ((id,impl,keep)::vars,repl,abs)::sl let rec extract_hyps = function | ((id,impl,keep)::idl,(id',b,t)::hyps) when id=id' -> (id',impl,b,t) :: extract_hyps (idl,hyps) - | ((id,impl,Some ty)::idl,hyps) -> (id,impl,None,ty) :: extract_hyps (idl,hyps) + | ((id,impl,Some (ty,keep))::idl,hyps) -> + if List.exists (fun (id,_,_) -> List.mem id keep) hyps then + (id,impl,None,ty) :: extract_hyps (idl,hyps) + else extract_hyps (idl,hyps) | (id::idl,hyps) -> extract_hyps (idl,hyps) | [], _ -> [] |
