summaryrefslogtreecommitdiff
path: root/src/Core/Environment.idr
blob: cdf58b78d472433a0be37bc4003aa21fd05e9702 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Core.Environment

import Core.Term
import Core.Term.Thinned
import Core.Thinning

infix 4 =~=

-- Definition ------------------------------------------------------------------

public export
data Env : Nat -> Type where
  Lin : Env 0
  (:<) : Env n -> Thinned n -> Env (S n)

namespace Eq
  public export
  data (=~=) : Env n -> Env n -> Type where
    Refl : env =~= env
    (:<) : env1 =~= env2 -> t =~= u -> env1 :< t =~= env2 :< u

%name Env env
%name Eq.(=~=) prf

-- Indexing --------------------------------------------------------------------

public export
index : Env n -> Fin n -> Thinned n
index (env :< t) FZ = wkn t (wkn1 _)
index (env :< t) (FS i) = wkn (index env i) (wkn1 _)

export
indexCong :
  {0 env1, env2 : Env n} ->
  env1 =~= env2 ->
  (i : Fin n) ->
  index env1 i =~= index env2 i
indexCong Refl i = Refl
indexCong (prf :< prf') FZ = wknCong prf' (wkn1 _)
indexCong (prf :< prf') (FS i) = wknCong (indexCong prf i) (wkn1 _)