1 (* ========================================================================== *)
2 (* FLYSPECK - BOOK FORMALIZATION *)
3 (* Section: Appendix, Main Estimate, check_completeness *)
4 (* Chapter: Local Fan *)
6 (* Author: Hoang Le Truong and Thomas Hales *)
8 (* ========================================================================== *)
10 module Jejtvgb = struct
14 let SCS_ARROW_TRANS_SING = prove_by_refinement(
15 `!a S. scs_arrow_v39 {a} S /\ (!x. x IN S ==> scs_arrow_v39 {x} {}) ==> scs_arrow_v39 {a} {}`,
18 REWRITE_TAC[Appendix.scs_arrow_v39;NOT_IN_EMPTY;IN_SING];
23 let JEJTVGB_case_breakdown = prove_by_refinement(
24 (* main_work4 ==> *) ` main_nonlinear_terminal_v11 ==> (
25 scs_arrow_v39 { scs_6I1 } { scs_6T1, scs_5M1, scs_4M2, scs_3M1 } /\ // OEHDBEN
26 scs_arrow_v39 { scs_5I1 } { scs_stab_diag_v39 scs_5I1 0 2 , scs_5M2 } /\ // OTMTOTJ1
27 scs_arrow_v39 { scs_5I2 } { scs_stab_diag_v39 scs_5I2 0 2 , scs_5M2 } /\ //
29 scs_arrow_v39 { scs_5I3 } { scs_stab_diag_v39 scs_5M1 0 2 ,
30 scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2 } /\ // OTMTOTJ3
32 scs_arrow_v39 { scs_5M1 } { scs_stab_diag_v39 scs_5M1 0 2 , scs_stab_diag_v39 scs_5M1 0 3,
33 scs_stab_diag_v39 scs_5M1 2 4, scs_5M2 } /\ // OTMTOTJ4
34 scs_arrow_v39 { scs_5M2 } {scs_5T1, scs_stab_diag_v39 scs_5I2 0 2, scs_stab_diag_v39 scs_5M1 0 2,
35 scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4,
36 scs_4M6', scs_4M7, scs_4M8, scs_3T1, scs_3T4} /\ // HIJQAHA
37 //{ scs_3T1,scs_3T4,scs_4M6',scs_4M7,scs_4M8,
38 // scs_5T1, scs_stab_diag_v39 scs_5I2 0 2 ,
39 // scs_stab_diag_v39 scs_5M1 0 2 , scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4 } /\ // HIJQAHA
41 scs_arrow_v39 { scs_stab_diag_v39 scs_5I1 0 2 }
42 {scs_3M1, scs_4M2 } /\ // CNICGSF1 ..
44 scs_arrow_v39 { scs_stab_diag_v39 scs_5I2 0 2 }
45 {scs_3T1, scs_4M3' } /\ // CNICGSF2
47 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 0 2 }
48 {scs_3T4, scs_4M2 } /\ // CNICGSF3
50 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 0 3 }
51 {scs_4M4', scs_3M1 } /\ // CNICGSF4
53 scs_arrow_v39 { scs_stab_diag_v39 scs_5M1 2 4 }
54 {scs_3M1, scs_4M5' } /\ // CNICGSF5 ..
56 scs_arrow_v39 { scs_4I1 } {scs_4I2, scs_stab_diag_v39 scs_4I1 0 2 } /\ // FYSSVEV
59 scs_arrow_v39 { scs_4I2 } { scs_4T1, scs_4T2 } /\ // ARDBZYE
62 scs_arrow_v39 { scs_stab_diag_v39 scs_4I1 0 2 } { scs_3M1 } /\ // AUEAHEH
64 // scs_arrow_v39 { scs_stab_diag_v39 scs_4I3 0 2 } { scs_4T4 } /\ // ZNLLLDL (internal)
66 scs_arrow_v39 { scs_4I3 } {scs_4M6', scs_4T4} /\ // VQFYMZY ..
68 // scs_arrow_v39 { scs_4M1 } { scs_4M2, scs_4M6' } /\ // unused.
70 scs_arrow_v39 { scs_4M2 } {scs_4M6', scs_3M1, scs_3T4} /\ // BNAWVNH
72 scs_arrow_v39 { scs_4M3' } {scs_4M6', scs_3T1, scs_3T6'} /\ // RAWZDIB
74 scs_arrow_v39 { scs_4M4' } {scs_4M7, scs_3T3, scs_3M1, scs_3T4} /\ // MFKLVDK
76 scs_arrow_v39 { scs_4M5' } {scs_4M8, scs_3T4} /\ // RYPDIXT
78 scs_arrow_v39 {scs_4M6'} {scs_4T3,scs_4T5} /\ // NWDGKXH
80 scs_arrow_v39 {scs_4M7} {scs_4M6', scs_3T3, scs_3M1, scs_3T4} /\ // YOBIMPP
82 scs_arrow_v39 {scs_4M8} {scs_4M6',scs_3T7,scs_3T4} /\ // MIQMCSN
84 scs_arrow_v39 {scs_3M1} {scs_3T1,scs_3T5} // BKOSSGE
91 REPEAT WEAKER_STRIP_TAC;
92 INTRO_TAC (UNDISCH Ocbicby.OCBICBY) [];
93 REPEAT WEAKER_STRIP_TAC;
94 TYPIFY `scs_arrow_v39 {scs_3M1} {}` (C SUBGOAL_THEN ASSUME_TAC);
95 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
96 TYPIFY `{scs_3T1, scs_3T5}` EXISTS_TAC;
97 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
98 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
99 TYPIFY `scs_arrow_v39 {scs_4M6'} {}` (C SUBGOAL_THEN ASSUME_TAC);
100 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
101 TYPIFY `{scs_4T3,scs_4T5}` EXISTS_TAC;
102 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
103 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
104 TYPIFY `scs_arrow_v39 {scs_4M7} {}` (C SUBGOAL_THEN ASSUME_TAC);
105 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
106 TYPIFY `{scs_4M6', scs_3T3, scs_3M1, scs_3T4}` EXISTS_TAC;
107 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
108 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
109 TYPIFY `scs_arrow_v39 {scs_4M8} {}` (C SUBGOAL_THEN ASSUME_TAC);
110 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
111 TYPIFY `{scs_4M6', scs_3T7, scs_3T4}` EXISTS_TAC;
112 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
113 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
114 TYPIFY `scs_arrow_v39 {scs_4M5'} {}` (C SUBGOAL_THEN ASSUME_TAC);
115 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
116 TYPIFY `{scs_4M8, scs_3T4}` EXISTS_TAC;
117 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
118 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
119 TYPIFY `scs_arrow_v39 {scs_4M4'} {}` (C SUBGOAL_THEN ASSUME_TAC);
120 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
121 TYPIFY `{scs_4M7, scs_3T3, scs_3M1, scs_3T4}` EXISTS_TAC; (* revised *)
122 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
123 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
124 TYPIFY `scs_arrow_v39 {scs_4M3'} {}` (C SUBGOAL_THEN ASSUME_TAC);
125 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
126 TYPIFY `{scs_4M6', scs_3T1, scs_3T6'}` EXISTS_TAC;
127 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
128 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
129 TYPIFY `scs_arrow_v39 {scs_4M2} {}` (C SUBGOAL_THEN ASSUME_TAC);
130 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
131 TYPIFY `{scs_4M6', scs_3M1, scs_3T4}` EXISTS_TAC;
132 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
133 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
134 TYPIFY `scs_arrow_v39 {scs_4I3} {}` (C SUBGOAL_THEN ASSUME_TAC);
135 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
136 TYPIFY `{scs_4M6', scs_4T4}` EXISTS_TAC;
137 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
138 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
139 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_4I1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
140 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
141 TYPIFY `{scs_3M1}` EXISTS_TAC;
142 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
143 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
144 TYPIFY `scs_arrow_v39 {scs_4I2} {}` (C SUBGOAL_THEN ASSUME_TAC);
145 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
146 TYPIFY `{scs_4T1, scs_4T2}` EXISTS_TAC;
147 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
148 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
149 TYPIFY `scs_arrow_v39 {scs_4I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
150 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
151 TYPIFY `{scs_4I2, scs_stab_diag_v39 scs_4I1 0 2}` EXISTS_TAC;
152 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
153 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
154 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 2 4} {}` (C SUBGOAL_THEN ASSUME_TAC);
155 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
156 TYPIFY `{scs_3M1, scs_4M5'}` EXISTS_TAC;
157 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
158 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
159 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 0 3} {}` (C SUBGOAL_THEN ASSUME_TAC);
160 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
161 TYPIFY `{scs_4M4', scs_3M1}` EXISTS_TAC;
162 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
163 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
164 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5M1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
165 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
166 TYPIFY `{scs_3T4, scs_4M2}` EXISTS_TAC;
167 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
168 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
169 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5I2 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
170 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
171 TYPIFY `{scs_3T1, scs_4M3'}` EXISTS_TAC;
172 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
173 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
174 TYPIFY `scs_arrow_v39 {scs_stab_diag_v39 scs_5I1 0 2} {}` (C SUBGOAL_THEN ASSUME_TAC);
175 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
176 TYPIFY `{scs_3M1, scs_4M2}` EXISTS_TAC;
177 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
178 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
179 TYPIFY `scs_arrow_v39 {scs_5M2} {}` (C SUBGOAL_THEN ASSUME_TAC);
180 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
181 TYPIFY `{scs_5T1, scs_stab_diag_v39 scs_5I2 0 2, scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_4M6', scs_4M7, scs_4M8, scs_3T1, scs_3T4}` EXISTS_TAC;
182 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
183 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
184 TYPIFY `scs_arrow_v39 {scs_5M1} {}` (C SUBGOAL_THEN ASSUME_TAC);
185 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
186 TYPIFY `{scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2}` EXISTS_TAC;
187 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
188 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
189 TYPIFY `scs_arrow_v39 {scs_5I3} {}` (C SUBGOAL_THEN ASSUME_TAC);
190 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
191 TYPIFY `{scs_stab_diag_v39 scs_5M1 0 2, scs_stab_diag_v39 scs_5M1 0 3, scs_stab_diag_v39 scs_5M1 2 4, scs_5M2}` EXISTS_TAC;
192 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
193 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
194 TYPIFY `scs_arrow_v39 {scs_5I2} {}` (C SUBGOAL_THEN ASSUME_TAC);
195 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
196 TYPIFY `{scs_stab_diag_v39 scs_5I2 0 2, scs_5M2}` EXISTS_TAC;
197 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
198 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
199 TYPIFY `scs_arrow_v39 {scs_5I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
200 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
201 TYPIFY ` {scs_stab_diag_v39 scs_5I1 0 2, scs_5M2}` EXISTS_TAC;
202 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
203 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
204 TYPIFY `scs_arrow_v39 {scs_6I1} {}` (C SUBGOAL_THEN ASSUME_TAC);
205 MATCH_MP_TAC SCS_ARROW_TRANS_SING;
206 TYPIFY `{scs_6T1, scs_5M1, scs_4M2, scs_3M1}` EXISTS_TAC;
207 ASM_REWRITE_TAC[IN_INSERT;NOT_IN_EMPTY];
208 BY(REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]);
209 COMMENT "final kill";
210 MATCH_MP_TAC Ayqjtmd.EAPGLE;
211 REWRITE_TAC[GSYM Ocbicby.scs_arrow_sing_empty];
212 REWRITE_TAC[Jotswix.s_init_list_alt;MEM];
213 REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[];
214 BY(REWRITE_TAC[UNDISCH2 Jotswix.LFLACKU])
218 let JEJTVGB = prove_by_refinement(
219 `main_nonlinear_terminal_v11 ==> JEJTVGB_assume_v39`,
223 MATCH_MP_TAC (UNDISCH JEJTVGB_case_breakdown);
224 REWRITE_TAC (map UNDISCH2 [Hexagons.OEHDBEN;Otmtotj.OTMTOTJ1;Otmtotj.OTMTOTJ2;Otmtotj.OTMTOTJ3;Otmtotj.OTMTOTJ4]);
225 REWRITE_TAC (map UNDISCH2 [Hijqaha.HIJQAHA;Cnicgsf.CNICGSF1;Cnicgsf.CNICGSF2;Cnicgsf.CNICGSF3;Cnicgsf.CNICGSF4;Cnicgsf.CNICGSF5]);
226 REWRITE_TAC (map UNDISCH2 [Ardbzye.FYSSVEV;Ardbzye.ARDBZYE;Aueaheh.AUEAHEH;Aueaheh.VQFYMZY]);
227 REWRITE_TAC (map UNDISCH2 [Aueaheh.BNAWVNH;Aueaheh.RAWZDIB;Aueaheh.MFKLVDK;Aueaheh.RYPDIXT]);
228 BY(REWRITE_TAC (map UNDISCH2 [Miqmcsn.NWDGKXH;Miqmcsn.YOBIMPP;Miqmcsn.MIQMCSN;Bkossge.BKOSSGE]))