Prove "foreign naturality condition"

This commit is contained in:
Frederik Hanghøj Iversen 2018-03-01 18:00:51 +01:00
parent f526fd6010
commit a7f31bb3e2

View file

@ -277,8 +277,22 @@ module Kleisli {a b : Level} ( : Category a b) where
isNaturalForeign : IsNaturalForeign
isNaturalForeign = begin
join fmap join ≡⟨ {!!}
join join
fmap join >>> join ≡⟨⟩
bind (join >>> pure) >>> bind 𝟙
≡⟨ isDistributive _ _
bind ((join >>> pure) >>> bind 𝟙)
≡⟨ cong bind .isAssociative
bind (join >>> (pure >>> bind 𝟙))
≡⟨ cong (λ φ bind (join >>> φ)) (isNatural _)
bind (join >>> 𝟙)
≡⟨ cong bind (proj₂ .isIdentity)
bind join ≡⟨⟩
bind (bind 𝟙)
≡⟨ cong bind (sym (proj₁ .isIdentity))
bind (𝟙 >>> bind 𝟙) ≡⟨⟩
bind (𝟙 >=> 𝟙) ≡⟨ sym (isDistributive _ _)
bind 𝟙 >>> bind 𝟙 ≡⟨⟩
join >>> join
isInverse : IsInverse
isInverse = inv-l , inv-r