open import Cat.Instances.Shape.Involution
open import Cat.Instances.Shape.Interval
open import Cat.Functor.Properties
open import Cat.Functor.Compose
open import Cat.Prelude
open import Data.Bool
open Precategory
open Functor
open _=>_
module PostcomposeNotFull where
claim =
∀ {o ℓ o' ℓ' od ℓd} {C : Precategory o ℓ} {C' : Precategory o' ℓ'} {D : Precategory od ℓd}
→ (p : Functor C C') → is-full p → is-full (postcompose p {D = D})
module _ (assume : claim) where
C : Precategory lzero lzero
C .Ob = Bool
C .Hom true true = Bool
C .Hom true false = Bool
C .Hom false true = ⊥
C .Hom false false = Bool
C .Hom-set true true = hlevel 2
C .Hom-set true false = hlevel 2
C .Hom-set false true = hlevel 2
C .Hom-set false false = hlevel 2
C .id {true} = false
C .id {false} = false
C ._∘_ {true} {true} {true} = xor
C ._∘_ {false} {false} {false} = xor
C ._∘_ {true} {true} {false} f g = xor g f
C ._∘_ {true} {false} {false} f g = g
C .idr {true} {true} f = xor-falser f
C .idr {true} {false} f = refl
C .idr {false} {false} f = xor-falser f
C .idl {true} {true} f = refl
C .idl {true} {false} f = refl
C .idl {false} {false} f = refl
C .assoc {true} {true} {true} {true} f g h = xor-associative f g h
C .assoc {false} {false} {false} {false} f g h = xor-associative f g h
C .assoc {true} {true} {true} {false} f true true = sym (not-involutive f)
C .assoc {true} {true} {true} {false} f true false = refl
C .assoc {true} {true} {true} {false} f false h = refl
C .assoc {true} {true} {false} {false} f g h = refl
C .assoc {true} {false} {false} {false} f g h = refl
p : Functor C (0≤1 ^op)
p .F₀ o = o
p .F₁ {true} {true} = _
p .F₁ {true} {false} = _
p .F₁ {false} {true} ()
p .F₁ {false} {false} = _
p .F-id {true} = refl
p .F-id {false} = refl
p .F-∘ {true} {true} {true} f g = refl
p .F-∘ {true} {true} {false} f g = refl
p .F-∘ {true} {false} {false} f g = refl
p .F-∘ {false} {false} {false} f g = refl
p-is-full : is-full p
p-is-full {true} {true} _ = inc (false , refl)
p-is-full {true} {false} _ = inc (false , refl)
p-is-full {false} {false} _ = inc (false , refl)
p*-is-full : is-full (postcompose p {D = ∙⤮∙})
p*-is-full = assume p p-is-full
F G : Functor ∙⤮∙ C
F .F₀ _ = true
F .F₁ f = f
F .F-id = refl
F .F-∘ _ _ = refl
G .F₀ _ = false
G .F₁ f = f
G .F-id = refl
G .F-∘ _ _ = refl
impossible : F => G → ⊥
impossible θ = not-no-fixed (sym (θ .is-natural _ _ true))
pθ : p F∘ F => p F∘ G
pθ .η = _
pθ .is-natural _ _ _ = refl
θ : ∥ F => G ∥
θ = fst <$> p*-is-full pθ
contradiction : ⊥
contradiction = rec! impossible θ