Steve Awodey. Category Theory 읽기 PureScript 쓰기 [처음(?)・제2장]

23907 단어 PureScripttech

개시하다


이 글은 Steve Awodey의 Category Theory를 읽으면서 나온 개념을 PureScript로 구현한 것이다.
"처음(?)"책 중간부터 쓰고 싶어서 처음부터 쓴 게 아니에요
나는 지금도 보고 있기 때문에 지식이 없다. 나는 '모르면 쓸 수 없다' 는 정신에 따라 했는데, 아마도 잘못 썼을 것이다.

2.3


종결 대상 1에서 대상 A로 쏘는 1\rightarowa를 Points라고 한다. (의문점: 다른 문헌 중역이 반드시 1은 아니다. 용어의 차이는?)
집합 또는 반순으로 집합된 권내에는 사격 f:A\rightarowB와 g:A\rightarowB가 있고 모든pointsa:1은rightarowA에 대해 fcirca=g\circa가 쏘면 f와 g가 같다.
☆ 이것은 PureScript의 범위이다(Haskell의 경우는Hask이기 때문에Pure?)근데 성립된 거 아니에요?
그 전에 Pure의 구성이
  • 대상:kindType가 있는 유형
  • 사: 함수
  • 이 정도면 될 것 같은데..
    https://myuon.github.io/posts/versus-hask-category/
    Hask 동그라미가 안 되는 것 같아요.
    퓨어스크립트는 정규 평가이기 때문에 call-by-need 문제가 없을 거예요. 그런데 undefined에 대해서는 몰라요.
    하지만 FFI를 배제한 퓨어스크립트는 없을 수도 있다undefined. 앞으로 이 부분을 고려하고 싶다.
    ☆로 돌아가면,f :: A -> Bg :: A -> B가 있고 임의a :: Unit -> A(f <<< a) unit == (g <<< a) unit일 때 임의e :: A가 있다.
    되다
    (함수f e == g ef의 동일한 값을 모두ge로 정의한다f e == g e.
    증명)
    임의의 e :: A인 경우 a = const e인 경우 f e == (f <<< a) unit == (g <<< a) unit === g e

    2.4


    대상 A와 B의 적은 P와 p이다1:P\rightarrow A p_2:P\rightarowA, 그룹, 임의의 객체 X 및 x를 생성합니다.1:X\rightarrow A,x_2: X\rightarowB의 경우 고유 발사 u:X\rightarow P에 x 있음1 = p_1\circ u,x_2 = p_2\circu만족
    이것1, x_쓰다
    (고찰)'일반화 요소'의 사고방식을 사용한다면1은 A의 요소, x2는 B의 요소이고 u는 P의 요소이다. 다시 말하면
    "A와 B의 직접적 축적 P는 A의 요소인 a와 B의 요소인 b에 대해 유일한 P의 요소인 p, a=p1(p), b=p2(p) 같은 P와 집합의 직접적 축적과 같은 표기법이 있어 상대방의 마음을 쉽게 이해할 수 있다(전혀 말이 안 될 수도 있다)
    이것은 직적형과 좌우 각 값을 추출하는 함수에 대응한다.
    data ProductT a b = Cons a b
    
    p1 :: forall a b. ProductT a b -> a
    p1 (Cons a _) = a
    
    p2 :: forall a b. ProductT a b -> b
    p2 (Cons _ b) = b
    
    이것은 위의 정의를 만족시키면 다음과 같은 느낌으로 u를 생성하는 함수를 정의할 수 있다.
    genU :: forall x a b. (x -> a) -> (x -> b) -> x -> ProductT a b
    genU x1 x2 x = Cons (x1 x) (x2 x)
    
    모두에 대해 x :: Xx1 x == (p1 <<< genU x1 x2) xx2 x == (p2 <<< genU x1 x2) x그 전에 반드시 이런 함수가 유일하다고 말해야 한다고 할 수 있다.
    함수genU에 대해genU' :: forall x a b. (x -> a) -> (x -> b) -> x -> ProductT a bx1 x == (p1 <<< genU' x1 x2) x성립하면x2 x == (p2 <<< genU' x1 x2) xx1 x == p1 (genU' x1 x2 x)단, p1과 p2의 정의에서x2 x == p2 (genU' x1 x2 x) genU' x1 x2 x = Cons (x1 x) (x2 x)와 같기 때문에 유일합니다.
    또한 분류를 시도해 봅시다. a와 b의 임의의 직접적 사이에 동형사가 존재하기 때문에 아래의 종류를 준비할 수 있습니다.
    class ProductC product a b | product -> a b where
      toProductT :: product -> ProductT a b
      fromProductT :: ProductT a b -> product
    

    2.6


    모든 개체 A, A'에 대해 C권 내에 개체 A\times A가 있는 경우
    f:A\rightarow B와 f':A'\rightarow B', A와 A'의 직접적 축적 A\times A',p1:A×A'\rightarrow A, p_2:A×A'\rightarowa'에 대해 f\times f'=\langle f circp1, f'\circ p_2\rangle:A\times A'\rightarrow B\times B'
    이렇게 하면
    \times :C\times C\rightarrow C
    닫다이 책은 정의되었습니까?
  • 증명(손잡이 규칙 만족)

  • 1_A\times 1_B=1_{A\times B}
    A와 B의 직접적인 축적은 A\times B, p1:A\times B\rightarrow A,p_2:A\times B\rightarow B.
    1_A\times 1_B=\langle 1_A\circ p_1, 1_A\circ p_2\rangle=\langle p_1, p_2\rangle
    여기\langlep1, p_2\rangle은 u,p1=p_1\circ u,p_2=p_만족 2\circu, u의 유일성에 따라 u=1{A\times B}

  • f_1:A\rightarrow B,f_2:B\rightarrow C,g_1:P\rightarrow Q,g_2:Q\rightarowR(f 2\timesg 2)\circ(f 1\times 1)=(f 2\circf 1)\times(g 2\circg 1)
    A와 P의 직접적 축적은 A\times P, p-A:A\times P\rightarrow A,p_A\times P\rightarow P로 가정합니다.
    B\times Q, p-직선 BB:B\times Q\rightarrow B,p_Q:B\times Q\rightarow Q.
    (f_2\times g_2)\circ (f_1\times g_1)=\langle f_2\circ p_B, g_2\circ p_Q\rangle\circ\langle f_1\circ p_A, g_1\circ p_P\rangle =\langle f_2\circ f_1\circ p_A, g_2\circ g_1\circ p_P\rangle = f_2\circ f_1\times g_2\circ g_1(고유성)
  • 후자는 많이 부러졌다.
    PureScript의 경우 에 해당genUProductT 인스턴스가 됩니다.
    class Bifunctor f where
      bimap :: forall a b c d. (a -> b) -> (c -> d) -> f a c -> f b d
    
    instance Bifunctor ProductT where
      bimap f g (Cons a b) = Cons (f a) (g b)
    
    당연히 닫는 규칙을 만족시키지만, 먼저 확인해 보세요.
    bimap identity identity
      == \(Cons a b) -> Cons a b
      == identity
    bimap f1 g1 <<< bimap f2 g2
      == (\(Cons a b) -> Cons (f1 a) (g1 b)) <<< (\(Cons a b) -> Cons (f2 a) (g2 b))
      == \(Cons a b) -> Cons (f1 <<< f2 $ a) (g1 <<< g2 $ b)
      == bimap (f1 <<< f2) (g1 <<< g2)
    

    2.7

  • 정리
    객체 A, B, P 및 p1:P\rightarrow A,p_2:P\rightarow B, X
    \vartheta _X:\rm{Hom}(X,P)\rightarrow\rm{Hom}(X,A)\times\rm{Hom}(X,B)
    정의
    \vartheta _X(x)=(p_1\circ x, p_2\circ x)
    이때'P는 A와 B의 직적'과'임의의 X에 대해\vartheta X는 (집합 사이의 매핑으로) 같은 유형의 매핑'과 같다
  • Pure에서\rm{Hom}(X,P)는Bifunctor,Pure의 대상(이것은 CCC의 성질의 일부분인 것 같다https://scrapbox.io/mrsekut-p/CCC
    (저는 그렇게 생각하지만 틀과 집합은 그럴 듯하지만 그렇지 않다고 생각합니다.\rm{Hom}(X,P)정말 X -> P인가요?이런 기분
    PureScript로 바꾸어 말하면 이렇다(?)
    먼저 Vartheta(\vartheta) 클래스를 정의합니다.
    class Vartheta product a b | product -> a b where
      vartheta
        :: forall x
         . (x -> product)
        -> ProductT (x -> a) (x -> b) --Productは集合の意味での直積として使っている
      varthetaInv
        :: forall x
         . ProductT (x -> a) (x -> b)
        -> (x -> product)
    
    -- 条件: 型xが同じなら,vartheta <<< varthetaInv == identityかつvarthetaInv <<< vartheta == identity
    
    모든 유형의 x에 대한\varthetax,\varthetax^{-1}이 있음을 나타냅니다 (\varthetax는 같은 종류의 맵이고 역맵이 같은 값입니다)
    또한 여기의 X -> P형 변수는 producta의 직접적인 적을 필요로 하지 않는다.
    또한 모든 유형b에 대해 실례product를 만들 때 하나의 유형x이 존재한다.
    구성이 구체적이다.
    instance Vartheta product a b => ProductC product a b where
      toProductT p = Cons (a unit) (b unit)
        where
        Cons a b = vartheta (const p)
      fromProductT (Cons a b) = varthetaInv (Cons (const a) (const b)) unit
    
    instance ProductC product a b => Vartheta product a b where
      vartheta = f
        where
        f p = Cons a b
          where
          a x = p1 $ toProductT (p x)
          b x = p2 $ toProductT (p x)
      varthetaInv = fInv
        where
        fInv (Cons a b) x = fromProductT $ Cons (a x) (b x)
    
  • 정리
    닫기\rm{Hom}(X,-) 직선적 저장
    PureScript로 바꾸어 말하면
    유형Vartheta product a b,ProductC product a b,a에 대해 임의의 유형bproduct 사이에 같은 사격이 있다.
    여기에는 ProductC product a b의 임의x 사이에 같은 유형의 발사가 존재하기 때문에 임의의 유형x -> productProductC product2 (x -> a) (x -> b) 사이에 같은 유형의 발사가 존재한다는 뜻이다.
    구성이 구체적이다.
    변하다

    감상


    시간이 많이 걸릴 줄은 몰랐어요. 계속 쓸 수 있을지 걱정이에요. 그리고 여러 가지 구체적인 예가 실린 2.5장과 연습문제는 모두 건너뛰었어요. 퓨어스크립트로 실시하고 싶은 내용이 있으면 부기에 쓰고 싶어요.
  • 좋은 웹페이지 즐겨찾기