From 53e8a445177501846c75147680da03a95d5e9b5c Mon Sep 17 00:00:00 2001 From: Hugo Herbelin Date: Sun, 10 Apr 2016 18:30:38 +0200 Subject: Not taking arguments given by name or position into account when computing the arguments which allows to decide which list of implicit arguments to consider when several such lists are available. For instance, "eq_refl (A:=nat)" is now interpreted as "@eq_refl nat _", the same way as if we had said: Arguments eq_refl {A} {x}. --- CHANGES | 6 ++++++ interp/constrintern.ml | 2 +- test-suite/output/Arguments_renaming.out | 6 ++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index fa0e70ba0a..db27f82001 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,12 @@ Changes beyond V8.5 =================== +Specification language + +- Giving implicit arguments explicitly to a constant with multiple + choices of implicit arguments does not break any more insertion of + further maximal implicit arguments. + Tactics - Flag "Bracketing Last Introduction Pattern" is now on by default. diff --git a/interp/constrintern.ml b/interp/constrintern.ml index 50252a368f..0c02c5dab2 100644 --- a/interp/constrintern.ml +++ b/interp/constrintern.ml @@ -1731,7 +1731,7 @@ let internalize globalenv env allow_patvar lvar c = in aux 1 l subscopes eargs rargs and apply_impargs c env imp subscopes l loc = - let imp = select_impargs_size (List.length l) imp in + let imp = select_impargs_size (List.length (List.filter (fun (_,x) -> x == None) l)) imp in let l = intern_impargs c env imp subscopes l in smart_gapp c loc l diff --git a/test-suite/output/Arguments_renaming.out b/test-suite/output/Arguments_renaming.out index 1e3cc37df4..3488cb3056 100644 --- a/test-suite/output/Arguments_renaming.out +++ b/test-suite/output/Arguments_renaming.out @@ -6,8 +6,10 @@ Error: To rename arguments the "rename" flag must be specified. Argument A renamed to T. @eq_refl : forall (B : Type) (y : B), y = y -@eq_refl nat - : forall x : nat, x = x +eq_refl + : ?y = ?y +where +?y : [ |- nat] Inductive eq (A : Type) (x : A) : A -> Prop := eq_refl : x = x For eq_refl: Arguments are renamed to B, y -- cgit v1.2.3