Step * 2 1 of Lemma fpf-join-assoc


1. Type
2. A ─→ Type
3. eq EqDecider(A)
4. List
5. f1 a:{a:A| (a ∈ d)}  ─→ B[a]
6. d1 List
7. g1 a:{a:A| (a ∈ d1)}  ─→ B[a]
8. d2 List
9. h1 a:{a:A| (a ∈ d2)}  ─→ B[a]
10. {a:A| (a ∈ filter(λa.(¬ba ∈b d));d1 filter(λa.(¬ba ∈b d1));d2)))} 
⊢ if x ∈b d) then f1 x
if x ∈b d1) then g1 x
else h1 x
fi 
if x ∈b filter(λa.(¬ba ∈b d));d1)) then if x ∈b d) then f1 else g1 fi  else h1 fi 
∈ B[x]
BY
(let Repeat ((((((RWW "member_append" THENA Auto) THEN RWW "member_filter" h) THENA (Reduce THEN Auto))
                       THEN All Reduce
                       THEN RW assert_pushdownC h)
                      THENA Auto
                      )) in
((((D (-1))
   THEN (R (-1))
   THEN Repeat (((SplitOnConclITE THENA (Auto THEN Try (DeqSubtype))) THEN (R (-1)) THEN Auto))
   THEN Repeat ((SplitOrHyps THEN Auto))
   THEN (D (-1)))
  THENL [OrLeft; OrRight]
 )
 THEN Auto
 ))⋅ }


Latex:



1.  A  :  Type
2.  B  :  A  {}\mrightarrow{}  Type
3.  eq  :  EqDecider(A)
4.  d  :  A  List
5.  f1  :  a:\{a:A|  (a  \mmember{}  d)\}    {}\mrightarrow{}  B[a]
6.  d1  :  A  List
7.  g1  :  a:\{a:A|  (a  \mmember{}  d1)\}    {}\mrightarrow{}  B[a]
8.  d2  :  A  List
9.  h1  :  a:\{a:A|  (a  \mmember{}  d2)\}    {}\mrightarrow{}  B[a]
10.  x  :  \{a:A|  (a  \mmember{}  d  @  filter(\mlambda{}a.(\mneg{}\msubb{}a  \mmember{}\msubb{}  d));d1  @  filter(\mlambda{}a.(\mneg{}\msubb{}a  \mmember{}\msubb{}  d1));d2)))\} 
\mvdash{}  if  x  \mmember{}\msubb{}  d)  then  f1  x
if  x  \mmember{}\msubb{}  d1)  then  g1  x
else  h1  x
fi 
=  if  x  \mmember{}\msubb{}  d  @  filter(\mlambda{}a.(\mneg{}\msubb{}a  \mmember{}\msubb{}  d));d1))  then  if  x  \mmember{}\msubb{}  d)  then  f1  x  else  g1  x  fi    else  h1  x  fi 


By

(let  R  h  =  Repeat  ((((((RWW  "member\_append"  h  THENA  Auto)  THEN  RWW  "member\_filter"  h)
                                            THENA  (Reduce  0  THEN  Auto)
                                            )
                                          THEN  All  Reduce
                                          THEN  RW  assert\_pushdownC  h)
                                        THENA  Auto
                                        ))  in
((((D  (-1))
      THEN  (R  (-1))
      THEN  Repeat  (((SplitOnConclITE  THENA  (Auto  THEN  Try  (DeqSubtype)))  THEN  (R  (-1))  THEN  Auto))
      THEN  Repeat  ((SplitOrHyps  THEN  Auto))
      THEN  (D  (-1)))
    THENL  [OrLeft;  OrRight]
  )
  THEN  Auto
  ))\mcdot{}




Home Index