-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSignature.v
76 lines (53 loc) · 1.61 KB
/
Signature.v
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Require Import HoTT.
Require Import Syntax.ScopeSystem.
Require Import Auxiliary.Family.
Require Import Syntax.SyntacticClass.
Require Import Syntax.Arity.
Section Signature.
Context {σ : scope_system}.
(** \cref{def:signature} *)
Definition signature : Type
:= family (syntactic_class * arity σ).
Definition symbol_class {Σ : signature} (S : Σ) : syntactic_class
:= fst (Σ S).
Definition symbol_arity {Σ : signature} (S : Σ) : arity σ
:= snd (Σ S).
End Signature.
Arguments signature _ : clear implicits.
Section Map.
Context {σ : scope_system}.
Local Definition map (Σ Σ' : signature σ) : Type
:= Family.map Σ Σ'.
Identity Coercion family_map_of_map : map >-> Family.map.
Local Definition idmap (Σ : signature σ)
: map Σ Σ
:= Family.idmap Σ.
Local Definition compose {Σ Σ' Σ'' : signature σ}
: map Σ' Σ'' -> map Σ Σ' -> map Σ Σ''
:= Family.compose.
Local Lemma id_right `{Funext}
{Σ Σ' : signature σ} (f : map Σ Σ')
: compose f (idmap _) = f.
Proof.
apply Family.id_right.
Defined.
Local Lemma id_left `{Funext}
{Σ Σ' : signature σ} (f : map Σ Σ')
: compose (idmap _) f = f.
Proof.
apply Family.id_left.
Defined.
End Map.
Section Examples.
Context {σ : scope_system}.
Local Definition empty : signature σ
:= [<>].
Local Definition empty_rect Σ : map empty Σ
:= Family.empty_rect.
Local Definition empty_rect_unique `{Funext} {Σ} (f : map empty Σ)
: f = empty_rect Σ.
Proof.
apply Family.empty_rect_unique.
Defined.
End Examples.
Arguments empty _ : clear implicits.