As explained in the abstract theory, renamings are a particular kind of assignements, where variables are mapped to variables.
In this file we define renamings for a given abstract context structure and provide all their properties that we will use throughout the development.
Context inclusion, or renaming is defined as an assignment of variables in Ξ to variables in Ξ.
Notation "Ξ β Ξ" := (@assignment T C CC c_var Ξ%ctx Ξ%ctx).
The identity inclusion, whose renaming is the identity.
Definition r_id {Ξ} : Ξ β Ξ := fun _ i => i . #[global] Arguments r_id _ _ /.
Renaming assignments on the left by precomposition
Definition a_ren_l {F Ξ1 Ξ2 Ξ3} : Ξ1 β Ξ2 -> Ξ2 =[F]> Ξ3 -> Ξ1 =[F]> Ξ3 := a_map. #[global] Arguments a_ren_l _ _ _ _ _ _ _ /. Notation "r α΅£β u" := (a_ren_l r u) : asgn_scope.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3: CProper (asgn_eq Ξ1 Ξ2 ==> asgn_eq Ξ2 Ξ3 ==> asgn_eq Ξ1 Ξ3) a_ren_lintros ?? H1 ?? H2 ??; cbn; now rewrite H1, H2. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3: CProper (asgn_eq Ξ1 Ξ2 ==> asgn_eq Ξ2 Ξ3 ==> asgn_eq Ξ1 Ξ3) a_ren_lT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2: C
a: Ξ1 =[ F ]> Ξ2r_id α΅£β a β‘β areflexivity. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2: C
a: Ξ1 =[ F ]> Ξ2r_id α΅£β a β‘β aT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ4: C
u: Ξ1 β Ξ2
v: Ξ2 β Ξ3
w: Ξ3 =[ F ]> Ξ4(u α΅£β v) α΅£β w β‘β u α΅£β (v α΅£β w)reflexivity. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ4: C
u: Ξ1 β Ξ2
v: Ξ2 β Ξ3
w: Ξ3 =[ F ]> Ξ4(u α΅£β v) α΅£β w β‘β u α΅£β (v α΅£β w)
The fiber of the inclusion c_var (Ξ +βΆ Ξ) βͺ c_var Ξ + c_var Ξ is a subsingleton.
T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ1 +βΆ Ξ2 β x
a, b: c_cat_view Ξ1 Ξ2 x ia = bT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ1 +βΆ Ξ2 β x
a, b: c_cat_view Ξ1 Ξ2 x ia = bT, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
i, i0: Ξ1 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_l i0)
x1: r_cat_l i = r_cat_l i0
x: Vcat_l i ~= b0Vcat_l i0 = b0T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
j: Ξ2 β x0
i0: Ξ1 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_l i0)
x1: r_cat_r j = r_cat_l i0
x: Vcat_r j ~= b0Vcat_l i0 = b0T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
i: Ξ1 β x0
j: Ξ2 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_r j)
x1: r_cat_l i = r_cat_r j
x: Vcat_l i ~= b0Vcat_r j = b0T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
j0, j: Ξ2 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_r j)
x1: r_cat_r j0 = r_cat_r j
x: Vcat_r j0 ~= b0Vcat_r j = b0T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
i, i0: Ξ1 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_l i0)
x1: r_cat_l i = r_cat_l i0
x: Vcat_l i ~= b0Vcat_l i0 = b0now rewrite x1 in x |-; rewrite x.T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
i, i0: Ξ1 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_l i0)
x1: i = i0
x: Vcat_l i ~= b0Vcat_l i0 = b0symmetry in x1; destruct (r_cat_disj _ _ x1).T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
j: Ξ2 β x0
i0: Ξ1 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_l i0)
x1: r_cat_r j = r_cat_l i0
x: Vcat_r j ~= b0Vcat_l i0 = b0destruct (r_cat_disj _ _ x1).T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
i: Ξ1 β x0
j: Ξ2 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_r j)
x1: r_cat_l i = r_cat_r j
x: Vcat_l i ~= b0Vcat_r j = b0T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
j0, j: Ξ2 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_r j)
x1: r_cat_r j0 = r_cat_r j
x: Vcat_r j0 ~= b0Vcat_r j = b0now rewrite x1 in x |-; rewrite x. Qed.T, C: Type
CC: context T C
Ξ1, Ξ2: C
x0: T
CL: context_laws T C
j0, j: Ξ2 β x0
b0: c_cat_view Ξ1 Ξ2 x0 (r_cat_r j)
x1: j0 = j
x: Vcat_r j0 ~= b0Vcat_r j = b0
Simplifications of the embedding.
T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ1 β xc_view_cat (r_cat_l i) = (Vcat_l i : c_cat_view Ξ1 Ξ2 x (r_cat_l i))apply view_cat_irr. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ1 β xc_view_cat (r_cat_l i) = (Vcat_l i : c_cat_view Ξ1 Ξ2 x (r_cat_l i))T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ2 β xc_view_cat (r_cat_r i) = (Vcat_r i : c_cat_view Ξ1 Ξ2 x (r_cat_r i))apply view_cat_irr. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C
x: T
i: Ξ2 β xc_view_cat (r_cat_r i) = (Vcat_r i : c_cat_view Ξ1 Ξ2 x (r_cat_r i))
Simplifying copairing.
T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξr_cat_l α΅£β [u, v] β‘β uintros ? i; cbn; now rewrite c_view_cat_simpl_l. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξr_cat_l α΅£β [u, v] β‘β uT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξr_cat_r α΅£β [u, v] β‘β vintros ? i; cbv; now rewrite c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξr_cat_r α΅£β [u, v] β‘β v
Universal property of copairing.
T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: (Ξ1 +βΆ Ξ2) =[ F ]> Ξ
H1: u β‘β r_cat_l α΅£β w
H2: v β‘β r_cat_r α΅£β w[u, v] β‘β wT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: (Ξ1 +βΆ Ξ2) =[ F ]> Ξ
H1: u β‘β r_cat_l α΅£β w
H2: v β‘β r_cat_r α΅£β w[u, v] β‘β wdestruct (c_view_cat i); [ exact (H1 _ i) | exact (H2 _ j) ]. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: (Ξ1 +βΆ Ξ2) =[ F ]> Ξ
H1: u β‘β r_cat_l α΅£β w
H2: v β‘β r_cat_r α΅£β w
a: T
i: Ξ1 +βΆ Ξ2 β amatch c_view_cat i with | Vcat_l i => u a i | Vcat_r j => v a j end = w a i
Identity copairing.
T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C[r_cat_l, r_cat_r] β‘β r_idnow apply a_cat_uniq. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2: C[r_cat_l, r_cat_r] β‘β r_id
Action of concatenation on maps.
Definition r_catβ {Ξ1 Ξ2 Ξ1 Ξ2} (r1 : Ξ1 β Ξ1) (r2 : Ξ2 β Ξ2) : (Ξ1 +βΆ Ξ2) β (Ξ1 +βΆ Ξ2) := [ r1 α΅£β r_cat_l , r2 α΅£β r_cat_r ] . #[global] Arguments r_catβ _ _ _ _ _ _ _ _ /.
Shifting renamings on the right.
Definition r_shift {Ξ Ξ} R (r : Ξ β Ξ) : (Ξ +βΆ R) β (Ξ +βΆ R) := [ r α΅£β r_cat_l , r_cat_r ] . #[global] Arguments r_shift _ _ _ _ _ _ /.T, C: Type
CC: context T C
CL: context_laws T C
Ξ, R: Cr_shift R r_id β‘β r_idnow apply a_cat_uniq. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ, R: Cr_shift R r_id β‘β r_idT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3r_shift R (r1 α΅£β r2) β‘β r_shift R r1 α΅£β r_shift R r2T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3r_shift R (r1 α΅£β r2) β‘β r_shift R r1 α΅£β r_shift R r2T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3
a: T
i: Ξ1 β ar_cat_l (r2 a (r1 a i)) = match c_view_cat (r_cat_l (r1 a i)) with | Vcat_l i => r_cat_l (r2 a i) | Vcat_r j => r_cat_r j endT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3
a: T
j: R β ar_cat_r j = match c_view_cat (r_cat_r j) with | Vcat_l i => r_cat_l (r2 a i) | Vcat_r j => r_cat_r j endremember (r1 _ i) as j; now rewrite c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3
a: T
i: Ξ1 β ar_cat_l (r2 a (r1 a i)) = match c_view_cat (r_cat_l (r1 a i)) with | Vcat_l i => r_cat_l (r2 a i) | Vcat_r j => r_cat_r j endnow rewrite c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3, R: C
r1: Ξ1 β Ξ2
r2: Ξ2 β Ξ3
a: T
j: R β ar_cat_r j = match c_view_cat (r_cat_r j) with | Vcat_l i => r_cat_l (r2 a i) | Vcat_r j => r_cat_r j endT, C: Type
CC: context T C
CL: context_laws T C
Ξ, Ξ, R: CProper (asgn_eq Ξ Ξ ==> asgn_eq (Ξ +βΆ R)%ctx (Ξ +βΆ R)%ctx) (r_shift R)T, C: Type
CC: context T C
CL: context_laws T C
Ξ, Ξ, R: CProper (asgn_eq Ξ Ξ ==> asgn_eq (Ξ +βΆ R)%ctx (Ξ +βΆ R)%ctx) (r_shift R)now rewrite H. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ, Ξ, R: C
x, y: Ξ β Ξ
H: x β‘β y
a: T
i: Ξ β ar_cat_l (x a i) = r_cat_l (y a i)
A bunch of shorthands for useful renamings.
Definition r_cat_rr {Ξ1 Ξ2 Ξ3} : Ξ3 β (Ξ1 +βΆ (Ξ2 +βΆ Ξ3)) := r_cat_r α΅£β r_cat_r . Definition r_cat3_1 {Ξ1 Ξ2 Ξ3} : (Ξ1 +βΆ Ξ2) β (Ξ1 +βΆ (Ξ2 +βΆ Ξ3)) := [ r_cat_l , r_cat_l α΅£β r_cat_r ]. Definition r_cat3_2 {Ξ1 Ξ2 Ξ3} : (Ξ1 +βΆ Ξ3) β (Ξ1 +βΆ (Ξ2 +βΆ Ξ3)) := [ r_cat_l , r_cat_r α΅£β r_cat_r ]. Definition r_cat3_3 {Ξ1 Ξ2 Ξ3} : (Ξ2 +βΆ Ξ3) β ((Ξ1 +βΆ Ξ2) +βΆ Ξ3) := [ r_cat_r α΅£β r_cat_l , r_cat_r ]. Definition r_assoc_r {Ξ1 Ξ2 Ξ3} : ((Ξ1 +βΆ Ξ2) +βΆ Ξ3) β (Ξ1 +βΆ (Ξ2 +βΆ Ξ3)) := [ r_cat3_1 , r_cat_r α΅£β r_cat_r ]. Definition r_assoc_l {Ξ1 Ξ2 Ξ3} : (Ξ1 +βΆ (Ξ2 +βΆ Ξ3)) β ((Ξ1 +βΆ Ξ2) +βΆ Ξ3) := [ r_cat_l α΅£β r_cat_l , r_cat3_3 ] .
Misc. laws.
T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_1 α΅£β [u, [v, w]] β‘β [u, v]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_1 α΅£β [u, [v, w]] β‘β [u, v]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = u a iT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ2 β amatch c_view_cat (r_cat_r (r_cat_l j)) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = v a jnow rewrite c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = u a inow rewrite c_view_cat_simpl_r, c_view_cat_simpl_l. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ2 β amatch c_view_cat (r_cat_r (r_cat_l j)) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = v a jT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_2 α΅£β [u, [v, w]] β‘β [u, w]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_2 α΅£β [u, [v, w]] β‘β [u, w]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = u a iT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r (r_cat_r j)) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = w a jnow rewrite c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = u a inow rewrite 2 c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r (r_cat_r j)) with | Vcat_l i => u a i | Vcat_r j => match c_view_cat j with | Vcat_l i => v a i | Vcat_r j0 => w a j0 end end = w a jT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_3 α΅£β [[u, v], w] β‘β [v, w]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξr_cat3_3 α΅£β [[u, v], w] β‘β [v, w]T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ2 β amatch c_view_cat (r_cat_l (r_cat_r i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => u a i0 | Vcat_r j => v a j end | Vcat_r j => w a j end = v a iT, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r j) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => u a i0 | Vcat_r j => v a j end | Vcat_r j => w a j end = w a jnow rewrite c_view_cat_simpl_l, c_view_cat_simpl_r.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
i: Ξ2 β amatch c_view_cat (r_cat_l (r_cat_r i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => u a i0 | Vcat_r j => v a j end | Vcat_r j => w a j end = v a inow rewrite c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
F: Famβ T C
Ξ1, Ξ2, Ξ3, Ξ: C
u: Ξ1 =[ F ]> Ξ
v: Ξ2 =[ F ]> Ξ
w: Ξ3 =[ F ]> Ξ
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r j) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => u a i0 | Vcat_r j => v a j end | Vcat_r j => w a j end = w a j
These last two are pretty interesting, they are the proofs witnessing the associativity isomorphism Ξβ +βΆ (Ξβ +βΆ Ξβ) β (Ξβ +βΆ Ξβ) +βΆ Ξβ. Here isomorphism means isomorphism of the set of variables.
T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: Cr_assoc_l α΅£β r_assoc_r β‘β r_idT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: Cr_assoc_l α΅£β r_assoc_r β‘β r_idT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l (r_cat_l i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_l iT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ2 +βΆ Ξ3 β amatch c_view_cat match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j => r_cat_r j end with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r jnow rewrite 2 c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l (r_cat_l i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_l iT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ2 +βΆ Ξ3 β amatch c_view_cat match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j => r_cat_r j end with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r jT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ2 β amatch c_view_cat (r_cat_l (r_cat_r i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r (r_cat_l i)T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r j) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r (r_cat_r j)now rewrite c_view_cat_simpl_l, c_view_cat_simpl_r.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ2 β amatch c_view_cat (r_cat_l (r_cat_r i)) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r (r_cat_l i)now rewrite c_view_cat_simpl_r. Qed.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r j) with | Vcat_l i => match c_view_cat i with | Vcat_l i0 => r_cat_l i0 | Vcat_r j => r_cat_r (r_cat_l j) end | Vcat_r j => r_cat_r (r_cat_r j) end = r_cat_r (r_cat_r j)T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: Cr_assoc_r α΅£β r_assoc_l β‘β r_idT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: Cr_assoc_r α΅£β r_assoc_l β‘β r_idT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 +βΆ Ξ2 β amatch c_view_cat match c_view_cat i with | Vcat_l i => r_cat_l i | Vcat_r j => r_cat_r (r_cat_l j) end with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l iT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r (r_cat_r j)) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_r jT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 +βΆ Ξ2 β amatch c_view_cat match c_view_cat i with | Vcat_l i => r_cat_l i | Vcat_r j => r_cat_r (r_cat_l j) end with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l iT, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l (r_cat_l i)T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ2 β amatch c_view_cat (r_cat_r (r_cat_l j)) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l (r_cat_r j)now rewrite c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
i: Ξ1 β amatch c_view_cat (r_cat_l i) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l (r_cat_l i)now rewrite c_view_cat_simpl_r, c_view_cat_simpl_l.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ2 β amatch c_view_cat (r_cat_r (r_cat_l j)) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_l (r_cat_r j)now rewrite 2 c_view_cat_simpl_r. Qed. End with_param.T, C: Type
CC: context T C
CL: context_laws T C
Ξ1, Ξ2, Ξ3: C
a: T
j: Ξ3 β amatch c_view_cat (r_cat_r (r_cat_r j)) with | Vcat_l i => r_cat_l (r_cat_l i) | Vcat_r j => match c_view_cat j with | Vcat_l i => r_cat_l (r_cat_r i) | Vcat_r j0 => r_cat_r j0 end end = r_cat_r j
Misc.
Ltac asgn_unfold := repeat unfold a_empty, a_cat, a_map, r_id, a_ren_l, a_cat, r_catβ, r_shift, r_cat3_1, r_cat3_2, r_cat3_3, r_assoc_r, r_assoc_l. #[global] Notation "Ξ β Ξ" := (assignment c_var Ξ%ctx Ξ%ctx). #[global] Notation "r α΅£β u" := (a_ren_l r u) : asgn_scope.