0 | module Data.Sigma
 1 |
 2 | import Data.Ops
 3 |
 4 | ||| Dependent pairs
 5 | public export
 6 | record Σ (a : Type) (b : a -> Type) where
 7 |   constructor (##)
 8 |   ||| First projection of sigma
 9 |   p1 : a
10 |   ||| Second projection of sigma
11 |   p2 : b p1
12 |
13 | public export
14 | Sigma : (a : Type) -> (b : a -> Type) -> Type
15 | Sigma = Σ
16 |
17 | public export
18 | π1 : Σ a b -> a
19 | π1 = p1
20 |
21 | public export
22 | (.π1) : Σ a b -> a
23 | (.π1) = p1
24 |
25 | public export
26 | π2 : (x : Σ a b) -> b x.p1
27 | π2 = p2
28 |
29 | public export
30 | (.π2) : (x : Σ a b) -> b x.p1
31 | (.π2) = p2
32 |
33 | public export
34 | projBoth : (x : Σ a b) -> x.π1 ## x.π2 = x
35 | projBoth (p1 ## p2) = Refl
36 |
37 |