Step
*
of Lemma
hdf-memory-base4-3
∀[F1,F2,F3,F4,f1,f2,f3,f4,s:Top]. ∀[hdr1,hdr2,hdr3,hdr4:Name].
  (hdf-memory((λx,s. f1[x;s]) o hdf-base(a.if name_eq(fst(a);hdr1) then [F1[a]] else [] fi )
              || (λx,s. f2[x;s]) o hdf-base(a.if name_eq(fst(a);hdr2) then [F2[a]] else [] fi )
                 || (λx,s. f3[x;s]) o hdf-base(a.if name_eq(fst(a);hdr3) then [F3[a]] else [] fi ) || (λx,s. f4[x;s])
                     o hdf-base(a.if name_eq(fst(a);hdr4) then [F4[a]] else [] fi );[s]) 
     ~ fix((λmk-hdf,s. (inl (λa.cbva_seq(λn.if name_eq(fst(a);hdr1) then f1[F1[a];s]
                                            if name_eq(fst(a);hdr2) then f2[F2[a];s]
                                            if name_eq(fst(a);hdr3) then f3[F3[a];s]
                                            if name_eq(fst(a);hdr4) then f4[F4[a];s]
                                            else s
                                            fi  λg.<mk-hdf (g (λx.x)), [s]> 1))))) 
       s) supposing 
     ((¬(hdr1 = hdr2 ∈ Name)) and 
     (¬(hdr1 = hdr3 ∈ Name)) and 
     (¬(hdr1 = hdr4 ∈ Name)) and 
     (¬(hdr2 = hdr3 ∈ Name)) and 
     (¬(hdr2 = hdr4 ∈ Name)) and 
     (¬(hdr3 = hdr4 ∈ Name)))
BY
{ ((UnivCD THENA Auto)
   THEN (RWO "hdf-base-transformation1" 0 THENA Auto)
   THEN (RWO "hdf-compose1-transformation2" 0 THENA Auto)
   THEN Repeat ((RWO "hdf-parallel-transformation2-1" 0 THENA Auto))
   THEN Reduce 0
   THEN (RWO "hdf-memory-transformation2" 0 THENA Auto)
   THEN RepUR ``cbva_seq mk_lambdas_fun select_fun_ap select_fun_last mk_lambdas bag-map`` 0
   THEN Repeat ((RecUnfold `callbyvalueall_seq` 0 THEN Reduce 0))
   THEN Repeat ((RecUnfold `mk_lambdas-fun` 0 THEN Reduce 0))
   THEN Repeat (((RWO "primrec-unroll" 0 THENA Auto) THEN Reduce 0))
   THEN (RWO "map-ifthenelse" 0 THENA Auto)
   THEN HdfStateTransStart `s') }
1
1. hdr1 : Name
2. hdr2 : Name
3. hdr3 : Name
4. hdr4 : Name
5. ¬(hdr3 = hdr4 ∈ Name)
6. ¬(hdr2 = hdr4 ∈ Name)
7. ¬(hdr2 = hdr3 ∈ Name)
8. ¬(hdr1 = hdr4 ∈ Name)
9. ¬(hdr1 = hdr3 ∈ Name)
10. ¬(hdr1 = hdr2 ∈ Name)
11. F4 : Base
12. f4 : Base
13. F3 : Base
14. f3 : Base
15. F2 : Base
16. f2 : Base
17. F1 : Base
18. f1 : Base
19. j : ℤ
20. 0 < j
21. ∀s:Base
      (λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then [λs.f1[F1[a];s]] else [] fi 
                           in let v1 ←─ if name_eq(fst(a);hdr2) then [λs.f2[F2[a];s]] else [] fi 
                              in let v2 ←─ if name_eq(fst(a);hdr3) then [λs.f3[F3[a];s]] else [] fi 
                                 in let v3 ←─ if name_eq(fst(a);hdr4) then [λs.f4[F4[a];s]] else [] fi 
                                    in let v4 ←─ v2 + v3
                                       in let v5 ←─ v1 + v4
                                          in let v6 ←─ v + v5
                                             in let v7 ←─ ∪f∈v6.map(f;s)
                                                in let v8 ←─ if bag-null(v7) then s else v7 fi 
                                                   in <mk-hdf v8, s>))^j - 1 
       ⊥ 
       [s] ≤ fix((λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
                                      if name_eq(fst(a);hdr2) then f2[F2[a];s]
                                      if name_eq(fst(a);hdr3) then f3[F3[a];s]
                                      if name_eq(fst(a);hdr4) then f4[F4[a];s]
                                      else s
                                      fi 
                                      in <mk-hdf v, [s]>)))) 
             s)
22. s : Base@i
23. a : Base
⊢ let v ←─ if name_eq(fst(a);hdr1) then [λs.f1[F1[a];s]] else [] fi 
  in let v1 ←─ if name_eq(fst(a);hdr2) then [λs.f2[F2[a];s]] else [] fi 
     in let v2 ←─ if name_eq(fst(a);hdr3) then [λs.f3[F3[a];s]] else [] fi 
        in let v3 ←─ if name_eq(fst(a);hdr4) then [λs.f4[F4[a];s]] else [] fi 
           in let v4 ←─ v2 + v3
              in let v5 ←─ v1 + v4
                 in let v6 ←─ v + v5
                    in let v7 ←─ ∪f∈v6.[f s]
                       in let v8 ←─ if bag-null(v7) then [s] else v7 fi 
                          in <λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then [λs.f1[F1[a];s]] else [] fi 
                                                  in let v1 ←─ if name_eq(fst(a);hdr2) then [λs.f2[F2[a];s]] else [] fi 
                                                     in let v2 ←─ if name_eq(fst(a);hdr3)
                                                        then [λs.f3[F3[a];s]]
                                                        else []
                                                        fi 
                                                        in let v3 ←─ if name_eq(fst(a);hdr4)
                                                           then [λs.f4[F4[a];s]]
                                                           else []
                                                           fi 
                                                           in let v4 ←─ v2 + v3
                                                              in let v5 ←─ v1 + v4
                                                                 in let v6 ←─ v + v5
                                                                    in let v7 ←─ ∪f∈v6.map(f;s)
                                                                       in let v8 ←─ if bag-null(v7) then s else v7 fi 
                                                                          in <mk-hdf v8, s>))^j - 1 
                              ⊥ 
                              v8
                             , [s]
                             > ≤ let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
                              if name_eq(fst(a);hdr2) then f2[F2[a];s]
                              if name_eq(fst(a);hdr3) then f3[F3[a];s]
                              if name_eq(fst(a);hdr4) then f4[F4[a];s]
                              else s
                              fi 
                              in <fix((λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
                                                           if name_eq(fst(a);hdr2) then f2[F2[a];s]
                                                           if name_eq(fst(a);hdr3) then f3[F3[a];s]
                                                           if name_eq(fst(a);hdr4) then f4[F4[a];s]
                                                           else s
                                                           fi 
                                                           in <mk-hdf v, [s]>)))) 
                                  v
                                 , [s]
                                 >
2
1. hdr1 : Name
2. hdr2 : Name
3. hdr3 : Name
4. hdr4 : Name
5. ¬(hdr3 = hdr4 ∈ Name)
6. ¬(hdr2 = hdr4 ∈ Name)
7. ¬(hdr2 = hdr3 ∈ Name)
8. ¬(hdr1 = hdr4 ∈ Name)
9. ¬(hdr1 = hdr3 ∈ Name)
10. ¬(hdr1 = hdr2 ∈ Name)
11. F4 : Base
12. f4 : Base
13. F3 : Base
14. f3 : Base
15. F2 : Base
16. f2 : Base
17. F1 : Base
18. f1 : Base
19. j : ℤ
20. 0 < j
21. ∀s:Base
      (λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
                           if name_eq(fst(a);hdr2) then f2[F2[a];s]
                           if name_eq(fst(a);hdr3) then f3[F3[a];s]
                           if name_eq(fst(a);hdr4) then f4[F4[a];s]
                           else s
                           fi 
                           in <mk-hdf v, [s]>))^j - 1 
       ⊥ 
       s ≤ fix((λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then [λs.f1[F1[a];s]] else [] fi 
                                    in let v1 ←─ if name_eq(fst(a);hdr2) then [λs.f2[F2[a];s]] else [] fi 
                                       in let v2 ←─ if name_eq(fst(a);hdr3) then [λs.f3[F3[a];s]] else [] fi 
                                          in let v3 ←─ if name_eq(fst(a);hdr4) then [λs.f4[F4[a];s]] else [] fi 
                                             in let v4 ←─ v2 + v3
                                                in let v5 ←─ v1 + v4
                                                   in let v6 ←─ v + v5
                                                      in let v7 ←─ ∪f∈v6.map(f;s)
                                                         in let v8 ←─ if bag-null(v7) then s else v7 fi 
                                                            in <mk-hdf v8, s>)))) 
           [s])
22. s : Base@i
23. a : Base
⊢ let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
  if name_eq(fst(a);hdr2) then f2[F2[a];s]
  if name_eq(fst(a);hdr3) then f3[F3[a];s]
  if name_eq(fst(a);hdr4) then f4[F4[a];s]
  else s
  fi 
  in <λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1) then f1[F1[a];s]
                          if name_eq(fst(a);hdr2) then f2[F2[a];s]
                          if name_eq(fst(a);hdr3) then f3[F3[a];s]
                          if name_eq(fst(a);hdr4) then f4[F4[a];s]
                          else s
                          fi 
                          in <mk-hdf v, [s]>))^j - 1 
      ⊥ 
      v
     , [s]
     > ≤ let v ←─ if name_eq(fst(a);hdr1) then [λs.f1[F1[a];s]] else [] fi 
      in let v1 ←─ if name_eq(fst(a);hdr2) then [λs.f2[F2[a];s]] else [] fi 
         in let v2 ←─ if name_eq(fst(a);hdr3) then [λs.f3[F3[a];s]] else [] fi 
            in let v3 ←─ if name_eq(fst(a);hdr4) then [λs.f4[F4[a];s]] else [] fi 
               in let v4 ←─ v2 + v3
                  in let v5 ←─ v1 + v4
                     in let v6 ←─ v + v5
                        in let v7 ←─ ∪f∈v6.[f s]
                           in let v8 ←─ if bag-null(v7) then [s] else v7 fi 
                              in <fix((λmk-hdf,s. (inl (λa.let v ←─ if name_eq(fst(a);hdr1)
                                                           then [λs.f1[F1[a];s]]
                                                           else []
                                                           fi 
                                                           in let v1 ←─ if name_eq(fst(a);hdr2)
                                                              then [λs.f2[F2[a];s]]
                                                              else []
                                                              fi 
                                                              in let v2 ←─ if name_eq(fst(a);hdr3)
                                                                 then [λs.f3[F3[a];s]]
                                                                 else []
                                                                 fi 
                                                                 in let v3 ←─ if name_eq(fst(a);hdr4)
                                                                    then [λs.f4[F4[a];s]]
                                                                    else []
                                                                    fi 
                                                                    in let v4 ←─ v2 + v3
                                                                       in let v5 ←─ v1 + v4
                                                                          in let v6 ←─ v + v5
                                                                             in let v7 ←─ ∪f∈v6.map(f;s)
                                                                                in let v8 ←─ if bag-null(v7)
                                                                                   then s
                                                                                   else v7
                                                                                   fi 
                                                                                   in <mk-hdf v8, s>)))) 
                                  v8
                                 , [s]
                                 >
Latex:
\mforall{}[F1,F2,F3,F4,f1,f2,f3,f4,s:Top].  \mforall{}[hdr1,hdr2,hdr3,hdr4:Name].
    (hdf-memory((\mlambda{}x,s.  f1[x;s])  o  hdf-base(a.if  name\_eq(fst(a);hdr1)  then  [F1[a]]  else  []  fi  )
                            ||  (\mlambda{}x,s.  f2[x;s])  o  hdf-base(a.if  name\_eq(fst(a);hdr2)  then  [F2[a]]  else  []  fi  )
                                  ||  (\mlambda{}x,s.  f3[x;s])  o  hdf-base(a.if  name\_eq(fst(a);hdr3)  then  [F3[a]]  else  []  fi  )
                                        ||  (\mlambda{}x,s.  f4[x;s])  o  hdf-base(a.if  name\_eq(fst(a);hdr4)
                                        then  [F4[a]]
                                        else  []
                                        fi  );[s])  \msim{}  fix((\mlambda{}mk-hdf,s.  (inl  (\mlambda{}a.cbva\_seq(\mlambda{}n.if  name\_eq(fst(a);hdr1)
                                                                                                                                              then  f1[F1[a];s]
                                                                                                                                          if  name\_eq(fst(a);hdr2)
                                                                                                                                              then  f2[F2[a];s]
                                                                                                                                          if  name\_eq(fst(a);hdr3)
                                                                                                                                              then  f3[F3[a];s]
                                                                                                                                          if  name\_eq(fst(a);hdr4)
                                                                                                                                              then  f4[F4[a];s]
                                                                                                                                          else  s
                                                                                                                                          fi  ;  \mlambda{}g.<mk-hdf  (g  (\mlambda{}x.x))
                                                                                                                                                          ,  [s]
                                                                                                                                                          >  1))))) 
                                                                s)  supposing 
          ((\mneg{}(hdr1  =  hdr2))  and 
          (\mneg{}(hdr1  =  hdr3))  and 
          (\mneg{}(hdr1  =  hdr4))  and 
          (\mneg{}(hdr2  =  hdr3))  and 
          (\mneg{}(hdr2  =  hdr4))  and 
          (\mneg{}(hdr3  =  hdr4)))
By
((UnivCD  THENA  Auto)
  THEN  (RWO  "hdf-base-transformation1"  0  THENA  Auto)
  THEN  (RWO  "hdf-compose1-transformation2"  0  THENA  Auto)
  THEN  Repeat  ((RWO  "hdf-parallel-transformation2-1"  0  THENA  Auto))
  THEN  Reduce  0
  THEN  (RWO  "hdf-memory-transformation2"  0  THENA  Auto)
  THEN  RepUR  ``cbva\_seq  mk\_lambdas\_fun  select\_fun\_ap  select\_fun\_last  mk\_lambdas  bag-map``  0
  THEN  Repeat  ((RecUnfold  `callbyvalueall\_seq`  0  THEN  Reduce  0))
  THEN  Repeat  ((RecUnfold  `mk\_lambdas-fun`  0  THEN  Reduce  0))
  THEN  Repeat  (((RWO  "primrec-unroll"  0  THENA  Auto)  THEN  Reduce  0))
  THEN  (RWO  "map-ifthenelse"  0  THENA  Auto)
  THEN  HdfStateTransStart  `s')
Home
Index