Skip to content

Commit 13afd89

Browse files
committed
Fix the following bug.
#34 (comment)
1 parent 72a7c7b commit 13afd89

File tree

3 files changed

+155
-33
lines changed

3 files changed

+155
-33
lines changed

metasrc/pacotac_internal.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,12 @@
249249

250250
print ('Ltac paco_pre'+str(n)+' := let X := fresh "_paco_X_" in')
251251
print ('generalize _paco_mark_cons; repeat intro;')
252-
print ('apply _paco_pre'+str(n)+'; intro X;')
252+
print ('apply _paco_pre'+str(n)+';')
253253
print ('match goal with')
254-
print ('| |- _'+itrstr(' ?e',n)+' => unfold X; clear X; paco_cont'+str(n)+itrstr(' e',n))
254+
print ('| [|- let _ : _'+itrstr(' ?T',n)+' := _ in _'+itrstr(' ?e',n)+'] => intro X; unfold X; clear X;')
255+
print ('paco_cont'+str(n))
256+
for i in range(n):
257+
print (' (e'+str(i)+': T'+str(i)+itrstr(' e',i)+')')
255258
print ('end.')
256259
print ()
257260

src/hpattern.v

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ Tactic Notation "hgeneralize_simpl" constr(C) "as" ident(id) :=
9292
*)
9393

9494
Ltac hrewrite_with eqn tac_res :=
95-
(lazymatch (type of eqn) with @eq _ ?X ?Y =>
95+
(lazymatch (type of eqn) with @eq ?T ?X ?Y =>
9696
let G := get_concl in
97-
tac_res X G;
97+
tac_res (X: T) G;
9898
hresolve_post ltac:(fun G' hx =>
99-
change G'; let Heqn := fresh "_temp_" in assert (Heqn : hx = Y) by (apply eqn); rewrite Heqn; clear Heqn)
99+
change G'; let Heqn := fresh "_temp_" in assert (Heqn : @eq T hx Y) by (apply eqn); rewrite Heqn; clear Heqn)
100100
end).
101101

102102
Tactic Notation "hrewrite" constr(eqn) "at" int_or_var(occ) :=

src/pacotac_internal.v

Lines changed: 147 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,11 @@ Proof. intros; apply X. Defined.
231231

232232
Ltac paco_pre1 := let X := fresh "_paco_X_" in
233233
generalize _paco_mark_cons; repeat intro;
234-
apply _paco_pre1; intro X;
234+
apply _paco_pre1;
235235
match goal with
236-
| |- _ ?e0 => unfold X; clear X; paco_cont1 e0
236+
| [|- let _ : _ ?T0 := _ in _ ?e0] => intro X; unfold X; clear X;
237+
paco_cont1
238+
(e0: T0)
237239
end.
238240

239241
Ltac paco_post_match1 INC tac1 tac2 :=
@@ -269,9 +271,12 @@ Proof. intros; apply X. Defined.
269271

270272
Ltac paco_pre2 := let X := fresh "_paco_X_" in
271273
generalize _paco_mark_cons; repeat intro;
272-
apply _paco_pre2; intro X;
274+
apply _paco_pre2;
273275
match goal with
274-
| |- _ ?e0 ?e1 => unfold X; clear X; paco_cont2 e0 e1
276+
| [|- let _ : _ ?T0 ?T1 := _ in _ ?e0 ?e1] => intro X; unfold X; clear X;
277+
paco_cont2
278+
(e0: T0)
279+
(e1: T1 e0)
275280
end.
276281

277282
Ltac paco_post_match2 INC tac1 tac2 :=
@@ -310,9 +315,13 @@ Proof. intros; apply X. Defined.
310315

311316
Ltac paco_pre3 := let X := fresh "_paco_X_" in
312317
generalize _paco_mark_cons; repeat intro;
313-
apply _paco_pre3; intro X;
318+
apply _paco_pre3;
314319
match goal with
315-
| |- _ ?e0 ?e1 ?e2 => unfold X; clear X; paco_cont3 e0 e1 e2
320+
| [|- let _ : _ ?T0 ?T1 ?T2 := _ in _ ?e0 ?e1 ?e2] => intro X; unfold X; clear X;
321+
paco_cont3
322+
(e0: T0)
323+
(e1: T1 e0)
324+
(e2: T2 e0 e1)
316325
end.
317326

318327
Ltac paco_post_match3 INC tac1 tac2 :=
@@ -354,9 +363,14 @@ Proof. intros; apply X. Defined.
354363

355364
Ltac paco_pre4 := let X := fresh "_paco_X_" in
356365
generalize _paco_mark_cons; repeat intro;
357-
apply _paco_pre4; intro X;
366+
apply _paco_pre4;
358367
match goal with
359-
| |- _ ?e0 ?e1 ?e2 ?e3 => unfold X; clear X; paco_cont4 e0 e1 e2 e3
368+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 := _ in _ ?e0 ?e1 ?e2 ?e3] => intro X; unfold X; clear X;
369+
paco_cont4
370+
(e0: T0)
371+
(e1: T1 e0)
372+
(e2: T2 e0 e1)
373+
(e3: T3 e0 e1 e2)
360374
end.
361375

362376
Ltac paco_post_match4 INC tac1 tac2 :=
@@ -401,9 +415,15 @@ Proof. intros; apply X. Defined.
401415

402416
Ltac paco_pre5 := let X := fresh "_paco_X_" in
403417
generalize _paco_mark_cons; repeat intro;
404-
apply _paco_pre5; intro X;
418+
apply _paco_pre5;
405419
match goal with
406-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 => unfold X; clear X; paco_cont5 e0 e1 e2 e3 e4
420+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4] => intro X; unfold X; clear X;
421+
paco_cont5
422+
(e0: T0)
423+
(e1: T1 e0)
424+
(e2: T2 e0 e1)
425+
(e3: T3 e0 e1 e2)
426+
(e4: T4 e0 e1 e2 e3)
407427
end.
408428

409429
Ltac paco_post_match5 INC tac1 tac2 :=
@@ -451,9 +471,16 @@ Proof. intros; apply X. Defined.
451471

452472
Ltac paco_pre6 := let X := fresh "_paco_X_" in
453473
generalize _paco_mark_cons; repeat intro;
454-
apply _paco_pre6; intro X;
474+
apply _paco_pre6;
455475
match goal with
456-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 => unfold X; clear X; paco_cont6 e0 e1 e2 e3 e4 e5
476+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5] => intro X; unfold X; clear X;
477+
paco_cont6
478+
(e0: T0)
479+
(e1: T1 e0)
480+
(e2: T2 e0 e1)
481+
(e3: T3 e0 e1 e2)
482+
(e4: T4 e0 e1 e2 e3)
483+
(e5: T5 e0 e1 e2 e3 e4)
457484
end.
458485

459486
Ltac paco_post_match6 INC tac1 tac2 :=
@@ -504,9 +531,17 @@ Proof. intros; apply X. Defined.
504531

505532
Ltac paco_pre7 := let X := fresh "_paco_X_" in
506533
generalize _paco_mark_cons; repeat intro;
507-
apply _paco_pre7; intro X;
534+
apply _paco_pre7;
508535
match goal with
509-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 => unfold X; clear X; paco_cont7 e0 e1 e2 e3 e4 e5 e6
536+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6] => intro X; unfold X; clear X;
537+
paco_cont7
538+
(e0: T0)
539+
(e1: T1 e0)
540+
(e2: T2 e0 e1)
541+
(e3: T3 e0 e1 e2)
542+
(e4: T4 e0 e1 e2 e3)
543+
(e5: T5 e0 e1 e2 e3 e4)
544+
(e6: T6 e0 e1 e2 e3 e4 e5)
510545
end.
511546

512547
Ltac paco_post_match7 INC tac1 tac2 :=
@@ -560,9 +595,18 @@ Proof. intros; apply X. Defined.
560595

561596
Ltac paco_pre8 := let X := fresh "_paco_X_" in
562597
generalize _paco_mark_cons; repeat intro;
563-
apply _paco_pre8; intro X;
598+
apply _paco_pre8;
564599
match goal with
565-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 => unfold X; clear X; paco_cont8 e0 e1 e2 e3 e4 e5 e6 e7
600+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7] => intro X; unfold X; clear X;
601+
paco_cont8
602+
(e0: T0)
603+
(e1: T1 e0)
604+
(e2: T2 e0 e1)
605+
(e3: T3 e0 e1 e2)
606+
(e4: T4 e0 e1 e2 e3)
607+
(e5: T5 e0 e1 e2 e3 e4)
608+
(e6: T6 e0 e1 e2 e3 e4 e5)
609+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
566610
end.
567611

568612
Ltac paco_post_match8 INC tac1 tac2 :=
@@ -619,9 +663,19 @@ Proof. intros; apply X. Defined.
619663

620664
Ltac paco_pre9 := let X := fresh "_paco_X_" in
621665
generalize _paco_mark_cons; repeat intro;
622-
apply _paco_pre9; intro X;
666+
apply _paco_pre9;
623667
match goal with
624-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 => unfold X; clear X; paco_cont9 e0 e1 e2 e3 e4 e5 e6 e7 e8
668+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8] => intro X; unfold X; clear X;
669+
paco_cont9
670+
(e0: T0)
671+
(e1: T1 e0)
672+
(e2: T2 e0 e1)
673+
(e3: T3 e0 e1 e2)
674+
(e4: T4 e0 e1 e2 e3)
675+
(e5: T5 e0 e1 e2 e3 e4)
676+
(e6: T6 e0 e1 e2 e3 e4 e5)
677+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
678+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
625679
end.
626680

627681
Ltac paco_post_match9 INC tac1 tac2 :=
@@ -681,9 +735,20 @@ Proof. intros; apply X. Defined.
681735

682736
Ltac paco_pre10 := let X := fresh "_paco_X_" in
683737
generalize _paco_mark_cons; repeat intro;
684-
apply _paco_pre10; intro X;
738+
apply _paco_pre10;
685739
match goal with
686-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 => unfold X; clear X; paco_cont10 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9
740+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 ?T9 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9] => intro X; unfold X; clear X;
741+
paco_cont10
742+
(e0: T0)
743+
(e1: T1 e0)
744+
(e2: T2 e0 e1)
745+
(e3: T3 e0 e1 e2)
746+
(e4: T4 e0 e1 e2 e3)
747+
(e5: T5 e0 e1 e2 e3 e4)
748+
(e6: T6 e0 e1 e2 e3 e4 e5)
749+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
750+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
751+
(e9: T9 e0 e1 e2 e3 e4 e5 e6 e7 e8)
687752
end.
688753

689754
Ltac paco_post_match10 INC tac1 tac2 :=
@@ -746,9 +811,21 @@ Proof. intros; apply X. Defined.
746811

747812
Ltac paco_pre11 := let X := fresh "_paco_X_" in
748813
generalize _paco_mark_cons; repeat intro;
749-
apply _paco_pre11; intro X;
814+
apply _paco_pre11;
750815
match goal with
751-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 => unfold X; clear X; paco_cont11 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10
816+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 ?T9 ?T10 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10] => intro X; unfold X; clear X;
817+
paco_cont11
818+
(e0: T0)
819+
(e1: T1 e0)
820+
(e2: T2 e0 e1)
821+
(e3: T3 e0 e1 e2)
822+
(e4: T4 e0 e1 e2 e3)
823+
(e5: T5 e0 e1 e2 e3 e4)
824+
(e6: T6 e0 e1 e2 e3 e4 e5)
825+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
826+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
827+
(e9: T9 e0 e1 e2 e3 e4 e5 e6 e7 e8)
828+
(e10: T10 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9)
752829
end.
753830

754831
Ltac paco_post_match11 INC tac1 tac2 :=
@@ -814,9 +891,22 @@ Proof. intros; apply X. Defined.
814891

815892
Ltac paco_pre12 := let X := fresh "_paco_X_" in
816893
generalize _paco_mark_cons; repeat intro;
817-
apply _paco_pre12; intro X;
894+
apply _paco_pre12;
818895
match goal with
819-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11 => unfold X; clear X; paco_cont12 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11
896+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 ?T9 ?T10 ?T11 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11] => intro X; unfold X; clear X;
897+
paco_cont12
898+
(e0: T0)
899+
(e1: T1 e0)
900+
(e2: T2 e0 e1)
901+
(e3: T3 e0 e1 e2)
902+
(e4: T4 e0 e1 e2 e3)
903+
(e5: T5 e0 e1 e2 e3 e4)
904+
(e6: T6 e0 e1 e2 e3 e4 e5)
905+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
906+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
907+
(e9: T9 e0 e1 e2 e3 e4 e5 e6 e7 e8)
908+
(e10: T10 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9)
909+
(e11: T11 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10)
820910
end.
821911

822912
Ltac paco_post_match12 INC tac1 tac2 :=
@@ -885,9 +975,23 @@ Proof. intros; apply X. Defined.
885975

886976
Ltac paco_pre13 := let X := fresh "_paco_X_" in
887977
generalize _paco_mark_cons; repeat intro;
888-
apply _paco_pre13; intro X;
978+
apply _paco_pre13;
889979
match goal with
890-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11 ?e12 => unfold X; clear X; paco_cont13 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12
980+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 ?T9 ?T10 ?T11 ?T12 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11 ?e12] => intro X; unfold X; clear X;
981+
paco_cont13
982+
(e0: T0)
983+
(e1: T1 e0)
984+
(e2: T2 e0 e1)
985+
(e3: T3 e0 e1 e2)
986+
(e4: T4 e0 e1 e2 e3)
987+
(e5: T5 e0 e1 e2 e3 e4)
988+
(e6: T6 e0 e1 e2 e3 e4 e5)
989+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
990+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
991+
(e9: T9 e0 e1 e2 e3 e4 e5 e6 e7 e8)
992+
(e10: T10 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9)
993+
(e11: T11 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10)
994+
(e12: T12 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11)
891995
end.
892996

893997
Ltac paco_post_match13 INC tac1 tac2 :=
@@ -959,9 +1063,24 @@ Proof. intros; apply X. Defined.
9591063

9601064
Ltac paco_pre14 := let X := fresh "_paco_X_" in
9611065
generalize _paco_mark_cons; repeat intro;
962-
apply _paco_pre14; intro X;
1066+
apply _paco_pre14;
9631067
match goal with
964-
| |- _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11 ?e12 ?e13 => unfold X; clear X; paco_cont14 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12 e13
1068+
| [|- let _ : _ ?T0 ?T1 ?T2 ?T3 ?T4 ?T5 ?T6 ?T7 ?T8 ?T9 ?T10 ?T11 ?T12 ?T13 := _ in _ ?e0 ?e1 ?e2 ?e3 ?e4 ?e5 ?e6 ?e7 ?e8 ?e9 ?e10 ?e11 ?e12 ?e13] => intro X; unfold X; clear X;
1069+
paco_cont14
1070+
(e0: T0)
1071+
(e1: T1 e0)
1072+
(e2: T2 e0 e1)
1073+
(e3: T3 e0 e1 e2)
1074+
(e4: T4 e0 e1 e2 e3)
1075+
(e5: T5 e0 e1 e2 e3 e4)
1076+
(e6: T6 e0 e1 e2 e3 e4 e5)
1077+
(e7: T7 e0 e1 e2 e3 e4 e5 e6)
1078+
(e8: T8 e0 e1 e2 e3 e4 e5 e6 e7)
1079+
(e9: T9 e0 e1 e2 e3 e4 e5 e6 e7 e8)
1080+
(e10: T10 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9)
1081+
(e11: T11 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10)
1082+
(e12: T12 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11)
1083+
(e13: T13 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11 e12)
9651084
end.
9661085

9671086
Ltac paco_post_match14 INC tac1 tac2 :=

0 commit comments

Comments
 (0)