Step
*
1
2
1
2
2
1
1
of Lemma
satisfies-gcd-reduce-eq-constraints
1. n : ℕ+
2. (||[]|| + 1) = n ∈ ℤ
3. u : ℤ
4. 1 = (||[]|| + 1) ∈ ℤ
5. v1 : {L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
6. ∀sat:{L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
     ((∀as∈sat.[1] ⋅ as =0)
     
⇒ (∀as∈v1.[1] ⋅ as =0)
     
⇒ ((↑isl(gcd-reduce-eq-constraints(sat;v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints(sat;v1)).[1] ⋅ as =0)))
7. sat : {L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
8. (∀as∈sat.[1] ⋅ as =0)
9. (∀as∈[[u] / v1].[1] ⋅ as =0)
⊢ (↑isl(accumulate_abort(L,Ls.let h,t = L 
                              in if t = Ax then if h=0 then inl [L / Ls] else (inr ⋅ )
                                 otherwise eval g = |gcd-list(t)| in
                                           if (1) < (g)
                                              then if h rem g=0
                                                   then eval L' = eager-map(λx.(x ÷ g);L) in
                                                        inl [L' / Ls]
                                                   else (inr ⋅ )
                                              else (inl [L / Ls]);if u=0 then inl [[u] / sat] else (inr ⋅ );v1)))
∧ (∀as∈outl(accumulate_abort(L,Ls.let h,t = L 
                                  in if t = Ax then if h=0 then inl [L / Ls] else (inr ⋅ )
                                     otherwise eval g = |gcd-list(t)| in
                                               if (1) < (g)
                                                  then if h rem g=0
                                                       then eval L' = eager-map(λx.(x ÷ g);L) in
                                                            inl [L' / Ls]
                                                       else (inr ⋅ )
                                                  else (inl [L / Ls]);if u=0 then inl [[u] / sat] else (inr ⋅ );v1)).[1]\000C ⋅ as =0)
BY
{ ((RWO "l_all_cons" (-1) THENA Auto)
   THEN ExRepD
   THEN (Subst' u ~ 0 0 THENA ((D -2 THEN All Reduce) THEN Auto))
   THEN Reduce 0
   THEN Fold `gcd-reduce-eq-constraints` 0) }
1
1. n : ℕ+
2. (||[]|| + 1) = n ∈ ℤ
3. u : ℤ
4. 1 = (||[]|| + 1) ∈ ℤ
5. v1 : {L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
6. ∀sat:{L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
     ((∀as∈sat.[1] ⋅ as =0)
     
⇒ (∀as∈v1.[1] ⋅ as =0)
     
⇒ ((↑isl(gcd-reduce-eq-constraints(sat;v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints(sat;v1)).[1] ⋅ as =0)))
7. sat : {L:ℤ List| ||L|| = (||[]|| + 1) ∈ ℤ}  List
8. (∀as∈sat.[1] ⋅ as =0)
9. [1] ⋅ [u] =0
10. (∀as∈v1.[1] ⋅ as =0)
⊢ (↑isl(gcd-reduce-eq-constraints([[0] / sat];v1))) ∧ (∀as∈outl(gcd-reduce-eq-constraints([[0] / sat];v1)).[1] ⋅ as =0)
Latex:
Latex:
1.  n  :  \mBbbN{}\msupplus{}
2.  (||[]||  +  1)  =  n
3.  u  :  \mBbbZ{}
4.  1  =  (||[]||  +  1)
5.  v1  :  \{L:\mBbbZ{}  List|  ||L||  =  (||[]||  +  1)\}    List
6.  \mforall{}sat:\{L:\mBbbZ{}  List|  ||L||  =  (||[]||  +  1)\}    List
          ((\mforall{}as\mmember{}sat.[1]  \mcdot{}  as  =0)
          {}\mRightarrow{}  (\mforall{}as\mmember{}v1.[1]  \mcdot{}  as  =0)
          {}\mRightarrow{}  ((\muparrow{}isl(gcd-reduce-eq-constraints(sat;v1)))
                \mwedge{}  (\mforall{}as\mmember{}outl(gcd-reduce-eq-constraints(sat;v1)).[1]  \mcdot{}  as  =0)))
7.  sat  :  \{L:\mBbbZ{}  List|  ||L||  =  (||[]||  +  1)\}    List
8.  (\mforall{}as\mmember{}sat.[1]  \mcdot{}  as  =0)
9.  (\mforall{}as\mmember{}[[u]  /  v1].[1]  \mcdot{}  as  =0)
\mvdash{}  (\muparrow{}isl(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]);if  u=0
                                                                                                                then  inl  [[u]  /  sat]
                                                                                                                else  (inr  \mcdot{}  );v1)))
\mwedge{}  (\mforall{}as\mmember{}outl(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]);if  u=0
                                                                                                                        then  inl  [[u]  /  sat]
                                                                                                                        else  (inr  \mcdot{}  );v1)).[1]  \mcdot{}  as  =0)
By
Latex:
((RWO  "l\_all\_cons"  (-1)  THENA  Auto)
  THEN  ExRepD
  THEN  (Subst'  u  \msim{}  0  0  THENA  ((D  -2  THEN  All  Reduce)  THEN  Auto))
  THEN  Reduce  0
  THEN  Fold  `gcd-reduce-eq-constraints`  0)
Home
Index