2 (* ========================================================================== *)
3 (* FLYSPECK - BOOK FORMALIZATION *)
5 (* Chapter: Local Fan *)
6 (* Author: Hoang Le Truong *)
8 (* ========================================================================= *)
13 module Mtuwlun = struct
31 open Prove_by_refinement;;
33 open Wrgcvdr_cizmrrh;;
41 open Flyspeck_constants;;
45 let IS_SY = new_definition`IS_SY (s:stable_sy) p q={x| ?n m. n<m /\ m< k_sy s /\ ((f_sy s) POWER n) x=q /\ ((f_sy s) POWER m) x=p }`;;
47 let kl_sy = new_definition`kl_sy (s:stable_sy) p q=CARD(IS_SY (s:stable_sy) p q)`;;
49 let fl_sy = new_definition`fl_sy (s:stable_sy) p q i= (if ~(i=q) then f_sy s i else p)`;;
53 let COVER1_SY=new_definition`COVER1_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=> I_SY s1= IS_SY s p q /\ I_SY s2= IS_SY s q p
54 /\ f_sy s1= fl_sy s p q /\ f_sy s2= fl_sy s q p`;;
56 let COVER2_SY=new_definition`COVER2_SY (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=> d_sy s <= d_sy s1 + d_sy s2 `;;
59 let COVER3_SY=new_definition`COVER3_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=> J_SY s1 SUBSET J_SY s UNION {{p,q}}/\
60 J_SY s2 SUBSET J_SY s UNION {{p,q}}`;;
62 let COVER4_SY=new_definition`COVER4_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=>
63 (!i j. ~({i,j }={p,q}) /\ i IN I_SY s1 /\ j IN I_SY s1
64 ==> a_sy s1 (i,j)=a_sy s (i,j)/\ b_sy s1 (i,j)=b_sy s (i,j))
66 (!i j. ~({i,j }={p,q}) /\ i IN I_SY s2 /\ j IN I_SY s2
67 ==> a_sy s2 (i,j)=a_sy s (i,j)/\ b_sy s2 (i,j)=b_sy s (i,j))`;;
70 let COVER5_SY=new_definition`COVER5_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=>
71 a_sy s1 (p,q)<= a_sy s (p,q)/\ a_sy s2 (p,q)<= a_sy s (p,q)/\ a_sy s (p,q)<=b_sy s1 (p,q)
72 /\ a_sy s (p,q)<=b_sy s2 (p,q)`;;
74 let COVER6_SY=new_definition`COVER6_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=>
75 (({p,q} IN J_SY s1 <=> {p,q} IN J_SY s2 )
76 /\ ({p,q} IN J_SY s1 <=> ear_sy s1 \/ ear_sy s2))`;;
78 let COVER_SY=new_definition`COVER_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy) <=> COVER1_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy)
79 /\ COVER2_SY (s:stable_sy) (s1:stable_sy) (s2:stable_sy)
80 /\ COVER3_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy)
81 /\ COVER4_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy)
82 /\ COVER5_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy)
83 /\ COVER6_SY p q (s:stable_sy) (s1:stable_sy) (s2:stable_sy)`;;
87 let pmat1=new_definition`pmat1 (A:real^N^M)= (lambda i j. if i< dimindex(:P) then A$i$j else A$ dimindex(:M)$j):real^N^P`;;
90 let pmat2=new_definition`pmat2 (A:real^N^M)= (lambda i j. A$(dimindex(:M)- dimindex(:P)+i)$j):real^N^P`;;
93 let DIA_SY=new_definition`DIA_SY p q (s:stable_sy) <=> ~(p=q) /\ p IN I_SY(s) /\ q IN I_SY s /\ ~(?i. i IN I_SY s /\ {p,q}= {i, f_sy s i})`;;
100 let CARD_I_SY_LT_3=prove(`
102 ==> 3< CARD (I_SY s)`,
103 MRESA1_TAC stable_sy_lemma`s:stable_sy`
104 THEN POP_ASSUM MP_TAC
105 THEN REWRITE_TAC[stable_system;constraint_system;torsor;
107 THEN REWRITE_TAC[DIA_SY]
108 THEN REPEAT STRIP_TAC
109 THEN ASM_REWRITE_TAC[]
110 THEN MATCH_MP_TAC(ARITH_RULE`3<= A /\ ~(A=3) ==> 3< A`)
111 THEN ASM_REWRITE_TAC[]
112 THEN POP_ASSUM MP_TAC
113 THEN MATCH_MP_TAC MONO_NOT
115 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;ARITH_RULE`~(3<3)`])
118 THEN DISCH_THEN(LABEL_TAC"THY1")
119 THEN DISCH_THEN(LABEL_TAC"THY2")
120 THEN DISCH_THEN(LABEL_TAC"THY3")
121 THEN DISCH_THEN(LABEL_TAC"THY4")
122 THEN REPEAT STRIP_TAC
123 THEN POP_ASSUM MP_TAC
124 THEN REMOVE_THEN"THY1" (fun th-> MRESA1_TAC th`p:num` THEN MRESA1_TAC th`f_sy (s:stable_sy) (p:num)`)
125 THEN REMOVE_THEN"THY3" (fun th-> MRESAL_TAC th[`SUC 0`;`p:num`][ARITH_RULE`0<SUC 0 /\ SUC 0<3`;POWER;o_DEF;I_DEF] THEN MRESAL_TAC th[`SUC (SUC 0)`;`p:num`][ARITH_RULE`0<SUC (SUC 0) /\ SUC (SUC 0)<3`;POWER;o_DEF;I_DEF]
126 THEN MRESAL_TAC th[`SUC 0`;`f_sy (s:stable_sy) (p:num):num`][ARITH_RULE`0<SUC 0 /\ SUC 0<3`;POWER;o_DEF;I_DEF])
127 THEN MRESA_TAC Geomdetail.CARD3[`p:num`;`f_sy (s:stable_sy) (p:num)`;`f_sy (s:stable_sy) (f_sy (s:stable_sy) (p:num))`]
128 THEN MP_TAC(SET_RULE`p IN I_SY s
129 /\ f_sy s p IN I_SY s
130 /\ f_sy s (f_sy s p) IN I_SY (s:stable_sy)
131 ==> {p, f_sy s p, f_sy s (f_sy s p)} SUBSET I_SY s `)
133 THEN MRESA_TAC CARD_SUBSET_EQ[`{p, f_sy (s:stable_sy) p, f_sy s (f_sy s p)}`;`I_SY (s:stable_sy)`]
134 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
135 THEN ASM_REWRITE_TAC[SET_RULE`A IN{B,C,D}<=> A= B \/ A=C\/ A=D`]
137 THEN ASM_REWRITE_TAC[]
138 THENL[EXISTS_TAC`p:num`
139 THEN ASM_REWRITE_TAC[];
140 EXISTS_TAC`f_sy s (f_sy (s:stable_sy)p)`
141 THEN ASM_REWRITE_TAC[]
142 THEN REMOVE_THEN"THY4" (fun th-> MRESA1_TAC th`p:num`)
143 THEN POP_ASSUM MP_TAC
144 THEN REWRITE_TAC[ARITH_RULE`3=SUC(SUC(SUC 0))`;POWER;o_DEF;I_DEF]
148 let COVER_NOT_EAR_SY=prove(`!(s:stable_sy).
152 THEN GEN_TAC THEN STRIP_TAC
153 THEN MRESA_TAC (GEN_ALL CARD_I_SY_LT_3)[`p:num`;`q:num`;`s:stable_sy`]
154 THEN REWRITE_TAC[DE_MORGAN_THM]
155 THEN MP_TAC(ARITH_RULE`3 < CARD (I_SY s) ==> ~(CARD (I_SY (s:stable_sy))= 3)`)
158 let DIAGONAL_SY=prove(`DIA_SY p q s
159 ==> ~({p,q} IN J_SY s) `,
160 MRESA1_TAC stable_sy_lemma`s:stable_sy`
161 THEN POP_ASSUM MP_TAC
162 THEN REWRITE_TAC[stable_system;constraint_system;DIA_SY]
163 THEN REPEAT STRIP_TAC
164 THEN MP_TAC(SET_RULE`J_SY s SUBSET {{i, f_sy s i} | i | i IN I_SY (s:stable_sy)}
166 ==> {p, q} IN {{i, f_sy s i} | i | i IN I_SY (s:stable_sy)}`)
167 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
170 let SCHANGE= new_definition`SCHANGE (f:num->num) (s:stable_sy) (s1:stable_sy)<=>
173 /\ (I_SY s)=IMAGE f (I_SY s1)
174 /\ (!p q. {f p, f q} IN J_SY s<=> {p,q} IN J_SY s1)
175 /\ (!p q. a_sy s (f p, f q)=a_sy s1 (p,q))
176 /\ (!p q. b_sy s (f p, f q)=b_sy s1 (p,q))
177 /\ f_sy s1 =(f_sy s) o f
182 let IK_SY=prove(`1<= p/\ I_SY s= 0..(p-1) ==> k_sy (s:stable_sy)= p`,
184 THEN MP_TAC(ARITH_RULE`1<= p ==> (p - 1 + 1)-0 = p`)
186 THEN MRESA1_TAC stable_sy_lemma`s:stable_sy`
187 THEN POP_ASSUM MP_TAC
188 THEN ASM_REWRITE_TAC[stable_system;constraint_system;torsor;HAS_SIZE;CARD_NUMSEG;]
189 THEN REPEAT STRIP_TAC
190 THEN ASM_REWRITE_TAC[]);;
193 let K_SY_LE2=prove(`2< k_sy (s:stable_sy)`,
194 MRESA1_TAC stable_sy_lemma`s:stable_sy`
195 THEN POP_ASSUM MP_TAC
196 THEN ASM_REWRITE_TAC[stable_system;constraint_system;torsor;HAS_SIZE;CARD_NUMSEG;]
197 THEN REPEAT STRIP_TAC
198 THEN ASM_REWRITE_TAC[]
201 THEN REPEAT(STRIP_TAC THEN REMOVE_ASSUM_TAC)
202 THEN POP_ASSUM MP_TAC
205 let IN_J_IMP_IN_J1_SY=prove(` k_sy s1=p
207 /\ f_sy s1=(\i. ((1+i):num MOD p))
208 /\ {0, p - 1} IN J_SY s1
209 ==> p-1,p IN J1_SY (s1:stable_sy)`,
211 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
212 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM]
213 THEN MP_TAC(ARITH_RULE`2<p ==> SUC(p-1)= p/\1<= p-1 /\ p-1<=p /\ p-1< p /\ ~(p=0) /\ 1+p-1=p`)
215 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
216 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p`]
217 THEN EXISTS_TAC`p-1:num`
218 THEN ASM_REWRITE_TAC[IN_NUMSEG]
219 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
220 THEN ASM_REWRITE_TAC[]);;
224 let D_FUN_COVER_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
225 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
226 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
228 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
229 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
230 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
231 /\ (ear_sy s2 <=> ear_sy s3)
233 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
234 /\ COVER_SY 0 (p-1) s s1 s2
235 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
236 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
237 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
238 /\ matvec(pmat1(vecmats l))= l1
239 /\ matvec(pmat2(vecmats l))= l2
240 ==> d_fun(s,l) <= d_fun(s1,l1) + d_fun(s3,l2)`,
242 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
243 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
244 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
245 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
246 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p `)
248 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
249 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
250 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
251 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
252 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
253 THEN MRESA_TAC (GEN_ALL COVER_NOT_EAR_SY)[`0`;`p-1`;`s:stable_sy`]
254 THEN MRESA1_TAC sigma_sy`s:stable_sy`
255 THEN MRESA_TAC (GEN_ALL DIAGONAL_SY)[`0:num`;`p-1`;`s:stable_sy`]
256 THEN DISJ_CASES_TAC(SET_RULE`{0,p-1} IN J_SY (s1:stable_sy)\/ ~({0,p-1} IN J_SY (s1:stable_sy))`);
257 FIND_ASSUM MP_TAC `COVER_SY 0 (p - 1) s s1 (s2:stable_sy)`
258 THEN REWRITE_TAC[COVER_SY;COVER3_SY;COVER6_SY]
260 ASM_REWRITE_TAC[d_fun]
261 THEN MRESA1_TAC sigma_sy`s1:stable_sy`
262 THEN FIND_ASSUM MP_TAC`SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 (s3:stable_sy)`
263 THEN REWRITE_TAC[SCHANGE]
265 THEN SUBGOAL_THEN`{0,1} IN J_SY (s3:stable_sy)`ASSUME_TAC;
267 THEN REMOVE_ASSUM_TAC
268 THEN REMOVE_ASSUM_TAC
269 THEN POP_ASSUM(fun th-> MRESA_TAC th[`0`;`1`])
270 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`A+0=A/\ ~(1=0)`])
271 THEN MP_TAC(ARITH_RULE`2<p ==> p-2+1 =p-1`)
273 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`];
274 MRESA_TAC (GEN_ALL IN_J_IMP_IN_J1_SY)[`p:num`;`s1:stable_sy`]
275 THEN SUBGOAL_THEN`(k-p+2,1) IN J1_SY (s3:stable_sy)`ASSUME_TAC;
276 REWRITE_TAC[J1_SY;IN_ELIM_THM]
277 THEN POP_ASSUM MP_TAC
278 THEN POP_ASSUM MP_TAC
279 THEN REMOVE_ASSUM_TAC
280 THEN ASM_REWRITE_TAC[IN_NUMSEG]
283 THEN EXISTS_TAC`k-p+2`
284 THEN ASM_REWRITE_TAC[]
285 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\1+0=1/\ SUC 0=1 /\ k - p + 2 <= k - p + 2`]
286 THEN MRESA_TAC MOD_LT[`1:num`;`k-p+2:num`];
287 MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats (l1:real^(P,3)finite_product))))`;`J1_SY (s1:stable_sy)`;`p-1,p`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
288 THEN MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats (l2:real^(N,3)finite_product))))`;`J1_SY (s3:stable_sy)`;`k-p+2,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
289 THEN SUBGOAL_THEN`J1_SY s1 DELETE (p-1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
290 ASM_REWRITE_TAC[SUBSET;J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
291 THEN REPEAT STRIP_TAC
292 THEN POP_ASSUM MP_TAC
293 THEN POP_ASSUM MP_TAC
294 THEN ASM_REWRITE_TAC[PAIR_EQ;]
295 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
297 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
298 MP_TAC(ARITH_RULE`i<p /\ 2<p ==> i=p-1 \/ i< p-1:num`)
300 MP_TAC(ARITH_RULE`2<p ==> SUC(p-1)=p /\ p-1<p`)
302 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
305 THEN EXISTS_TAC`i:num`
306 THEN ASM_REWRITE_TAC[]
307 THEN MP_TAC(ARITH_RULE`i<p-1 /\ p < k /\ 2<p ==> i< k /\ i<=k:num /\ 1+i<k/\ 1+i< p/\ ~(i=1+i)/\ ~(i=p-1)/\ ~(p=2)`)
309 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
310 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
311 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
312 THEN MRESA_TAC MOD_LT[`1+i:num`;`k:num`]
313 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
314 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[SYM th] )
315 THEN FIND_ASSUM MP_TAC`J_SY s1 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
316 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
318 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{i,(1+i) MOD p}`)
319 THEN POP_ASSUM MP_TAC
320 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
322 THEN MP_TAC(SET_RULE`{i, 1 + i} = {0, p - 1} /\ ~(i=1+i) /\ ~(i=p-1) ==> i=0 /\ 1+i= p-1`)
324 THEN POP_ASSUM MP_TAC
325 THEN ASM_REWRITE_TAC[ARITH_RULE`1+0=p-1<=> p=2`];
326 SUBGOAL_THEN`IMAGE (\(x,y). (p - 2 + x), (p - 2 + y)) (J1_SY s3 DELETE (k-p+2,1)) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
327 ASM_REWRITE_TAC[J1_SY;IMAGE;DELETE;SUBSET;IN_ELIM_THM;IN_NUMSEG]
328 THEN REPEAT STRIP_TAC
329 THEN POP_ASSUM MP_TAC
330 THEN POP_ASSUM MP_TAC
331 THEN ASM_REWRITE_TAC[PAIR_EQ;]
332 THEN MP_TAC(ARITH_RULE`i<=k-p+2 ==> i=k-p+2 \/ i< k-p+2:num`)
334 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
335 MP_TAC(ARITH_RULE`i<k-p+2 /\ 2<k-p+2 ==> i=k-p+1 \/ i< k-p+1:num`)
337 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
340 THEN MP_TAC(ARITH_RULE`2<p /\ 2< k-p+2 /\ 2< k ==> p-2+k-p+1=k-1/\ SUC(k-p+1)=k-p+2 /\ k-p+1<k-p+2/\ p - 2 + k - p + 2=k/\ 1<=k-1 /\ k-1<=k/\ k-1<k/\ 1+k-1=k /\ SUC(k-1)=k/\ 1 + k - p + 1= k - p + 2 /\ ~(k-p+1=0)`)
342 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`]
343 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
344 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
346 THEN ASM_REWRITE_TAC[]
347 THEN FIND_ASSUM MP_TAC`{(k - p + 1) MOD (k - p + 2), (f_sy s2 o
350 else (p - 2 + x) MOD k))
351 ((k - p + 1) MOD (k - p + 2))} IN
353 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
354 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
355 THEN ASM_REWRITE_TAC[]
356 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
358 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`k-p+1`;`0`]th))`!p' q.
359 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
364 {p', q} IN J_SY (s3:stable_sy)`
365 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;ARITH_RULE`0=0`])
366 THEN ASM_REWRITE_TAC[]
368 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
369 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
371 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{k-1,0}`);
373 THEN MP_TAC(ARITH_RULE`1<=k-p /\2<p==> ~(k-1=p-1) /\ ~(0= p-1)`)
375 THEN MP_TAC(SET_RULE`~(k-1=p-1) /\ ~(0= p-1)==> ~(p-1 IN {k-1,0})`)
376 THEN ASM_REWRITE_TAC[]
380 THEN EXISTS_TAC`p-2+i:num`
381 THEN ASM_REWRITE_TAC[]
382 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> p-2+i< k/\ p-2+i<=k /\ 1<=p-2+i/\ 1+p-2+i<k /\ 1+i< k-p+2/\ p-2+1+i<k`)
384 THEN MRESA_TAC MOD_LT[`p-2+1+i:num`;`k:num`]
385 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
386 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> ~(i=0)/\ ~(1+i=0)`)
388 THEN MRESA_TAC MOD_LT[`1+i:num`;`k-p+2:num`]
389 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
390 THEN REWRITE_TAC[ARITH_RULE`SUC (p - 2 + i)= p - 2 + SUC i`]
391 THEN MRESA_TAC MOD_LT[`1+p-2+i:num`;`k:num`]
392 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`i MOD (k - p + 2)`;`(f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
393 (i MOD (k - p + 2))`] th))`!p' q.
394 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
399 {p', q} IN J_SY (s3:stable_sy)`
400 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`{i MOD (k - p + 2), (f_sy s2 o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
401 (i MOD (k - p + 2))} IN
403 THEN REMOVE_ASSUM_TAC
404 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
405 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
406 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
407 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
408 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
409 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
410 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
411 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
413 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
414 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
416 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{p-2+i,p-2+1+i}`);
417 ASM_REWRITE_TAC[ARITH_RULE`1+p-2+i= p-2+1+i`];
418 MP_TAC(SET_RULE`{p - 2 + i, p - 2 + 1 + i} = {0, p - 1} ==> (p-2+i=0) \/ (p-2+1+i=0)`)
420 THEN MP_TAC(ARITH_RULE`1<=i /\ 2< p==> ~(p-2+i=0) /\ ~(p-2+1+i=0)`)
421 THEN ASM_REWRITE_TAC[];
422 MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s1:stable_sy)`;`p-1,p`][FINITE_J1_SY]
423 THEN MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s3:stable_sy)`;`k-p+2,1`][FINITE_J1_SY]
424 THEN DISJ_CASES_TAC(SET_RULE`ear_sy s3 \/ ~(ear_sy (s3:stable_sy))`);
425 ASM_REWRITE_TAC[sigma_sy]
426 THEN MATCH_MP_TAC(REAL_ARITH`
432 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l)))
434 &0<= sum (J1_SY s1 DELETE (p - 1,p))
435 (\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats l1)))
436 /\ &0<= cstab - norm (row (p - 1) (vecmats l1) - row p (vecmats l1))
439 sum (J1_SY s3 DELETE (k - p + 2,1))
440 (\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats l2)))
441 /\ &0<= cstab - norm (row (k - p + 2) (vecmats l2) - row 1 (vecmats l2))
447 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l))) <=
451 (sum (J1_SY s1 DELETE (p - 1,p))
452 (\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats l1))) +
453 cstab - norm (row (p - 1) (vecmats l1) - row p (vecmats l1)))) +
457 (sum (J1_SY (s3:stable_sy) DELETE (k - p + 2,1))
458 (\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats l2))) +
459 cstab - norm (row (k - p + 2) (vecmats l2) - row 1 (vecmats l2)))`)
461 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
462 THEN REWRITE_TAC[COVER2_SY]
465 MATCH_MP_TAC SUM_POS_LE
466 THEN REWRITE_TAC[FINITE_J1_SY]
467 THEN REPEAT STRIP_TAC
468 THEN POP_ASSUM MP_TAC
469 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG]
471 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
472 THEN POP_ASSUM MP_TAC
475 MATCH_MP_TAC SUM_POS_LE
476 THEN ASM_REWRITE_TAC[]
477 THEN REPEAT STRIP_TAC
478 THEN DISJ_CASES_TAC(SET_RULE`x=p:num,1 \/ ~(x=p:num,1 )`);
481 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
482 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
483 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
484 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
486 THEN ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
488 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
489 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
491 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
493 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p`]
494 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
495 THEN POP_ASSUM MP_TAC
497 SUBGOAL_THEN`x IN J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1)` ASSUME_TAC;
499 THEN POP_ASSUM MP_TAC
500 THEN REWRITE_TAC[IN_ELIM_THM;DELETE]
502 MP_TAC(SET_RULE`x IN J1_SY s1 DELETE (p - 1,p) DELETE (p,1)
503 /\ J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY s
504 ==> x IN J1_SY (s:stable_sy)`)
506 THEN POP_ASSUM MP_TAC
507 THEN POP_ASSUM MP_TAC
508 THEN POP_ASSUM MP_TAC
509 THEN POP_ASSUM MP_TAC
510 THEN DISCH_THEN(LABEL_TAC"THY")
511 THEN DISCH_THEN(LABEL_TAC"THY1")
512 THEN REPEAT STRIP_TAC
513 THEN REMOVE_THEN"THY" MP_TAC
514 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
516 THEN POP_ASSUM MP_TAC
517 THEN REMOVE_THEN"THY1" MP_TAC
518 THEN ASM_REWRITE_TAC[]
519 THEN MP_TAC(ARITH_RULE`i<=p==> i=p \/ i<p:num`)
521 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
522 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
524 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
526 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
530 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
531 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
532 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
533 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
534 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
535 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
537 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
539 THEN POP_ASSUM MP_TAC
540 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG]
542 THEN MP_TAC(ARITH_RULE`SUC i < p /\ 1<=k-p ==> i <= k/\ i<k`)
544 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
545 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
546 THEN POP_ASSUM MP_TAC
549 SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
550 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
551 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
553 THEN ASM_REWRITE_TAC[ARITH_RULE`p <= p`]
555 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
557 THEN SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
558 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
560 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
562 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`p-1`;`k:num`] th) )`!i j.
563 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
564 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
565 THEN REWRITE_TAC[IN_ELIM_THM;UNION;IN_SING]
566 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
567 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`;SET_RULE`{p-1,0}={0,p-1}`]
570 MATCH_MP_TAC SUM_POS_LE
571 THEN ASM_REWRITE_TAC[]
572 THEN REPEAT STRIP_TAC
573 THEN DISJ_CASES_TAC(SET_RULE`x=k-p+1,k-p+2 \/ ~(x=k-p+1,k-p+2 )`);
576 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
577 THEN SUBGOAL_THEN`row (k-p+1) ((pmat2 (vecmats l)):real^3^N) = row (k-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
578 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+1<=k-p+2 /\ 1<= k-p+1 /\ k - (k - p + 2) + k - p + 1= k-1`)
580 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
581 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
582 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
584 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
586 THEN MP_TAC(ARITH_RULE` 2<k ==> 1<=k-1 /\ k-1<= k /\ SUC (k - 1)= k /\ k-1<k`)
588 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
589 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k-1:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
590 THEN POP_ASSUM MP_TAC
593 THEN POP_ASSUM MP_TAC
594 THEN DISCH_THEN(LABEL_TAC"THY")
595 THEN DISCH_THEN(LABEL_TAC"THY1")
596 THEN REMOVE_THEN"THY" MP_TAC
597 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
599 THEN POP_ASSUM MP_TAC
600 THEN REMOVE_THEN"THY1" MP_TAC
601 THEN ASM_REWRITE_TAC[]
602 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
604 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
605 MP_TAC(ARITH_RULE`i< k-p+2 /\ 2<p ==> i=k-p +1 \/ i< k-p+1:num`)
607 MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> k-p+1< k-p+2 /\ SUC (k-p+1)=k-p+2`)
609 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`];
613 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
614 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
615 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
616 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
618 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
619 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
620 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+1 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
622 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
624 THEN MP_TAC(ARITH_RULE` i< k-p+1 /\ 2< p /\ 1<= k-p ==> 1<=p-2+i /\ p-2+i <= k /\ SUC (p-2+i)= p-2+ SUC i /\ p-2+i<k`)
626 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
627 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`p-2+i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
628 THEN POP_ASSUM MP_TAC
630 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
631 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
633 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
634 SUBGOAL_THEN`row 1 ((pmat2 (vecmats l)):real^3^N) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
635 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + 1= p-1/\ 1<=1 /\ 1<=k-p+2`)
637 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
639 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
640 THEN ASM_REWRITE_TAC[]
641 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`k:num`;`p-1:num`] th) )`!i j.
642 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
643 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
644 THEN REWRITE_TAC[IN_ELIM_THM;UNION;IN_SING]
645 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
646 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`;SET_RULE`{p-1,0}={0,p-1}`]
648 ASM_REWRITE_TAC[sigma_sy]
649 THEN SUBGOAL_THEN `cstab - norm (row (p - 1) (vecmats (l1:real^(P,3)finite_product)) - row p (vecmats l1)) =cstab - norm (row (k-p + 2) (vecmats (l2:real^(N,3)finite_product)) - row 1 (vecmats l2))` ASSUME_TAC;
650 REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
653 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
654 THEN SUBGOAL_THEN`row 1 ((pmat2 (vecmats l)):real^3^N) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
655 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + 1= p-1/\ 1<=1 /\ 1<=k-p+2`)
657 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
658 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
659 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
661 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
662 SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
663 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
665 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
666 SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
667 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
668 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
670 THEN ASM_REWRITE_TAC[ARITH_RULE`p <= p`]
672 THEN SIMP_TAC[NORM_SUB];
674 THEN SUBGOAL_THEN`(!x y.
675 x IN J1_SY s3 DELETE (k - p + 2,1) /\
676 y IN J1_SY (s3:stable_sy) DELETE (k - p + 2,1) /\
677 (\(x,y). p - 2 + x,p - 2 + y) x = (\(x,y). p - 2 + x,p - 2 + y) y
678 ==> x = y)`ASSUME_TAC;
679 REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM]
680 THEN REPEAT STRIP_TAC
681 THEN POP_ASSUM MP_TAC
682 THEN ASM_REWRITE_TAC[PAIR_EQ;ARITH_RULE`p-2+B=p-2+C<=> B=C`];
683 SUBGOAL_THEN`!x. x IN (J1_SY (s3:stable_sy) DELETE (k - p + 2,1))
685 ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
686 (\(x,y). p - 2 + x,p - 2 + y)) x
687 = (\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2))) x`
689 ASM_REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;o_DEF;IN_NUMSEG]
690 THEN REPEAT STRIP_TAC
691 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
693 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
694 THEN POP_ASSUM MP_TAC
695 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
697 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
698 MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
699 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
700 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
702 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
703 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
704 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+2 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
706 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
708 MRESA_TAC SUM_EQ[` ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
709 (\(x,y). p - 2 + x,p - 2 + y))`;`(\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2)))`;`(J1_SY (s3:stable_sy) DELETE (k - p + 2,1))`]
711 MRESA_TAC SUM_IMAGE[`(\(x,y). p - 2 + x,p - 2 + y)`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s3:stable_sy) DELETE (k - p + 2,1)`]
712 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
713 THEN MRESAL_TAC SUM_DIFF[`(\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l)))`;`J1_SY(s:stable_sy)`;`(IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY (s3:stable_sy) DELETE (k - p + 2,1)))`][FINITE_J1_SY]
714 THEN MATCH_MP_TAC(REAL_ARITH`
715 d_sy s <= d_sy s1+ d_sy s3
716 /\ &0<= sum (J1_SY s1 DELETE (p - 1,p))
717 (\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats l1)))
720 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l)))
721 - sum (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))
722 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l)))
727 sum (J1_SY (s:stable_sy))
728 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l))) <=
732 (sum (J1_SY s1 DELETE (p - 1,p))
733 (\x. cstab - norm (row (FST x) (vecmats (l1:real^(P,3)finite_product)) - row (SND x) (vecmats l1))) +
734 cstab - norm (row (k - p + 2) (vecmats l2) - row 1 (vecmats l2)))) +
738 (sum (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))
739 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product)))) +
740 cstab - norm (row (k - p + 2) (vecmats (l2:real^(N,3)finite_product)) - row 1 (vecmats l2)))`)
742 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
743 THEN REWRITE_TAC[COVER2_SY]
746 MATCH_MP_TAC SUM_POS_LE
747 THEN ASM_REWRITE_TAC[]
748 THEN REPEAT STRIP_TAC
749 THEN DISJ_CASES_TAC(SET_RULE`x=p:num,1 \/ ~(x=p:num,1 )`);
752 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
753 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
754 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
755 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
757 THEN ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
759 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
760 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
762 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
764 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p`]
765 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
766 THEN POP_ASSUM MP_TAC
768 SUBGOAL_THEN`x IN J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1)` ASSUME_TAC;
770 THEN POP_ASSUM MP_TAC
771 THEN REWRITE_TAC[IN_ELIM_THM;DELETE]
773 MP_TAC(SET_RULE`x IN J1_SY s1 DELETE (p - 1,p) DELETE (p,1)
774 /\ J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY s
775 ==> x IN J1_SY (s:stable_sy)`)
777 THEN POP_ASSUM MP_TAC
778 THEN POP_ASSUM MP_TAC
779 THEN POP_ASSUM MP_TAC
780 THEN POP_ASSUM MP_TAC
781 THEN DISCH_THEN(LABEL_TAC"THY")
782 THEN DISCH_THEN(LABEL_TAC"THY1")
783 THEN REPEAT STRIP_TAC
784 THEN REMOVE_THEN"THY" MP_TAC
785 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
787 THEN POP_ASSUM MP_TAC
788 THEN REMOVE_THEN"THY1" MP_TAC
789 THEN ASM_REWRITE_TAC[]
790 THEN MP_TAC(ARITH_RULE`i<=p==> i=p \/ i<p:num`)
792 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
793 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
795 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
797 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
801 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
802 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
803 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
804 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
805 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
806 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
808 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
810 THEN POP_ASSUM MP_TAC
811 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG]
813 THEN MP_TAC(ARITH_RULE`SUC i < p /\ 1<=k-p ==> i <= k/\ i<k`)
815 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
816 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
817 THEN POP_ASSUM MP_TAC
819 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
820 THEN MATCH_MP_TAC SUM_POS_LE
822 MATCH_MP_TAC FINITE_DIFF
823 THEN REWRITE_TAC[FINITE_J1_SY];
825 THEN POP_ASSUM MP_TAC
826 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG;DIFF]
828 THEN REMOVE_ASSUM_TAC
829 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
830 THEN POP_ASSUM MP_TAC
832 ASM_REWRITE_TAC[d_fun]
833 THEN MRESA1_TAC sigma_sy`s3:stable_sy`
834 THEN FIND_ASSUM MP_TAC`SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 (s3:stable_sy)`
835 THEN REWRITE_TAC[SCHANGE]
837 THEN SUBGOAL_THEN`{0,1} IN J_SY (s3:stable_sy)`ASSUME_TAC;
839 THEN REMOVE_ASSUM_TAC
840 THEN REMOVE_ASSUM_TAC
841 THEN POP_ASSUM(fun th-> MRESA_TAC th[`0`;`1`])
842 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;ARITH_RULE`A+0=A/\ ~(1=0)`])
843 THEN MP_TAC(ARITH_RULE`2<p ==> p-2+1 =p-1`)
845 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`];
846 MRESA_TAC (GEN_ALL IN_J_IMP_IN_J1_SY)[`p:num`;`s1:stable_sy`]
847 THEN SUBGOAL_THEN`(k-p+2,1) IN J1_SY (s3:stable_sy)`ASSUME_TAC;
848 REWRITE_TAC[J1_SY;IN_ELIM_THM]
849 THEN POP_ASSUM MP_TAC
850 THEN POP_ASSUM MP_TAC
851 THEN REMOVE_ASSUM_TAC
852 THEN ASM_REWRITE_TAC[IN_NUMSEG]
855 THEN EXISTS_TAC`k-p+2`
856 THEN ASM_REWRITE_TAC[]
857 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\1+0=1/\ SUC 0=1 /\ k - p + 2 <= k - p + 2`]
858 THEN MRESA_TAC MOD_LT[`1:num`;`k-p+2:num`];
859 MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats (l1:real^(P,3)finite_product))))`;`J1_SY (s1:stable_sy)`;`p-1,p`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
860 THEN MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats (l2:real^(N,3)finite_product))))`;`J1_SY (s3:stable_sy)`;`k-p+2,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
861 THEN SUBGOAL_THEN`J1_SY s1 DELETE (p-1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
862 ASM_REWRITE_TAC[SUBSET;J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
863 THEN REPEAT STRIP_TAC
864 THEN POP_ASSUM MP_TAC
865 THEN POP_ASSUM MP_TAC
866 THEN ASM_REWRITE_TAC[PAIR_EQ;]
867 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
869 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
870 MP_TAC(ARITH_RULE`i<p /\ 2<p ==> i=p-1 \/ i< p-1:num`)
872 MP_TAC(ARITH_RULE`2<p ==> SUC(p-1)=p /\ p-1<p`)
874 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
877 THEN EXISTS_TAC`i:num`
878 THEN ASM_REWRITE_TAC[]
879 THEN MP_TAC(ARITH_RULE`i<p-1 /\ p < k /\ 2<p ==> i< k /\ i<=k:num /\ 1+i<k/\ 1+i< p/\ ~(i=1+i)/\ ~(i=p-1)/\ ~(p=2)`)
881 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
882 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
883 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
884 THEN MRESA_TAC MOD_LT[`1+i:num`;`k:num`]
885 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
886 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[SYM th] )
887 THEN FIND_ASSUM MP_TAC`J_SY s1 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
888 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
890 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{i,(1+i) MOD p}`)
891 THEN POP_ASSUM MP_TAC
892 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
894 THEN MP_TAC(SET_RULE`{i, 1 + i} = {0, p - 1} /\ ~(i=1+i) /\ ~(i=p-1) ==> i=0 /\ 1+i= p-1`)
896 THEN POP_ASSUM MP_TAC
897 THEN ASM_REWRITE_TAC[ARITH_RULE`1+0=p-1<=> p=2`];
898 SUBGOAL_THEN`IMAGE (\(x,y). (p - 2 + x), (p - 2 + y)) (J1_SY s3 DELETE (k-p+2,1)) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
899 ASM_REWRITE_TAC[J1_SY;IMAGE;DELETE;SUBSET;IN_ELIM_THM;IN_NUMSEG]
900 THEN REPEAT STRIP_TAC
901 THEN POP_ASSUM MP_TAC
902 THEN POP_ASSUM MP_TAC
903 THEN ASM_REWRITE_TAC[PAIR_EQ;]
904 THEN MP_TAC(ARITH_RULE`i<=k-p+2 ==> i=k-p+2 \/ i< k-p+2:num`)
906 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
907 MP_TAC(ARITH_RULE`i<k-p+2 /\ 2<k-p+2 ==> i=k-p+1 \/ i< k-p+1:num`)
909 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
912 THEN MP_TAC(ARITH_RULE`2<p /\ 2< k-p+2 /\ 2< k ==> p-2+k-p+1=k-1/\ SUC(k-p+1)=k-p+2 /\ k-p+1<k-p+2/\ p - 2 + k - p + 2=k/\ 1<=k-1 /\ k-1<=k/\ k-1<k/\ 1+k-1=k /\ SUC(k-1)=k/\ 1 + k - p + 1= k - p + 2 /\ ~(k-p+1=0)`)
914 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`]
915 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
916 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
918 THEN ASM_REWRITE_TAC[]
919 THEN FIND_ASSUM MP_TAC`{(k - p + 1) MOD (k - p + 2), (f_sy s2 o
922 else (p - 2 + x) MOD k))
923 ((k - p + 1) MOD (k - p + 2))} IN
925 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
926 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
927 THEN ASM_REWRITE_TAC[]
928 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
930 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`k-p+1`;`0`]th))`!p' q.
931 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
936 {p', q} IN J_SY (s3:stable_sy)`
937 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;ARITH_RULE`0=0`])
938 THEN ASM_REWRITE_TAC[]
940 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
941 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
943 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{k-1,0}`);
945 THEN MP_TAC(ARITH_RULE`1<=k-p /\2<p==> ~(k-1=p-1) /\ ~(0= p-1)`)
947 THEN MP_TAC(SET_RULE`~(k-1=p-1) /\ ~(0= p-1)==> ~(p-1 IN {k-1,0})`)
948 THEN ASM_REWRITE_TAC[]
952 THEN EXISTS_TAC`p-2+i:num`
953 THEN ASM_REWRITE_TAC[]
954 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> p-2+i< k/\ p-2+i<=k /\ 1<=p-2+i/\ 1+p-2+i<k /\ 1+i< k-p+2/\ p-2+1+i<k`)
956 THEN MRESA_TAC MOD_LT[`p-2+1+i:num`;`k:num`]
957 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
958 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> ~(i=0)/\ ~(1+i=0)`)
960 THEN MRESA_TAC MOD_LT[`1+i:num`;`k-p+2:num`]
961 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
962 THEN REWRITE_TAC[ARITH_RULE`SUC (p - 2 + i)= p - 2 + SUC i`]
963 THEN MRESA_TAC MOD_LT[`1+p-2+i:num`;`k:num`]
964 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`i MOD (k - p + 2)`;`(f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
965 (i MOD (k - p + 2))`] th))`!p' q.
966 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
971 {p', q} IN J_SY (s3:stable_sy)`
972 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`{i MOD (k - p + 2), (f_sy s2 o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
973 (i MOD (k - p + 2))} IN
975 THEN REMOVE_ASSUM_TAC
976 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
977 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
978 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
979 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
980 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
981 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
982 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
983 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
985 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
986 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
988 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{p-2+i,p-2+1+i}`);
989 ASM_REWRITE_TAC[ARITH_RULE`1+p-2+i= p-2+1+i`];
990 MP_TAC(SET_RULE`{p - 2 + i, p - 2 + 1 + i} = {0, p - 1} ==> (p-2+i=0) \/ (p-2+1+i=0)`)
992 THEN MP_TAC(ARITH_RULE`1<=i /\ 2< p==> ~(p-2+i=0) /\ ~(p-2+1+i=0)`)
993 THEN ASM_REWRITE_TAC[];
994 MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s1:stable_sy)`;`p-1,p`][FINITE_J1_SY]
995 THEN MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s3:stable_sy)`;`k-p+2,1`][FINITE_J1_SY]
996 THEN DISJ_CASES_TAC(SET_RULE`ear_sy s1 \/ ~(ear_sy (s1:stable_sy))`);
997 ASM_REWRITE_TAC[sigma_sy]
998 THEN MATCH_MP_TAC(REAL_ARITH`
1004 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l)))
1006 &0<= sum (J1_SY s1 DELETE (p - 1,p))
1007 (\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats l1)))
1008 /\ &0<= cstab - norm (row (p - 1) (vecmats l1) - row p (vecmats l1))
1011 sum (J1_SY s3 DELETE (k - p + 2,1))
1012 (\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats l2)))
1013 /\ &0<= cstab - norm (row (k - p + 2) (vecmats l2) - row 1 (vecmats l2))
1019 (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats l))) <=
1023 (sum (J1_SY s1 DELETE (p - 1,p))
1024 (\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats l1))) +
1025 cstab - norm (row (p - 1) (vecmats l1) - row p (vecmats l1)))) +
1029 (sum (J1_SY (s3:stable_sy) DELETE (k - p + 2,1))
1030 (\x. cstab - norm (row (FST x) (vecmats l2) - row (SND x) (vecmats l2))) +
1031 cstab - norm (row (k - p + 2) (vecmats l2) - row 1 (vecmats l2)))`)
1033 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
1034 THEN REWRITE_TAC[COVER2_SY]
1037 MATCH_MP_TAC SUM_POS_LE
1038 THEN REWRITE_TAC[FINITE_J1_SY]
1039 THEN REPEAT STRIP_TAC
1040 THEN POP_ASSUM MP_TAC
1041 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG]
1043 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
1044 THEN POP_ASSUM MP_TAC
1045 THEN REAL_ARITH_TAC;
1047 MATCH_MP_TAC SUM_POS_LE
1048 THEN ASM_REWRITE_TAC[]
1049 THEN REPEAT STRIP_TAC
1050 THEN DISJ_CASES_TAC(SET_RULE`x=p:num,1 \/ ~(x=p:num,1 )`);
1053 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1054 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1055 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1056 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1058 THEN ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1060 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1061 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
1063 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1065 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p`]
1066 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1067 THEN POP_ASSUM MP_TAC
1068 THEN REAL_ARITH_TAC;
1069 SUBGOAL_THEN`x IN J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1)` ASSUME_TAC;
1071 THEN POP_ASSUM MP_TAC
1072 THEN REWRITE_TAC[IN_ELIM_THM;DELETE]
1074 MP_TAC(SET_RULE`x IN J1_SY s1 DELETE (p - 1,p) DELETE (p,1)
1075 /\ J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY s
1076 ==> x IN J1_SY (s:stable_sy)`)
1078 THEN POP_ASSUM MP_TAC
1079 THEN POP_ASSUM MP_TAC
1080 THEN POP_ASSUM MP_TAC
1081 THEN POP_ASSUM MP_TAC
1082 THEN DISCH_THEN(LABEL_TAC"THY")
1083 THEN DISCH_THEN(LABEL_TAC"THY1")
1084 THEN REPEAT STRIP_TAC
1085 THEN REMOVE_THEN"THY" MP_TAC
1086 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
1088 THEN POP_ASSUM MP_TAC
1089 THEN REMOVE_THEN"THY1" MP_TAC
1090 THEN ASM_REWRITE_TAC[]
1091 THEN MP_TAC(ARITH_RULE`i<=p==> i=p \/ i<p:num`)
1093 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1094 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
1096 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
1098 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1102 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1103 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
1104 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1105 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1106 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1107 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
1109 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1111 THEN POP_ASSUM MP_TAC
1112 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG]
1114 THEN MP_TAC(ARITH_RULE`SUC i < p /\ 1<=k-p ==> i <= k/\ i<k`)
1116 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
1117 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
1118 THEN POP_ASSUM MP_TAC
1119 THEN REAL_ARITH_TAC;
1121 SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1122 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1123 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1125 THEN ASM_REWRITE_TAC[ARITH_RULE`p <= p`]
1127 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1129 THEN SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1130 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
1132 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1134 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`p-1`;`k:num`] th) )`!i j.
1135 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
1136 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
1137 THEN REWRITE_TAC[IN_ELIM_THM;UNION;IN_SING]
1138 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
1139 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`;SET_RULE`{p-1,0}={0,p-1}`]
1140 THEN REAL_ARITH_TAC;
1142 MATCH_MP_TAC SUM_POS_LE
1143 THEN ASM_REWRITE_TAC[]
1144 THEN REPEAT STRIP_TAC
1145 THEN DISJ_CASES_TAC(SET_RULE`x=k-p+1,k-p+2 \/ ~(x=k-p+1,k-p+2 )`);
1148 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1149 THEN SUBGOAL_THEN`row (k-p+1) ((pmat2 (vecmats l)):real^3^N) = row (k-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1150 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+1<=k-p+2 /\ 1<= k-p+1 /\ k - (k - p + 2) + k - p + 1= k-1`)
1152 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1153 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1154 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
1156 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1158 THEN MP_TAC(ARITH_RULE` 2<k ==> 1<=k-1 /\ k-1<= k /\ SUC (k - 1)= k /\ k-1<k`)
1160 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
1161 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k-1:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1162 THEN POP_ASSUM MP_TAC
1163 THEN REAL_ARITH_TAC;
1165 THEN POP_ASSUM MP_TAC
1166 THEN DISCH_THEN(LABEL_TAC"THY")
1167 THEN DISCH_THEN(LABEL_TAC"THY1")
1168 THEN REMOVE_THEN"THY" MP_TAC
1169 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
1171 THEN POP_ASSUM MP_TAC
1172 THEN REMOVE_THEN"THY1" MP_TAC
1173 THEN ASM_REWRITE_TAC[]
1174 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
1176 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1177 MP_TAC(ARITH_RULE`i< k-p+2 /\ 2<p ==> i=k-p +1 \/ i< k-p+1:num`)
1179 MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> k-p+1< k-p+2 /\ SUC (k-p+1)=k-p+2`)
1181 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`];
1185 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1186 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
1187 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1188 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
1190 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1191 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1192 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+1 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
1194 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1196 THEN MP_TAC(ARITH_RULE` i< k-p+1 /\ 2< p /\ 1<= k-p ==> 1<=p-2+i /\ p-2+i <= k /\ SUC (p-2+i)= p-2+ SUC i /\ p-2+i<k`)
1198 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
1199 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`p-2+i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1200 THEN POP_ASSUM MP_TAC
1201 THEN REAL_ARITH_TAC;
1202 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1203 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
1205 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1206 SUBGOAL_THEN`row 1 ((pmat2 (vecmats l)):real^3^N) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1207 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + 1= p-1/\ 1<=1 /\ 1<=k-p+2`)
1209 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1211 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1212 THEN ASM_REWRITE_TAC[]
1213 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`k:num`;`p-1:num`] th) )`!i j.
1214 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
1215 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
1216 THEN REWRITE_TAC[IN_ELIM_THM;UNION;IN_SING]
1217 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
1218 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`;SET_RULE`{p-1,0}={0,p-1}`]
1219 THEN REAL_ARITH_TAC;
1220 ASM_REWRITE_TAC[sigma_sy]
1221 THEN SUBGOAL_THEN `cstab - norm (row (p - 1) (vecmats (l1:real^(P,3)finite_product)) - row p (vecmats l1)) =cstab - norm (row (k-p + 2) (vecmats (l2:real^(N,3)finite_product)) - row 1 (vecmats l2))` ASSUME_TAC;
1222 REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1225 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1226 THEN SUBGOAL_THEN`row 1 ((pmat2 (vecmats l)):real^3^N) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1227 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + 1= p-1/\ 1<=1 /\ 1<=k-p+2`)
1229 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1230 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1231 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
1233 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1234 SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1235 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
1237 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1238 SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1239 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1240 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1242 THEN ASM_REWRITE_TAC[ARITH_RULE`p <= p`]
1244 THEN SIMP_TAC[NORM_SUB];
1245 DISJ_CASES_TAC(SET_RULE`(p,1) IN J1_SY s1 DELETE (p - 1,p) \/ ~((p,1) IN J1_SY (s1:stable_sy) DELETE (p - 1,p))`);
1246 SUBGOAL_THEN`k,1 IN J1_SY (s:stable_sy)`ASSUME_TAC;
1248 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;PAIR_EQ;IN_NUMSEG]
1250 THEN REMOVE_ASSUM_TAC
1251 THEN REMOVE_ASSUM_TAC
1252 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1253 THEN REMOVE_ASSUM_TAC
1254 THEN REMOVE_ASSUM_TAC
1255 THEN POP_ASSUM MP_TAC
1256 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p /\ 1+0=1`]
1257 THEN MP_TAC(ARITH_RULE`2<p /\ 2< k==> 1<p /\ 1<k /\ k<=k`)
1259 THEN MRESA_TAC MOD_LT[`1:num`;`p:num`]
1261 THEN EXISTS_TAC`k:num`
1262 THEN ASM_REWRITE_TAC[]
1263 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1/\ 1+0=1`]
1264 THEN MRESA_TAC MOD_LT[`1:num`;`k:num`]
1265 THEN FIND_ASSUM MP_TAC`J_SY s1 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
1266 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
1268 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{0,1}`);
1269 MP_TAC(ARITH_RULE`2<p ==> ~(p-1=0) /\ ~(p-1=1)`)
1271 THEN MP_TAC(SET_RULE`~(p-1=0) /\ ~(p-1=1) ==> ~(p-1 IN {0,1})`)
1272 THEN ASM_REWRITE_TAC[]
1273 THEN REMOVE_ASSUM_TAC
1274 THEN REMOVE_ASSUM_TAC
1275 THEN POP_ASSUM MP_TAC
1277 MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats (l1:real^(P,3)finite_product))))`;`J1_SY (s1:stable_sy) DELETE (p-1,p)`;`p:num,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
1278 THEN MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s:stable_sy)`;`k:num,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
1280 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1281 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1282 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1283 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1285 THEN ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1287 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1288 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
1290 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1291 SUBGOAL_THEN`J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy) DELETE (k,1)`ASSUME_TAC;
1292 MATCH_MP_TAC(SET_RULE`~(x IN A) /\ A SUBSET B==> A SUBSET B DELETE x`)
1293 THEN ASM_REWRITE_TAC[]
1294 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1295 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1296 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;PAIR_EQ;IN_NUMSEG]
1298 THEN REMOVE_ASSUM_TAC
1299 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1300 THEN POP_ASSUM MP_TAC
1301 THEN MP_TAC(ARITH_RULE`1<= k-p ==> ~(k<=p)`)
1303 ASM_REWRITE_TAC[REAL_ARITH`(A+ #0.1 * -- &1 *(C+B)) + D+ #0.1 * &1* (E+B)= (A+ #0.1 * -- &1 * C) + D+ #0.1 * &1 * E`]
1304 THEN MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s:stable_sy)`;`k:num,1`][FINITE_J1_SY]
1305 THEN MRESAL_TAC SUM_DIFF[`(\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l)))`;`J1_SY(s:stable_sy) DELETE (k,1)`;`J1_SY (s1:stable_sy) DELETE (p-1,p:num) DELETE (p:num,1)`][FINITE_J1_SY;]
1306 THEN MATCH_MP_TAC(REAL_ARITH`
1307 A1<= A+D /\ &0<= C1 -C /\ &0<= E
1308 ==> A1+ #0.1 * -- &1 * (C1+B) <=(A+ #0.1 * -- &1 *(C+B)) + D+ #0.1 * &1* E`)
1310 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
1311 THEN REWRITE_TAC[COVER2_SY]
1314 SUBGOAL_THEN`!x. x IN (J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))
1317 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P))) x
1318 = (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product)))) x` ASSUME_TAC;
1319 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
1320 THEN REPEAT STRIP_TAC
1321 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1322 THEN POP_ASSUM MP_TAC
1323 THEN POP_ASSUM MP_TAC
1324 THEN ASM_REWRITE_TAC[]
1325 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1327 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1328 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
1330 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
1332 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1335 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
1336 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1337 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1338 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1339 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
1341 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1343 MRESA_TAC SUM_EQ[`(\x. cstab -
1345 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P)))`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`(J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))`]
1346 THEN REMOVE_ASSUM_TAC
1347 THEN REMOVE_ASSUM_TAC
1348 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1349 THEN MATCH_MP_TAC SUM_POS_LE
1351 MATCH_MP_TAC FINITE_DIFF
1352 THEN REWRITE_TAC[FINITE_J1_SY; FINITE_DELETE];
1354 THEN POP_ASSUM MP_TAC
1355 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG;DIFF;DELETE]
1357 THEN REMOVE_ASSUM_TAC
1358 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
1359 THEN POP_ASSUM MP_TAC
1360 THEN REAL_ARITH_TAC;
1361 MATCH_MP_TAC SUM_POS_LE
1362 THEN ASM_REWRITE_TAC[]
1363 THEN REPEAT STRIP_TAC
1364 THEN DISJ_CASES_TAC(SET_RULE`x=k-p+1,k-p+2 \/ ~(x=k-p+1,k-p+2 )`);
1367 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1368 THEN SUBGOAL_THEN`row (k-p+1) ((pmat2 (vecmats l)):real^3^N) = row (k-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1369 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+1<=k-p+2 /\ 1<= k-p+1 /\ k - (k - p + 2) + k - p + 1= k-1`)
1371 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1372 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1373 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
1375 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1377 THEN MP_TAC(ARITH_RULE` 2<k ==> 1<=k-1 /\ k-1<= k /\ SUC (k - 1)= k /\ k-1<k`)
1379 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
1380 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k-1:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1381 THEN POP_ASSUM MP_TAC
1382 THEN REAL_ARITH_TAC;
1384 THEN POP_ASSUM MP_TAC
1385 THEN DISCH_THEN(LABEL_TAC"THY")
1386 THEN DISCH_THEN(LABEL_TAC"THY1")
1387 THEN REMOVE_THEN"THY" MP_TAC
1388 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
1390 THEN POP_ASSUM MP_TAC
1391 THEN REMOVE_THEN"THY1" MP_TAC
1392 THEN ASM_REWRITE_TAC[]
1393 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
1395 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1396 MP_TAC(ARITH_RULE`i< k-p+2 /\ 2<p ==> i=k-p +1 \/ i< k-p+1:num`)
1398 MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> k-p+1< k-p+2 /\ SUC (k-p+1)=k-p+2`)
1400 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`];
1404 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1405 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
1406 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1407 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
1409 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1410 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1411 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+1 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
1413 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1415 THEN MP_TAC(ARITH_RULE` i< k-p+1 /\ 2< p /\ 1<= k-p ==> 1<=p-2+i /\ p-2+i <= k /\ SUC (p-2+i)= p-2+ SUC i /\ p-2+i<k`)
1417 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
1418 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`p-2+i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1419 THEN POP_ASSUM MP_TAC
1420 THEN REAL_ARITH_TAC;
1421 MP_TAC(SET_RULE`~(p,1 IN J1_SY s1 DELETE (p - 1,p))
1422 ==> J1_SY (s1:stable_sy) DELETE (p - 1,p) = J1_SY s1 DELETE (p - 1,p) DELETE (p,1)`)
1424 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1425 THEN MATCH_MP_TAC(REAL_ARITH`
1426 A1<= A+D /\ &0<= C1 -C /\ &0<= E
1427 ==> A1+ #0.1 * -- &1 * C1 <=(A+ #0.1 * -- &1 *(C+B)) + D+ #0.1 * &1* (E+B)`)
1429 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
1430 THEN REWRITE_TAC[COVER2_SY]
1433 SUBGOAL_THEN`!x. x IN (J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))
1436 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P))) x
1437 = (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product)))) x` ASSUME_TAC;
1438 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
1439 THEN REPEAT STRIP_TAC
1440 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1441 THEN POP_ASSUM MP_TAC
1442 THEN POP_ASSUM MP_TAC
1443 THEN ASM_REWRITE_TAC[]
1444 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1446 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1447 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
1449 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
1451 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1454 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
1455 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1456 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1457 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1458 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
1460 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1462 MRESA_TAC SUM_EQ[`(\x. cstab -
1464 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P)))`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`(J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))`]
1466 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1467 THEN ASM_REWRITE_TAC[]
1468 THEN REMOVE_ASSUM_TAC
1469 THEN REMOVE_ASSUM_TAC
1470 THEN MRESAL_TAC SUM_DIFF[`(\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l)))`;`J1_SY(s:stable_sy) `;`J1_SY (s1:stable_sy) DELETE (p-1,p:num) DELETE (p:num,1)`][FINITE_J1_SY;]
1471 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1472 THEN MATCH_MP_TAC SUM_POS_LE
1474 MATCH_MP_TAC FINITE_DIFF
1475 THEN REWRITE_TAC[FINITE_J1_SY; FINITE_DELETE];
1477 THEN POP_ASSUM MP_TAC
1478 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG;DIFF;DELETE]
1480 THEN REMOVE_ASSUM_TAC
1481 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
1482 THEN POP_ASSUM MP_TAC
1483 THEN REAL_ARITH_TAC;
1484 MATCH_MP_TAC SUM_POS_LE
1485 THEN ASM_REWRITE_TAC[]
1486 THEN REPEAT STRIP_TAC
1487 THEN DISJ_CASES_TAC(SET_RULE`x=k-p+1,k-p+2 \/ ~(x=k-p+1,k-p+2 )`);
1490 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1491 THEN SUBGOAL_THEN`row (k-p+1) ((pmat2 (vecmats l)):real^3^N) = row (k-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1492 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+1<=k-p+2 /\ 1<= k-p+1 /\ k - (k - p + 2) + k - p + 1= k-1`)
1494 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1495 SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1496 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
1498 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1500 THEN MP_TAC(ARITH_RULE` 2<k ==> 1<=k-1 /\ k-1<= k /\ SUC (k - 1)= k /\ k-1<k`)
1502 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
1503 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`k-1:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1504 THEN POP_ASSUM MP_TAC
1505 THEN REAL_ARITH_TAC;
1507 THEN POP_ASSUM MP_TAC
1508 THEN DISCH_THEN(LABEL_TAC"THY")
1509 THEN DISCH_THEN(LABEL_TAC"THY1")
1510 THEN REMOVE_THEN"THY" MP_TAC
1511 THEN REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;IN_NUMSEG]
1513 THEN POP_ASSUM MP_TAC
1514 THEN REMOVE_THEN"THY1" MP_TAC
1515 THEN ASM_REWRITE_TAC[]
1516 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
1518 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1519 MP_TAC(ARITH_RULE`i< k-p+2 /\ 2<p ==> i=k-p +1 \/ i< k-p+1:num`)
1521 MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> k-p+1< k-p+2 /\ SUC (k-p+1)=k-p+2`)
1523 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`];
1527 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1528 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
1529 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1530 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
1532 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1533 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1534 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+1 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
1536 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1538 THEN MP_TAC(ARITH_RULE` i< k-p+1 /\ 2< p /\ 1<= k-p ==> 1<=p-2+i /\ p-2+i <= k /\ SUC (p-2+i)= p-2+ SUC i /\ p-2+i<k`)
1540 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
1541 THEN MRESAL_TAC (GEN_ALL B_SY_LE_CSTAB)[`p-2+i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;][ARITH_RULE`SUC 0=1`]
1542 THEN POP_ASSUM MP_TAC
1543 THEN REAL_ARITH_TAC;
1544 FIND_ASSUM MP_TAC `COVER_SY 0 (p - 1) s s1 (s2:stable_sy)`
1545 THEN REWRITE_TAC[COVER_SY;COVER3_SY;COVER6_SY;]
1546 THEN ASM_REWRITE_TAC[DE_MORGAN_THM]
1548 THEN ASM_REWRITE_TAC[d_fun]
1549 THEN MRESA1_TAC sigma_sy`s1:stable_sy`
1550 THEN MRESA1_TAC sigma_sy`s3:stable_sy`
1551 THEN FIND_ASSUM MP_TAC`SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 (s3:stable_sy)`
1552 THEN REWRITE_TAC[SCHANGE]
1554 THEN SUBGOAL_THEN`~({0,1} IN J_SY (s3:stable_sy))`ASSUME_TAC;
1555 FIND_ASSUM MP_TAC`~({0, p - 1} IN J_SY (s2:stable_sy))`
1556 THEN MATCH_MP_TAC MONO_NOT
1558 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`0`;`1`]th))`!p' q.
1559 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
1561 else (p - 2 + q) MOD
1564 {p', q} IN J_SY (s3:stable_sy)`
1565 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;ARITH_RULE`(0=0) /\ ~(1=0)`])
1566 THEN MP_TAC(ARITH_RULE`2<p/\ 1<= k-p ==> p-2+1=p-1 /\ p-1<k`)
1568 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`];
1569 SUBGOAL_THEN`~(p - 1,p IN J1_SY (s1:stable_sy))`ASSUME_TAC;
1570 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;PAIR_EQ;IN_NUMSEG]
1572 THEN REMOVE_ASSUM_TAC
1573 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1574 THEN REMOVE_ASSUM_TAC
1575 THEN REMOVE_ASSUM_TAC
1576 THEN POP_ASSUM MP_TAC
1577 THEN MP_TAC(ARITH_RULE`2<p/\ 1<= k-p ==> p-2+1=p-1 /\ p-1<p/\ 1+p-1=p`)
1579 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
1580 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
1581 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1583 SUBGOAL_THEN`~((k-p+2,1) IN J1_SY (s3:stable_sy))`ASSUME_TAC;
1584 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;PAIR_EQ;IN_NUMSEG]
1586 THEN REMOVE_ASSUM_TAC
1587 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1588 THEN REMOVE_ASSUM_TAC
1589 THEN REMOVE_ASSUM_TAC
1590 THEN POP_ASSUM MP_TAC
1591 THEN POP_ASSUM MP_TAC
1592 THEN POP_ASSUM MP_TAC
1593 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1596 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ 1+0=1`]
1597 THEN MRESA_TAC MOD_LT[`1:num`;`k-p+2:num`];
1598 SUBGOAL_THEN`J1_SY s1 DELETE (p-1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
1599 ASM_REWRITE_TAC[SUBSET;J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
1600 THEN REPEAT STRIP_TAC
1601 THEN POP_ASSUM MP_TAC
1602 THEN POP_ASSUM MP_TAC
1603 THEN ASM_REWRITE_TAC[PAIR_EQ;]
1604 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1606 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
1607 MP_TAC(ARITH_RULE`i<p /\ 2<p ==> i=p-1 \/ i< p-1:num`)
1609 MP_TAC(ARITH_RULE`2<p ==> SUC(p-1)=p /\ p-1<p`)
1611 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1614 THEN EXISTS_TAC`i:num`
1615 THEN ASM_REWRITE_TAC[]
1616 THEN MP_TAC(ARITH_RULE`i<p-1 /\ p < k /\ 2<p ==> i< k /\ i<=k:num /\ 1+i<k/\ 1+i< p/\ ~(i=1+i)/\ ~(i=p-1)/\ ~(p=2)`)
1618 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
1619 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
1620 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
1621 THEN MRESA_TAC MOD_LT[`1+i:num`;`k:num`]
1622 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
1623 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[SYM th] )
1624 THEN FIND_ASSUM MP_TAC`J_SY s1 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
1625 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
1627 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{i,(1+i) MOD p}`)
1628 THEN POP_ASSUM MP_TAC
1629 THEN MRESA_TAC MOD_LT[`1+i:num`;`p:num`]
1631 THEN MP_TAC(SET_RULE`{i, 1 + i} = {0, p - 1} /\ ~(i=1+i) /\ ~(i=p-1) ==> i=0 /\ 1+i= p-1`)
1633 THEN POP_ASSUM MP_TAC
1634 THEN ASM_REWRITE_TAC[ARITH_RULE`1+0=p-1<=> p=2`];
1635 SUBGOAL_THEN`IMAGE (\(x,y). (p - 2 + x), (p - 2 + y)) (J1_SY s3 DELETE (k-p+2,1)) SUBSET J1_SY (s:stable_sy)` ASSUME_TAC;
1636 ASM_REWRITE_TAC[J1_SY;IMAGE;DELETE;SUBSET;IN_ELIM_THM;IN_NUMSEG]
1637 THEN REPEAT STRIP_TAC
1638 THEN POP_ASSUM MP_TAC
1639 THEN POP_ASSUM MP_TAC
1640 THEN ASM_REWRITE_TAC[PAIR_EQ;]
1641 THEN MP_TAC(ARITH_RULE`i<=k-p+2 ==> i=k-p+2 \/ i< k-p+2:num`)
1643 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`];
1644 MP_TAC(ARITH_RULE`i<k-p+2 /\ 2<k-p+2 ==> i=k-p+1 \/ i< k-p+1:num`)
1646 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
1649 THEN MP_TAC(ARITH_RULE`2<p /\ 2< k-p+2 /\ 2< k ==> p-2+k-p+1=k-1/\ SUC(k-p+1)=k-p+2 /\ k-p+1<k-p+2/\ p - 2 + k - p + 2=k/\ 1<=k-1 /\ k-1<=k/\ k-1<k/\ 1+k-1=k /\ SUC(k-1)=k/\ 1 + k - p + 1= k - p + 2 /\ ~(k-p+1=0)`)
1651 THEN MRESA_TAC MOD_LT[`k-p+1:num`;`k-p+2:num`]
1652 THEN MRESA_TAC MOD_LT[`k-1:num`;`k:num`]
1653 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
1654 THEN EXISTS_TAC`k-1`
1655 THEN ASM_REWRITE_TAC[]
1656 THEN FIND_ASSUM MP_TAC`{(k - p + 1) MOD (k - p + 2), (f_sy s2 o
1659 else (p - 2 + x) MOD k))
1660 ((k - p + 1) MOD (k - p + 2))} IN
1661 J_SY (s3:stable_sy)`
1662 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
1663 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
1664 THEN ASM_REWRITE_TAC[]
1665 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1`]
1667 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`k-p+1`;`0`]th))`!p' q.
1668 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
1670 else (p - 2 + q) MOD
1673 {p', q} IN J_SY (s3:stable_sy)`
1674 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;ARITH_RULE`0=0`])
1675 THEN ASM_REWRITE_TAC[]
1677 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
1678 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
1680 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{k-1,0}`);
1682 THEN MP_TAC(ARITH_RULE`1<=k-p /\2<p==> ~(k-1=p-1) /\ ~(0= p-1)`)
1684 THEN MP_TAC(SET_RULE`~(k-1=p-1) /\ ~(0= p-1)==> ~(p-1 IN {k-1,0})`)
1685 THEN ASM_REWRITE_TAC[]
1689 THEN EXISTS_TAC`p-2+i:num`
1690 THEN ASM_REWRITE_TAC[]
1691 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> p-2+i< k/\ p-2+i<=k /\ 1<=p-2+i/\ 1+p-2+i<k /\ 1+i< k-p+2/\ p-2+1+i<k`)
1693 THEN MRESA_TAC MOD_LT[`p-2+1+i:num`;`k:num`]
1694 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
1695 THEN MP_TAC(ARITH_RULE`i<k - p + 1 /\ 2<p /\ 1<=i==> ~(i=0)/\ ~(1+i=0)`)
1697 THEN MRESA_TAC MOD_LT[`1+i:num`;`k-p+2:num`]
1698 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
1699 THEN REWRITE_TAC[ARITH_RULE`SUC (p - 2 + i)= p - 2 + SUC i`]
1700 THEN MRESA_TAC MOD_LT[`1+p-2+i:num`;`k:num`]
1701 THEN FIND_ASSUM (fun th-> MP_TAC( ISPECL [`i MOD (k - p + 2)`;`(f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
1702 (i MOD (k - p + 2))`] th))`!p' q.
1703 {(if p' = 0 then 0 else (p - 2 + p') MOD k), (if q = 0
1705 else (p - 2 + q) MOD
1708 {p', q} IN J_SY (s3:stable_sy)`
1709 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`{i MOD (k - p + 2), (f_sy s2 o (\x. if x = 0 then 0 else (p - 2 + x) MOD k))
1710 (i MOD (k - p + 2))} IN
1711 J_SY (s3:stable_sy)`
1712 THEN REMOVE_ASSUM_TAC
1713 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1714 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`(\i. (1 + i) MOD (k - p + 2)) =
1715 f_sy (s2:stable_sy) o (\x. if x = 0 then 0 else (p - 2 + x) MOD k)`
1716 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1717 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1718 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1719 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1720 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1722 THEN FIND_ASSUM MP_TAC`J_SY s2 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
1723 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
1725 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{p-2+i,p-2+1+i}`);
1726 ASM_REWRITE_TAC[ARITH_RULE`1+p-2+i= p-2+1+i`];
1727 MP_TAC(SET_RULE`{p - 2 + i, p - 2 + 1 + i} = {0, p - 1} ==> (p-2+i=0) \/ (p-2+1+i=0)`)
1729 THEN MP_TAC(ARITH_RULE`1<=i /\ 2< p==> ~(p-2+i=0) /\ ~(p-2+1+i=0)`)
1730 THEN ASM_REWRITE_TAC[];
1731 MP_TAC(SET_RULE`~(k - p + 2,1 IN J1_SY s3) ==> J1_SY (s3:stable_sy) =J1_SY s3 DELETE (k - p + 2,1)`)
1733 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1734 THEN MP_TAC(SET_RULE`~(p -1,p IN J1_SY s1) ==> J1_SY (s1:stable_sy) =J1_SY s1 DELETE (p -1,p)`)
1736 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th]);
1737 DISJ_CASES_TAC(SET_RULE`(p,1) IN J1_SY s1 DELETE (p - 1,p) \/ ~((p,1) IN J1_SY (s1:stable_sy) DELETE (p - 1,p))`);
1738 SUBGOAL_THEN`k,1 IN J1_SY (s:stable_sy)`ASSUME_TAC;
1740 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;PAIR_EQ;IN_NUMSEG]
1742 THEN REMOVE_ASSUM_TAC
1743 THEN REMOVE_ASSUM_TAC
1744 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1745 THEN REMOVE_ASSUM_TAC
1746 THEN REMOVE_ASSUM_TAC
1747 THEN POP_ASSUM MP_TAC
1748 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p /\ 1+0=1`]
1749 THEN MP_TAC(ARITH_RULE`2<p /\ 2< k==> 1<p /\ 1<k /\ k<=k`)
1751 THEN MRESA_TAC MOD_LT[`1:num`;`p:num`]
1753 THEN EXISTS_TAC`k:num`
1754 THEN ASM_REWRITE_TAC[]
1755 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p /\ SUC 0=1/\ 1+0=1`]
1756 THEN MRESA_TAC MOD_LT[`1:num`;`k:num`]
1757 THEN FIND_ASSUM MP_TAC`J_SY s1 SUBSET J_SY (s:stable_sy) UNION {{0, p - 1}}`
1758 THEN REWRITE_TAC[SUBSET;UNION;IN_ELIM_THM;IN_SING]
1760 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{0,1}`);
1761 MP_TAC(ARITH_RULE`2<p ==> ~(p-1=0) /\ ~(p-1=1)`)
1763 THEN MP_TAC(SET_RULE`~(p-1=0) /\ ~(p-1=1) ==> ~(p-1 IN {0,1})`)
1764 THEN ASM_REWRITE_TAC[]
1765 THEN REMOVE_ASSUM_TAC
1766 THEN REMOVE_ASSUM_TAC
1767 THEN POP_ASSUM MP_TAC
1769 MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s1:stable_sy)`;`p-1,p`][FINITE_J1_SY]
1770 THEN MRESAL_TAC FINITE_DELETE_IMP[`J1_SY (s3:stable_sy)`;`k-p+2,1`][FINITE_J1_SY]
1771 THEN MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l1) - row (SND x) (vecmats (l1:real^(P,3)finite_product))))`;`J1_SY (s1:stable_sy) DELETE (p-1,p)`;`p:num,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
1772 THEN MRESAL_TAC SUM_DELETE[`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s:stable_sy)`;`k:num,1`][FINITE_J1_SY;REAL_ARITH`A=B-C<=> B=A+C`]
1774 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1775 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1776 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1777 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1779 THEN ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
1781 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1782 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
1784 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1785 SUBGOAL_THEN`J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy) DELETE (k,1)`ASSUME_TAC;
1786 MATCH_MP_TAC(SET_RULE`~(x IN A) /\ A SUBSET B==> A SUBSET B DELETE x`)
1787 THEN ASM_REWRITE_TAC[]
1788 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1789 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1790 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;PAIR_EQ;IN_NUMSEG]
1792 THEN REMOVE_ASSUM_TAC
1793 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1794 THEN POP_ASSUM MP_TAC
1795 THEN MP_TAC(ARITH_RULE`1<= k-p ==> ~(k<=p)`)
1797 ASM_REWRITE_TAC[REAL_ARITH`
1798 A1+ #0.1 * -- &1 * (C1+B) <=(A+ #0.1 * -- &1 *(C+B)) + D+ #0.1 * -- &1* E
1799 <=> A1+ #0.1 * -- &1 * (C1) <=(A+ #0.1 * -- &1 *(C)) + D+ #0.1 * -- &1* E
1802 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1803 THEN MATCH_MP_TAC(REAL_ARITH`
1804 A1<= A+D /\ &0<=C1-(C+E)
1806 A1+ #0.1 * -- &1 * (C1) <=(A+ #0.1 * -- &1 *(C)) + D+ #0.1 * -- &1* E`)
1808 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
1809 THEN REWRITE_TAC[COVER2_SY]
1811 SUBGOAL_THEN`!x. x IN (J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))
1814 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P))) x
1815 = (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product)))) x` ASSUME_TAC;
1816 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
1817 THEN REPEAT STRIP_TAC
1818 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1819 THEN POP_ASSUM MP_TAC
1820 THEN POP_ASSUM MP_TAC
1821 THEN ASM_REWRITE_TAC[]
1822 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1824 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1825 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
1827 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
1829 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1832 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
1833 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1834 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1835 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1836 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
1838 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
1840 MRESA_TAC SUM_EQ[`(\x. cstab -
1842 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P)))`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`(J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))`]
1843 THEN REMOVE_ASSUM_TAC
1844 THEN REMOVE_ASSUM_TAC
1845 THEN SUBGOAL_THEN`!x. x IN (J1_SY (s3:stable_sy) DELETE (k - p + 2,1))
1847 ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
1848 (\(x,y). p - 2 + x,p - 2 + y)) x
1849 = (\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2))) x`
1851 ASM_REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;o_DEF;IN_NUMSEG]
1852 THEN REPEAT STRIP_TAC
1853 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1855 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
1856 THEN POP_ASSUM MP_TAC
1857 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
1859 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1860 MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
1861 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1862 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
1864 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1865 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
1866 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+2 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
1868 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
1870 MRESA_TAC SUM_EQ[` ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
1871 (\(x,y). p - 2 + x,p - 2 + y))`;`(\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2)))`;`(J1_SY (s3:stable_sy) DELETE (k - p + 2,1))`]
1872 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1873 THEN SUBGOAL_THEN`(!x y.
1874 x IN J1_SY s3 DELETE (k - p + 2,1) /\
1875 y IN J1_SY (s3:stable_sy) DELETE (k - p + 2,1) /\
1876 (\(x,y). p - 2 + x,p - 2 + y) x = (\(x,y). p - 2 + x,p - 2 + y) y
1877 ==> x = y)`ASSUME_TAC;
1878 REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM]
1879 THEN REPEAT STRIP_TAC
1880 THEN POP_ASSUM MP_TAC
1881 THEN ASM_REWRITE_TAC[PAIR_EQ;ARITH_RULE`p-2+B=p-2+C<=> B=C`];
1882 MRESA_TAC SUM_IMAGE[`(\(x,y). p - 2 + x,p - 2 + y)`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s3:stable_sy) DELETE (k - p + 2,1)`]
1883 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1884 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1) INTER (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))={}` ASSUME_TAC;
1885 ASM_REWRITE_TAC[SET_RULE`A ={} <=> ~(?a. a IN A)`; INTER;IN_ELIM_THM;J1_SY;DELETE;IMAGE;IN_NUMSEG]
1887 THEN POP_ASSUM MP_TAC
1888 THEN ASM_REWRITE_TAC[PAIR_EQ]
1889 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1891 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
1892 THEN REMOVE_ASSUM_TAC
1893 THEN REMOVE_ASSUM_TAC
1894 THEN REMOVE_ASSUM_TAC
1895 THEN REMOVE_ASSUM_TAC
1896 THEN REMOVE_ASSUM_TAC
1897 THEN POP_ASSUM MP_TAC
1898 THEN ASM_REWRITE_TAC[]
1899 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1900 MP_TAC(ARITH_RULE`i<p /\ 2< p ==> i=p-1 \/ i< p-1:num`)
1902 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
1903 THEN REMOVE_ASSUM_TAC
1904 THEN REMOVE_ASSUM_TAC
1905 THEN REMOVE_ASSUM_TAC
1906 THEN REMOVE_ASSUM_TAC
1907 THEN REMOVE_ASSUM_TAC
1908 THEN REMOVE_ASSUM_TAC
1909 THEN REMOVE_ASSUM_TAC
1910 THEN POP_ASSUM MP_TAC
1911 THEN ASM_REWRITE_TAC[]
1912 THEN MP_TAC(ARITH_RULE` 2< p ==> p-1< p:num/\ SUC (p-1)=p`)
1914 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
1915 MP_TAC(ARITH_RULE`1<= i /\ i< p-1 /\ 1<= i' ==> ~(i= p-2+i')`)
1917 MRESA_TAC FINITE_IMAGE[`(\(x,y). p - 2 + x,p - 2 + y)`;`(J1_SY (s3:stable_sy) DELETE (k - p + 2,1))`]
1918 THEN MRESAL_TAC (GEN_ALL SUM_UNION_EQ)[`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1)`;`(IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY (s3:stable_sy) DELETE (k - p + 2,1)))`;`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY (s3:stable_sy) DELETE (k - p + 2,1)))`][FINITE_UNION;FINITE_DELETE]
1919 THEN SUBGOAL_THEN`IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)) SUBSET
1920 J1_SY s DELETE (k,1)` ASSUME_TAC;
1921 MATCH_MP_TAC(SET_RULE`~(x IN A) /\ A SUBSET B ==> A SUBSET B DELETE x`)
1922 THEN ASM_REWRITE_TAC[]
1923 THEN ASM_REWRITE_TAC[IMAGE;IN_ELIM_THM;DELETE;J1_SY;IN_NUMSEG]
1925 THEN POP_ASSUM MP_TAC
1926 THEN POP_ASSUM MP_TAC
1927 THEN ASM_REWRITE_TAC[PAIR_EQ]
1928 THEN MP_TAC(ARITH_RULE`i<= k-p+2 ==> i=k-p+2 \/ i< k-p+2`)
1930 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1931 MP_TAC(ARITH_RULE`i< k-p+2 /\ 1<= k-p /\ 2< p ==> ~(k=p-2 +i)`)
1933 MP_TAC(SET_RULE`IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)) SUBSET
1934 J1_SY s DELETE (k,1)
1935 /\ J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY s DELETE (k,1)
1936 ==> J1_SY s1 DELETE (p - 1,p) DELETE (p,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1))) SUBSET J1_SY (s:stable_sy) DELETE (k,1)`)
1938 THEN MRESAL_TAC SUM_DIFF[`(\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l)))`;`J1_SY(s:stable_sy) DELETE (k,1)`;`J1_SY (s1:stable_sy) DELETE (p-1,p:num) DELETE (p:num,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))`][FINITE_J1_SY;FINITE_DELETE]
1939 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1940 THEN MATCH_MP_TAC SUM_POS_LE
1942 MATCH_MP_TAC FINITE_DIFF
1943 THEN REWRITE_TAC[FINITE_J1_SY; FINITE_DELETE];
1945 THEN POP_ASSUM MP_TAC
1946 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG;DIFF;DELETE]
1948 THEN REMOVE_ASSUM_TAC
1949 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
1950 THEN POP_ASSUM MP_TAC
1951 THEN REAL_ARITH_TAC;
1952 MP_TAC(SET_RULE`~(p,1 IN J1_SY s1 DELETE (p - 1,p))
1953 ==> J1_SY (s1:stable_sy) DELETE (p - 1,p) = J1_SY s1 DELETE (p - 1,p) DELETE (p,1)`)
1955 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
1956 THEN SUBGOAL_THEN`J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY (s:stable_sy) DELETE (k,1)`ASSUME_TAC;
1957 MATCH_MP_TAC(SET_RULE`~(x IN A) /\ A SUBSET B==> A SUBSET B DELETE x`)
1958 THEN ASM_REWRITE_TAC[]
1959 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1960 THEN MATCH_MP_TAC(SET_RULE`~(x IN A) ==> ~(x IN A DELETE y)`)
1961 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;PAIR_EQ;IN_NUMSEG]
1963 THEN REMOVE_ASSUM_TAC
1964 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
1965 THEN POP_ASSUM MP_TAC
1966 THEN MP_TAC(ARITH_RULE`1<= k-p ==> ~(k<=p)`)
1968 ASM_REWRITE_TAC[REAL_ARITH`
1969 A1+ #0.1 * -- &1 * (C1+B) <=(A+ #0.1 * -- &1 *(C+B)) + D+ #0.1 * -- &1* E
1970 <=> A1+ #0.1 * -- &1 * (C1) <=(A+ #0.1 * -- &1 *(C)) + D+ #0.1 * -- &1* E
1972 THEN MATCH_MP_TAC(REAL_ARITH`
1973 A1<= A+D /\ &0<=C1-(C+E)
1975 A1+ #0.1 * -- &1 * (C1) <=(A+ #0.1 * -- &1 *(C)) + D+ #0.1 * -- &1* E`)
1977 FIND_ASSUM MP_TAC `COVER2_SY s s1 (s2:stable_sy)`
1978 THEN REWRITE_TAC[COVER2_SY]
1980 SUBGOAL_THEN`!x. x IN (J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))
1983 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P))) x
1984 = (\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product)))) x` ASSUME_TAC;
1985 ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;DELETE;IN_NUMSEG]
1986 THEN REPEAT STRIP_TAC
1987 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
1988 THEN POP_ASSUM MP_TAC
1989 THEN POP_ASSUM MP_TAC
1990 THEN ASM_REWRITE_TAC[]
1991 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
1993 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
1994 MP_TAC(ARITH_RULE`i< p /\ 2<p ==> i=p -1 \/ SUC i<p:num`)
1996 MP_TAC(ARITH_RULE`2<p ==> p-1< p /\ SUC (p-1)=p`)
1998 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
2001 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
2002 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2003 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2004 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2005 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
2007 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2009 MRESA_TAC SUM_EQ[`(\x. cstab -
2011 (row (FST x) ((pmat1 (vecmats (l:real^(M,3)finite_product)):real^3^P)) - row (SND x) ((pmat1 (vecmats l)):real^3^P)))`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`(J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1))`]
2013 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
2014 THEN ASM_REWRITE_TAC[]
2015 THEN REMOVE_ASSUM_TAC
2016 THEN REMOVE_ASSUM_TAC
2017 THEN SUBGOAL_THEN`!x. x IN (J1_SY (s3:stable_sy) DELETE (k - p + 2,1))
2019 ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
2020 (\(x,y). p - 2 + x,p - 2 + y)) x
2021 = (\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2))) x`
2023 ASM_REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM;o_DEF;IN_NUMSEG]
2024 THEN REPEAT STRIP_TAC
2025 THEN ASM_REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
2027 THEN REWRITE_TAC[VECMATS_MATVEC_ID;]
2028 THEN POP_ASSUM MP_TAC
2029 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i=k-p+2 \/ i<k-p+2:num`)
2031 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
2032 MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
2033 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2034 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
2036 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2037 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2038 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+2 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
2040 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2042 MRESA_TAC SUM_EQ[` ((\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l))) o
2043 (\(x,y). p - 2 + x,p - 2 + y))`;`(\x. cstab - norm (row (FST x) (vecmats (l2:real^(N,3)finite_product)) - row (SND x) (vecmats l2)))`;`(J1_SY (s3:stable_sy) DELETE (k - p + 2,1))`]
2044 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2045 THEN SUBGOAL_THEN`(!x y.
2046 x IN J1_SY s3 DELETE (k - p + 2,1) /\
2047 y IN J1_SY (s3:stable_sy) DELETE (k - p + 2,1) /\
2048 (\(x,y). p - 2 + x,p - 2 + y) x = (\(x,y). p - 2 + x,p - 2 + y) y
2049 ==> x = y)`ASSUME_TAC;
2050 REWRITE_TAC[J1_SY;DELETE;IN_ELIM_THM]
2051 THEN REPEAT STRIP_TAC
2052 THEN POP_ASSUM MP_TAC
2053 THEN ASM_REWRITE_TAC[PAIR_EQ;ARITH_RULE`p-2+B=p-2+C<=> B=C`];
2054 MRESA_TAC SUM_IMAGE[`(\(x,y). p - 2 + x,p - 2 + y)`;`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s3:stable_sy) DELETE (k - p + 2,1)`]
2055 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2056 THEN SUBGOAL_THEN`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1) INTER (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))={}` ASSUME_TAC;
2057 ASM_REWRITE_TAC[SET_RULE`A ={} <=> ~(?a. a IN A)`; INTER;IN_ELIM_THM;J1_SY;DELETE;IMAGE;IN_NUMSEG]
2059 THEN POP_ASSUM MP_TAC
2060 THEN ASM_REWRITE_TAC[PAIR_EQ]
2061 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i< p:num`)
2063 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2064 THEN REMOVE_ASSUM_TAC
2065 THEN REMOVE_ASSUM_TAC
2066 THEN REMOVE_ASSUM_TAC
2067 THEN REMOVE_ASSUM_TAC
2068 THEN REMOVE_ASSUM_TAC
2069 THEN POP_ASSUM MP_TAC
2070 THEN ASM_REWRITE_TAC[]
2071 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
2072 MP_TAC(ARITH_RULE`i<p /\ 2< p ==> i=p-1 \/ i< p-1:num`)
2074 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2075 THEN REMOVE_ASSUM_TAC
2076 THEN REMOVE_ASSUM_TAC
2077 THEN REMOVE_ASSUM_TAC
2078 THEN REMOVE_ASSUM_TAC
2079 THEN REMOVE_ASSUM_TAC
2080 THEN REMOVE_ASSUM_TAC
2081 THEN REMOVE_ASSUM_TAC
2082 THEN POP_ASSUM MP_TAC
2083 THEN ASM_REWRITE_TAC[]
2084 THEN MP_TAC(ARITH_RULE` 2< p ==> p-1< p:num/\ SUC (p-1)=p`)
2086 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
2087 MP_TAC(ARITH_RULE`1<= i /\ i< p-1 /\ 1<= i' ==> ~(i= p-2+i')`)
2089 MRESAL_TAC FINITE_IMAGE[`(\(x,y). p - 2 + x,p - 2 + y)`;`(J1_SY (s3:stable_sy) DELETE (k - p + 2,1))`][FINITE_J1_SY;FINITE_DELETE]
2090 THEN MRESAL_TAC (GEN_ALL SUM_UNION_EQ)[`(\x. cstab - norm (row (FST x) (vecmats l) - row (SND x) (vecmats (l:real^(M,3)finite_product))))`;`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1)`;`(IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY (s3:stable_sy) DELETE (k - p + 2,1)))`;`J1_SY (s1:stable_sy) DELETE (p - 1,p) DELETE (p,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY (s3:stable_sy) DELETE (k - p + 2,1)))`][FINITE_UNION;FINITE_DELETE;FINITE_J1_SY]
2091 THEN MP_TAC(SET_RULE`IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)) SUBSET
2093 /\ J1_SY s1 DELETE (p - 1,p) DELETE (p,1) SUBSET J1_SY s
2094 ==> J1_SY s1 DELETE (p - 1,p) DELETE (p,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1))) SUBSET J1_SY (s:stable_sy) `)
2096 THEN MRESAL_TAC SUM_DIFF[`(\x. cstab - norm (row (FST x) (vecmats (l:real^(M,3)finite_product)) - row (SND x) (vecmats l)))`;`J1_SY(s:stable_sy) `;`J1_SY (s1:stable_sy) DELETE (p-1,p:num) DELETE (p:num,1) UNION (IMAGE (\(x,y). p - 2 + x,p - 2 + y) (J1_SY s3 DELETE (k - p + 2,1)))`][FINITE_J1_SY;FINITE_DELETE]
2097 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2098 THEN MATCH_MP_TAC SUM_POS_LE
2100 MATCH_MP_TAC FINITE_DIFF
2101 THEN REWRITE_TAC[FINITE_J1_SY; FINITE_DELETE];
2103 THEN POP_ASSUM MP_TAC
2104 THEN ASM_REWRITE_TAC[J1_SY;IN_ELIM_THM;IN_NUMSEG;DIFF;DELETE]
2106 THEN REMOVE_ASSUM_TAC
2107 THEN MRESA_TAC (GEN_ALL B_SY_LE_CSTAB)[`i:num`;`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`;]
2108 THEN POP_ASSUM MP_TAC
2109 THEN REAL_ARITH_TAC]);;
2113 let F_SY_COVER_EQ=prove_by_refinement(`!(l:real^(M,3)finite_product)
2114 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2115 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2118 /\ matvec(pmat1(vecmats l))= l1
2119 /\ matvec(pmat2(vecmats l))= l2
2120 /\ (!i j. 1<= i /\ i<= dimindex (:M) /\ 1<= j /\ j<= dimindex (:M)
2121 /\ row i (vecmats l)= row j (vecmats l)
2123 ==> (F_SY(vecmats l1) DELETE (row (p-1) (vecmats l1), row p (vecmats l1))) UNION (F_SY(vecmats l2) DELETE (row (k-p+2) (vecmats l2), row 1 (vecmats l2))) = F_SY(vecmats l)`,
2125 THEN POP_ASSUM MP_TAC
2126 THEN DISCH_THEN(LABEL_TAC"THY")
2127 THEN REWRITE_TAC[F_SY;UNION;EXTENSION;IN_ELIM_THM;DELETE]
2128 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2129 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2130 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2131 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2132 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p `)
2138 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2139 THEN POP_ASSUM MP_TAC
2140 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i<p:num`)
2142 MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2143 THEN ASM_REWRITE_TAC[]
2144 THEN REMOVE_THEN "THY" MP_TAC
2145 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2146 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
2147 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2150 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2151 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
2153 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2154 DISCH_THEN(LABEL_TAC"THY")
2156 THEN EXISTS_TAC`k:num`
2157 THEN ASM_REWRITE_TAC[ARITH_RULE`k<=k`]
2158 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2160 MP_TAC(ARITH_RULE` i< p/\ 2<p ==> i= p-1 \/ SUC i< p`)
2162 MP_TAC(ARITH_RULE` 2< p ==> p-1< p:num /\ SUC(p-1)=p`)
2164 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
2165 MP_TAC(ARITH_RULE` i< p /\ 1<= k-p ==> i< k:num /\ i<=k`)
2167 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
2168 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
2170 THEN EXISTS_TAC`i:num`
2171 THEN ASM_REWRITE_TAC[]
2172 THEN REMOVE_THEN "THY" MP_TAC
2173 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2174 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2175 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2176 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
2178 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2181 THEN MP_TAC(ARITH_RULE`i <= k-p+2 ==> i=k-p+2 \/ i <k-p+2`)
2183 MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
2185 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2186 THEN REMOVE_THEN "THY" MP_TAC
2187 THEN SUBGOAL_THEN`row i ((pmat2 (vecmats l)):real^3^N) = row (p-2+i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2188 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
2190 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2191 SUBGOAL_THEN`row (SUC i) ((pmat2 (vecmats l)):real^3^N) = row (p-2+ SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2192 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k-p+2 ==> k - (k - p + 2) + SUC i= p-2+SUC i/\ 1<= SUC i /\ SUC i<= k-p+2`)
2194 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2195 MP_TAC(ARITH_RULE` i< k-p+2 /\ 1<= k-p /\ 2<p==> p-2+ i< k:num /\ p-2+i <=k/\ 1<= p-2+i/\ p-2+ SUC i= SUC(p-2+i)`)
2197 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
2198 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
2199 THEN DISCH_THEN(LABEL_TAC"THY")
2201 THEN EXISTS_TAC`p-2+i`
2202 THEN ASM_REWRITE_TAC[];
2203 DISJ_CASES_TAC(ARITH_RULE`i< p-1\/ p-1<= i`);
2204 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2205 THEN ASM_REWRITE_TAC[]
2206 THEN MP_TAC(ARITH_RULE`i<p-1 /\ 1<= k-p ==> i< k /\ i<= p /\ i<p /\ SUC i< p`)
2209 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2210 THEN REMOVE_THEN "THY" MP_TAC
2211 THEN SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2212 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2213 SUBGOAL_THEN`row (SUC i) ((pmat1 (vecmats l)):real^3^P) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2214 MP_TAC(ARITH_RULE`SUC i < p==> 1<= SUC i /\ SUC i <= p`)
2216 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2218 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
2219 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
2220 THEN DISCH_THEN(LABEL_TAC"THY")
2223 THEN ASM_REWRITE_TAC[];
2224 REMOVE_THEN "THY" MP_TAC
2225 THEN SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2226 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
2228 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2229 SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2230 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
2231 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2234 THEN DISCH_THEN(LABEL_TAC"THY")
2235 THEN ASM_REWRITE_TAC[PAIR_EQ]
2237 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p /\ i< p-1==> 1<= p-1 /\ p-1<= k /\ ~(i=p-1)`)
2239 THEN REMOVE_THEN"THY"(fun th-> MRESA_TAC th[`i:num`;`p-1`]);
2240 MP_TAC(ARITH_RULE`i<= k ==> i=k \/ i< k:num`)
2242 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2243 THEN MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2246 THEN ASM_REWRITE_TAC[]
2248 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2249 THEN REMOVE_THEN "THY" MP_TAC
2250 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2251 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
2252 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2255 THEN SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2256 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
2258 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2259 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2260 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`];
2261 REWRITE_TAC[PAIR_EQ]
2262 THEN REMOVE_THEN "THY" MP_TAC
2263 THEN SUBGOAL_THEN`row (p-1) ((pmat1 (vecmats l)):real^3^P) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2264 MP_TAC(ARITH_RULE`2< p ==> p-1 <= p /\ 1<= p-1/\ p-1<p`)
2266 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2267 DISCH_THEN(LABEL_TAC"THY")
2269 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2271 THEN REMOVE_THEN"THY"(fun th-> MRESA_TAC th[`k:num`;`p-1`])
2272 THEN POP_ASSUM MP_TAC
2273 THEN MP_TAC(ARITH_RULE`2< p /\ 1<= k-p ==> 1<= p-1 /\ ~(k=p-1)`)
2275 MATCH_MP_TAC(SET_RULE`A==> B\/A`)
2276 THEN ASM_REWRITE_TAC[]
2277 THEN MP_TAC(ARITH_RULE`p-1<= i /\ 2< p/\ i< k /\ 1<= k-p ==> 1<= i- (p-2) /\ i-(p-2)<= k-p+2/\ k - (k - p + 2) = p-2 /\ i-(p-2)< k- p+2/\ SUC (i - (p - 2))= SUC i - (p - 2)/\ k<=k`)
2280 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2281 THEN REMOVE_THEN "THY" MP_TAC
2282 THEN SUBGOAL_THEN`row (i-(p-2)) ((pmat2 (vecmats l)):real^3^N) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2283 MP_TAC(ARITH_RULE` 2<p /\ p-1<= i ==>
2286 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2287 SUBGOAL_THEN`row (SUC i -(p-2)) ((pmat2 (vecmats l)):real^3^N) = row (SUC i) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2288 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p/\ i< k /\ p-1<=i ==> p-2 + SUC i -(p-2)= SUC i/\ 1<= SUC i -(p-2) /\ SUC i - (p-2)<= k-p+2`)
2290 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2291 DISCH_THEN(LABEL_TAC"THY")
2294 THEN ASM_REWRITE_TAC[]
2295 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
2296 THEN MRESA_TAC MOD_LT[`i-(p-2):num`;`k-p+2:num`];
2299 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2300 THEN SUBGOAL_THEN`row (k-p+2) ((pmat2 (vecmats l)):real^3^N) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2301 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k-p+2<=k-p+2 /\ 1<= k-p+2 /\ k - (k - p + 2) + k - p + 2= k`)
2303 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2304 DISCH_THEN(LABEL_TAC"THY")
2305 THEN ASM_REWRITE_TAC[PAIR_EQ]
2307 THEN REMOVE_THEN"THY"(fun th->MRESA_TAC th[`i:num`;`k:num`])
2308 THEN MP_TAC(ARITH_RULE`i<k==> ~(i=k:num)`)
2312 let F_SY_COVER_INTER=prove_by_refinement(`!(l:real^(M,3)finite_product)
2313 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2314 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2317 /\ matvec(pmat1(vecmats l))= l1
2318 /\ matvec(pmat2(vecmats l))= l2
2319 /\ (!i j. 1<= i /\ i<= dimindex (:M) /\ 1<= j /\ j<= dimindex (:M)
2320 /\ row i (vecmats l)= row j (vecmats l)
2322 ==> (F_SY(vecmats l1) DELETE (row (p-1) (vecmats l1), row p (vecmats l1))) INTER (F_SY(vecmats l2) DELETE (row (k-p+2) (vecmats l2), row 1 (vecmats l2))) = {} `,
2324 THEN POP_ASSUM MP_TAC
2325 THEN DISCH_THEN(LABEL_TAC"THY")
2326 THEN REWRITE_TAC[F_SY;INTER;IN_ELIM_THM;DELETE;SET_RULE`A={}<=> ~(?a. a IN A)`]
2327 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2328 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2329 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2330 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2331 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p `)
2334 THEN POP_ASSUM MP_TAC
2335 THEN POP_ASSUM MP_TAC
2336 THEN DISCH_THEN(LABEL_TAC"THY1")
2338 THEN REMOVE_THEN "THY1"MP_TAC
2339 THEN ASM_REWRITE_TAC[PAIR_EQ]
2342 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2343 THEN REMOVE_THEN "THY" MP_TAC
2344 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2345 ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
2346 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2349 THEN SUBGOAL_THEN`row i' ((pmat2 (vecmats l)):real^3^N) = row (p-2+i') (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2350 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i'= p-2+i'`)
2352 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2354 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i<p:num`)
2356 DISCH_THEN(LABEL_TAC"THY")
2358 THEN POP_ASSUM MP_TAC
2359 THEN DISCH_THEN(LABEL_TAC"THY1")
2360 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=i' /\ 1<= k-p /\ i'<= k-p+2 ==> k<=k /\ 1<= p-2+i' /\ p-2+i'<=k/\ ~(i'=0)`)
2362 THEN REMOVE_THEN "THY"(fun th-> MRESA_TAC th[`k:num`;`p-2+i'`]
2363 THEN POP_ASSUM MP_TAC
2365 THEN DISCH_THEN(LABEL_TAC"THY"))
2367 THEN MP_TAC(ARITH_RULE`k = p - 2 + i'/\ 2<p /\ 1<= k-p ==> i'= k-p+2`)
2369 THEN POP_ASSUM MP_TAC
2370 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2372 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2373 THEN MRESAL_TAC MOD_MULT[`i':num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2374 THEN REMOVE_THEN"THY1"MP_TAC
2375 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC 0=1`]
2376 THEN REMOVE_THEN"THY" MP_TAC
2377 THEN SUBGOAL_THEN`row 1 ((pmat2 (vecmats l)):real^3^N) = row (p-1) (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2378 MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + 1= p-1/\ 1<=1 /\ 1<=k-p+2`)
2380 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ];
2381 SUBGOAL_THEN`row 1 ((pmat1 (vecmats l)):real^3^P) = row 1 (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2382 MP_TAC(ARITH_RULE`2<p==> 1<=1 /\ 1<p `)
2384 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2386 THEN DISCH_THEN(LABEL_TAC"THY")
2388 THEN REMOVE_THEN "THY"(fun th-> MRESA_TAC th[`1:num`;`p-1`] )
2389 THEN POP_ASSUM MP_TAC
2390 THEN MP_TAC(ARITH_RULE`2< p /\ 1<= k-p ==> 1<=1 /\ 1<= p-1 /\ p-1<=k /\ ~(1=p-1)`)
2392 SUBGOAL_THEN`row i ((pmat1 (vecmats l)):real^3^P) = row i (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC;
2393 ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2395 THEN DISCH_THEN(LABEL_TAC"THY")
2397 THEN POP_ASSUM MP_TAC
2398 THEN POP_ASSUM MP_TAC
2399 THEN POP_ASSUM MP_TAC
2400 THEN POP_ASSUM MP_TAC
2401 THEN POP_ASSUM MP_TAC
2402 THEN POP_ASSUM MP_TAC
2403 THEN POP_ASSUM MP_TAC
2404 THEN POP_ASSUM MP_TAC
2405 THEN POP_ASSUM MP_TAC
2406 THEN POP_ASSUM MP_TAC
2407 THEN POP_ASSUM MP_TAC
2408 THEN DISCH_THEN(LABEL_TAC"THY1")
2409 THEN REPEAT STRIP_TAC
2410 THEN POP_ASSUM MP_TAC
2411 THEN POP_ASSUM MP_TAC
2412 THEN POP_ASSUM MP_TAC
2413 THEN DISCH_THEN(LABEL_TAC"THY")
2416 THEN REMOVE_THEN "THY"(fun th-> MRESA_TAC th[`i:num`;`p-2+i'`] )
2417 THEN POP_ASSUM MP_TAC
2418 THEN MP_TAC(ARITH_RULE`i<p /\ 1<= k-p /\ 2< p /\ 1<=i'/\ i'<= k-p+2
2419 ==> i <= k /\ 1 <= p - 2 + i' /\ p - 2 + i' <= k /\ p-1<= p-2+i'`)
2421 THEN MP_TAC(ARITH_RULE`i<p /\ p-1<= p-2+i' /\ 2< p==> (i=p-1 /\ i'=1) \/ i< p-2+i'`)
2423 REMOVE_THEN"THY1"MP_TAC
2424 THEN ASM_REWRITE_TAC[]
2425 THEN MP_TAC(ARITH_RULE`i<p /\ p-1<= p-2+i' /\ 2< p==> p-1<p /\ SUC (p-1)=p`)
2427 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`];
2433 let ROW_IN_F_SY=prove(`! (l:real^(M,3)finite_product)
2434 (l1:real^(P,3)finite_product).
2437 /\ matvec(pmat1(vecmats l))= l1
2438 ==> (row (p - 1) (vecmats l1),row p (vecmats l1)) IN F_SY (vecmats l1)`,
2440 THEN ASM_REWRITE_TAC[F_SY;IN_ELIM_THM]
2441 THEN EXISTS_TAC`p-1`
2442 THEN ASM_REWRITE_TAC[]
2443 THEN MP_TAC(ARITH_RULE`2<p==> p-1<p /\ 1<= p-1 /\ p-1<=p/\ SUC(p-1)=p`)
2445 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]);;
2448 let PMAT2_EQ_SY=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2449 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2450 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2452 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2453 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2454 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2455 /\ (ear_sy s2 <=> ear_sy s3)
2457 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2458 /\ COVER_SY 0 (p-1) s s1 s2
2459 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2460 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2461 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2462 /\ matvec(pmat1(vecmats l))= l1
2463 /\ matvec(pmat2(vecmats l))= l2
2464 /\ 1<= i /\ i<= k-p+2
2465 ==> row i (vecmats l2) = row (p-2+i ) (vecmats l)`,
2467 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2468 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2469 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2470 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2471 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2473 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2474 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2475 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2476 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2477 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2479 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2480 THEN MP_TAC(ARITH_RULE`1<=k-p/\ 2<p ==> k - (k - p + 2) + i= p-2+i`)
2482 THEN ASM_SIMP_TAC[row;pmat2;LAMBDA_BETA;CART_EQ]);;
2484 let PMAT1_EQ_SY=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2485 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2486 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2488 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2489 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2490 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2491 /\ (ear_sy s2 <=> ear_sy s3)
2493 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2494 /\ COVER_SY 0 (p-1) s s1 s2
2495 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2496 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2497 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2498 /\ matvec(pmat1(vecmats l))= l1
2499 /\ matvec(pmat2(vecmats l))= l2
2501 ==> row i (vecmats l1) = row i (vecmats l)`,
2503 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2504 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2505 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2506 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2507 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2509 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2510 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2511 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2512 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2513 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2515 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2516 THEN MP_TAC(ARITH_RULE`i<=p-1/\ 2<p ==> i<= p /\ i< p`)
2518 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ]);;
2521 let PMAT1_EQ_SY_P=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2522 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2523 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2525 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2526 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2527 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2528 /\ (ear_sy s2 <=> ear_sy s3)
2530 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2531 /\ COVER_SY 0 (p-1) s s1 s2
2532 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2533 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2534 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2535 /\ matvec(pmat1(vecmats l))= l1
2536 /\ matvec(pmat2(vecmats l))= l2
2537 ==> row p (vecmats l1) = row k (vecmats l)`,
2539 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2540 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2541 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2542 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2543 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2545 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2546 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2547 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2548 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2549 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2551 THEN REWRITE_TAC[VECMATS_MATVEC_ID]
2552 THEN SUBGOAL_THEN`1<= p/\ p<= dimindex(:P)==> row p ((pmat1 (vecmats l)):real^3^P) = row k (vecmats (l:real^(M,3)finite_product))` ASSUME_TAC
2553 THENL[ASSUME_TAC(ARITH_RULE`p<=p /\ ~(p<p:num) `)
2554 THEN ASM_SIMP_TAC[row;pmat1;LAMBDA_BETA;CART_EQ];
2555 POP_ASSUM MATCH_MP_TAC
2556 THEN ASM_REWRITE_TAC[]]);;
2561 let POWER_RHO_NODE_SY= prove_by_refinement(`!i u (l:real^(M,3)finite_product). local_fan (V_SY (vecmats (l:real^(M,3)finite_product)),E_SY (vecmats l),F_SY (vecmats l))
2562 /\ 1<= i /\ i<= dimindex (:M)
2563 /\ row i (vecmats l)=u
2564 /\ row 1 (vecmats l)=v
2565 ==> ITER (i-1) (rho_node1 (F_SY (vecmats l))) v=u`,
2569 THEN DISCH_THEN(LABEL_TAC"THY")
2571 THEN DISJ_CASES_TAC(ARITH_RULE`i=0 \/ 1<=i`);
2572 ASM_REWRITE_TAC[ARITH_RULE`1-1=0/\ SUC 0=1`;ITER]
2574 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
2576 THEN MP_TAC(ARITH_RULE`1<=i /\ SUC i <= dimindex(:M) ==> SUC i- 1= SUC(i-1) /\ i<= dimindex(:M) /\ i< dimindex(:M)`)
2578 THEN REMOVE_THEN "THY"(fun th-> MRESA_TAC th[`row i (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`])
2579 THEN ASM_REWRITE_TAC[ITER]
2580 THEN MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
2581 THEN EXISTS_TAC`V_SY (vecmats (l:real^(M,3)finite_product))`
2582 THEN EXISTS_TAC`E_SY (vecmats (l:real^(M,3)finite_product))`
2583 THEN ASM_REWRITE_TAC[]
2584 THEN MATCH_MP_TAC EDGE_IN_F_SY
2585 THEN ASM_REWRITE_TAC[]
2586 THEN MRESA_TAC MOD_LT[`i:num`;`dimindex(:M)`]]);;
2588 let RHO_NODE_K_SY=prove(`!(l:real^(M,3)finite_product). local_fan (V_SY (vecmats (l:real^(M,3)finite_product)),E_SY (vecmats l),F_SY (vecmats l))
2590 /\ row k (vecmats l)=u
2591 /\ row 1 (vecmats l)=v
2592 ==> (rho_node1 (F_SY (vecmats l))) u=v`,
2594 THEN MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
2595 THEN EXISTS_TAC`V_SY (vecmats (l:real^(M,3)finite_product))`
2596 THEN EXISTS_TAC`E_SY (vecmats (l:real^(M,3)finite_product))`
2597 THEN ASM_REWRITE_TAC[]
2598 THEN MATCH_MP_TAC (GEN_ALL EDGE_IN_F_SY)
2599 THEN EXISTS_TAC`k:num`
2600 THEN ASM_REWRITE_TAC[]
2601 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2602 THEN MP_TAC(ARITH_RULE`1<=k==> k<=k /\ ~(k=0)/\ SUC 0=1`)
2604 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]);;
2607 let RHO_NODE_SY=prove(`!i (l:real^(M,3)finite_product). local_fan (V_SY (vecmats (l:real^(M,3)finite_product)),E_SY (vecmats l),F_SY (vecmats l))
2608 /\ 1<= i /\ i<= dimindex (:M)
2609 ==> (rho_node1 (F_SY (vecmats l))) (row i (vecmats l))=row (SUC (i MOD dimindex (:M))) (vecmats l)`,
2611 THEN MATCH_MP_TAC (GEN_ALL Local_lemmas.DETER_RHO_NODE)
2612 THEN EXISTS_TAC`V_SY (vecmats (l:real^(M,3)finite_product))`
2613 THEN EXISTS_TAC`E_SY (vecmats (l:real^(M,3)finite_product))`
2614 THEN ASM_REWRITE_TAC[]
2615 THEN MATCH_MP_TAC (GEN_ALL EDGE_IN_F_SY)
2616 THEN EXISTS_TAC`i:num`
2617 THEN ASM_REWRITE_TAC[]
2618 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2619 THEN MP_TAC(ARITH_RULE`1<=k==> k<=k /\ ~(k=0)/\ SUC 0=1`)
2621 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]);;
2624 let ORDER_COVER1_SY=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2625 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2626 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2628 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2629 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2630 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2631 /\ (ear_sy s2 <=> ear_sy s3)
2633 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2634 /\ COVER_SY 0 (p-1) s s1 s2
2635 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2636 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2637 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2638 /\ matvec(pmat1(vecmats l))= l1
2639 /\ matvec(pmat2(vecmats l))= l2
2640 /\ row k (vecmats l)= v
2641 /\ row (p-1) (vecmats l)= w
2642 ==> order (rho_node1 (F_SY (vecmats l))) v w = p-1`,
2643 REPEAT GEN_TAC THEN STRIP_TAC
2644 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2645 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2646 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2647 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2648 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2650 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2651 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2652 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2653 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2654 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2655 THEN MATCH_MP_TAC UNIQUE_ORDER
2656 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
2657 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
2659 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
2660 THEN POP_ASSUM MP_TAC
2661 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2663 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
2664 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p ==> 1<= p-1 /\ p-1<=k/\ p-1= SUC(p-1-1)`)
2666 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`p-1`;`w:real^3`;`l:real^(M,3)finite_product`]
2670 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
2671 THEN POP_ASSUM MP_TAC
2672 THEN DISCH_THEN(LABEL_TAC"THY")
2674 THEN REMOVE_THEN"THY"(fun th-> ONCE_REWRITE_TAC[th;])
2675 THEN REWRITE_TAC[POWER;o_DEF]
2676 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`];
2680 THEN POP_ASSUM MP_TAC
2681 THEN MP_TAC(ARITH_RULE`0<i /\ i< p-1 /\ 1<= k-p ==> 1<=i /\ i<=k/\ i= SUC(i-1)`)
2683 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`i:num`;`row i (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2684 THEN POP_ASSUM MP_TAC
2685 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
2686 THEN POP_ASSUM MP_TAC
2687 THEN DISCH_THEN(LABEL_TAC"THY")
2689 THEN REMOVE_THEN"THY"(fun th-> ONCE_REWRITE_TAC[th;])
2690 THEN REWRITE_TAC[POWER;o_DEF]
2691 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2693 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
2694 (1 <= j /\ j <= k) /\
2695 row i (vecmats l) = row j (vecmats l)
2696 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
2697 row i (vecmats l) = row j (vecmats l)`]
2698 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`p-1:num`])
2699 THEN MP_TAC(ARITH_RULE`i< p-1 ==> ~(i=p-1)`)
2702 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
2703 (1 <= j /\ j <= k) /\
2704 row i (vecmats l) = row j (vecmats l)
2705 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
2706 row i (vecmats l) = row j (vecmats l)`]
2707 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1:num`])
2708 THEN POP_ASSUM MP_TAC
2709 THEN MP_TAC(ARITH_RULE`1<= k-p ==> k<=k/\ ~(k=p-1)`)
2713 let SLICEV_EQ_V_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2714 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2715 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2717 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2718 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2719 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2720 /\ (ear_sy s2 <=> ear_sy s3)
2722 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2723 /\ COVER_SY 0 (p-1) s s1 s2
2724 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2725 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2726 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2727 /\ matvec(pmat1(vecmats l))= l1
2728 /\ matvec(pmat2(vecmats l))= l2
2729 /\ row k (vecmats l)= v
2730 /\ row (p-1) (vecmats l)= w
2731 ==> slicev (E_SY (vecmats l)) (F_SY (vecmats l)) v w = V_SY(vecmats l1)`,
2732 [REPEAT GEN_TAC THEN STRIP_TAC
2733 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2734 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2735 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2736 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2737 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2739 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2740 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2741 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2742 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2743 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2744 THEN REWRITE_TAC[slicev;V_SY;rows;IN_ELIM_THM;EXTENSION]
2745 THEN MRESA_TAC (GEN_ALL ORDER_COVER1_SY)[`k:num`;`v:real^3`;`w:real^3`;`p:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2746 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2750 THEN ASM_REWRITE_TAC[]
2751 THEN DISJ_CASES_TAC(ARITH_RULE`n=0 \/ 0< n`);
2752 ASM_REWRITE_TAC[ITER]
2753 THEN EXISTS_TAC`p:num`
2754 THEN ASM_REWRITE_TAC[]
2755 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2756 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2757 FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
2758 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
2760 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
2761 THEN POP_ASSUM MP_TAC
2762 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2764 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
2765 THEN MP_TAC(ARITH_RULE`0<n /\ n<= p-1 /\ 1<= k-p ==> 1<=n /\ n<=k/\ n<=p/\ n= SUC(n-1)`)
2767 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`n:num`;`row n (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2768 THEN POP_ASSUM MP_TAC
2769 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
2770 THEN POP_ASSUM MP_TAC
2771 THEN DISCH_THEN(LABEL_TAC"THY")
2773 THEN REMOVE_THEN"THY"(fun th-> ONCE_REWRITE_TAC[th;])
2774 THEN REWRITE_TAC[POWER;o_DEF]
2775 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2776 THEN EXISTS_TAC`n:num`
2777 THEN ASM_REWRITE_TAC[]
2778 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`n:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2779 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2781 THEN ASM_REWRITE_TAC[]
2782 THEN MP_TAC(ARITH_RULE`i<= p ==> i=p \/ i< p:num`)
2784 ASM_REWRITE_TAC[ITER]
2785 THEN EXISTS_TAC`0:num`
2786 THEN ASM_REWRITE_TAC[ITER;ARITH_RULE`0<=0`]
2787 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2788 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2789 THEN MP_TAC(ARITH_RULE`2<p==> 0<= p-1`)
2791 FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
2792 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
2794 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
2795 THEN POP_ASSUM MP_TAC
2796 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2798 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
2799 THEN EXISTS_TAC`i:num`
2800 THEN ASM_REWRITE_TAC[]
2801 THEN MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> 0<=i/\ 1<=i /\ i<=p-1/\ i<=k/\ i= SUC(i-1)`)
2803 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`i:num`;`row i (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2804 THEN POP_ASSUM MP_TAC
2805 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
2806 THEN POP_ASSUM MP_TAC
2807 THEN DISCH_THEN(LABEL_TAC"THY")
2809 THEN REMOVE_THEN"THY"(fun th-> ONCE_REWRITE_TAC[th;])
2810 THEN REWRITE_TAC[POWER;o_DEF]
2811 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2812 THEN MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> SUC(i-1)=i`)
2814 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2815 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]]);;
2818 let SLICEE_EQ_E_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2819 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2820 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2822 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2823 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2824 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2825 /\ (ear_sy s2 <=> ear_sy s3)
2827 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2828 /\ COVER_SY 0 (p-1) s s1 s2
2829 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2830 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2831 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2832 /\ matvec(pmat1(vecmats l))= l1
2833 /\ matvec(pmat2(vecmats l))= l2
2834 /\ row k (vecmats l)= v
2835 /\ row (p-1) (vecmats l)= w
2836 ==> slicee (E_SY (vecmats l)) (F_SY (vecmats l)) v w = E_SY(vecmats l1)`,
2837 [REPEAT GEN_TAC THEN STRIP_TAC
2838 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2839 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
2840 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
2841 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
2842 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
2844 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
2845 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
2846 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
2847 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
2848 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
2849 THEN REWRITE_TAC[EXTENSION;]
2850 THEN REWRITE_TAC[slicee;rows;IN_ELIM_THM;UNION;IN_SING]
2851 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2852 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2853 THEN ASM_REWRITE_TAC[V_SY;rows;E_SY;IN_ELIM_THM;DELETE]
2857 FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
2858 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
2860 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
2861 THEN POP_ASSUM MP_TAC
2862 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2864 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
2865 THEN MP_TAC(ARITH_RULE`2<p /\ i<=p /\ 1<= k-p ==> i<= k/\ 1<=1/\ 1<= p-1 `)
2867 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`i:num`;`l:real^(M,3)finite_product`]
2868 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i<p:num`)
2870 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2871 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2872 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2873 THEN EXISTS_TAC`p:num`
2874 THEN ASM_REWRITE_TAC[]
2875 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2876 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2877 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2878 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2879 MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> 0<=i/\ 1<=i /\ i<=p-1/\ i<k/\ i<=k/\ i= SUC(i-1)/\ 1<= SUC i`)
2881 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2882 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2883 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
2884 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
2885 THEN EXISTS_TAC`i:num`
2886 THEN ASM_REWRITE_TAC[]
2887 THEN MP_TAC(ARITH_RULE`i<p ==> i= p-1 \/ SUC i<= p-1`)
2889 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2891 THEN REPEAT RESA_TAC;
2892 MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`SUC(i):num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2893 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2895 THEN ASM_REWRITE_TAC[]
2896 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> p-1<= p/\ 1<=p-1/\ p-1<p /\SUC(p-1)=p /\ p-1<=p-1`)
2898 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
2899 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2900 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2901 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2902 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2904 THEN ASM_REWRITE_TAC[]
2905 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
2906 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
2908 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
2909 THEN POP_ASSUM MP_TAC
2910 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2912 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
2913 THEN MP_TAC(ARITH_RULE`2<p /\ i<=p /\ 1<= k-p ==> i<= k/\ 1<=1/\ 1<= p-1 `)
2915 THEN MP_TAC(ARITH_RULE`i<=p ==> i= p \/ i< p:num`)
2917 MATCH_MP_TAC (SET_RULE`A==> A\/B`)
2918 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2919 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2920 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2921 THEN EXISTS_TAC`v:real^3`
2922 THEN ASM_REWRITE_TAC[]
2923 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
2924 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
2925 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2926 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2929 THEN ASM_REWRITE_TAC[];
2931 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
2932 (1 <= j /\ j <= k) /\
2933 row i (vecmats l) = row j (vecmats l)
2934 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
2935 row i (vecmats l) = row j (vecmats l)`]
2936 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`k:num`])
2937 THEN POP_ASSUM MP_TAC
2938 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 2< p==> p-1<=k /\ k<=k /\ ~(p-1=k)`)
2940 MP_TAC(ARITH_RULE`i<p ==> i= p-1 \/ SUC i<= p-1`)
2942 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
2943 THEN MATCH_MP_TAC(SET_RULE`A==> B\/A`)
2944 THEN ASM_REWRITE_TAC[]
2945 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> p-1<= p/\ 1<=p-1/\ p-1<p /\SUC(p-1)=p /\ p-1<=p-1`)
2947 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
2948 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2949 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2950 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2951 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
2952 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2953 THEN MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> 0<=i/\ 1<=i /\ i<=p-1/\ i<k/\ i<=k/\ i= SUC(i-1)/\ 1<= SUC i`)
2955 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2956 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2957 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
2958 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
2959 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`SUC(i):num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
2960 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
2961 THEN EXISTS_TAC`row i (vecmats (l:real^(M,3)finite_product))`
2962 THEN ASM_REWRITE_TAC[]
2963 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`i:num`;`l:real^(M,3)finite_product`]
2966 THEN ASM_REWRITE_TAC[];
2968 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
2969 (1 <= j /\ j <= k) /\
2970 row i (vecmats l) = row j (vecmats l)
2971 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
2972 row i (vecmats l) = row j (vecmats l)`]
2973 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`i:num`])
2974 THEN POP_ASSUM MP_TAC
2975 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 2< p /\ SUC i<= p-1 ==> p-1<=k /\ ~(p-1=i)`)
2978 let SLICEF_EQ_F_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
2979 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
2980 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
2982 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
2983 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
2984 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
2985 /\ (ear_sy s2 <=> ear_sy s3)
2987 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
2988 /\ COVER_SY 0 (p-1) s s1 s2
2989 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
2990 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
2991 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
2992 /\ matvec(pmat1(vecmats l))= l1
2993 /\ matvec(pmat2(vecmats l))= l2
2994 /\ row k (vecmats l)= v
2995 /\ row (p-1) (vecmats l)= w
2996 ==> slicef (E_SY (vecmats l)) (F_SY (vecmats l)) v w = F_SY(vecmats l1)`,
2997 [REPEAT GEN_TAC THEN STRIP_TAC
2998 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
2999 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3000 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3001 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3002 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3004 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3005 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3006 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3007 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3008 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3009 THEN REWRITE_TAC[EXTENSION;]
3010 THEN REWRITE_TAC[slicef;rows;IN_ELIM_THM;UNION;IN_SING]
3011 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3012 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3013 THEN ASM_REWRITE_TAC[V_SY;rows;E_SY;IN_ELIM_THM;DELETE]
3017 ONCE_REWRITE_TAC[F_SY;]
3018 THEN REWRITE_TAC[IN_ELIM_THM]
3019 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3020 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3022 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3023 THEN POP_ASSUM MP_TAC
3024 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3026 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3027 THEN MP_TAC(ARITH_RULE`2<p /\ i<=p /\ 1<= k-p ==> i<= k/\ 1<=1/\ 1<= p-1 `)
3029 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`i:num`;`l:real^(M,3)finite_product`]
3030 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i<p:num`)
3032 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3033 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3034 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3035 THEN EXISTS_TAC`p:num`
3036 THEN ASM_REWRITE_TAC[]
3037 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3038 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3039 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3040 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3041 MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> 0<=i/\ 1<=i /\ i<=p-1/\ i<k/\ i<=k/\ i= SUC(i-1)/\ 1<= SUC i`)
3043 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3044 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3045 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
3046 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
3047 THEN EXISTS_TAC`i:num`
3048 THEN ASM_REWRITE_TAC[]
3049 THEN MP_TAC(ARITH_RULE`i<p ==> i= p-1 \/ SUC i<= p-1`)
3051 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3053 THEN REPEAT RESA_TAC;
3054 MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`SUC(i):num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3055 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3056 REWRITE_TAC[F_SY;IN_ELIM_THM]
3057 THEN ASM_REWRITE_TAC[]
3058 THEN EXISTS_TAC`p-1`
3059 THEN ASM_REWRITE_TAC[]
3060 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> p-1<= p/\ 1<=p-1/\ p-1<p /\SUC(p-1)=p /\ p-1<=p-1`)
3062 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
3063 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3064 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3065 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3066 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3067 GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[F_SY;IN_ELIM_THM]
3068 THEN ASM_REWRITE_TAC[]
3070 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3071 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3073 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3074 THEN POP_ASSUM MP_TAC
3075 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3077 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3078 THEN MP_TAC(ARITH_RULE`2<p /\ i<=p /\ 1<= k-p ==> i<= k/\ 1<=1/\ 1<= p-1 `)
3080 THEN MP_TAC(ARITH_RULE`i<=p ==> i= p \/ i< p:num`)
3082 MATCH_MP_TAC (SET_RULE`A==> A\/B`)
3083 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3084 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3085 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3086 THEN EXISTS_TAC`v:real^3`
3087 THEN ASM_REWRITE_TAC[]
3088 THEN MRESAL_TAC MOD_MULT[`p:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3089 THEN MRESA_TAC (GEN_ALL RHO_NODE_K_SY)[`k:num`;`v:real^3`;`row 1 (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3090 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3091 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3094 THEN ASM_REWRITE_TAC[];
3096 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3097 (1 <= j /\ j <= k) /\
3098 row i (vecmats l) = row j (vecmats l)
3099 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3100 row i (vecmats l) = row j (vecmats l)`]
3101 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`k:num`])
3102 THEN POP_ASSUM MP_TAC
3103 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 2< p==> p-1<=k /\ k<=k /\ ~(p-1=k)`)
3105 MP_TAC(ARITH_RULE`i<p ==> i= p-1 \/ SUC i<= p-1`)
3107 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3108 THEN MATCH_MP_TAC(SET_RULE`A==> B\/A`)
3109 THEN ASM_REWRITE_TAC[]
3110 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> p-1<= p/\ 1<=p-1/\ p-1<p /\SUC(p-1)=p /\ p-1<=p-1`)
3112 THEN MRESA_TAC MOD_LT[`p-1:num`;`p:num`]
3113 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3114 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3115 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3116 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3117 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
3118 THEN MP_TAC(ARITH_RULE`1<=i /\ i< p /\ 1<= k-p ==> 0<=i/\ 1<=i /\ i<=p-1/\ i<k/\ i<=k/\ i= SUC(i-1)/\ 1<= SUC i`)
3120 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3121 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3122 THEN MRESA_TAC MOD_LT[`i:num`;`k:num`]
3123 THEN MRESA_TAC MOD_LT[`i:num`;`p:num`]
3124 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`SUC(i):num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3125 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3126 THEN EXISTS_TAC`row i (vecmats (l:real^(M,3)finite_product))`
3127 THEN ASM_REWRITE_TAC[]
3128 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`i:num`;`l:real^(M,3)finite_product`]
3131 THEN ASM_REWRITE_TAC[];
3133 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3134 (1 <= j /\ j <= k) /\
3135 row i (vecmats l) = row j (vecmats l)
3136 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3137 row i (vecmats l) = row j (vecmats l)`]
3138 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`i:num`])
3139 THEN POP_ASSUM MP_TAC
3140 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 2< p /\ SUC i<= p-1 ==> p-1<=k /\ ~(p-1=i)`)
3143 let ORDER_COVER2_SY=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3144 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3145 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3147 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3148 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3149 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3150 /\ (ear_sy s2 <=> ear_sy s3)
3152 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3153 /\ COVER_SY 0 (p-1) s s1 s2
3154 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3155 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3156 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3157 /\ matvec(pmat1(vecmats l))= l1
3158 /\ matvec(pmat2(vecmats l))= l2
3159 /\ row k (vecmats l)= v
3160 /\ row (p-1) (vecmats l)= w
3161 ==> order (rho_node1 (F_SY (vecmats l))) w v = k-p+1`,
3162 REPEAT GEN_TAC THEN STRIP_TAC
3163 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3164 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3165 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3166 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3167 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3169 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3170 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3171 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3172 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3173 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3174 THEN MATCH_MP_TAC UNIQUE_ORDER
3175 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3176 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3178 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3179 THEN POP_ASSUM MP_TAC
3180 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3182 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3183 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p ==> 1<= p-1 /\ p-1<=k/\ p-1= SUC(p-1-1) /\ (k - p + 1) + p - 1 - 1 =k-1`)
3185 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`p-1`;`w:real^3`;`l:real^(M,3)finite_product`]
3187 THENL[POP_ASSUM MP_TAC
3188 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
3189 THEN POP_ASSUM MP_TAC
3190 THEN DISCH_THEN(LABEL_TAC"THY")
3192 THEN REWRITE_TAC[POWER;o_DEF]
3193 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;GSYM Hypermap.lemma_add_exponent_function])
3194 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`k:num`;`v:real^3`;`l:real^(M,3)finite_product`]
3195 THEN POP_ASSUM MP_TAC
3196 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
3198 THEN POP_ASSUM MATCH_MP_TAC
3203 THEN DISCH_THEN(LABEL_TAC"THY")
3204 THEN REPEAT STRIP_TAC
3205 THEN POP_ASSUM MP_TAC
3206 THEN MP_TAC(ARITH_RULE`0<i /\ i< k-p+1 /\ 1<= k-p/\ 2<p ==> 1<=i+p-1 /\ i+p-1<=k/\ i= SUC(i-1)/\ (i + p - 1) - 1 =i + p - 1 - 1`)
3208 THEN REMOVE_THEN"THY"(fun th-> ASM_REWRITE_TAC[SYM th;GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER;GSYM Hypermap.lemma_add_exponent_function])
3209 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`i+p-1:num`;`row (i+p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3210 THEN POP_ASSUM MP_TAC
3211 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
3214 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3215 (1 <= j /\ j <= k) /\
3216 row i (vecmats l) = row j (vecmats l)
3217 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3218 row i (vecmats l) = row j (vecmats l)`]
3219 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i+p-1:num`;`k:num`])
3220 THEN POP_ASSUM MP_TAC
3221 THEN MP_TAC(ARITH_RULE`i< k-p+1 /\2<p /\ 1<=k-p ==> ~(i+p-1=k) /\ k<=k`)
3224 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3225 (1 <= j /\ j <= k) /\
3226 row i (vecmats l) = row j (vecmats l)
3227 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3228 row i (vecmats l) = row j (vecmats l)`]
3229 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1:num`])
3230 THEN POP_ASSUM MP_TAC
3231 THEN MP_TAC(ARITH_RULE`1<= k-p ==> k<=k/\ ~(k=p-1)`)
3234 let SLICEV_EQ_V2_SY=prove(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3235 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3236 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3238 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3239 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3240 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3241 /\ (ear_sy s2 <=> ear_sy s3)
3243 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3244 /\ COVER_SY 0 (p-1) s s1 s2
3245 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3246 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3247 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3248 /\ matvec(pmat1(vecmats l))= l1
3249 /\ matvec(pmat2(vecmats l))= l2
3250 /\ row k (vecmats l)= v
3251 /\ row (p-1) (vecmats l)= w
3252 ==> slicev (E_SY (vecmats l)) (F_SY (vecmats l)) w v = V_SY(vecmats l2)`,
3253 REPEAT GEN_TAC THEN STRIP_TAC
3254 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3255 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3256 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3257 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3258 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3260 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3261 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3262 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3263 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3264 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3265 THEN REWRITE_TAC[slicev;V_SY;rows;IN_ELIM_THM;EXTENSION]
3266 THEN MRESA_TAC (GEN_ALL ORDER_COVER2_SY)[`w:real^3`;`v:real^3`;`k:num`;`p:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3267 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3272 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3273 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3275 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3276 THEN POP_ASSUM MP_TAC
3277 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3279 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3280 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 0<=n /\ n<= k-p+1 ==> 1<= p-1 /\ p-1<=k/\ p-1= SUC(p-1-1) /\ (k - p + 1) + p - 1 - 1 =k-1/\ 1<= n+p-1 /\ n+p-1<=k
3281 /\ (n+p-1)-1=n+p-1-1 /\ 1<= n+1 /\ n+1<= k-p+2/\ p-2+n+1=n+p-1`)
3283 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`p-1`;`w:real^3`;`l:real^(M,3)finite_product`]
3284 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER;GSYM Hypermap.lemma_add_exponent_function])
3285 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`n+p-1:num`;`row (n+p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3286 THEN POP_ASSUM MP_TAC
3287 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
3289 THEN EXISTS_TAC`n+1`
3290 THEN ASM_REWRITE_TAC[]
3291 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`n+1`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3292 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3294 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3295 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3296 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3297 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3299 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3300 THEN POP_ASSUM MP_TAC
3301 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3303 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3304 THEN EXISTS_TAC`i-1`
3305 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 1<=i /\ i<=k-p+2 ==> 0<= i-1 /\ i-1<=k-p+1/\ 1<= p-1 /\ p-1<=k/\ 1<=p-2+i /\ p-2+i<=k /\ (p - 2 + i) - 1=i - 1 + p - 1 - 1`)
3307 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`p-1`;`w:real^3`;`l:real^(M,3)finite_product`]
3308 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER;GSYM Hypermap.lemma_add_exponent_function])
3309 THEN MRESA_TAC(GEN_ALL POWER_RHO_NODE_SY)[`row 1 (vecmats (l:real^(M,3)finite_product))`;`p-2+i:num`;`row (p-2+i) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3310 THEN POP_ASSUM MP_TAC
3311 THEN REWRITE_TAC[GSYM Wrgcvdr_cizmrrh.POWER_TO_ITER]
3316 let SLICEE_EQ_E2_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3317 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3318 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3320 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3321 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3322 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3323 /\ (ear_sy s2 <=> ear_sy s3)
3325 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3326 /\ COVER_SY 0 (p-1) s s1 s2
3327 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3328 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3329 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3330 /\ matvec(pmat1(vecmats l))= l1
3331 /\ matvec(pmat2(vecmats l))= l2
3332 /\ row k (vecmats l)= v
3333 /\ row (p-1) (vecmats l)= w
3334 ==> slicee (E_SY (vecmats l)) (F_SY (vecmats l)) w v = E_SY(vecmats l2)`,
3335 [REPEAT GEN_TAC THEN STRIP_TAC
3336 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3337 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3338 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3339 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3340 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3342 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3343 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3344 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3345 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3346 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3347 THEN REWRITE_TAC[EXTENSION;]
3348 THEN REWRITE_TAC[slicee;rows;IN_ELIM_THM;UNION;IN_SING]
3349 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3350 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3351 THEN ASM_REWRITE_TAC[V_SY;rows;E_SY;IN_ELIM_THM;DELETE]
3356 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3357 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3358 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3359 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3361 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3362 THEN POP_ASSUM MP_TAC
3363 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3365 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3366 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 1<=i /\ i<=k-p+2 ==> 1<=p-2+i /\ p-2+i<=k `)
3368 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`p-2+i:num`;`l:real^(M,3)finite_product`]
3369 THEN EXISTS_TAC`i:num`
3370 THEN ASM_REWRITE_TAC[]
3371 THEN MP_TAC(ARITH_RULE`i<= k-p+2==> i= k-p+2 \/ i< k-p+2`)
3373 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3374 THEN REMOVE_ASSUM_TAC
3375 THEN REMOVE_ASSUM_TAC
3376 THEN REMOVE_ASSUM_TAC
3377 THEN REMOVE_ASSUM_TAC
3378 THEN REMOVE_ASSUM_TAC
3379 THEN REMOVE_ASSUM_TAC
3380 THEN REMOVE_ASSUM_TAC
3381 THEN POP_ASSUM MP_TAC
3382 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p ==> p-2+k-p+2=k`)
3385 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3386 THEN REMOVE_ASSUM_TAC
3387 THEN REMOVE_ASSUM_TAC
3388 THEN POP_ASSUM MP_TAC
3390 MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ i<k-p+2 ==> p-2+i<k /\ 1<= SUC i /\ SUC i<= k-p+2 /\ SUC (p - 2 + i) =p-2+ SUC i`)
3392 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
3393 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
3394 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`SUC i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3395 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3397 THEN EXISTS_TAC`k-p+2`
3398 THEN ASM_REWRITE_TAC[]
3399 THEN MP_TAC(ARITH_RULE`1<=k-p /\ 2<p==> p-2+k-p+2=k/\ k-p+2<=k-p+2/\ 1<=1/\ p-2+1=p-1`)
3401 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`k-p+2`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3402 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3403 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3404 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`1`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3405 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3407 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3408 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3409 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i= k-p+2 \/ i< k-p+2`)
3411 MATCH_MP_TAC(SET_RULE`A==> B\/A`)
3412 THEN MP_TAC(ARITH_RULE`1<=k-p /\ 2<p==> p-2+k-p+2=k/\ k-p+2<=k-p+2/\ 1<=1/\ p-2+1=p-1`)
3414 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3415 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`1`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3416 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3417 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
3418 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ i<k-p+2 ==> p-2+i<k /\ 1<= SUC i /\ SUC i<= k-p+2 /\ SUC (p - 2 + i) =p-2+ SUC i`)
3420 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
3421 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
3422 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`SUC i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3423 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3424 THEN EXISTS_TAC`row i (vecmats (l2:real^(N,3)finite_product))`
3425 THEN ASM_REWRITE_TAC[]
3426 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3427 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3429 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3430 THEN POP_ASSUM MP_TAC
3431 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3433 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3434 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 1<=i /\ i<=k-p+2 ==> 1<=p-2+i /\ p-2+i<=k `)
3436 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`p-2+i:num`;`l:real^(M,3)finite_product`]
3439 THEN ASM_REWRITE_TAC[];
3441 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3442 (1 <= j /\ j <= k) /\
3443 row i (vecmats l) = row j (vecmats l)
3444 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3445 row i (vecmats l) = row j (vecmats l)`]
3446 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-2+i:num`])
3447 THEN POP_ASSUM MP_TAC
3448 THEN MP_TAC(ARITH_RULE`1<= k-p/\ i< k-p+2 /\ 2<p ==> k<=k/\ ~(k=p-2+i)`)
3451 let SLICEF_EQ_F2_SY=prove_by_refinement(`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3452 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3453 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3455 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3456 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3457 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3458 /\ (ear_sy s2 <=> ear_sy s3)
3460 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3461 /\ COVER_SY 0 (p-1) s s1 s2
3462 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3463 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3464 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3465 /\ matvec(pmat1(vecmats l))= l1
3466 /\ matvec(pmat2(vecmats l))= l2
3467 /\ row k (vecmats l)= v
3468 /\ row (p-1) (vecmats l)= w
3469 ==> slicef (E_SY (vecmats l)) (F_SY (vecmats l)) w v = F_SY(vecmats l2)`,
3470 [REPEAT GEN_TAC THEN STRIP_TAC
3471 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3472 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3473 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3474 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3475 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3477 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3478 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3479 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3480 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3481 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3482 THEN REWRITE_TAC[EXTENSION;]
3483 THEN REWRITE_TAC[slicef;rows;IN_ELIM_THM;UNION;IN_SING]
3484 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3485 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3486 THEN ASM_REWRITE_TAC[V_SY;rows;IN_ELIM_THM;DELETE]
3490 REWRITE_TAC[F_SY;IN_ELIM_THM]
3491 THEN ASM_REWRITE_TAC[]
3492 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3493 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3494 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3495 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3497 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3498 THEN POP_ASSUM MP_TAC
3499 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3501 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3502 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 1<=i /\ i<=k-p+2 ==> 1<=p-2+i /\ p-2+i<=k `)
3504 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`p-2+i:num`;`l:real^(M,3)finite_product`]
3505 THEN EXISTS_TAC`i:num`
3506 THEN ASM_REWRITE_TAC[]
3507 THEN MP_TAC(ARITH_RULE`i<= k-p+2==> i= k-p+2 \/ i< k-p+2`)
3509 POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3510 THEN REMOVE_ASSUM_TAC
3511 THEN REMOVE_ASSUM_TAC
3512 THEN REMOVE_ASSUM_TAC
3513 THEN REMOVE_ASSUM_TAC
3514 THEN REMOVE_ASSUM_TAC
3515 THEN REMOVE_ASSUM_TAC
3516 THEN REMOVE_ASSUM_TAC
3517 THEN POP_ASSUM MP_TAC
3518 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p ==> p-2+k-p+2=k`)
3521 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(th))
3522 THEN REMOVE_ASSUM_TAC
3523 THEN REMOVE_ASSUM_TAC
3524 THEN POP_ASSUM MP_TAC
3526 MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ i<k-p+2 ==> p-2+i<k /\ 1<= SUC i /\ SUC i<= k-p+2 /\ SUC (p - 2 + i) =p-2+ SUC i`)
3528 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
3529 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
3530 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`SUC i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3531 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3532 REWRITE_TAC[F_SY;IN_ELIM_THM]
3533 THEN ASM_REWRITE_TAC[]
3534 THEN EXISTS_TAC`k-p+2`
3535 THEN ASM_REWRITE_TAC[]
3536 THEN MP_TAC(ARITH_RULE`1<=k-p /\ 2<p==> p-2+k-p+2=k/\ k-p+2<=k-p+2/\ 1<=1/\ p-2+1=p-1`)
3538 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`k-p+2`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3539 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3540 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3541 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`1`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3542 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3543 GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[F_SY;IN_ELIM_THM]
3545 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3546 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3547 THEN MP_TAC(ARITH_RULE`i<=k-p+2==> i= k-p+2 \/ i< k-p+2`)
3549 MATCH_MP_TAC(SET_RULE`A==> B\/A`)
3550 THEN MP_TAC(ARITH_RULE`1<=k-p /\ 2<p==> p-2+k-p+2=k/\ k-p+2<=k-p+2/\ 1<=1/\ p-2+1=p-1`)
3552 THEN MRESAL_TAC MOD_MULT[`k-p+2:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3553 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`1`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3554 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`];
3555 MATCH_MP_TAC(SET_RULE`A==> A\/B`)
3556 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ i<k-p+2 ==> p-2+i<k /\ 1<= SUC i /\ SUC i<= k-p+2 /\ SUC (p - 2 + i) =p-2+ SUC i`)
3558 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
3559 THEN MRESA_TAC MOD_LT[`i:num`;`k-p+2:num`]
3560 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`SUC i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3561 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3562 THEN EXISTS_TAC`row i (vecmats (l2:real^(N,3)finite_product))`
3563 THEN ASM_REWRITE_TAC[]
3564 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3565 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;]
3567 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3568 THEN POP_ASSUM MP_TAC
3569 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3571 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3572 THEN MP_TAC(ARITH_RULE`2<p /\ 1<=k-p /\ 1<=i /\ i<=k-p+2 ==> 1<=p-2+i /\ p-2+i<=k `)
3574 THEN MRESA_TAC (GEN_ALL RHO_NODE_SY)[`p-2+i:num`;`l:real^(M,3)finite_product`]
3577 THEN ASM_REWRITE_TAC[];
3579 THEN MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3580 (1 <= j /\ j <= k) /\
3581 row i (vecmats l) = row j (vecmats l)
3582 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3583 row i (vecmats l) = row j (vecmats l)`]
3584 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-2+i:num`])
3585 THEN POP_ASSUM MP_TAC
3586 THEN MP_TAC(ARITH_RULE`1<= k-p/\ i< k-p+2 /\ 2<p ==> k<=k/\ ~(k=p-2+i)`)
3592 let TAU_STAR_COVER_concl=`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3593 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3594 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3596 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3597 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3598 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3599 /\ (ear_sy s2 <=> ear_sy s3)
3601 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3602 /\ COVER_SY 0 (p-1) s s1 s2
3603 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3604 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3605 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3606 /\ matvec(pmat1(vecmats l))= l1
3607 /\ matvec(pmat2(vecmats l))= l2
3608 /\ row k (vecmats l)= v
3609 /\ row (p-1) (vecmats l)= w
3611 u IN {v, w} /\ u1 IN V_SY(vecmats l) /\ ~(u = u1)
3612 ==> ~collinear {vec 0, u, u1})
3613 ==> tau_star s1 l1 + tau_star s3 l2 <= tau_star s l`
3616 let TAU_STAR_COVER_concl2 = mk_imp (EJRCFJD_concl, TAU_STAR_COVER_concl);;
3624 let TAU_STAR_COVER=prove_by_refinement(TAU_STAR_COVER_concl2,
3625 [DISCH_THEN(LABEL_TAC"THY")
3626 THEN REPEAT STRIP_TAC
3627 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3628 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3629 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3630 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3631 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3633 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3634 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3635 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3636 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3637 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3638 THEN REWRITE_TAC[tau_star]
3639 THEN MRESA1_TAC stable_sy_lemma`s:stable_sy`
3640 THEN MP_TAC(ARITH_RULE` 2<p /\ 1<=k-p
3641 ==> p - 2 + k - p + 2= k/\ p-2+1=p-1 /\ 1<=p-1 /\ p-1<=k /\ p-1<k /\ ~(k=p-1)/\ k<=k`)
3643 THEN SUBGOAL_THEN`{v, w} SUBSET V_SY (vecmats (l:real^(M,3)finite_product))`ASSUME_TAC;
3644 MATCH_MP_TAC(SET_RULE`A IN C /\ B IN C==> {A,B}SUBSET C`)
3646 THEN ASM_REWRITE_TAC[IN_ELIM_THM;V_SY;rows];
3648 THEN ASM_REWRITE_TAC[]
3651 THEN ASM_REWRITE_TAC[];
3652 SUBGOAL_THEN`norm (v - w:real^3) <= cstab`ASSUME_TAC;
3653 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3654 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
3655 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`k:num`;`p-1`]th))`!i j.
3656 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
3657 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
3658 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
3659 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; SET_RULE`{0,p-1} IN J_SY s UNION {{0,p-1}}`])
3660 THEN ASM_REWRITE_TAC[];
3661 SUBGOAL_THEN`~({v, w} IN E_SY (vecmats (l:real^(M,3)finite_product)))`ASSUME_TAC;
3662 ASM_REWRITE_TAC[E_SY;IN_ELIM_THM]
3664 THEN POP_ASSUM MP_TAC
3665 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3666 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;local_fan]
3669 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3670 THEN POP_ASSUM MP_TAC
3671 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3673 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3674 THEN MRESA_TAC (GEN_ALL EDGE_IN_E_SY)[`i:num`;`row (i) (vecmats(l:real^(M,3)finite_product))`;`
3675 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`(l:real^(M,3)finite_product)`]
3676 THEN MRESA_TAC remark1_fan[`vec 0:real^3`;`V_SY (vecmats(l:real^(M,3)finite_product))`;`E_SY (vecmats (l:real^(M,3)finite_product))`;`
3677 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`row i (vecmats(l:real^(M,3)finite_product))`]
3678 THEN DISJ_CASES_TAC(SET_RULE`row k (vecmats l)= row (p - 1) (vecmats l)
3679 \/ ~(row k (vecmats l)= row (p - 1) (vecmats (l:real^(M,3)finite_product)))`);
3680 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3681 (1 <= j /\ j <= k) /\
3682 row i (vecmats l) = row j (vecmats l)
3683 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3684 row i (vecmats l) = row j (vecmats l)`]
3685 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1`])
3686 THEN POP_ASSUM MP_TAC
3687 THEN POP_ASSUM MP_TAC
3692 THEN SUBGOAL_THEN`1 <= SUC (i' MOD dimindex (:M)) /\
3693 SUC (i' MOD dimindex (:M)) <= dimindex (:M)` ASSUME_TAC;
3694 ASM_REWRITE_TAC[ARITH_RULE`1<= SUC a`]
3695 THEN MRESAL_TAC DIVISION[`i':num`;`dimindex (:M):num`][DIMINDEX_NONZERO]
3696 THEN POP_ASSUM MP_TAC
3700 THEN MP_TAC(SET_RULE`{row k (vecmats l), row (p - 1) (vecmats l)} =
3701 {row i (vecmats l), row (SUC (i MOD k)) (vecmats l)}
3702 /\ ~(row k (vecmats l) = row (p - 1) (vecmats l))
3703 /\ ~(row i (vecmats l) = row (SUC (i MOD k)) (vecmats l))
3704 ==> (row i (vecmats l) = row (k) (vecmats l)
3705 /\ row (p-1) (vecmats l) = row (SUC (i MOD k)) (vecmats l))
3706 \/ (row i (vecmats l) = row (p-1) (vecmats l)
3707 /\ row (k) (vecmats l) = row (SUC (i MOD k)) (vecmats (l:real^(M,3)finite_product)))`)
3709 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3710 (1 <= j /\ j <= k) /\
3711 row i (vecmats l) = row j (vecmats l)
3712 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3713 row i (vecmats l) = row j (vecmats l)`]
3714 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k:num`] THEN MRESA_TAC th[`p-1:num`;`SUC(i MOD k):num`])
3715 THEN POP_ASSUM MP_TAC
3716 THEN POP_ASSUM MP_TAC
3718 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3719 THEN MP_TAC(ARITH_RULE`2<p==> ~(p-1=1)/\ 1<=1`)
3721 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3722 (1 <= j /\ j <= k) /\
3723 row i (vecmats l) = row j (vecmats l)
3724 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3725 row i (vecmats l) = row j (vecmats l)`]
3726 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`p-1:num`] THEN MRESA_TAC th[`k:num`;`SUC(i MOD k):num`])
3727 THEN POP_ASSUM MP_TAC
3728 THEN POP_ASSUM MP_TAC
3730 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
3731 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> ~(k= SUC (p-1))/\ 1<= SUC(p-1)/\ SUC(p-1)<=k`)
3733 MRESA_TAC (GEN_ALL PROPERTIES_OF_FAN_IN_B_SY)[`d_sy (s:stable_sy)`;`J_SY (s:stable_sy)`;`k_sy (s:stable_sy)`;`k:num`;`p-1:num`;`a_sy (s:stable_sy)`;`b_sy (s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3734 THEN MRESAL_TAC(GEN_ALL TECOXBM1)[`d_sy (s:stable_sy)`;`J_SY(s:stable_sy)`;`k:num`;`a_sy(s:stable_sy)`;`b_sy(s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`][SET_RULE`{A} UNION {B,C}={A,B,C}`]
3735 THEN MP_TAC(SET_RULE`{v, w} SUBSET V_SY (vecmats l)==> v IN V_SY (vecmats l)
3736 /\ w IN V_SY (vecmats (l:real^(M,3)finite_product))`)
3738 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3739 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;]
3741 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3742 THEN POP_ASSUM MP_TAC
3743 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3745 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3746 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3747 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3748 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3749 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3750 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3751 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3752 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3753 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3754 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3755 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3756 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3757 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3758 THEN REMOVE_THEN"THY"(fun th-> MRESA_TAC th[`V_SY(vecmats (l:real^(M,3)finite_product))`;`E_SY(vecmats (l:real^(M,3)finite_product))`;`F_SY(vecmats (l:real^(M,3)finite_product))`;
3759 `v:real^3`;`w:real^3`])
3760 THEN MRESA_TAC(GEN_ALL D_FUN_COVER_SY)[`k:num`;`p:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3761 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3762 THEN POP_ASSUM MP_TAC
3763 THEN REMOVE_ASSUM_TAC
3764 THEN REMOVE_ASSUM_TAC
3765 THEN REMOVE_ASSUM_TAC
3766 THEN REMOVE_ASSUM_TAC
3767 THEN POP_ASSUM MP_TAC
3768 THEN REAL_ARITH_TAC]);;
3772 let IN_B_SY_COVER_concl=`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
3773 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
3774 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
3776 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
3777 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
3778 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
3779 /\ (ear_sy s2 <=> ear_sy s3)
3781 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
3782 /\ COVER_SY 0 (p-1) s s1 s2
3783 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
3784 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
3785 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
3786 /\ matvec(pmat1(vecmats l))= l1
3787 /\ matvec(pmat2(vecmats l))= l2
3788 /\ row k (vecmats l)= v
3789 /\ row (p-1) (vecmats l)= w
3791 u IN {v, w} /\ u1 IN V_SY(vecmats l) /\ ~(u = u1)
3792 ==> ~collinear {vec 0, u, u1})
3793 /\ norm(v-w)<= min (b_sy s1 (p-1,0)) (b_sy s2 (p-1,0))
3794 ==> l1 IN (B_SY1 (a_sy s1) (b_sy s1))`;;
3797 let IN_B_SY_COVER_concl2 = mk_imp (EJRCFJD_concl, IN_B_SY_COVER_concl);;
3803 let IN_B_SY_COVER=prove_by_refinement(IN_B_SY_COVER_concl2,
3804 [DISCH_THEN(LABEL_TAC"THY")
3805 THEN REPEAT STRIP_TAC
3806 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
3807 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
3808 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
3809 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
3810 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
3812 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
3813 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
3814 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
3815 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
3816 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
3817 THEN REWRITE_TAC[tau_star]
3818 THEN MRESA1_TAC stable_sy_lemma`s:stable_sy`
3819 THEN MP_TAC(ARITH_RULE` 2<p /\ 1<=k-p
3820 ==> p - 2 + k - p + 2= k/\ p-2+1=p-1 /\ 1<=p-1 /\ p-1<=k /\ p-1<k /\ ~(k=p-1)/\ k<=k`)
3822 THEN SUBGOAL_THEN`{v, w} SUBSET V_SY (vecmats (l:real^(M,3)finite_product))`ASSUME_TAC;
3823 MATCH_MP_TAC(SET_RULE`A IN C /\ B IN C==> {A,B}SUBSET C`)
3825 THEN ASM_REWRITE_TAC[IN_ELIM_THM;V_SY;rows];
3827 THEN ASM_REWRITE_TAC[]
3830 THEN ASM_REWRITE_TAC[];
3831 SUBGOAL_THEN`norm (v - w:real^3) <= cstab`ASSUME_TAC;
3832 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3833 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
3834 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`k:num`;`p-1`]th))`!i j.
3835 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
3836 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
3837 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
3838 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; SET_RULE`{0,p-1} IN J_SY s UNION {{0,p-1}}`])
3839 THEN ASM_REWRITE_TAC[];
3840 SUBGOAL_THEN`~({v, w} IN E_SY (vecmats (l:real^(M,3)finite_product)))`ASSUME_TAC;
3841 ASM_REWRITE_TAC[E_SY;IN_ELIM_THM]
3843 THEN POP_ASSUM MP_TAC
3844 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3845 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;local_fan]
3848 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3849 THEN POP_ASSUM MP_TAC
3850 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3852 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3853 THEN MRESA_TAC (GEN_ALL EDGE_IN_E_SY)[`i:num`;`row (i) (vecmats(l:real^(M,3)finite_product))`;`
3854 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`(l:real^(M,3)finite_product)`]
3855 THEN MRESA_TAC remark1_fan[`vec 0:real^3`;`V_SY (vecmats(l:real^(M,3)finite_product))`;`E_SY (vecmats (l:real^(M,3)finite_product))`;`
3856 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`row i (vecmats(l:real^(M,3)finite_product))`]
3857 THEN DISJ_CASES_TAC(SET_RULE`row k (vecmats l)= row (p - 1) (vecmats l)
3858 \/ ~(row k (vecmats l)= row (p - 1) (vecmats (l:real^(M,3)finite_product)))`);
3859 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3860 (1 <= j /\ j <= k) /\
3861 row i (vecmats l) = row j (vecmats l)
3862 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3863 row i (vecmats l) = row j (vecmats l)`]
3864 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1`])
3865 THEN POP_ASSUM MP_TAC
3866 THEN POP_ASSUM MP_TAC
3871 THEN SUBGOAL_THEN`1 <= SUC (i' MOD dimindex (:M)) /\
3872 SUC (i' MOD dimindex (:M)) <= dimindex (:M)` ASSUME_TAC;
3873 ASM_REWRITE_TAC[ARITH_RULE`1<= SUC a`]
3874 THEN MRESAL_TAC DIVISION[`i':num`;`dimindex (:M):num`][DIMINDEX_NONZERO]
3875 THEN POP_ASSUM MP_TAC
3879 THEN MP_TAC(SET_RULE`{row k (vecmats l), row (p - 1) (vecmats l)} =
3880 {row i (vecmats l), row (SUC (i MOD k)) (vecmats l)}
3881 /\ ~(row k (vecmats l) = row (p - 1) (vecmats l))
3882 /\ ~(row i (vecmats l) = row (SUC (i MOD k)) (vecmats l))
3883 ==> (row i (vecmats l) = row (k) (vecmats l)
3884 /\ row (p-1) (vecmats l) = row (SUC (i MOD k)) (vecmats l))
3885 \/ (row i (vecmats l) = row (p-1) (vecmats l)
3886 /\ row (k) (vecmats l) = row (SUC (i MOD k)) (vecmats (l:real^(M,3)finite_product)))`)
3888 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3889 (1 <= j /\ j <= k) /\
3890 row i (vecmats l) = row j (vecmats l)
3891 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3892 row i (vecmats l) = row j (vecmats l)`]
3893 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k:num`] THEN MRESA_TAC th[`p-1:num`;`SUC(i MOD k):num`])
3894 THEN POP_ASSUM MP_TAC
3895 THEN POP_ASSUM MP_TAC
3897 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
3898 THEN MP_TAC(ARITH_RULE`2<p==> ~(p-1=1)/\ 1<=1`)
3900 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
3901 (1 <= j /\ j <= k) /\
3902 row i (vecmats l) = row j (vecmats l)
3903 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
3904 row i (vecmats l) = row j (vecmats l)`]
3905 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`p-1:num`] THEN MRESA_TAC th[`k:num`;`SUC(i MOD k):num`])
3906 THEN POP_ASSUM MP_TAC
3907 THEN POP_ASSUM MP_TAC
3909 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
3910 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> ~(k= SUC (p-1))/\ 1<= SUC(p-1)/\ SUC(p-1)<=k`)
3912 MRESA_TAC (GEN_ALL PROPERTIES_OF_FAN_IN_B_SY)[`d_sy (s:stable_sy)`;`J_SY (s:stable_sy)`;`k_sy (s:stable_sy)`;`k:num`;`p-1:num`;`a_sy (s:stable_sy)`;`b_sy (s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
3913 THEN MRESAL_TAC(GEN_ALL TECOXBM1)[`d_sy (s:stable_sy)`;`J_SY(s:stable_sy)`;`k:num`;`a_sy(s:stable_sy)`;`b_sy(s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`][SET_RULE`{A} UNION {B,C}={A,B,C}`]
3914 THEN MP_TAC(SET_RULE`{v, w} SUBSET V_SY (vecmats l)==> v IN V_SY (vecmats l)
3915 /\ w IN V_SY (vecmats (l:real^(M,3)finite_product))`)
3917 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3918 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3919 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3920 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3921 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3922 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3923 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3924 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3925 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3926 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3927 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3928 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3929 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
3930 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;]
3932 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
3933 THEN POP_ASSUM MP_TAC
3934 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3936 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
3937 THEN REMOVE_THEN"THY"(fun th-> MRESA_TAC th[`V_SY(vecmats (l:real^(M,3)finite_product))`;`E_SY(vecmats (l:real^(M,3)finite_product))`;`F_SY(vecmats (l:real^(M,3)finite_product))`;
3938 `v:real^3`;`w:real^3`])
3939 THEN EXISTS_TAC`vecmats(l1:real^(P,3)finite_product)`
3940 THEN ASM_REWRITE_TAC[MATVEC_VECMATS_ID]
3943 THEN MP_TAC(ARITH_RULE`i<=p ==> i=p \/ i<= p-1:num`)
3945 MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3946 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3947 THEN REMOVE_ASSUM_TAC
3948 THEN REMOVE_ASSUM_TAC
3949 THEN REMOVE_ASSUM_TAC
3950 THEN REMOVE_ASSUM_TAC
3951 THEN REMOVE_ASSUM_TAC
3952 THEN REMOVE_ASSUM_TAC
3953 THEN REMOVE_ASSUM_TAC
3954 THEN REMOVE_ASSUM_TAC
3955 THEN REMOVE_ASSUM_TAC
3956 THEN REMOVE_ASSUM_TAC
3957 THEN REMOVE_ASSUM_TAC
3958 THEN REMOVE_ASSUM_TAC
3959 THEN REMOVE_ASSUM_TAC
3960 THEN POP_ASSUM (fun th-> MRESA1_TAC th`k:num`);
3961 MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
3962 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
3963 THEN REMOVE_ASSUM_TAC
3964 THEN REMOVE_ASSUM_TAC
3965 THEN POP_ASSUM MP_TAC
3966 THEN POP_ASSUM MP_TAC
3967 THEN REMOVE_ASSUM_TAC
3968 THEN REMOVE_ASSUM_TAC
3969 THEN REMOVE_ASSUM_TAC
3970 THEN REMOVE_ASSUM_TAC
3971 THEN REMOVE_ASSUM_TAC
3972 THEN REMOVE_ASSUM_TAC
3973 THEN REMOVE_ASSUM_TAC
3974 THEN REMOVE_ASSUM_TAC
3975 THEN REMOVE_ASSUM_TAC
3976 THEN POP_ASSUM (fun th-> MRESA1_TAC th`i:num`)
3977 THEN POP_ASSUM MP_TAC
3978 THEN DISCH_THEN(LABEL_TAC"MA")
3981 THEN REMOVE_THEN"MA" MATCH_MP_TAC
3982 THEN ASM_REWRITE_TAC[]
3983 THEN MP_TAC(ARITH_RULE`i<=p /\1<=k-p ==> i<=k`)
3985 ASM_REWRITE_TAC[CONDITION1_SY]
3986 THEN FIND_ASSUM MP_TAC`COVER_SY 0 (p - 1) s s1 (s2:stable_sy)`
3987 THEN REWRITE_TAC[COVER_SY;COVER5_SY;COVER4_SY;]
3989 THEN REMOVE_ASSUM_TAC
3990 THEN POP_ASSUM MP_TAC
3991 THEN POP_ASSUM MP_TAC
3992 THEN POP_ASSUM MP_TAC
3993 THEN POP_ASSUM MP_TAC
3994 THEN POP_ASSUM MP_TAC
3995 THEN POP_ASSUM MP_TAC
3996 THEN DISCH_THEN(LABEL_TAC"THYGIANG")
3997 THEN DISCH_THEN(LABEL_TAC"THYGIANG1")
3998 THEN DISCH_THEN(LABEL_TAC"THYGIANG2")
3999 THEN DISCH_THEN(LABEL_TAC"THYGIANG3")
4000 THEN DISCH_THEN(LABEL_TAC"THYGIANG4")
4001 THEN DISCH_THEN(LABEL_TAC"THYGIANG5")
4004 MP_TAC(ARITH_RULE`i<=p==> i=p \/ i<p :num`)
4006 MP_TAC(ARITH_RULE`j<=p==> j=p \/ j<p :num`)
4008 MP_TAC(ARITH_RULE`2<p/\ 2<k ==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1`)
4010 THEN MP_TAC(SET_RULE`~(0= p-1)==> ~({0,0}= {0,p-1})`)
4012 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`0:num`;`0:num`][IN_NUMSEG])
4013 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4014 THEN REMOVE_ASSUM_TAC
4015 THEN REMOVE_ASSUM_TAC
4016 THEN REMOVE_ASSUM_TAC
4017 THEN POP_ASSUM MP_TAC
4018 THEN REWRITE_TAC[constraint_system]
4020 THEN REMOVE_ASSUM_TAC
4021 THEN REMOVE_ASSUM_TAC
4022 THEN POP_ASSUM (fun th-> MRESA_TAC th[`0:num`;`p:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4023 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`p:num`;`p:num`;`p:num`]
4024 THEN MRESAL_TAC MOD_MULT[`p:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4025 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4026 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4027 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4028 THEN REMOVE_ASSUM_TAC
4029 THEN POP_ASSUM(fun th-> MRESA1_TAC th`0`)
4030 THEN REWRITE_TAC[VECTOR_ARITH`A-A= vec 0`;NORM_0;REAL_ARITH`&0<= &0`]
4031 THEN REMOVE_ASSUM_TAC
4032 THEN POP_ASSUM MP_TAC
4033 THEN REMOVE_ASSUM_TAC
4034 THEN POP_ASSUM MP_TAC
4035 THEN REWRITE_TAC[constraint_system]
4037 THEN REMOVE_ASSUM_TAC
4038 THEN REMOVE_ASSUM_TAC
4039 THEN REMOVE_ASSUM_TAC
4040 THEN POP_ASSUM(fun th-> MRESA_TAC th[`0`;`0`])
4042 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th]);
4043 MP_TAC(ARITH_RULE`j<p /\ 2<p ==> j=p-1 \/ j<p-1 :num`)
4045 MP_TAC(ARITH_RULE`2<p/\ 2<k ==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1/\ p-1<=p-1/\ 1<k`)
4047 THEN MP_TAC(SET_RULE`~(0= p-1)==> ~({0,0}= {0,p-1})`)
4049 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4050 THEN REMOVE_ASSUM_TAC
4051 THEN REMOVE_ASSUM_TAC
4052 THEN REMOVE_ASSUM_TAC
4053 THEN POP_ASSUM MP_TAC
4054 THEN REWRITE_TAC[constraint_system]
4056 THEN REMOVE_ASSUM_TAC
4057 THEN REMOVE_ASSUM_TAC
4058 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`p:num`] )
4059 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`p:num`;`p:num`;`p:num`]
4060 THEN MRESAL_TAC MOD_MULT[`p:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4061 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4062 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4063 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4064 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4065 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4066 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4068 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4069 THEN POP_ASSUM MP_TAC
4070 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4072 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4073 THEN REMOVE_ASSUM_TAC
4074 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1`])
4075 THEN POP_ASSUM MP_TAC
4076 THEN POP_ASSUM MP_TAC
4077 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4078 THEN REMOVE_ASSUM_TAC
4079 THEN REMOVE_ASSUM_TAC
4080 THEN REMOVE_ASSUM_TAC
4081 THEN POP_ASSUM MP_TAC
4082 THEN REWRITE_TAC[constraint_system]
4084 THEN REMOVE_ASSUM_TAC
4085 THEN REMOVE_ASSUM_TAC
4086 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`k:num`] )
4087 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4088 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4089 THEN REMOVE_THEN"THYGIANG2"MP_TAC
4090 THEN ASM_REWRITE_TAC[]
4091 THEN REPEAT STRIP_TAC;
4093 THEN POP_ASSUM MP_TAC
4094 THEN POP_ASSUM MP_TAC
4095 THEN REAL_ARITH_TAC;
4096 FIND_ASSUM MP_TAC`norm (v - w:real^3) <= min (b_sy s1 (p - 1,0)) (b_sy s2 (p - 1,0))`
4097 THEN REAL_ARITH_TAC;
4098 MP_TAC(ARITH_RULE`2<p/\ 2<k /\ j< p-1 /\ 1<= k-p==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1 /\ ~(j=p-1) /\ 0<=j /\ j<=p-1 /\ j<=k /\ 1<k`)
4100 THEN MP_TAC(SET_RULE`~(0= p-1)/\ ~(j=p-1)==> ~({0,j}= {0,p-1})`)
4102 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`0:num`;`j:num`][IN_NUMSEG])
4103 THEN POP_ASSUM MP_TAC
4104 THEN POP_ASSUM MP_TAC
4105 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4106 THEN REMOVE_ASSUM_TAC
4107 THEN REMOVE_ASSUM_TAC
4108 THEN REMOVE_ASSUM_TAC
4109 THEN POP_ASSUM MP_TAC
4110 THEN REWRITE_TAC[constraint_system]
4112 THEN REMOVE_ASSUM_TAC
4113 THEN REMOVE_ASSUM_TAC
4114 THEN POP_ASSUM (fun th-> MRESA_TAC th[`j:num`;`p:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4115 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`p:num`;`p:num`;`p:num`]
4116 THEN MRESAL_TAC MOD_MULT[`p:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4119 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4120 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4121 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`j:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4122 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4123 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4124 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4126 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4127 THEN POP_ASSUM MP_TAC
4128 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4130 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4131 THEN REMOVE_ASSUM_TAC
4132 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`j:num`])
4133 THEN POP_ASSUM MP_TAC
4134 THEN POP_ASSUM MP_TAC
4135 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4136 THEN REMOVE_ASSUM_TAC
4137 THEN REMOVE_ASSUM_TAC
4138 THEN REMOVE_ASSUM_TAC
4139 THEN POP_ASSUM MP_TAC
4140 THEN REWRITE_TAC[constraint_system]
4142 THEN REMOVE_ASSUM_TAC
4143 THEN REMOVE_ASSUM_TAC
4144 THEN POP_ASSUM (fun th-> MRESA_TAC th[`j:num`;`k:num`] )
4145 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4146 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4149 MP_TAC(ARITH_RULE`i<p /\ 2<p ==> i=p-1 \/ i<p-1 :num`)
4151 MP_TAC(ARITH_RULE`j<=p ==> j=p \/ j<p :num`)
4153 MP_TAC(ARITH_RULE`2<p/\ 2<k ==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1/\ p-1<=p-1/\ 1<k`)
4155 THEN MP_TAC(SET_RULE`~(0= p-1)==> ~({0,0}= {0,p-1})`)
4157 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4158 THEN REMOVE_ASSUM_TAC
4159 THEN REMOVE_ASSUM_TAC
4160 THEN REMOVE_ASSUM_TAC
4161 THEN POP_ASSUM MP_TAC
4162 THEN REWRITE_TAC[constraint_system]
4164 THEN REMOVE_ASSUM_TAC
4165 THEN REMOVE_ASSUM_TAC
4166 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`p:num`] )
4167 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`p:num`;`p:num`;`p:num`]
4168 THEN MRESAL_TAC MOD_MULT[`p:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4169 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4170 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4171 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4172 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4173 THEN ONCE_REWRITE_TAC[NORM_SUB]
4174 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4175 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4177 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4178 THEN POP_ASSUM MP_TAC
4179 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4181 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4182 THEN REMOVE_ASSUM_TAC
4183 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1`])
4184 THEN REMOVE_ASSUM_TAC
4185 THEN POP_ASSUM MP_TAC
4186 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4187 THEN REMOVE_ASSUM_TAC
4188 THEN REMOVE_ASSUM_TAC
4189 THEN REMOVE_ASSUM_TAC
4190 THEN POP_ASSUM MP_TAC
4191 THEN REWRITE_TAC[constraint_system]
4193 THEN REMOVE_ASSUM_TAC
4194 THEN REMOVE_ASSUM_TAC
4195 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`k:num`] )
4196 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4197 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4198 THEN REMOVE_THEN"THYGIANG2"MP_TAC
4199 THEN ASM_REWRITE_TAC[]
4200 THEN FIND_ASSUM MP_TAC`norm (v - w:real^3) <= min (b_sy s1 (p - 1,0)) (b_sy s2 (p - 1,0))`
4201 THEN REAL_ARITH_TAC;
4202 MP_TAC(ARITH_RULE`j<p /\ 2< p ==> j=p-1 \/ j<p-1 :num`)
4204 MP_TAC(ARITH_RULE` 2< p ==> p-1<=p-1 `)
4206 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4207 THEN REMOVE_ASSUM_TAC
4208 THEN POP_ASSUM(fun th-> MRESA1_TAC th`p-1` )
4209 THEN REWRITE_TAC[VECTOR_ARITH`A-A:real^3= vec 0`;NORM_0]
4210 THEN REMOVE_ASSUM_TAC
4211 THEN POP_ASSUM MP_TAC
4212 THEN REMOVE_ASSUM_TAC
4213 THEN POP_ASSUM MP_TAC
4214 THEN REWRITE_TAC[constraint_system]
4216 THEN REMOVE_ASSUM_TAC
4217 THEN REMOVE_ASSUM_TAC
4218 THEN REMOVE_ASSUM_TAC
4219 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1`;`p-1`])
4221 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th])
4222 THEN REAL_ARITH_TAC;
4223 MP_TAC(ARITH_RULE`2<p/\ 2<k /\ 1<=j /\ j< p-1 /\ 1<= k-p==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1 /\ ~(j=0) /\ 0<=j /\ j<=p-1 /\ j<=k /\ 1<k/\ p-1<=p-1`)
4225 THEN MP_TAC(SET_RULE`~(0= p-1)/\ ~(j=0)==> ~({p-1,j}= {0,p-1})`)
4227 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`p-1:num`;`j:num`][IN_NUMSEG])
4228 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4229 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4230 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`j:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4231 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4232 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4233 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4235 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4236 THEN POP_ASSUM MP_TAC
4237 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4239 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4240 THEN REMOVE_ASSUM_TAC
4241 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`j:num`]);
4242 MP_TAC(ARITH_RULE`j<=p ==> j=p \/ j<p :num`)
4244 MP_TAC(ARITH_RULE`2<p/\ 2<k /\ i< p-1 /\ 1<= k-p==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1 /\ ~(i=p-1) /\ 0<=i /\ i<=p-1 /\ i<=k /\ 1<k`)
4246 THEN MP_TAC(SET_RULE`~(0= p-1)/\ ~(i=p-1)==> ~({0,i}= {0,p-1})`)
4248 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`0:num`;`i:num`][IN_NUMSEG])
4249 THEN POP_ASSUM MP_TAC
4250 THEN POP_ASSUM MP_TAC
4251 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4252 THEN REMOVE_ASSUM_TAC
4253 THEN REMOVE_ASSUM_TAC
4254 THEN REMOVE_ASSUM_TAC
4255 THEN POP_ASSUM MP_TAC
4256 THEN REWRITE_TAC[constraint_system]
4258 THEN REMOVE_ASSUM_TAC
4259 THEN REMOVE_ASSUM_TAC
4260 THEN POP_ASSUM (fun th-> MRESA_TAC th[`i:num`;`p:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4261 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`p:num`;`p:num`;`p:num`]
4262 THEN MRESAL_TAC MOD_MULT[`p:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4265 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY_P)[`p:num`;`k:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4266 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4267 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4268 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4269 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4270 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4272 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4273 THEN POP_ASSUM MP_TAC
4274 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4276 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4277 THEN REMOVE_ASSUM_TAC
4278 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k:num`])
4279 THEN POP_ASSUM MP_TAC
4280 THEN POP_ASSUM MP_TAC
4281 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4282 THEN REMOVE_ASSUM_TAC
4283 THEN REMOVE_ASSUM_TAC
4284 THEN REMOVE_ASSUM_TAC
4285 THEN POP_ASSUM MP_TAC
4286 THEN REWRITE_TAC[constraint_system]
4288 THEN REMOVE_ASSUM_TAC
4289 THEN REMOVE_ASSUM_TAC
4290 THEN POP_ASSUM (fun th-> MRESA_TAC th[`i:num`;`k:num`] )
4291 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4292 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4295 MP_TAC(ARITH_RULE`j<p /\ 2< p ==> j=p-1 \/ j<p-1 :num`)
4297 MP_TAC(ARITH_RULE`2<p/\ 2<k /\ 1<=i /\ i< p-1 /\ 1<= k-p==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1 /\ ~(i=0) /\ 0<=i /\ i<=p-1 /\ i<=k /\ 1<k/\ p-1<=p-1`)
4299 THEN MP_TAC(SET_RULE`~(0= p-1)/\ ~(i=0)==> ~({p-1,i}= {0,p-1})`)
4301 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`p-1:num`;`i:num`][IN_NUMSEG])
4302 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`p-1:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4303 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4304 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4305 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4306 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4307 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4309 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4310 THEN POP_ASSUM MP_TAC
4311 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4313 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4314 THEN REMOVE_ASSUM_TAC
4315 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`p-1:num`])
4316 THEN MRESAL1_TAC stable_sy_lemma`s1:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4317 THEN REMOVE_ASSUM_TAC
4318 THEN REMOVE_ASSUM_TAC
4319 THEN REMOVE_ASSUM_TAC
4320 THEN POP_ASSUM MP_TAC
4321 THEN REWRITE_TAC[constraint_system]
4323 THEN REMOVE_ASSUM_TAC
4324 THEN REMOVE_ASSUM_TAC
4325 THEN REMOVE_ASSUM_TAC
4326 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4327 THEN ASM_REWRITE_TAC[]
4328 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4329 THEN REMOVE_ASSUM_TAC
4330 THEN REMOVE_ASSUM_TAC
4331 THEN REMOVE_ASSUM_TAC
4332 THEN POP_ASSUM MP_TAC
4333 THEN REWRITE_TAC[constraint_system]
4335 THEN REMOVE_ASSUM_TAC
4336 THEN REMOVE_ASSUM_TAC
4337 THEN REMOVE_ASSUM_TAC
4338 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4339 THEN ASM_REWRITE_TAC[];
4340 MP_TAC(ARITH_RULE`2<p/\ 2<k /\ 1<=i /\ i< p-1 /\ 1<=j /\ j< p-1/\ 1<= k-p==> ~(0= p-1)/\ 0<=0 /\ 0<= p-1/\ 1<p /\ 0<=k-1 /\ ~(i=p-1) /\ ~(j=p-1)/\ 0<=i /\ i<=p-1 /\ i<=k /\ 1<k/\ p-1<=p-1/\0<=j /\ j<=p-1 /\ j<=k`)
4342 THEN MP_TAC(SET_RULE`~(i= p-1)/\ ~(j=p-1)==> ~({i,j}= {0,p-1})`)
4344 THEN REMOVE_THEN"THYGIANG"(fun th-> MRESAL_TAC th[`i:num`;`j:num`][IN_NUMSEG])
4345 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4346 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4347 THEN MRESA_TAC (GEN_ALL PMAT1_EQ_SY)[`k:num`;`p:num`;`j:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4348 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4349 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4350 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4352 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4353 THEN POP_ASSUM MP_TAC
4354 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4356 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4357 THEN REMOVE_ASSUM_TAC
4358 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`j:num`])]);;
4378 let IN_B_SY2_COVER_concl=`!(s:stable_sy) (s1:stable_sy) (s2:stable_sy) (s3:stable_sy) (l:real^(M,3)finite_product)
4379 (l1:real^(P,3)finite_product) (l2:real^(N,3)finite_product).
4380 dimindex(:M) =k /\ dimindex(:N) =k-p+2 /\ dimindex(:P) =p
4382 /\ I_SY s= 0..k-1 /\ f_sy s=(\i. ((1+i):num MOD k))
4383 /\ I_SY s1= 0..p-1 /\ f_sy s1=(\i. ((1+i):num MOD p))
4384 /\ I_SY s3= 0..(k-p+1) /\ f_sy s3=(\i. ((1+i):num MOD (k-p+2)))
4385 /\ (ear_sy s2 <=> ear_sy s3)
4387 /\ SCHANGE (\x. if x=0 then 0 else (p-2+x) MOD k) s2 s3
4388 /\ COVER_SY 0 (p-1) s s1 s2
4389 /\ (l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))
4390 /\ (!i j. {i MOD k ,j MOD k} IN J_SY s UNION {{0,p-1}}
4391 ==> norm (row i (vecmats l) -row j (vecmats l))<= cstab)
4392 /\ matvec(pmat1(vecmats l))= l1
4393 /\ matvec(pmat2(vecmats l))= l2
4394 /\ row k (vecmats l)= v
4395 /\ row (p-1) (vecmats l)= w
4397 u IN {v, w} /\ u1 IN V_SY(vecmats l) /\ ~(u = u1)
4398 ==> ~collinear {vec 0, u, u1})
4399 /\ norm(v-w)<= min (b_sy s1 (p-1,0)) (b_sy s2 (p-1,0))
4400 ==> l2 IN (B_SY1 (a_sy s3) (b_sy s3))`;;
4403 let IN_B_SY2_COVER_concl2 = mk_imp (EJRCFJD_concl, IN_B_SY2_COVER_concl);;
4411 let IN_B_SY2_COVER=prove_by_refinement(IN_B_SY2_COVER_concl2,
4412 [DISCH_THEN(LABEL_TAC"THY")
4413 THEN REPEAT STRIP_TAC
4414 THEN MRESA1_TAC DIMINDEX_GE_1`(:M)`
4415 THEN MRESA1_TAC DIMINDEX_GE_1`(:P)`
4416 THEN MRESA1_TAC DIMINDEX_GE_1`(:N)`
4417 THEN MP_TAC(ARITH_RULE`1<= k-p /\ 1<=p /\ 1<=k ==> 2< k-p+2 /\ 1<= k-p+2 /\ (k - p + 2) - 1=k - p + 1 /\ ~(k=0)/\ p-1< k/\ p< k /\ ~(p=0)
4418 /\ ~(k-p+2=0)/\ 1< k-p+2/\ p<= k /\ p<=p /\ k-p+1<k-p+2/\ SUC(k-p+1)=k-p+2`)
4420 THEN MRESA_TAC (GEN_ALL IK_SY)[`s:stable_sy`;`k:num`]
4421 THEN MRESA_TAC (GEN_ALL IK_SY)[`s1:stable_sy`;`p:num`]
4422 THEN MRESA_TAC (GEN_ALL IK_SY)[`s3:stable_sy`;`k-p+2:num`]
4423 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s:stable_sy`
4424 THEN MRESA1_TAC (GEN_ALL K_SY_LE2)`s1:stable_sy`
4425 THEN REWRITE_TAC[tau_star]
4426 THEN MRESA1_TAC stable_sy_lemma`s:stable_sy`
4427 THEN MP_TAC(ARITH_RULE` 2<p /\ 1<=k-p
4428 ==> p - 2 + k - p + 2= k/\ p-2+1=p-1 /\ 1<=p-1 /\ p-1<=k /\ p-1<k /\ ~(k=p-1)/\ k<=k`)
4430 THEN SUBGOAL_THEN`{v, w} SUBSET V_SY (vecmats (l:real^(M,3)finite_product))`ASSUME_TAC;
4431 MATCH_MP_TAC(SET_RULE`A IN C /\ B IN C==> {A,B}SUBSET C`)
4433 THEN ASM_REWRITE_TAC[IN_ELIM_THM;V_SY;rows];
4435 THEN ASM_REWRITE_TAC[]
4438 THEN ASM_REWRITE_TAC[];
4439 SUBGOAL_THEN`norm (v - w:real^3) <= cstab`ASSUME_TAC;
4440 MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
4441 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4442 THEN FIND_ASSUM (fun th-> MP_TAC(ISPECL [`k:num`;`p-1`]th))`!i j.
4443 {i MOD k, j MOD k} IN J_SY s UNION {{0, p - 1}}
4444 ==> norm (row i (vecmats l) - row j (vecmats (l:real^(M,3)finite_product))) <= cstab`
4445 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
4446 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; SET_RULE`{0,p-1} IN J_SY s UNION {{0,p-1}}`])
4447 THEN ASM_REWRITE_TAC[];
4448 SUBGOAL_THEN`~({v, w} IN E_SY (vecmats (l:real^(M,3)finite_product)))`ASSUME_TAC;
4449 ASM_REWRITE_TAC[E_SY;IN_ELIM_THM]
4451 THEN POP_ASSUM MP_TAC
4452 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4453 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;convex_local_fan;local_fan]
4456 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
4457 THEN POP_ASSUM MP_TAC
4458 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4460 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4461 THEN MRESA_TAC (GEN_ALL EDGE_IN_E_SY)[`i:num`;`row (i) (vecmats(l:real^(M,3)finite_product))`;`
4462 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`(l:real^(M,3)finite_product)`]
4463 THEN MRESA_TAC remark1_fan[`vec 0:real^3`;`V_SY (vecmats(l:real^(M,3)finite_product))`;`E_SY (vecmats (l:real^(M,3)finite_product))`;`
4464 (row (SUC (i MOD dimindex (:M))) (vecmats (l:real^(M,3)finite_product)))`;`row i (vecmats(l:real^(M,3)finite_product))`]
4465 THEN DISJ_CASES_TAC(SET_RULE`row k (vecmats l)= row (p - 1) (vecmats l)
4466 \/ ~(row k (vecmats l)= row (p - 1) (vecmats (l:real^(M,3)finite_product)))`);
4467 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
4468 (1 <= j /\ j <= k) /\
4469 row i (vecmats l) = row j (vecmats l)
4470 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
4471 row i (vecmats l) = row j (vecmats l)`]
4472 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1`])
4473 THEN POP_ASSUM MP_TAC
4474 THEN POP_ASSUM MP_TAC
4479 THEN SUBGOAL_THEN`1 <= SUC (i' MOD dimindex (:M)) /\
4480 SUC (i' MOD dimindex (:M)) <= dimindex (:M)` ASSUME_TAC;
4481 ASM_REWRITE_TAC[ARITH_RULE`1<= SUC a`]
4482 THEN MRESAL_TAC DIVISION[`i':num`;`dimindex (:M):num`][DIMINDEX_NONZERO]
4483 THEN POP_ASSUM MP_TAC
4487 THEN MP_TAC(SET_RULE`{row k (vecmats l), row (p - 1) (vecmats l)} =
4488 {row i (vecmats l), row (SUC (i MOD k)) (vecmats l)}
4489 /\ ~(row k (vecmats l) = row (p - 1) (vecmats l))
4490 /\ ~(row i (vecmats l) = row (SUC (i MOD k)) (vecmats l))
4491 ==> (row i (vecmats l) = row (k) (vecmats l)
4492 /\ row (p-1) (vecmats l) = row (SUC (i MOD k)) (vecmats l))
4493 \/ (row i (vecmats l) = row (p-1) (vecmats l)
4494 /\ row (k) (vecmats l) = row (SUC (i MOD k)) (vecmats (l:real^(M,3)finite_product)))`)
4496 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
4497 (1 <= j /\ j <= k) /\
4498 row i (vecmats l) = row j (vecmats l)
4499 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
4500 row i (vecmats l) = row j (vecmats l)`]
4501 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`k:num`] THEN MRESA_TAC th[`p-1:num`;`SUC(i MOD k):num`])
4502 THEN POP_ASSUM MP_TAC
4503 THEN POP_ASSUM MP_TAC
4505 THEN MRESAL_TAC MOD_MULT[`k:num`;`1:num`][ARITH_RULE`p*1=p/\ SUC 0=1`]
4506 THEN MP_TAC(ARITH_RULE`2<p==> ~(p-1=1)/\ 1<=1`)
4508 MRESAL_TAC(GEN_ALL INJ_ROW_B_SY)[`k:num`;`s:stable_sy`;`l:real^(M,3)finite_product`][IN_NUMSEG;SET_RULE`(1 <= i /\ i <= k) /\
4509 (1 <= j /\ j <= k) /\
4510 row i (vecmats l) = row j (vecmats l)
4511 <=> 1 <= i /\ i <= k /\ 1 <= j /\ j <= k /\
4512 row i (vecmats l) = row j (vecmats l)`]
4513 THEN POP_ASSUM(fun th-> MRESA_TAC th[`i:num`;`p-1:num`] THEN MRESA_TAC th[`k:num`;`SUC(i MOD k):num`])
4514 THEN POP_ASSUM MP_TAC
4515 THEN POP_ASSUM MP_TAC
4517 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4518 THEN MP_TAC(ARITH_RULE`2<p /\ 1<= k-p ==> ~(k= SUC (p-1))/\ 1<= SUC(p-1)/\ SUC(p-1)<=k`)
4520 MRESA_TAC (GEN_ALL PROPERTIES_OF_FAN_IN_B_SY)[`d_sy (s:stable_sy)`;`J_SY (s:stable_sy)`;`k_sy (s:stable_sy)`;`k:num`;`p-1:num`;`a_sy (s:stable_sy)`;`b_sy (s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`]
4521 THEN MRESAL_TAC(GEN_ALL TECOXBM1)[`d_sy (s:stable_sy)`;`J_SY(s:stable_sy)`;`k:num`;`a_sy(s:stable_sy)`;`b_sy(s:stable_sy)`;`row k (vecmats (l:real^(M,3)finite_product))`;`row (p-1) (vecmats (l:real^(M,3)finite_product))`;`l:real^(M,3)finite_product`][SET_RULE`{A} UNION {B,C}={A,B,C}`]
4522 THEN MP_TAC(SET_RULE`{v, w} SUBSET V_SY (vecmats l)==> v IN V_SY (vecmats l)
4523 /\ w IN V_SY (vecmats (l:real^(M,3)finite_product))`)
4525 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4526 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4527 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4528 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4529 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F_SY)[`k:num`;`p:num`;`v:real^3`;`w:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4530 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4531 THEN MRESA_TAC (GEN_ALL SLICEF_EQ_F2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4532 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4533 THEN MRESA_TAC (GEN_ALL SLICEE_EQ_E2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4534 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4535 THEN MRESA_TAC (GEN_ALL SLICEV_EQ_V2_SY)[`k:num`;`p:num`;`w:real^3`;`v:real^3`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4536 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4537 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4538 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION2_SY;]
4540 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v':real^3^M`
4541 THEN POP_ASSUM MP_TAC
4542 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4544 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4545 THEN REMOVE_THEN"THY"(fun th-> MRESA_TAC th[`V_SY(vecmats (l:real^(M,3)finite_product))`;`E_SY(vecmats (l:real^(M,3)finite_product))`;`F_SY(vecmats (l:real^(M,3)finite_product))`;
4546 `v:real^3`;`w:real^3`])
4547 THEN EXISTS_TAC`vecmats(l2:real^(N,3)finite_product)`
4548 THEN ASM_REWRITE_TAC[MATVEC_VECMATS_ID]
4551 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4552 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4553 THEN FIND_ASSUM (fun th-> MATCH_MP_TAC(ISPEC `p-2+i`th))`!i. 1 <= i /\ i <= dimindex (:M) ==> row i (vecmats (l:real^(M,3)finite_product)) IN ball_annulus`
4554 THEN ASM_REWRITE_TAC[]
4555 THEN MP_TAC(ARITH_RULE`1<=i /\ i<= k-p+2 /\ 2<p /\ 1<=k-p ==> 1<= p-2+i /\ p-2+i<=k`)
4557 ASM_REWRITE_TAC[CONDITION1_SY]
4558 THEN FIND_ASSUM MP_TAC`COVER_SY 0 (p - 1) s s1 (s2:stable_sy)`
4559 THEN REWRITE_TAC[COVER_SY;COVER5_SY;COVER4_SY;]
4561 THEN REMOVE_ASSUM_TAC
4562 THEN POP_ASSUM MP_TAC
4563 THEN POP_ASSUM MP_TAC
4564 THEN POP_ASSUM MP_TAC
4565 THEN POP_ASSUM MP_TAC
4566 THEN POP_ASSUM MP_TAC
4567 THEN POP_ASSUM MP_TAC
4568 THEN DISCH_THEN(LABEL_TAC"THYGIANG")
4569 THEN DISCH_THEN(LABEL_TAC"THYGIANG1")
4570 THEN DISCH_THEN(LABEL_TAC"THYGIANG2")
4571 THEN DISCH_THEN(LABEL_TAC"THYGIANG3")
4572 THEN DISCH_THEN(LABEL_TAC"THYGIANG4")
4573 THEN DISCH_THEN(LABEL_TAC"THYGIANG5")
4576 MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`i:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4577 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4578 THEN MRESA_TAC (GEN_ALL PMAT2_EQ_SY)[`k:num`;`p:num`;`j:num`;`(s:stable_sy)`;` (s1:stable_sy)`;` (s2:stable_sy)`;` (s3:stable_sy)`;` (l:real^(M,3)finite_product)`;`
4579 (l1:real^(P,3)finite_product) `;`(l2:real^(N,3)finite_product)`]
4580 THEN REMOVE_THEN "THYGIANG1"MP_TAC
4581 THEN REMOVE_THEN "THYGIANG3"MP_TAC
4582 THEN FIND_ASSUM MP_TAC`SCHANGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) s2 (s3:stable_sy)`
4583 THEN REWRITE_TAC[SCHANGE]
4585 THEN POP_ASSUM MP_TAC
4586 THEN POP_ASSUM MP_TAC
4587 THEN POP_ASSUM (fun th-> MRESA_TAC th[`i:num`;`j:num`])
4588 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4590 THEN POP_ASSUM (fun th-> MRESA_TAC th[`i:num`;`j:num`])
4591 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4593 THEN MP_TAC(ARITH_RULE`i<=k-p+2 ==> i=k-p+2 \/ i< k-p+2`)
4595 MP_TAC(ARITH_RULE`j<=k-p+2 ==> j=k-p+2 \/ j< k-p+2`)
4599 THEN MRESAL_TAC MOD_MULT[`k:num`;`1`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4600 THEN SUBGOAL_THEN`0 IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4601 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4603 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4604 MRESAL1_TAC stable_sy_lemma`s2:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4605 THEN REMOVE_ASSUM_TAC
4606 THEN POP_ASSUM(fun th-> MRESA1_TAC th`0`)
4607 THEN REMOVE_ASSUM_TAC
4608 THEN POP_ASSUM MP_TAC
4609 THEN REMOVE_ASSUM_TAC
4610 THEN POP_ASSUM MP_TAC
4611 THEN REWRITE_TAC[constraint_system]
4613 THEN REMOVE_ASSUM_TAC
4614 THEN REMOVE_ASSUM_TAC
4615 THEN REMOVE_ASSUM_TAC
4616 THEN POP_ASSUM (fun th-> MRESA_TAC th[`0:num`;`0:num`] )
4618 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th;VECTOR_ARITH`A-A= vec 0 `;NORM_0;])
4619 THEN REAL_ARITH_TAC;
4620 MRESAL_TAC MOD_MULT[`k:num`;`1`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4621 THEN MP_TAC(ARITH_RULE`1<=j==> j=1 \/ 1<j`)
4623 REWRITE_TAC[ARITH_RULE`~(1=0)`]
4624 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4625 THEN MP_TAC(ARITH_RULE`2<k==> 1<k`)
4629 THEN REMOVE_ASSUM_TAC
4630 THEN POP_ASSUM MP_TAC
4631 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4632 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4634 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4635 THEN POP_ASSUM MP_TAC
4636 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4638 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4639 THEN REMOVE_ASSUM_TAC
4640 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-1:num`])
4641 THEN REMOVE_ASSUM_TAC
4642 THEN POP_ASSUM MP_TAC
4643 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4644 THEN REMOVE_ASSUM_TAC
4645 THEN REMOVE_ASSUM_TAC
4646 THEN REMOVE_ASSUM_TAC
4647 THEN POP_ASSUM MP_TAC
4648 THEN REWRITE_TAC[constraint_system]
4650 THEN REMOVE_ASSUM_TAC
4651 THEN REMOVE_ASSUM_TAC
4652 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`k:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4653 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4654 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4655 THEN MRESAL1_TAC stable_sy_lemma`s2:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4656 THEN REMOVE_ASSUM_TAC
4657 THEN REMOVE_ASSUM_TAC
4658 THEN REMOVE_ASSUM_TAC
4659 THEN POP_ASSUM MP_TAC
4660 THEN REWRITE_TAC[constraint_system]
4662 THEN REMOVE_ASSUM_TAC
4663 THEN REMOVE_ASSUM_TAC
4664 THEN REMOVE_ASSUM_TAC
4665 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4666 THEN FIND_ASSUM MP_TAC`norm (v - w:real^3) <= min (b_sy s1 (p - 1,0)) (b_sy (s2:stable_sy) (p - 1,0))`
4667 THEN REAL_ARITH_TAC;
4668 MP_TAC(ARITH_RULE`1<j /\ j<k-p+2 /\ 2<p /\ 1<=k-p ==> ~(j=0) /\ p-2+j<k /\ ~(p-2+j=p-1) /\ ~(0=p-1)/\ 0<=j /\ j<= k-p+1/\ 1<=p-2+j/\ p-2+j<=k /\1<k`)
4670 THEN MRESA_TAC MOD_LT[`p-2+j:num`;`k:num`]
4671 THEN MP_TAC(SET_RULE`~(p-2+j=p-1) /\ ~(0=p-1)==> ~({0,p-2+j}={0,p-1})`)
4673 THEN SUBGOAL_THEN`0 IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4674 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4676 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4677 SUBGOAL_THEN`p-2+j IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4678 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4679 THEN EXISTS_TAC`j:num`
4680 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4683 THEN POP_ASSUM(fun th-> MRESA_TAC th[`0`;`p-2+j`])
4684 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4685 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4687 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4688 THEN POP_ASSUM MP_TAC
4689 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4691 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4692 THEN REMOVE_ASSUM_TAC
4693 THEN POP_ASSUM(fun th-> MRESA_TAC th[`k:num`;`p-2+j:num`])
4694 THEN POP_ASSUM MP_TAC
4695 THEN POP_ASSUM MP_TAC
4696 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4697 THEN REMOVE_ASSUM_TAC
4698 THEN REMOVE_ASSUM_TAC
4699 THEN REMOVE_ASSUM_TAC
4700 THEN POP_ASSUM MP_TAC
4701 THEN REWRITE_TAC[constraint_system]
4703 THEN REMOVE_ASSUM_TAC
4704 THEN REMOVE_ASSUM_TAC
4705 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-2+j:num`;`k:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4706 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4707 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4710 MRESAL_TAC MOD_MULT[`k:num`;`1`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4711 THEN MP_TAC(ARITH_RULE`1<=i==> i=1 \/ 1<i`)
4713 MP_TAC(ARITH_RULE`1<=j==> j=1 \/ 1<j`)
4717 THEN REWRITE_TAC[ARITH_RULE`~(1=0)`]
4718 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4719 THEN SUBGOAL_THEN`p-1 IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4720 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4721 THEN EXISTS_TAC`1:num`
4722 THEN ASM_REWRITE_TAC[ARITH_RULE`~(1=0) /\ 0<= 1/\ 1<= k-p+1`];
4723 MRESAL1_TAC stable_sy_lemma`s2:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4724 THEN REMOVE_ASSUM_TAC
4725 THEN POP_ASSUM(fun th-> MRESA1_TAC th`p-1`)
4726 THEN REMOVE_ASSUM_TAC
4727 THEN POP_ASSUM MP_TAC
4728 THEN REMOVE_ASSUM_TAC
4729 THEN POP_ASSUM MP_TAC
4730 THEN REWRITE_TAC[constraint_system]
4732 THEN REMOVE_ASSUM_TAC
4733 THEN REMOVE_ASSUM_TAC
4734 THEN REMOVE_ASSUM_TAC
4735 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`p-1:num`] )
4737 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th;VECTOR_ARITH`A-A= vec 0 `;NORM_0;])
4738 THEN REAL_ARITH_TAC;
4739 MP_TAC(ARITH_RULE`j<=k-p+2 ==> j=k-p+2 \/ j< k-p+2`)
4741 REWRITE_TAC[ARITH_RULE`~(1=0)`]
4742 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4743 THEN MP_TAC(ARITH_RULE`2<k==> 1<k`)
4747 THEN REMOVE_ASSUM_TAC
4748 THEN POP_ASSUM MP_TAC
4749 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4750 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4752 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4753 THEN POP_ASSUM MP_TAC
4754 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4756 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4757 THEN REMOVE_ASSUM_TAC
4758 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`k:num`])
4759 THEN REMOVE_ASSUM_TAC
4760 THEN POP_ASSUM MP_TAC
4761 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4762 THEN REMOVE_ASSUM_TAC
4763 THEN REMOVE_ASSUM_TAC
4764 THEN REMOVE_ASSUM_TAC
4765 THEN POP_ASSUM MP_TAC
4766 THEN REWRITE_TAC[constraint_system]
4768 THEN REMOVE_ASSUM_TAC
4769 THEN REMOVE_ASSUM_TAC
4770 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-1:num`;`k:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4771 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4772 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4773 THEN REWRITE_TAC[NORM_SUB]
4774 THEN DISCH_THEN(LABEL_TAC"THY21")
4775 THEN DISCH_THEN(LABEL_TAC"THY22")
4776 THEN MRESAL1_TAC stable_sy_lemma`s2:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4777 THEN REMOVE_ASSUM_TAC
4778 THEN REMOVE_ASSUM_TAC
4779 THEN REMOVE_ASSUM_TAC
4780 THEN POP_ASSUM MP_TAC
4781 THEN REWRITE_TAC[constraint_system]
4783 THEN REMOVE_ASSUM_TAC
4784 THEN REMOVE_ASSUM_TAC
4785 THEN REMOVE_ASSUM_TAC
4786 THEN FIND_ASSUM MP_TAC`norm (v - w:real^3) <= min (b_sy s1 (p - 1,0)) (b_sy (s2:stable_sy) (p - 1,0))`
4787 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
4788 THEN REMOVE_THEN"THY21"MP_TAC
4789 THEN REMOVE_THEN"THY22"MP_TAC
4790 THEN REAL_ARITH_TAC;
4791 MP_TAC(ARITH_RULE`1<j /\ j<k-p+2 /\ 2<p /\ 1<=k-p ==> ~(j=0) /\ p-2+j<k /\ ~(p-2+j=0) /\ ~(0=p-1)/\ 0<=j /\ j<= k-p+1/\ 1<=p-2+j/\ p-2+j<=k /\1<k/\ ~(1=0)`)
4793 THEN MRESA_TAC MOD_LT[`p-2+j:num`;`k:num`]
4794 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4795 THEN MP_TAC(SET_RULE`~(p-2+j=0) /\ ~(0=p-1)==> ~({p-1,p-2+j}={0,p-1})`)
4797 THEN SUBGOAL_THEN`p-1 IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4798 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4800 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 1/\ 1<= k-p+1`];
4801 SUBGOAL_THEN`p-2+j IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4802 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4803 THEN EXISTS_TAC`j:num`
4804 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4807 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1`;`p-2+j`])
4808 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4809 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4811 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4812 THEN POP_ASSUM MP_TAC
4813 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4815 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4816 THEN REMOVE_ASSUM_TAC
4817 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-1:num`;`p-2+j:num`]);
4818 MP_TAC(ARITH_RULE`1<i /\ i<k-p+2 /\ 2<p /\ 1<=k-p/\ 1<=j ==> ~(i=0) /\ p-2+i<k /\ ~(p-2+i=0) /\ ~(0=p-1)/\ 0<=i /\ i<= k-p+1/\ 1<=p-2+i/\ p-2+i<=k /\1<k/\ ~(p-2+i=p-1)/\ ~(j=0)`)
4820 THEN MRESA_TAC MOD_LT[`p-2+i:num`;`k:num`]
4821 THEN MRESA_TAC MOD_LT[`p-1:num`;`k:num`]
4822 THEN MP_TAC(ARITH_RULE`j<=k-p+2 ==> j=k-p+2 \/ j< k-p+2`)
4824 MP_TAC(SET_RULE`~(p-2+i=p-1) /\ ~(0=p-1)==> ~({p-2+i,0}={0,p-1})`)
4826 THEN SUBGOAL_THEN`0 IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4827 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4829 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4830 SUBGOAL_THEN`p-2+i IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4831 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4832 THEN EXISTS_TAC`i:num`
4833 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4836 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-2+i`;`0`])
4837 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4838 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4840 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4841 THEN POP_ASSUM MP_TAC
4842 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4844 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4845 THEN REMOVE_ASSUM_TAC
4846 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-2+i:num`;`k:num`;])
4847 THEN POP_ASSUM MP_TAC
4848 THEN POP_ASSUM MP_TAC
4849 THEN MRESAL1_TAC stable_sy_lemma`s:stable_sy`[stable_system;IN_NUMSEG;ARITH_RULE`0<= i:num`;]
4850 THEN REMOVE_ASSUM_TAC
4851 THEN REMOVE_ASSUM_TAC
4852 THEN REMOVE_ASSUM_TAC
4853 THEN POP_ASSUM MP_TAC
4854 THEN REWRITE_TAC[constraint_system]
4856 THEN REMOVE_ASSUM_TAC
4857 THEN REMOVE_ASSUM_TAC
4858 THEN POP_ASSUM (fun th-> MRESA_TAC th[`p-2+i:num`;`k:num`] THEN MRESA_TAC th[`p:num`;`p:num`])
4859 THEN MRESA_TAC (GEN_ALL POWER_MOD_FUN)[`k:num`;`k:num`;`k:num`]
4860 THEN MRESAL_TAC MOD_MULT[`k:num`;`2`][DIMINDEX_NONZERO;ARITH_RULE`A*1=A/\ p+p= p* 2`]
4863 MP_TAC(ARITH_RULE`j<k-p+2 /\ 2<p /\ 1<=k-p/\ 1<=j ==> ~(j=0) /\ p-2+j<k/\ 0<=j /\ j<=k-p+1/\ 1<= p-2+j /\ p-2+j<=k `)
4865 THEN MRESA_TAC MOD_LT[`p-2+j:num`;`k:num`]
4866 THEN MP_TAC(SET_RULE`~(p-2+i=p-1) /\ ~(p-2+i=0)==> ~({p-2+i,p-2+j}={0,p-1})`)
4868 THEN SUBGOAL_THEN`p-2+j IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4869 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4870 THEN EXISTS_TAC`j:num`
4871 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4872 SUBGOAL_THEN`p-2+i IN IMAGE (\x. if x = 0 then 0 else (p - 2 + x) MOD k) (0..k - p + 1)` ASSUME_TAC;
4873 REWRITE_TAC[IMAGE;IN_ELIM_THM;IN_NUMSEG]
4874 THEN EXISTS_TAC`i:num`
4875 THEN ASM_REWRITE_TAC[ARITH_RULE`0=0 /\ 0<= 0/\ 0<= k-p+1`];
4878 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-2+i`;`p-2+j`])
4879 THEN FIND_ASSUM MP_TAC`(l:real^(M,3)finite_product) IN (B_SY1 (a_sy s) (b_sy s))`
4880 THEN REWRITE_TAC[B_SY1;IN_ELIM_THM;CONDITION1_SY]
4882 THEN MRESA1_TAC (GEN_ALL VECMATS_MATVEC_ID)`v'':real^3^M`
4883 THEN POP_ASSUM MP_TAC
4884 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4886 THEN POP_ASSUM (fun th-> SUBST_ALL_TAC(SYM th))
4887 THEN REMOVE_ASSUM_TAC
4888 THEN POP_ASSUM(fun th-> MRESA_TAC th[`p-2+i:num`;`p-2+j:num`;])]);;
4893 let MTUWLUN1 = D_FUN_COVER_SY;;
4895 let MTUWLUN2 = TAU_STAR_COVER;;
4897 let MTUWLUN3 = IN_B_SY_COVER;;
4899 let MTUWLUN4 = IN_B_SY2_COVER;;