(`!(i:num) (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
INDUCT_TAC
THENL(*1*)[ARITH_TAC;(*1*)
REPEAT GEN_TAC THEN STRIP_TAC THEN REWRITE_TAC[
power_map_points] THEN
MP_TAC(ISPECL[` (x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`]
ORBITS_SUBSET_EDGE_FAN)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN DISJ_CASES_TAC(SET_RULE`(
sigma_fan x V E v (
power_map_points sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (i:num))= u)\/ ~(
sigma_fan x V E v (
power_map_points sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (i:num))= u)`)
THENL(*2*)[
ASM_REWRITE_TAC[] THEN MP_TAC(ISPECL[`SUC (i:num)`;` (x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`]
CARD_ORBITS_SIGMA_FAN_LE)
THEN ASM_REWRITE_TAC[
power_map_points; ARITH_RULE`~(SUC i = 0)`] THEN STRIP_TAC
THEN SUBGOAL_THEN `
CARD(
set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3)) <
CARD(
set_of_edge v V E)` ASSUME_TAC
THENL(*3*)[
REPEAT (POP_ASSUM MP_TAC) THEN ARITH_TAC;(*3*)
SUBGOAL_THEN `
set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3)
PSUBSET set_of_edge v V E` ASSUME_TAC
THENL(*4*)[
ASM_REWRITE_TAC[
PSUBSET] THEN DISJ_CASES_TAC(SET_RULE`(
set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) =
set_of_edge v V E)\/ ~(
set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) =
set_of_edge v V E)`)
THENL(*5*)[
SUBGOAL_THEN`
CARD(
set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3)) =
CARD(
set_of_edge v V E)`ASSUME_TAC
THENL(*6*)[
POP_ASSUM(fun th->REWRITE_TAC[
th]);(*6*)
POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN ARITH_TAC](*6*);(*5*)
POP_ASSUM(fun th->REWRITE_TAC[
th])](*5*);(*4*)
POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[
PSUBSET_MEMBER] THEN STRIP_TAC
THEN MP_TAC(ISPECL[` (x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;`y:real^3`]
exists_inverse_in_orbits_sigma_fan)
THEN ASM_REWRITE_TAC[] THEN DISJ_CASES_TAC(SET_RULE`(
set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)={(u:real^3)})\/ ~(
set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)={(u:real^3)})`)
THENL(*5*)[
POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"a")
THEN DISCH_THEN(LABEL_TAC "b") THEN DISCH_TAC THEN REMOVE_THEN "a" MP_TAC THEN ASM_REWRITE_TAC[
IN_SING] THEN DISCH_TAC
THEN REMOVE_THEN "b" MP_TAC THEN ASM_REWRITE_TAC[
u_IN_ORBITS_FAN];(*5*)
ASM_REWRITE_TAC[] THEN STRIP_TAC
THEN POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[] THEN
DISJ_CASES_TAC(SET_RULE`(
set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)={(w:real^3)})\/ ~(
set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)={(w:real^3)})`)
THENL(*6*)[
POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"a")
THEN DISCH_THEN(LABEL_TAC "b") THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN REMOVE_THEN "a" MP_TAC THEN ASM_REWRITE_TAC[
IN_SING] THEN DISCH_TAC
THEN REMOVE_THEN "b" MP_TAC THEN ASM_REWRITE_TAC[];(*6*)
MP_TAC(ISPECL[` (x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`u:real^3`;` (w:real^3)`]
IN_ORBITS_FAN)
THEN ASM_REWRITE_TAC[]
THEN STRIP_TAC THEN STRIP_TAC
THEN POP_ASSUM(fun th->MP_TAC(ISPEC `
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)`
th))
THEN ASM_REWRITE_TAC[]
THEN DISJ_CASES_TAC(SET_RULE`
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)=(y:real^3) \/ ~(
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)=(y:real^3))`)
THENL(*7*)[
POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"a") THEN DISCH_TAC THEN REMOVE_THEN "a" MP_TAC
THEN ASM_REWRITE_TAC[];(*7*)
ASM_REWRITE_TAC[azim1;REAL_ARITH` (a:real) - b <= a - c <=> c<=b`] THEN STRIP_TAC
THEN
SUBGOAL_THEN `
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)
IN set_of_edge v V E` ASSUME_TAC
THENL(*8*)[
ASM_TAC THEN SET_TAC[];(*8*)
SUBGOAL_THEN `(w:real^3)
IN set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)` ASSUME_TAC
THENL(*9*)[
ASM_TAC THEN SET_TAC[];(*9*)
SUBGOAL_THEN `{(y:real^3),
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3),(w:real^3)}
SUBSET set_of_edge v V E` ASSUME_TAC
THENL(*10*)[
ASM_TAC THEN SET_TAC[];(*10*)
FIND_ASSUM(MP_TAC)`
FAN((x:real^3),V,E)` THEN REWRITE_TAC[
FAN;fan6] THEN STRIP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN (LABEL_TAC "b") THEN STRIP_TAC THEN
MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (u:real^3)`;` (v:real^3)`]
properties_of_graph) THEN ASM_REWRITE_TAC[] THEN DISCH_TAC THEN
MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`]
CYCLIC_SET_EDGE_FAN)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;`{(y:real^3),
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3),(w:real^3)}`;`
set_of_edge(v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)` ]
subset_cyclic_set_fan)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`y:real^3`;`
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)`;`w:real^3`]
sum2_azim_fan) THEN ASM_REWRITE_TAC[]
THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`y:real^3`;`
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)`]
azim)
THEN STRIP_TAC THEN STRIP_TAC THEN SUBGOAL_THEN `
azim (x:real^3) (v:real^3) (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)) (w:real^3) <=
azim (x:real^3) (v:real^3) (y:real^3) (w:real^3)`
ASSUME_TAC
THENL(*11*)[
REPEAT(POP_ASSUM MP_TAC) THEN REAL_ARITH_TAC;(*11*)
POP_ASSUM MP_TAC THEN POP_ASSUM(fun
th ->REWRITE_TAC[]) THEN ASM_REWRITE_TAC[] THEN
MP_TAC (ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(v:real^3)`;` (y:real^3)`]
properties_of_set_of_edge_fan)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN MP_TAC (ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(v:real^3)`;` (w:real^3)`]
properties_of_set_of_edge_fan)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN MP_TAC (ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(v:real^3)`;` (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))`]
properties_of_set_of_edge_fan)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN
DISJ_CASES_TAC(REAL_ARITH `(
azim (x:real^3) (v:real^3) (w:real^3) (y:real^3)= &0) \/ ~(
azim (x:real^3) (v:real^3) (w:real^3) (y:real^3) = &0)`)
THENL(*12*)[
MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (w:real^3)`;`(y:real^3)`]
UNIQUE_AZIM_0_POINT_FAN)
THEN ASM_REWRITE_TAC[];(*12*)
DISJ_CASES_TAC(REAL_ARITH `(
azim (x:real^3) (v:real^3) (w:real^3) (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))= &0) \/ ~(
azim (x:real^3) (v:real^3) (w:real^3) (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3)) = &0)`)
THENL(*13*)[
MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (w:real^3)`; ` (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))` ]
UNIQUE_AZIM_0_POINT_FAN)
THEN ASM_REWRITE_TAC[]
THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (w:real^3)`]
SIGMA_FAN)
THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN SET_TAC[];(*13*)
REMOVE_THEN "b" (fun th->MP_TAC (ISPEC`{(v:real^3),(w:real^3)}`
th) THEN ASSUME_TAC(
th))
THEN POP_ASSUM (fun th->MP_TAC (ISPEC`{(v:real^3),(y:real^3)}`
th) THEN ASSUME_TAC(
th))
THEN POP_ASSUM (fun th->MP_TAC (ISPEC`{(v:real^3),(
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))}`
th) THEN ASSUME_TAC(
th))
THEN REWRITE_TAC[SET_RULE`{(a:real^3)}
UNION {b,c}={a,b,c}`] THEN ASM_REWRITE_TAC[]
THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN
MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;`(w:real^3)`;`(
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))`]
AZIM_COMPL)
THEN ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (w:real^3)`;` (y:real^3)`]
AZIM_COMPL) THEN
ASM_REWRITE_TAC[] THEN DISCH_TAC
THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[REAL_ARITH`(a - (b:real) <= (a:real)- (c:real))<=> c <= b`]
THEN STRIP_TAC
THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`; `(w:real^3)`]
SIGMA_FAN)
THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(y:real^3)`
th))
THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
THEN SUBGOAL_THEN`
azim (x:real^3) (v:real^3) (w:real^3) (y:real^3) =
azim x v w (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))` ASSUME_TAC
THENL(*14*)[
POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC;(*14*)
MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(w:real^3)`;` (y:real^3)`; ` (
sigma_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3))` ]
UNIQUE_AZIM_POINT_FAN)
THEN ASM_REWRITE_TAC[]
]]]]]]]]]]]];
ASM_REWRITE_TAC[]]]);;