@@ -1552,20 +1552,20 @@ let check_one_fix ?evars renv recpos trees def =
15521552
15531553 | Case (ci , u , pms , ret , iv , c_0 , br ) -> (* iv ignored: it's just a cache *)
15541554 let (ci, (p,_), _iv, c_0, brs) = expand_case renv.env (ci, u, pms, ret, iv, c_0, br) in
1555- let needreduce_c_0, rs = check_in_redex renv rs c_0 in
1555+ let rs = push_redex rs in
1556+ let rs = check_term renv rs c_0 in
15561557 let rs = check_term renv rs p in
15571558 (* compute the recarg info for the arguments of each branch *)
1558- let rs' = push_redex rs in
1559- let nr = redex_level rs' in
1559+ let nr = redex_level rs in
15601560 let c_spec = Subterm. make_internal nr (lazy_subterm_specif ?evars renv [] c_0) in
15611561 let case_spec = Subterm. on_branches renv.env ci.ci_ind c_spec in
15621562 let stack' = filter_stack_domain stack_element_specif (Lazy. from_val (Subterm. internal nr)) ?evars renv.env p stack in
1563- let rs' =
1563+ let rs =
15641564 Array. fold_left_i (fun k rs' br' ->
15651565 let stack_br = push_stack_args (case_spec k) stack' in
1566- check_in_stack renv stack_br rs' br') rs' brs in
1567- let needreduce_br , rs = pop_redex rs' in
1568- check_needreduce renv (needreduce_br ||| needreduce_c_0) stack rs (fun () ->
1566+ check_in_stack renv stack_br rs' br') rs brs in
1567+ let needreduce , rs = pop_redex rs in
1568+ check_needreduce renv needreduce stack rs (fun () ->
15691569 (* we try hard to reduce the match away by looking for a
15701570 constructor in c_0 (we unfold definitions too) *)
15711571 let hd, args = reduce_and_contract_cofix ?evars renv.env c_0 in
@@ -1591,8 +1591,8 @@ let check_one_fix ?evars renv recpos trees def =
15911591 | Fix ((recindxs ,i ),(_ ,typarray ,bodies as recdef ) as fix ) ->
15921592 let decrArg = recindxs.(i) in
15931593 let nbodies = Array. length bodies in
1594- let rs' = push_redex rs in
1595- let rs' = Array. fold_left (check_term renv) rs' typarray in
1594+ let rs = push_redex rs in
1595+ let rs = Array. fold_left (check_term renv) rs typarray in
15961596 let renv' = push_fix_renv renv recdef in
15971597 let nuniformparams = find_uniform_parameters recindxs (List. length stack) bodies in
15981598 let bodies = drop_uniform_parameters nuniformparams bodies in
@@ -1605,10 +1605,10 @@ let check_one_fix ?evars renv recpos trees def =
16051605 error_ill_formed_rec_body renv.env (Type_errors. FixGuardError (NotEnoughAbstractionInFixBody recindxs.(i)))
16061606 (pi1 recdef) i (push_rec_types recdef renv.env)
16071607 (judgment_of_fixpoint recdef) in
1608- let rs' = Array. fold_left2_i (fun j rs' recindx body ->
1608+ let rs = Array. fold_left2_i (fun j rs recindx body ->
16091609 let fix_stack = if Int. equal i j then stack_this else stack_others in
1610- check_nested_fix_body illformed renv' (recindx+ 1 ) fix_stack rs' body) rs' recindxs bodies in
1611- let needreduce, rs = pop_redex rs' in
1610+ check_nested_fix_body illformed renv' (recindx+ 1 ) fix_stack rs body) rs recindxs bodies in
1611+ let needreduce, rs = pop_redex rs in
16121612 let absorbed_stack, non_absorbed_stack = List. chop nuniformparams stack in
16131613 check_needreduce renv needreduce non_absorbed_stack rs (fun () ->
16141614 (* we try hard to reduce the fix away by looking for a
@@ -1696,9 +1696,9 @@ let check_one_fix ?evars renv recpos trees def =
16961696 end
16971697
16981698 | Cast (c ,_ ,t ) ->
1699- let rs = check_term renv rs t in
1700- let rs = check_in_stack renv stack rs c in
1701- rs
1699+ let _, rs = check_in_redex renv rs t in
1700+ (* The type annotation is erased by cast erasure *)
1701+ check_in_stack renv stack rs c
17021702
17031703 | Sort _ | Int _ | Float _ | String _ ->
17041704 (* See [Prod]: we cannot ensure that the stack is empty *)
0 commit comments