|
8 | 8 |
|
9 | 9 | relsize = int(sys.argv[1]) |
10 | 10 |
|
11 | | -print ('Require Import JMeq.') |
12 | 11 | print ('From Paco Require Import hpattern.') |
13 | 12 | print ('From Paco Require Export paconotation_internal paconotation.') |
14 | 13 | print ('Set Implicit Arguments.') |
|
31 | 30 | print () |
32 | 31 | print ('Definition _paco_id {A} (a : A) : A := a.') |
33 | 32 | print () |
34 | | -print ('Lemma paco_eq_JMeq: forall A (a b: A), a = b -> _paco_id (JMeq a b).') |
35 | | -print ('Proof. intros; subst; apply JMeq_refl. Defined.') |
36 | | -print () |
37 | | -print ('Lemma paco_JMeq_eq: forall (A : Type) (x y : A), _paco_id (JMeq x y) -> _paco_id (x = y).') |
38 | | -print ('Proof. intros; apply JMeq_eq; auto. Defined.') |
39 | | -print () |
40 | | -print ('Ltac simplJM :=') |
41 | | -print (' repeat match goal with [H: ?x |- _] =>') |
42 | | -print (' match x with') |
43 | | -print (' | _paco_id (JMeq _ _) => apply paco_JMeq_eq in H') |
44 | | -print (' | _paco_id (?a = _) => unfold _paco_id in H; subst a') |
45 | | -print (' end') |
46 | | -print (' end.') |
47 | | -print () |
48 | | -print ('Tactic Notation "hrewrite_internal" constr(eqn) "at" int_or_var(occ) :=') |
49 | | -print (' first[hrewrite eqn at occ | rewrite eqn].') |
50 | | -print ('Ltac hrewrite_last e H := let x := fresh "_paco_x_" in') |
51 | | -print (' first [try (set (x:=e) at 17; fail 1);') |
52 | | -print (' first [try (set (x:=e) at 9; fail 1);') |
53 | | -print (' first [try (set (x:=e) at 5; fail 1);') |
54 | | -print (' first [try (set (x:=e) at 3; fail 1);') |
55 | | -print (' first [try (set (x:=e) at 2; fail 1);') |
56 | | -print (' try (hrewrite_internal H at 1)') |
57 | | -print (' | try (hrewrite_internal H at 2) ]') |
58 | | -print (' | first [try (set (x:=e) at 4; fail 1);') |
59 | | -print (' try (hrewrite_internal H at 3)') |
60 | | -print (' | try (hrewrite_internal H at 4) ] ]') |
61 | | -print (' | first [try (set (x:=e) at 7; fail 1);') |
62 | | -print (' first [try (set (x:=e) at 6; fail 1);') |
63 | | -print (' try (hrewrite_internal H at 5)') |
64 | | -print (' | try (hrewrite_internal H at 6)]') |
65 | | -print (' | first [try (set (x:=e) at 8; fail 1);') |
66 | | -print (' try (hrewrite_internal H at 7)') |
67 | | -print (' | try (hrewrite_internal H at 8) ] ] ]') |
68 | | -print (' | first [try (set (x:=e) at 13; fail 1);') |
69 | | -print (' first [try (set (x:=e) at 11; fail 1);') |
70 | | -print (' first [try (set (x:=e) at 10; fail 1);') |
71 | | -print (' try (hrewrite_internal H at 9)') |
72 | | -print (' | try (hrewrite_internal H at 10) ]') |
73 | | -print (' | first [try (set (x:=e) at 12; fail 1);') |
74 | | -print (' try (hrewrite_internal H at 11)') |
75 | | -print (' | try (hrewrite_internal H at 12) ] ]') |
76 | | -print (' | first [try (set (x:=e) at 15; fail 1);') |
77 | | -print (' first [try (set (x:=e) at 14; fail 1);') |
78 | | -print (' try (hrewrite_internal H at 13)') |
79 | | -print (' | try (hrewrite_internal H at 14)]') |
80 | | -print (' | first [try (set (x:=e) at 16; fail 1);') |
81 | | -print (' try (hrewrite_internal H at 15)') |
82 | | -print (' | try (hrewrite_internal H at 16) ] ] ] ]') |
83 | | -print (' | first [try (set (x:=e) at 25; fail 1);') |
84 | | -print (' first [try (set (x:=e) at 21; fail 1);') |
85 | | -print (' first [try (set (x:=e) at 19; fail 1);') |
86 | | -print (' first [try (set (x:=e) at 18; fail 1);') |
87 | | -print (' try (hrewrite_internal H at 17)') |
88 | | -print (' | try (hrewrite_internal H at 18) ]') |
89 | | -print (' | first [try (set (x:=e) at 20; fail 1);') |
90 | | -print (' try (hrewrite_internal H at 19)') |
91 | | -print (' | try (hrewrite_internal H at 20) ] ]') |
92 | | -print (' | first [try (set (x:=e) at 23; fail 1);') |
93 | | -print (' first [try (set (x:=e) at 22; fail 1);') |
94 | | -print (' try (hrewrite_internal H at 21)') |
95 | | -print (' | try (hrewrite_internal H at 22)]') |
96 | | -print (' | first [try (set (x:=e) at 24; fail 1);') |
97 | | -print (' try (hrewrite_internal H at 23)') |
98 | | -print (' | try (hrewrite_internal H at 24) ] ] ]') |
99 | | -print (' | first [try (set (x:=e) at 29; fail 1);') |
100 | | -print (' first [try (set (x:=e) at 27; fail 1);') |
101 | | -print (' first [try (set (x:=e) at 26; fail 1);') |
102 | | -print (' try (hrewrite_internal H at 25)') |
103 | | -print (' | try (hrewrite_internal H at 26) ]') |
104 | | -print (' | first [try (set (x:=e) at 28; fail 1);') |
105 | | -print (' try (hrewrite_internal H at 27)') |
106 | | -print (' | try (hrewrite_internal H at 28) ] ]') |
107 | | -print (' | first [try (set (x:=e) at 31; fail 1);') |
108 | | -print (' first [try (set (x:=e) at 30; fail 1);') |
109 | | -print (' try (hrewrite_internal H at 29)') |
110 | | -print (' | try (hrewrite_internal H at 30)]') |
111 | | -print (' | first [try (set (x:=e) at 32; fail 1);') |
112 | | -print (' try (hrewrite_internal H at 31)') |
113 | | -print (' | try (hrewrite_internal H at 32) ] ] ] ] ]') |
114 | | -print ('.') |
115 | | -print () |
116 | 33 | print ('Ltac paco_generalize_hyp mark :=') |
117 | 34 | print (' let y := fresh "_paco_rel_" in') |
118 | 35 | print (' match goal with') |
|
130 | 47 | print (' end') |
131 | 48 | print (' end.') |
132 | 49 | print () |
133 | | -print ('Ltac paco_convert e x EQ :=') |
134 | | -print (' generalize (eq_refl e); generalize e at 2; intros x EQ;') |
135 | | -print (' hrewrite_last e EQ; apply eq_sym, paco_eq_JMeq in EQ; revert x EQ.') |
136 | | -print () |
137 | 50 | print ('Ltac paco_destruct_hyp mark :=') |
138 | 51 | print (' match goal with') |
139 | 52 | print (' | [x: ?A |- _] =>') |
|
173 | 86 | print (' assert (TP: False -> PP) by (') |
174 | 87 | print (' intros FP; generalize _paco_mark_cons;') |
175 | 88 | print (' repeat intro; paco_rename_last; paco_destruct_hyp _paco_mark;') |
176 | | -print (' simplJM; paco_revert_hyp _paco_mark;') |
| 89 | +print (' paco_revert_hyp _paco_mark;') |
177 | 90 | print (' let con := get_concl in set (TP:=con); revert EP; instantiate (1:= con); destruct FP);') |
178 | 91 | print (' clear TP;') |
179 | 92 | print (' assert (XP: EP) by (unfold EP; clear -CIH; repeat intro; apply CIH;') |
|
192 | 105 | print (' let TMP := fresh "_paco_TMP_" in') |
193 | 106 | print (' generalize _paco_mark_cons; intro TMP;') |
194 | 107 | print (' repeat intro; paco_rename_last; paco_destruct_hyp _paco_mark;') |
195 | | -print (' simplJM; paco_revert_hyp _paco_mark') |
| 108 | +print (' paco_revert_hyp _paco_mark') |
196 | 109 | print (' ].') |
197 | 110 | print () |
198 | 111 | print ('Ltac paco_ren_r nr cr :=') |
|
0 commit comments