@@ -37,7 +37,7 @@ Tactic Notation "unfold_projs" "in" "*" :=
37
37
Ltac split_prod_hyps :=
38
38
repeat match goal with
39
39
| H: _ /\ _ |- _ => destruct H as [?H ?H]
40
- | p: { _ : _ & _ } |- _ => destruct p as [? H ]
40
+ | p: { _ : _ & _ } |- _ => destruct p as [?p ?p ]
41
41
| p: _ * _ |- _ => destruct p as [?p ?p]
42
42
| u: unit |- _ => destruct u
43
43
| u: True |- _ => destruct u
@@ -262,8 +262,8 @@ Ltac IntroArg_base_tac n A g :=
262
262
lazymatch A with
263
263
| _ /\ _ => simple apply IntroArg_and
264
264
| _ \/ _ => simple apply IntroArg_or
265
- | { _ : _ & _ } => simple apply IntroArg_sigT
266
- | prod _ _ => simple apply IntroArg_prod
265
+ (* | { _ : _ & _ } => simple apply IntroArg_sigT *)
266
+ (* | prod _ _ => simple apply IntroArg_prod *)
267
267
| sum _ _ => simple apply IntroArg_sum
268
268
| unit => simple apply IntroArg_unit
269
269
| existT _ _ _ = existT _ _ _ => simple apply IntroArg_eq_sigT_const
@@ -663,22 +663,27 @@ Hint Extern 5 (@refinesFun (LRT_Fun _ _) _ _) =>
663
663
*** Top-level tactics to put it all together
664
664
** *)
665
665
666
- Variant ProveRefOpts := Default | NoRewrite.
666
+ Variant ProveRefOpts := Default | NoRewrite | NoDestructProds | NoRewriteNoDestructProds .
667
667
668
668
Ltac prove_refinement_eauto :=
669
669
unshelve (typeclasses eauto with refinesM refinesFun).
670
+ Ltac prove_refinement_destruct_prod_hyps :=
671
+ split_prod_hyps; unfold_projs in *.
670
672
Ltac prove_refinement_rewrite :=
671
673
try unshelve (rewrite_strat (bottomup (hints refinesM))).
672
674
Ltac prove_refinement_try_solve :=
673
- unfold_projs in *;
674
- split_prod_hyps; split_prod_goal;
675
+ split_prod_goal;
675
676
try reflexivity || contradiction.
676
677
677
678
Tactic Notation "prove_refinement_core" "with " constr (opts) :=
679
+ prove_refinement_eauto;
678
680
match opts with
679
- | Default => prove_refinement_eauto; prove_refinement_rewrite; prove_refinement_try_solve
680
- | NoRewrite => prove_refinement_eauto; prove_refinement_try_solve
681
- end .
681
+ | Default => prove_refinement_destruct_prod_hyps; prove_refinement_rewrite
682
+ | NoRewrite => prove_refinement_destruct_prod_hyps
683
+ | NoDestructProds => prove_refinement_rewrite
684
+ | NoRewriteNoDestructProds => idtac
685
+ end ;
686
+ prove_refinement_try_solve.
682
687
683
688
Ltac prove_refinement_core := prove_refinement_core with Default.
684
689
0 commit comments