Step * 1 2 1 2 2 2 of Lemma satisfies-gcd-reduce-eq-constraints


1. : ℕ+
2. : ℤ List
3. ||[1 v]|| n ∈ ℤ
4. : ℤ
5. v2 : ℤ List
6. ||[u v2]|| n ∈ ℤ
7. v1 {L:ℤ List| ||L|| n ∈ ℤ}  List
8. ∀sat:{L:ℤ List| ||L|| n ∈ ℤ}  List
     ((∀as∈sat.[1 v] ⋅ as =0)
      (∀as∈v1.[1 v] ⋅ as =0)
      ((↑isl(gcd-reduce-eq-constraints(sat;v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints(sat;v1)).[1 v] ⋅ as =0)))
9. sat {L:ℤ List| ||L|| n ∈ ℤ}  List
10. (∀as∈sat.[1 v] ⋅ as =0)
11. (∀as∈[[u v2] v1].[1 v] ⋅ as =0)
12. ¬↑null(v2)
⊢ (↑isl(let s' ⟵ eval |gcd-list(v2)| in
                  if (1) < (g)
                     then if rem g=0
                          then eval L' eval u ÷ in
                                         eval eager-map(λx.(x ÷ g);v2) in
                                           [x r] in
                               inl [L' sat]
                          else (inr ⋅ )
                     else (inl [[u v2] sat])
        in accumulate_abort(L,Ls.let h,t 
                                 in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                    otherwise eval |gcd-list(t)| in
                                              if (1) < (g)
                                                 then if rem g=0
                                                      then eval L' eager-map(λx.(x ÷ g);L) in
                                                           inl [L' Ls]
                                                      else (inr ⋅ )
                                                 else (inl [L Ls]);s';v1)))
∧ (∀as∈outl(let s' ⟵ eval |gcd-list(v2)| in
                      if (1) < (g)
                         then if rem g=0
                              then eval L' eval u ÷ in
                                             eval eager-map(λx.(x ÷ g);v2) in
                                               [x r] in
                                   inl [L' sat]
                              else (inr ⋅ )
                         else (inl [[u v2] sat])
            in accumulate_abort(L,Ls.let h,t 
                                     in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                        otherwise eval |gcd-list(t)| in
                                                  if (1) < (g)
                                                     then if rem g=0
                                                          then eval L' eager-map(λx.(x ÷ g);L) in
                                                               inl [L' Ls]
                                                          else (inr ⋅ )
                                                     else (inl [L Ls]);s';v1)).[1 v] ⋅ as =0)
BY
((GenConcl ⌜|gcd-list(v2)| gg ∈ ℤ⌝⋅ THENA Auto)
   THEN (CallByValueReduceOn ⌜gg⌝ 0⋅ THENA Auto)
   THEN (Decide 1 < gg THENA Auto)
   THEN (Reduce THENA Auto)) }

1
1. : ℕ+
2. : ℤ List
3. ||[1 v]|| n ∈ ℤ
4. : ℤ
5. v2 : ℤ List
6. ||[u v2]|| n ∈ ℤ
7. v1 {L:ℤ List| ||L|| n ∈ ℤ}  List
8. ∀sat:{L:ℤ List| ||L|| n ∈ ℤ}  List
     ((∀as∈sat.[1 v] ⋅ as =0)
      (∀as∈v1.[1 v] ⋅ as =0)
      ((↑isl(gcd-reduce-eq-constraints(sat;v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints(sat;v1)).[1 v] ⋅ as =0)))
9. sat {L:ℤ List| ||L|| n ∈ ℤ}  List
10. (∀as∈sat.[1 v] ⋅ as =0)
11. (∀as∈[[u v2] v1].[1 v] ⋅ as =0)
12. ¬↑null(v2)
13. gg : ℤ
14. |gcd-list(v2)| gg ∈ ℤ
15. 1 < gg
⊢ (↑isl(let s' ⟵ if rem gg=0
                  then eval L' eval u ÷ gg in
                                 eval eager-map(λx.(x ÷ gg);v2) in
                                   [x r] in
                       inl [L' sat]
                  else (inr ⋅ )
        in accumulate_abort(L,Ls.let h,t 
                                 in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                    otherwise eval |gcd-list(t)| in
                                              if (1) < (g)
                                                 then if rem g=0
                                                      then eval L' eager-map(λx.(x ÷ g);L) in
                                                           inl [L' Ls]
                                                      else (inr ⋅ )
                                                 else (inl [L Ls]);s';v1)))
∧ (∀as∈outl(let s' ⟵ if rem gg=0
                      then eval L' eval u ÷ gg in
                                     eval eager-map(λx.(x ÷ gg);v2) in
                                       [x r] in
                           inl [L' sat]
                      else (inr ⋅ )
            in accumulate_abort(L,Ls.let h,t 
                                     in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                        otherwise eval |gcd-list(t)| in
                                                  if (1) < (g)
                                                     then if rem g=0
                                                          then eval L' eager-map(λx.(x ÷ g);L) in
                                                               inl [L' Ls]
                                                          else (inr ⋅ )
                                                     else (inl [L Ls]);s';v1)).[1 v] ⋅ as =0)

2
1. : ℕ+
2. : ℤ List
3. ||[1 v]|| n ∈ ℤ
4. : ℤ
5. v2 : ℤ List
6. ||[u v2]|| n ∈ ℤ
7. v1 {L:ℤ List| ||L|| n ∈ ℤ}  List
8. ∀sat:{L:ℤ List| ||L|| n ∈ ℤ}  List
     ((∀as∈sat.[1 v] ⋅ as =0)
      (∀as∈v1.[1 v] ⋅ as =0)
      ((↑isl(gcd-reduce-eq-constraints(sat;v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints(sat;v1)).[1 v] ⋅ as =0)))
9. sat {L:ℤ List| ||L|| n ∈ ℤ}  List
10. (∀as∈sat.[1 v] ⋅ as =0)
11. (∀as∈[[u v2] v1].[1 v] ⋅ as =0)
12. ¬↑null(v2)
13. gg : ℤ
14. |gcd-list(v2)| gg ∈ ℤ
15. ¬1 < gg
⊢ (↑isl(let s' ⟵ inl [[u v2] sat]
        in accumulate_abort(L,Ls.let h,t 
                                 in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                    otherwise eval |gcd-list(t)| in
                                              if (1) < (g)
                                                 then if rem g=0
                                                      then eval L' eager-map(λx.(x ÷ g);L) in
                                                           inl [L' Ls]
                                                      else (inr ⋅ )
                                                 else (inl [L Ls]);s';v1)))
∧ (∀as∈outl(let s' ⟵ inl [[u v2] sat]
            in accumulate_abort(L,Ls.let h,t 
                                     in if Ax then if h=0 then inl [L Ls] else (inr ⋅ )
                                        otherwise eval |gcd-list(t)| in
                                                  if (1) < (g)
                                                     then if rem g=0
                                                          then eval L' eager-map(λx.(x ÷ g);L) in
                                                               inl [L' Ls]
                                                          else (inr ⋅ )
                                                     else (inl [L Ls]);s';v1)).[1 v] ⋅ as =0)


Latex:


Latex:

1.  n  :  \mBbbN{}\msupplus{}
2.  v  :  \mBbbZ{}  List
3.  ||[1  /  v]||  =  n
4.  u  :  \mBbbZ{}
5.  v2  :  \mBbbZ{}  List
6.  ||[u  /  v2]||  =  n
7.  v1  :  \{L:\mBbbZ{}  List|  ||L||  =  n\}    List
8.  \mforall{}sat:\{L:\mBbbZ{}  List|  ||L||  =  n\}    List
          ((\mforall{}as\mmember{}sat.[1  /  v]  \mcdot{}  as  =0)
          {}\mRightarrow{}  (\mforall{}as\mmember{}v1.[1  /  v]  \mcdot{}  as  =0)
          {}\mRightarrow{}  ((\muparrow{}isl(gcd-reduce-eq-constraints(sat;v1)))
                \mwedge{}  (\mforall{}as\mmember{}outl(gcd-reduce-eq-constraints(sat;v1)).[1  /  v]  \mcdot{}  as  =0)))
9.  sat  :  \{L:\mBbbZ{}  List|  ||L||  =  n\}    List
10.  (\mforall{}as\mmember{}sat.[1  /  v]  \mcdot{}  as  =0)
11.  (\mforall{}as\mmember{}[[u  /  v2]  /  v1].[1  /  v]  \mcdot{}  as  =0)
12.  \mneg{}\muparrow{}null(v2)
\mvdash{}  (\muparrow{}isl(let  s'  \mleftarrow{}{}  eval  g  =  |gcd-list(v2)|  in
                                    if  (1)  <  (g)
                                          then  if  u  rem  g=0
                                                    then  eval  L'  =  eval  x  =  u  \mdiv{}  g  in
                                                                                  eval  r  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);v2)  in
                                                                                      [x  /  r]  in
                                                              inl  [L'  /  sat]
                                                    else  (inr  \mcdot{}  )
                                          else  (inl  [[u  /  v2]  /  sat])
                in  accumulate\_abort(L,Ls.let  h,t  =  L 
                                                                  in  if  t  =  Ax  then  if  h=0  then  inl  [L  /  Ls]  else  (inr  \mcdot{}  )
                                                                        otherwise  eval  g  =  |gcd-list(t)|  in
                                                                                            if  (1)  <  (g)
                                                                                                  then  if  h  rem  g=0
                                                                                                            then  eval  L'  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);L)  in
                                                                                                                      inl  [L'  /  Ls]
                                                                                                            else  (inr  \mcdot{}  )
                                                                                                  else  (inl  [L  /  Ls]);s';v1)))
\mwedge{}  (\mforall{}as\mmember{}outl(let  s'  \mleftarrow{}{}  eval  g  =  |gcd-list(v2)|  in
                                            if  (1)  <  (g)
                                                  then  if  u  rem  g=0
                                                            then  eval  L'  =  eval  x  =  u  \mdiv{}  g  in
                                                                                          eval  r  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);v2)  in
                                                                                              [x  /  r]  in
                                                                      inl  [L'  /  sat]
                                                            else  (inr  \mcdot{}  )
                                                  else  (inl  [[u  /  v2]  /  sat])
                        in  accumulate\_abort(L,Ls.let  h,t  =  L 
                                                                          in  if  t  =  Ax  then  if  h=0  then  inl  [L  /  Ls]  else  (inr  \mcdot{}  )
                                                                                otherwise  eval  g  =  |gcd-list(t)|  in
                                                                                                    if  (1)  <  (g)
                                                                                                          then  if  h  rem  g=0
                                                                                                                    then  eval  L'  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);L)  in
                                                                                                                              inl  [L'  /  Ls]
                                                                                                                    else  (inr  \mcdot{}  )
                                                                                                          else  (inl  [L  /  Ls]);s';v1)).[1  /  v]  \mcdot{}  as  =0)


By


Latex:
((GenConcl  \mkleeneopen{}|gcd-list(v2)|  =  gg\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  (CallByValueReduceOn  \mkleeneopen{}gg\mkleeneclose{}  0\mcdot{}  THENA  Auto)
  THEN  (Decide  1  <  gg  THENA  Auto)
  THEN  (Reduce  0  THENA  Auto))




Home Index