Prototype, extremely bad code implementation of CCHM Cubical Type Theory
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.7 KiB

3 years ago
3 years ago
3 years ago
  1. {- {- let
  2. sym : (A : Type) (x y : A) -> Path (\x -> A) x y -> Path (\x -> A) y x
  3. = λ A x y p i -> p (~ i)
  4. in let
  5. funext : (A : Type) (B : A -> Type) (f g : (x : A) -> B x) -> ((x : A) -> Path (\i -> B x) (f x) (g x)) -> Path (\i -> (x : A) -> B x) f g
  6. = λ A B f g h i x -> h x i
  7. in let
  8. i0IsI1 : Path (\x -> I) i0 i1
  9. = λ i -> i
  10. in let
  11. singContr : (A : Type) (a b : A) (p : Path (\j -> A) a b) -> Path (\i -> (x : A) * (Path (\j -> A) a x)) (a, \i -> a) (b, p)
  12. = λ A a b p i -> (p i, λ j -> p (i && j))
  13. in let
  14. transport : (A : I -> Type) (a : A i0) -> A i1
  15. = \A a -> comp A i0 (\i -> []) a
  16. in let
  17. Jay : (A : Type) (x : A)
  18. (P : (y : A) -> Path (\i -> A) x y -> Type)
  19. (d : P x (\i -> x))
  20. (y : A) (p : Path (\i -> A) x y)
  21. -> P y p
  22. = \A x P d y p -> transport (\i -> P (p i) (\j -> p (i && j))) d
  23. in -}
  24. let
  25. fill : (i : I) (A : I -> Type)
  26. (phi : I) (u : (i : I) -> Partial phi (A i))
  27. -> Sub (A i0) phi (u i0) -> A i
  28. = \i A phi u a0 ->
  29. comp (\j -> A (i && j)) (phi || ~i) (\j -> [ phi -> u (i && j), ~i -> a0 ]) a0
  30. in let
  31. trans : (A : Type) (a b c : A)
  32. -> Path (\i -> A) a b
  33. -> Path (\i -> A) b c
  34. -> Path (\i -> A) a c
  35. = \A a b c p q i ->
  36. comp (\j -> A) (i || ~i)
  37. (\j -> [ ~i -> a, i -> q j ])
  38. (p i)
  39. in let
  40. elimI : (P : I -> Type)
  41. (a : P i0)
  42. (b : P i1)
  43. -> Path P a b
  44. -> (i : I) -> P i
  45. = \P a b p i -> p i
  46. in let
  47. contrI : (i : I) -> Path (\i -> I) i0 i
  48. = \i -> elimI (\x -> Path (\i -> I) i0 x) (\i -> i0) (\i -> i) (\i j -> i && j) i
  49. in let
  50. IisContr : (i : I) * ((j : I) -> Path (\i -> I) i j)
  51. = (i0, contrI)
  52. in let
  53. compPath : (A : I -> Type)
  54. (phi : I) (u : (i : I) -> Partial phi (A i))
  55. -> (a0 : Sub (A i0) phi (u i0)) -> Path A a0 (comp A phi u a0)
  56. = \A phi u a0 j -> fill j A phi u a0
  57. in compPath -}
  58. let
  59. fill : (i : I) (A : I -> Type)
  60. (phi : I) (u : (i : I) -> Partial phi (A i))
  61. -> Sub (A i0) phi (u i0) -> A i
  62. = \i A phi u a0 ->
  63. comp (\j -> A (i && j)) (phi || ~i) (\j -> [ phi -> u (i && j), ~i -> a0 ]) a0
  64. in
  65. let
  66. pres : (A : I -> Type)
  67. (T : I -> Type)
  68. (f : (i : I) -> T i -> A i)
  69. (phi : I)
  70. (t : (i : I) -> Partial phi (T i))
  71. (t0 : Sub (T i0) phi (t i0))
  72. -> (let c1 : A i1 = comp A phi (\j -> [phi -> f j (t j)]) (f i0 t0) in
  73. let c2 : A i1 = f i1 (comp T phi (\j -> [phi -> t j]) t0) in
  74. Sub (Path (\i -> A i1) c1 c2) phi (\j -> f i1 (t i1)))
  75. = \A T f phi t t0 j ->
  76. let v : (i : I) -> T i = \i -> fill i T phi (\j -> [phi -> t j]) t0
  77. in comp A (phi || j) (\u -> [phi || j -> f u (v u)]) (f i0 t0)
  78. in pres