Skip to content

Commit a470630

Browse files
authored
Merge pull request #2253 from Alizter/more-transport_paths
reorganise transport_paths lemmas and add tests
2 parents dd2ca5c + da7bc21 commit a470630

File tree

2 files changed

+305
-45
lines changed

2 files changed

+305
-45
lines changed

test/Tactics/transport_paths.v

+202
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
From HoTT Require Import Basics.Overture Basics.Tactics Types.Paths.
2+
3+
4+
(** Here we test the [transport_paths FlFr] style tactics. *)
5+
6+
(** *** 0 functions *)
7+
8+
(** Transporting the left *)
9+
Definition transport_paths_l {A : Type} {x1 x2 y : A} (p : x1 = x2) (q : x1 = y)
10+
(r : x2 = y)
11+
(expected : p^ @ q = r)
12+
: transport (fun x => x = y) p q = r.
13+
Proof.
14+
by transport_paths l.
15+
Defined.
16+
17+
(** Transporting both *)
18+
Definition transport_paths_lr {A : Type} {x1 x2 : A} (p : x1 = x2) (q : x1 = x1)
19+
(r : x2 = x2)
20+
(expected : p @ r = q @ p)
21+
: transport (fun x => x = x) p q = r.
22+
Proof.
23+
by transport_paths lr.
24+
Defined.
25+
26+
(** Transporting the right *)
27+
Definition transport_paths_r {A : Type} {x y1 y2 : A} (p : y1 = y2) (q : x = y1)
28+
(r : x = y2)
29+
(expected : q @ p = r)
30+
: transport (fun y => x = y) p q = r.
31+
Proof.
32+
by transport_paths r.
33+
Defined.
34+
35+
(** *** 1 function *)
36+
37+
Definition transport_paths_Fl {A B : Type} {f : A -> B} {x1 x2 : A} {y : B}
38+
(p : x1 = x2) (q : f x1 = y)
39+
(r : f x2 = y)
40+
(expected : q = ap f p @ r)
41+
: transport (fun x => f x = y) p q = r.
42+
Proof.
43+
by transport_paths Fl.
44+
Defined.
45+
46+
Definition transport_paths_Flr {A : Type} {f : A -> A} {x1 x2 : A}
47+
(p : x1 = x2) (q : f x1 = x1)
48+
(r : f x2 = x2)
49+
(expected : ap f p @ r = q @ p)
50+
: transport (fun x => f x = x) p q = r.
51+
Proof.
52+
by transport_paths Flr.
53+
Defined.
54+
55+
Definition transport_paths_lFr {A : Type} {f : A -> A} {x1 x2 : A}
56+
(p : x1 = x2) (q : x1 = f x1)
57+
(r : x2 = f x2)
58+
(expected : p @ r = q @ ap f p)
59+
: transport (fun x => x = f x) p q = r.
60+
Proof.
61+
by transport_paths lFr.
62+
Defined.
63+
64+
Definition transport_paths_Fr {A B : Type} {g : A -> B} {y1 y2 : A} {x : B}
65+
(p : y1 = y2) (q : x = g y1)
66+
(r : x = g y2)
67+
(expected : q @ ap g p = r)
68+
: transport (fun y => x = g y) p q = r.
69+
Proof.
70+
by transport_paths Fr.
71+
Defined.
72+
73+
(** *** 2 functions *)
74+
75+
Definition transport_paths_FFl {A B C : Type} {f : A -> B} {g : B -> C}
76+
{x1 x2 : A} {y : C} (p : x1 = x2) (q : g (f x1) = y)
77+
(r : g (f x2) = y)
78+
(expected : q = ap g (ap f p) @ r)
79+
: transport (fun x => g (f x) = y) p q = r.
80+
Proof.
81+
by transport_paths FFl.
82+
Defined.
83+
84+
Definition transport_paths_FFlr {A B : Type} {f : A -> B} {g : B -> A} {x1 x2 : A}
85+
(p : x1 = x2) (q : g (f x1) = x1)
86+
(r : g (f x2) = x2)
87+
(expected : ap g (ap f p) @ r = q @ p)
88+
: transport (fun x => g (f x) = x) p q = r.
89+
Proof.
90+
by transport_paths FFlr.
91+
Defined.
92+
93+
Definition transport_paths_FlFr {A B : Type} {f g : A -> B} {x1 x2 : A}
94+
(p : x1 = x2) (q : f x1 = g x1)
95+
(r : f x2 = g x2)
96+
(expected : ap f p @ r = q @ ap g p)
97+
: transport (fun x => f x = g x) p q = r.
98+
Proof.
99+
by transport_paths FlFr.
100+
Defined.
101+
102+
Definition transport_paths_lFFr {A B : Type} {f : A -> B} {g : B -> A} {x1 x2 : A}
103+
(p : x1 = x2) (q : x1 = g (f x1))
104+
(r : x2 = g (f x2))
105+
(expected : p @ r = q @ ap g (ap f p))
106+
: transport (fun x => x = g (f x)) p q = r.
107+
Proof.
108+
by transport_paths lFFr.
109+
Defined.
110+
111+
Definition transport_paths_FFr {A B C : Type} {f : A -> B} {g : B -> C}
112+
{x1 x2 : A} {y : C} (p : x1 = x2) (q : y = g (f x1))
113+
(r : y = g (f x2))
114+
(expected : q @ ap g (ap f p) = r)
115+
: transport (fun x => y = g (f x)) p q = r.
116+
Proof.
117+
by transport_paths FFr.
118+
Defined.
119+
120+
(** *** 3 functions *)
121+
122+
Definition transport_paths_FFFl {A B C D : Type}
123+
{f : A -> B} {g : B -> C} {h : C -> D} {x1 x2 : A} {y : D}
124+
(p : x1 = x2) (q : h (g (f x1)) = y)
125+
(r : h (g (f x2)) = y)
126+
(expected : q = ap h (ap g (ap f p)) @ r)
127+
: transport (fun x => h (g (f x)) = y) p q = r.
128+
Proof.
129+
by transport_paths FFFl.
130+
Defined.
131+
132+
Definition transport_paths_FFFlr {A B C : Type}
133+
{f : A -> B} {g : B -> C} {h : C -> A} {x1 x2 : A}
134+
(p : x1 = x2) (q : h (g (f x1)) = x1)
135+
(r : h (g (f x2)) = x2)
136+
(expected : ap h (ap g (ap f p)) @ r = q @ p)
137+
: transport (fun x => h (g (f x)) = x) p q = r.
138+
Proof.
139+
by transport_paths FFFlr.
140+
Defined.
141+
142+
Definition transport_paths_FFlFr {A B C : Type}
143+
{f : A -> B} {g : B -> C} {h : A -> C} {x1 x2 : A}
144+
(p : x1 = x2) (q : g (f x1) = h x1)
145+
(r : g (f x2) = h x2)
146+
(expected : ap g (ap f p) @ r = q @ ap h p)
147+
: transport (fun x => g (f x) = h x) p q = r.
148+
Proof.
149+
by transport_paths FFlFr.
150+
Defined.
151+
152+
Definition transport_paths_FlFFr {A B C : Type}
153+
{f : A -> C} {g : B -> C} {h : A -> B} {x1 x2 : A}
154+
(p : x1 = x2) (q : f x1 = g (h x1))
155+
(r : f x2 = g (h x2))
156+
(expected : ap f p @ r = q @ ap g (ap h p))
157+
: transport (fun x => f x = g (h x)) p q = r.
158+
Proof.
159+
by transport_paths FlFFr.
160+
Defined.
161+
162+
Definition transport_paths_lFFFr {A B C : Type}
163+
{f : A -> B} {g : B -> C} {h : C -> A} {x1 x2 : A}
164+
(p : x1 = x2) (q : x1 = h (g (f x1)))
165+
(r : x2 = h (g (f x2)))
166+
(expected : p @ r = q @ ap h (ap g (ap f p)))
167+
: transport (fun x => x = h (g (f x))) p q = r.
168+
Proof.
169+
by transport_paths lFFFr.
170+
Defined.
171+
172+
Definition transport_paths_FFFr {A B C D : Type}
173+
{f : A -> B} {g : B -> C} {h : C -> D} {x1 x2 : A} {y : D}
174+
(p : x1 = x2) (q : y = h (g (f x1)))
175+
(r : y = h (g (f x2)))
176+
(expected : q @ ap h (ap g (ap f p)) = r)
177+
: transport (fun x => y = h (g (f x))) p q = r.
178+
Proof.
179+
by transport_paths FFFr.
180+
Defined.
181+
182+
(** *** 4 functions *)
183+
184+
Definition transport_paths_FFFlFr {A B C D : Type}
185+
{f : A -> B} {g : B -> C} {h : C -> D} {k : A -> D} {x1 x2 : A}
186+
(p : x1 = x2) (q : h (g (f x1)) = k x1)
187+
(r : h (g (f x2)) = k x2)
188+
(expected : ap h (ap g (ap f p)) @ r = q @ ap k p)
189+
: transport (fun x => h (g (f x)) = k x) p q = r.
190+
Proof.
191+
by transport_paths FFFlFr.
192+
Defined.
193+
194+
Definition transport_paths_FFlFFr {A B B' C : Type}
195+
{f : A -> B} {f' : A -> B'} {g : B -> C} {g' : B' -> C} {x1 x2 : A}
196+
(p : x1 = x2) (q : g (f x1) = g' (f' x1))
197+
(r : g (f x2) = g' (f' x2))
198+
(expected : ap g (ap f p) @ r = q @ ap g' (ap f' p))
199+
: transport (fun x => g (f x) = g' (f' x)) p q = r.
200+
Proof.
201+
by transport_paths FFlFFr.
202+
Defined.

0 commit comments

Comments
 (0)