暴力證明 Relational Fold-Fusion
我想這個證明是一定要重寫的,所以我就不花時間多做解釋了 XD。基本上就是把 scm 老師給的證明很暴力地轉成 Agda。
首先是把 relational fold 重整成 functional fold。這個部份還好,用 ⊆
的 reflexivity 就過去了。
fun-to-rel : {A B C : Set} -> (R : C ← B) (S : B ← (A × B)) (T : C ← (A × C)) (U : ℙ B) (V : ℙ C) -> ∀ (\x -> (foldr (Λ₁ (T ○₁ (idR ⨉₁ ∈))) V x) ⊆ (Λ₁ (R ○₁ ∈) (foldr (Λ₁ (S ○₁ (idR ⨉₁ ∈))) U x))) -> (R ○ fold S U) ⊇ fold T V fun-to-rel R S T U V ⊆-pf x = chain> Λ(fold T V) x ⊂ foldr (Λ₁ (T ○₁ (idR ⨉₁ ∈))) V x by refl-⊆ ⊂ Λ₁(R ○₁ ∈) (foldr (Λ₁ (S ○₁ (idR ⨉₁ ∈))) U x) by ⊆-pf x ⊂ Λ₁(R ○₁ ∈) (Λ (fold S U) x) by refl-⊆ ⊂ (Λ₁(R ○₁ ∈) ₁○ Λ (fold S U)) x by refl-⊆ ⊂ Λ(R ○ fold S U) x by refl-⊆
接下來是在 funciontal fold 上證明 fusion。那些 lemmas 都是暴力產生的 XD。
fusion : {A B C : Set} -> (R : C ← B) (S : B ← (A × B)) (T : C ← (A × C)) (U : ℙ B) (V : ℙ C) -> (R ○ S) ⊇ (T ○ (idR ⨉ R)) -> V ⊆ Λ₁ (R ○₁ ∈) U -> ∀ (\x -> (foldr (Λ₁ (T ○₁ (idR ⨉₁ ∈))) V x) ⊆ (Λ₁ (R ○₁ ∈) (foldr (Λ₁ (S ○₁ (idR ⨉₁ ∈))) U x))) fusion R S T U V step-cond base-cond [] = chain> (foldr (Λ₁ (T ○₁ (idR ⨉₁ ∈))) V []) ⊂ V by refl-⊆ ⊂ Λ₁ (R ○₁ ∈) U by base-cond fusion R S T U V step-cond base-cond (a :: x) = chain> foldr (Λ₁ (T ○₁ (idR ⨉₁ ∈))) V (a :: x) ⊂ Λ₁ (T ○₁ (idR ⨉₁ ∈)) < a , foldr (Λ₁(T ○₁ (idR ⨉₁ ∈))) V x >₁ by refl-⊆ ⊂ Λ₁ (T ○₁ (idR ⨉₁ ∈)) < a , Λ₁(R ○₁ ∈) (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) >₁ by lemma1 T (fusion R S T U V step-cond base-cond x) a ⊂ Λ₁ (T ○₁ (idR ⨉₁ ∈)) (〈 id , Λ₁ (R ○₁ ∈) 〉₁ < a , foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x >₁) by lemma2 (Λ₁ (T ○₁ (idR ⨉₁ ∈))) R a (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) ⊂ Λ₁ (T ○₁ (idR ⨉₁ (R ○₁ ∈))) < a , foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x >₁ by lemma3 T (R ○₁ ∈) a (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) ⊂ Λ₁ ((T ○ (idR ⨉ R)) ○₁ (idR ⨉₁ ∈)) < a , foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x >₁ by lemma4 R T a (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) ⊂ Λ₁ ((R ○ S) ○₁ (idR ⨉₁ ∈)) < a , foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x >₁ by lemma5 R S T (idR ⨉₁ ∈) step-cond a (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) ⊂ Λ₁ (R ○₁ ∈) (Λ₁ (S ○₁ (idR ⨉₁ ∈)) < a , foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x >₁) by lemma6 R S (idR ⨉₁ ∈) a (foldr (Λ₁(S ○₁ (idR ⨉₁ ∈))) U x) ⊂ Λ₁ (R ○₁ ∈) (foldr (Λ₁ (S ○₁ (idR ⨉₁ ∈))) U (a :: x)) by refl-⊆ where lemma1 : {A B C : Set} {s t : ℙ B} (T : C ← (A × B)) -> s ⊆ t -> ∀ (\a -> Λ₁ (T ○₁ (idR ⨉₁ ∈)) < a , s >₁ ⊆ Λ₁ (T ○₁ (idR ⨉₁ ∈)) < a , t >₁) lemma1 _ s⊆t a x (∃-I < a' , b' > (/\-I (/\-I a≡a' sb') T<a',b'>x))= ∃-I < a' , b' > (/\-I (/\-I a≡a' (s⊆t b' sb')) T<a',b'>x) lemma2 : {A B C : Set} (F : (A ×₁ ℙ C) -> ℙ C) (R : C ← B) -> (a : A) -> (bs : ℙ B) -> F < a , Λ₁(R ○₁ ∈) bs >₁ ⊆ F (〈 id , Λ₁ (R ○₁ ∈) 〉₁ < a , bs >₁) lemma2 _ _ _ _ _ pf = pf lemma3 : {A B C : Set} (T : C ← (A × C)) (X : C ←₁ ℙ B) -> (a : A) -> (bs : ℙ B) -> Λ₁(T ○₁ (idR ⨉₁ ∈)) (〈 id , Λ₁ X 〉₁ < a , bs >₁) ⊆ Λ₁(T ○₁ (idR ⨉₁ X)) < a , bs >₁ lemma3 T X a bs c (∃-I < a' , c' > pf) = ∃-I < a' , c' > pf lemma4 : {A B C : Set} (R : C ← B) (T : C ← (A × C)) -> (a : A) (bs : ℙ B) -> Λ₁ (T ○₁ (idR ⨉₁ (R ○₁ ∈))) < a , bs >₁ ⊆ Λ₁ ((T ○ (idR ⨉ R)) ○₁ (idR ⨉₁ ∈)) < a , bs >₁ lemma4 _ _ _ _ _ (∃-I < a' , c' > (/\-I (/\-I pf1 (∃-I b' (/\-I pf2 pf3))) pf4)) = ∃-I < a' , b' > (/\-I (/\-I pf1 pf2) (∃-I < a' , c' > (/\-I (/\-I refl pf3) pf4))) lemma5 : {A B C : Set} (R : C ← B) (S : B ← (A × B)) (T : C ← (A × C)) (X : (A × B) ←₁ (A ×₁ ℙ B)) -> (R ○ S) ⊇ (T ○ (idR ⨉ R)) -> (a : A) -> (bs : ℙ B) -> Λ₁ ((T ○ (idR ⨉ R)) ○₁ X) < a , bs >₁ ⊆ Λ₁ ((R ○ S) ○₁ X) < a , bs >₁ lemma5 _ _ _ _ pf1 _ _ c (∃-I < a' , b' > (/\-I pf2 pf3)) = ∃-I < a' , b' > (/\-I pf2 (pf1 < a' , b' > c pf3)) lemma6 : {A B C : Set} (R : C ← B) (S : B ← (A × B)) (X : (A × B) ←₁ (A ×₁ ℙ B)) -> (a : A) -> (bs : ℙ B) -> Λ₁ ((R ○ S) ○₁ X) < a , bs >₁ ⊆ Λ₁ (R ○₁ ∈) (Λ₁ (S ○₁ X) < a , bs >₁) lemma6 _ _ _ _ _ c (∃-I < a , b > (/\-I pf1 (∃-I b' (/\-I pf2 pf3)))) = ∃-I b' (/\-I (∃-I < a , b > (/\-I pf1 pf2)) pf3)
最後把上面兩個證明組合起來,就得到整個 relational fold-fusion theorem。
rel-fold-fusion : {A B C : Set} -> (R : C ← B) (S : B ← (A × B)) (T : C ← (A × C)) (U : ℙ B) (V : ℙ C) -> (R ○ S) ⊇ (T ○ (idR ⨉ R)) -> V ⊆ Λ₁ (R ○₁ ∈) U -> (R ○ fold S U) ⊇ fold T V rel-fold-fusion R S T U V step-cond base-cond = fun-to-rel R S T U V (fusion R S T U V step-cond base-cond)
--
真是太暴力了 XD。
Labels: Agda
<< 回到主頁