@@ -45,17 +45,17 @@ theorem Ty.tvar_subst_succVar_comm {X : TVar (s1 ++ s0)} (σ : Subst s1 s2) :
45
45
case push_var s0 ih =>
46
46
cases X
47
47
case there_var X0 =>
48
- simp [Subst.lift, Ty.subst]
49
- conv => lhs; simp [Subst.liftVar]
50
- conv => rhs; simp [Subst.tvar_there_var_liftVar]
51
- simp [Rename.lift, <-Ty.rename_succVar_comm]
48
+ simp only [Subst.lift, Ty.subst]
49
+ conv => lhs; simp only [Subst.liftVar]
50
+ conv => rhs; simp only [Subst.tvar_there_var_liftVar]
51
+ simp only [Rename.lift, <-Ty.rename_succVar_comm]
52
52
congr; exact (ih (X:=X0))
53
53
case push_tvar s0 ih =>
54
54
cases X <;> try rfl
55
55
case there_tvar X0 =>
56
- conv => lhs; simp [Subst.lift, Ty.subst]
57
- conv => lhs; simp [Subst.liftTVar, Rename.lift]
58
- simp [<-Ty.rename_succTVar_comm]
56
+ conv => lhs; simp only [Subst.lift, Ty.subst]
57
+ conv => lhs; simp only [Subst.liftTVar, Rename.lift]
58
+ simp only [<-Ty.rename_succTVar_comm]
59
59
congr; exact (ih (X:=X0))
60
60
61
61
/-- Proves that substitution commutes with type variable weakening for type variables. -/
@@ -67,16 +67,16 @@ theorem Ty.tvar_subst_succTVar_comm {X : TVar (s1 ++ s0)} (σ : Subst s1 s2) :
67
67
case push_var s0 ih =>
68
68
cases X
69
69
case there_var X0 =>
70
- conv => lhs; simp [Subst.lift, Ty.subst]
71
- conv => lhs; simp [Subst.liftVar, Rename.lift]
72
- simp [<-Ty.rename_succVar_comm]
70
+ conv => lhs; simp only [Subst.lift, Ty.subst]
71
+ conv => lhs; simp only [Subst.liftVar, Rename.lift]
72
+ simp only [<-Ty.rename_succVar_comm]
73
73
congr; exact (ih (X:=X0))
74
74
case push_tvar s0 ih =>
75
75
cases X <;> try rfl
76
76
case there_tvar X0 =>
77
- conv => lhs; simp [Subst.lift, Ty.subst]
78
- conv => lhs; simp [Subst.liftTVar, Rename.lift]
79
- simp [<-Ty.rename_succTVar_comm]
77
+ conv => lhs; simp only [Subst.lift, Ty.subst]
78
+ conv => lhs; simp only [Subst.liftTVar, Rename.lift]
79
+ simp only [<-Ty.rename_succTVar_comm]
80
80
congr; exact (ih (X:=X0))
81
81
82
82
/-- Proves that substitution commutes with term variable weakening for types. -/
@@ -141,16 +141,16 @@ theorem Exp.var_subst_succTVar_comm {x : Var (s1 ++ s0)} (σ : Subst s1 s2) :
141
141
case push_var s0 ih =>
142
142
cases x <;> try rfl
143
143
case there_var x0 =>
144
- conv => lhs; simp [Subst.lift, Exp.subst]
145
- conv => lhs; simp [Subst.liftVar, Rename.lift]
146
- simp [<-Exp.rename_succVar_comm]
144
+ conv => lhs; simp only [Subst.lift, Exp.subst]
145
+ conv => lhs; simp only [Subst.liftVar, Rename.lift]
146
+ simp only [<-Exp.rename_succVar_comm]
147
147
congr; exact (ih (x:=x0))
148
148
case push_tvar s0 ih =>
149
149
cases x
150
150
case there_tvar x0 =>
151
- conv => lhs; simp [Subst.liftVar, Subst.lift, Rename.lift]
152
- conv => lhs; simp [Exp.subst, Subst.liftTVar]
153
- simp [<-Exp.rename_succTVar_comm]
151
+ conv => lhs; simp only [Subst.liftVar, Subst.lift, Rename.lift]
152
+ conv => lhs; simp only [Exp.subst, Subst.liftTVar]
153
+ simp only [<-Exp.rename_succTVar_comm]
154
154
congr; exact (ih (x:=x0))
155
155
156
156
/-- Proves that substitution commutes with term variable weakening for variables. -/
@@ -161,14 +161,14 @@ theorem Exp.var_subst_succVar_comm {x : Var (s1 ++ s0)} (σ : Subst s1 s2) :
161
161
case push_var s0 ih =>
162
162
cases x <;> try rfl
163
163
case there_var x0 =>
164
- conv => lhs; simp [Subst.lift, Exp.subst, Subst.liftVar, Rename.lift]
165
- simp [<-Exp.rename_succVar_comm]
164
+ conv => lhs; simp only [Subst.lift, Exp.subst, Subst.liftVar, Rename.lift]
165
+ simp only [<-Exp.rename_succVar_comm]
166
166
congr; exact (ih (x:=x0))
167
167
case push_tvar s0 ih =>
168
168
cases x
169
169
case there_tvar x0 =>
170
- conv => lhs; simp [Subst.lift, Exp.subst, Subst.liftTVar, Rename.lift]
171
- simp [<-Exp.rename_succTVar_comm]
170
+ conv => lhs; simp only [Subst.lift, Exp.subst, Subst.liftTVar, Rename.lift]
171
+ simp only [<-Exp.rename_succTVar_comm]
172
172
congr; exact (ih (x:=x0))
173
173
174
174
/-- Proves that substitution commutes with type variable weakening for expressions. -/
@@ -180,11 +180,11 @@ theorem Exp.subst_succTVar_comm {e : Exp (s1 ++ s0)} (σ : Subst s1 s2) :
180
180
| .abs A t =>
181
181
have ih1 := Ty.subst_succTVar_comm (T:=A) (σ:=σ)
182
182
have ih2 := Exp.subst_succTVar_comm (s0:=s0,x) (e:=t) (σ:=σ)
183
- simp [Exp.subst, Exp.rename, ih1]; congr
183
+ simp only [Exp.subst, Exp.rename, ih1]; congr
184
184
| .tabs A t =>
185
185
have ih1 := Ty.subst_succTVar_comm (T:=A) (σ:=σ)
186
186
have ih2 := Exp.subst_succTVar_comm (s0:=s0,X) (e:=t) (σ:=σ)
187
- simp [Exp.subst, Exp.rename, ih1]; congr
187
+ simp only [Exp.subst, Exp.rename, ih1]; congr
188
188
| .app t1 t2 =>
189
189
have ih1 := Exp.subst_succTVar_comm (e:=t1) (σ:=σ)
190
190
have ih2 := Exp.subst_succTVar_comm (e:=t2) (σ:=σ)
@@ -203,11 +203,11 @@ theorem Exp.subst_succVar_comm {e : Exp (s1 ++ s0)} (σ : Subst s1 s2) :
203
203
| .abs A t =>
204
204
have ih1 := Ty.subst_succVar_comm (T:=A) (σ:=σ)
205
205
have ih2 := Exp.subst_succVar_comm (s0:=s0,x) (e:=t) (σ:=σ)
206
- simp [Exp.subst, Exp.rename, ih1]; congr
206
+ simp only [Exp.subst, Exp.rename, ih1]; congr
207
207
| .tabs A t =>
208
208
have ih1 := Ty.subst_succVar_comm (T:=A) (σ:=σ)
209
209
have ih2 := Exp.subst_succVar_comm (s0:=s0,X) (e:=t) (σ:=σ)
210
- simp [Exp.subst, Exp.rename, ih1]; congr
210
+ simp only [Exp.subst, Exp.rename, ih1]; congr
211
211
| .app t1 t2 =>
212
212
have ih1 := Exp.subst_succVar_comm (e:=t1) (σ:=σ)
213
213
have ih2 := Exp.subst_succVar_comm (e:=t2) (σ:=σ)
@@ -257,7 +257,7 @@ theorem Subst.liftVar_comp {σ1 : Subst s1 s2} {σ2 : Subst s2 s3} :
257
257
theorem Ty.subst_comp {T : Ty s1} (σ1 : Subst s1 s2) (σ2 : Subst s2 s3) :
258
258
(T.subst σ1 ).subst σ2 = T.subst (σ1 .comp σ2 ) := by
259
259
induction T generalizing s2 s3 <;> try (solve | rfl)
260
- all_goals simp [Ty.subst, Subst.liftTVar_comp]; grind
260
+ all_goals simp only [Ty.subst, Subst.liftTVar_comp]; grind
261
261
262
262
/-- **Fundamental associativity law for substitution composition on expressions** :
263
263
Sequential application of substitutions equals composition.
@@ -309,22 +309,23 @@ theorem Subst.id_liftTVar :
309
309
categorical structure with identity morphisms. -/
310
310
theorem Ty.subst_id {T : Ty s} : T.subst Subst.id = T := by
311
311
induction T <;> try (solve | rfl)
312
- all_goals (simp [Ty.subst, Subst.id_liftTVar]; grind)
312
+ all_goals (simp only [Ty.subst, Subst.id_liftTVar]; grind)
313
313
314
314
/-- **Identity law for expressions** : The identity substitution acts as neutral element.
315
315
This extends the identity property to expressions, completing the algebraic
316
316
structure of the substitution category. -/
317
317
theorem Exp.subst_id {e : Exp s} : e.subst Subst.id = e := by
318
318
induction e <;> try (solve | rfl)
319
- all_goals (simp [Exp.subst, Ty.subst_id, Subst.id_liftVar, Subst.id_liftTVar]; grind)
319
+ all_goals (simp only [Exp.subst, Ty.subst_id, Subst.id_liftVar, Subst.id_liftTVar]; grind)
320
320
321
321
/-- Proves that opening a type variable commutes with renaming for substitutions. -/
322
322
theorem Subst.open_tvar_rename_comm {T : Ty s} {f : Rename s s'} :
323
323
(Subst.open_tvar T).comp (f.asSubst)
324
324
= f.liftTVar.asSubst.comp (Subst.open_tvar (T.rename f)) := by
325
325
apply Subst.funext
326
326
case var => intro x; cases x; rfl
327
- case tvar => intro X; cases X <;> try (solve | rfl | simp [Subst.comp, Ty.subst_asSubst]; rfl)
327
+ case tvar =>
328
+ intro X; cases X <;> try (solve | rfl | simp only [Subst.comp, Ty.subst_asSubst]; rfl)
328
329
329
330
/-- Proves that opening a type variable commutes with renaming for types. -/
330
331
theorem Ty.open_tvar_rename_comm {T : Ty (s,X)} {U : Ty s} {f : Rename s s'} :
@@ -374,15 +375,15 @@ theorem Subst.open_tvar_subst_comm {T : Ty s} {σ : Subst s s'} :
374
375
apply Subst.funext
375
376
case var =>
376
377
intro x; cases x
377
- conv => lhs; simp [Subst.comp, Subst.open_tvar]
378
- conv => rhs; simp [Subst.comp, Subst.liftTVar]
379
- simp [Exp.rename_succTVar_open_tvar]; rfl
378
+ conv => lhs; simp only [Subst.comp, Subst.open_tvar]
379
+ conv => rhs; simp only [Subst.comp, Subst.liftTVar]
380
+ simp only [Exp.rename_succTVar_open_tvar]; rfl
380
381
case tvar =>
381
382
intro X; cases X <;> try rfl
382
383
case there_tvar X0 =>
383
- conv => lhs; simp [Subst.comp, Subst.open_tvar]
384
- conv => rhs; simp [Subst.comp, Subst.liftTVar]
385
- simp [Ty.rename_succTVar_open_tvar]; rfl
384
+ conv => lhs; simp only [Subst.comp, Subst.open_tvar]
385
+ conv => rhs; simp only [Subst.comp, Subst.liftTVar]
386
+ simp only [Ty.rename_succTVar_open_tvar]; rfl
386
387
387
388
/-- Proves that opening a type variable commutes with substitution for types. -/
388
389
theorem Ty.open_tvar_subst_comm {T : Ty (s,X)} {U : Ty s} {σ : Subst s s'} :
0 commit comments