@@ -145,7 +145,8 @@ variable {α β γ}
145
145
146
146
instance : FunLike (α →ˡᶜ β) α β where
147
147
coe := toTr
148
- coe_injective' := by intro f g h; rcases f; rcases g; simp; exact h
148
+ coe_injective' := by
149
+ intro f g h; rcases f; rcases g; simpa using h
149
150
150
151
instance : CoeFun (α →ˡᶜ β) (fun _ => α → β) := DFunLike.hasCoeToFun
151
152
@@ -244,15 +245,16 @@ def conjLt (φ : ℕ → α) : ℕ → α
244
245
245
246
@[simp] lemma hom_conj_prop [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ] (f : F) (φ : ℕ → α) :
246
247
f (conjLt φ k) ↔ ∀ i < k, f (φ i) := by
247
- induction' k with k ih <;> simp [*]
248
- constructor
249
- · rintro ⟨hk, h⟩
250
- intro i hi
251
- rcases Nat.eq_or_lt_of_le (Nat.le_of_lt_succ hi) with (rfl | hi)
252
- · exact hk
253
- · exact h i hi
254
- · rintro h
255
- exact ⟨h k (by simp), fun i hi ↦ h i (Nat.lt_add_right 1 hi)⟩
248
+ induction' k with k ih
249
+ · simp [*]
250
+ · suffices (f (φ k) ∧ ∀ i < k, f (φ i)) ↔ ∀ i < k + 1 , f (φ i) by simp [*]
251
+ constructor
252
+ · rintro ⟨hk, h⟩
253
+ intro i hi
254
+ rcases Nat.eq_or_lt_of_le (Nat.le_of_lt_succ hi) with (rfl | hi)
255
+ · exact hk
256
+ · exact h i hi
257
+ · grind
256
258
257
259
def disjLt (φ : ℕ → α) : ℕ → α
258
260
| 0 => ⊥
@@ -264,15 +266,10 @@ def disjLt (φ : ℕ → α) : ℕ → α
264
266
265
267
@[simp] lemma hom_disj_prop [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ] (f : F) (φ : ℕ → α) :
266
268
f (disjLt φ k) ↔ ∃ i < k, f (φ i) := by
267
- induction' k with k ih <;> simp [*]
268
- constructor
269
- · rintro (h | ⟨i, hi, h⟩)
270
- · exact ⟨k, by simp, h⟩
271
- · exact ⟨i, Nat.lt_add_right 1 hi, h⟩
272
- · rintro ⟨i, hi, h⟩
273
- rcases Nat.eq_or_lt_of_le (Nat.le_of_lt_succ hi) with (rfl | hi)
274
- · left; exact h
275
- · right; exact ⟨i, hi, h⟩
269
+ induction' k with k ih
270
+ · simp [*]
271
+ · suffices (f (φ k) ∨ ∃ i < k, f (φ i)) ↔ ∃ i < k + 1 , f (φ i) by simp [*]
272
+ grind
276
273
277
274
end conjdisj
278
275
@@ -316,15 +313,19 @@ variable [LogicalConnective α] [LogicalConnective β]
316
313
317
314
@[simp] lemma conj_hom_prop [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ]
318
315
(f : F) (v : Fin n → α) : f (conj v) = ∀ i, f (v i) := by
319
- induction' n with n ih <;> simp [conj]
320
- · simp [ih]; constructor
316
+ induction' n with n ih
317
+ · simp [conj]
318
+ · suffices (f (v 0 ) ∧ ∀ (i : Fin n), f (vecTail v i)) ↔ ∀ (i : Fin (n + 1 )), f (v i) by simpa [conj, ih]
319
+ constructor
321
320
· intro ⟨hz, hs⟩ i; cases i using Fin.cases; { exact hz }; { exact hs _ }
322
321
· intro h; exact ⟨h 0 , fun i => h _⟩
323
322
324
323
@[simp] lemma disj_hom_prop [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ]
325
324
(f : F) (v : Fin n → α) : f (disj v) = ∃ i, f (v i) := by
326
- induction' n with n ih <;> simp [disj]
327
- · simp [ih]; constructor
325
+ induction' n with n ih
326
+ · simp [disj]
327
+ · suffices (f (v 0 ) ∨ ∃ i, f (vecTail v i)) ↔ ∃ i, f (v i) by simpa [disj, ih]
328
+ constructor
328
329
· rintro (H | ⟨i, H⟩); { exact ⟨0 , H⟩ }; { exact ⟨i.succ, H⟩ }
329
330
· rintro ⟨i, h⟩
330
331
cases i using Fin.cases; { left; exact h }; { right; exact ⟨_, h⟩ }
@@ -600,16 +601,8 @@ variable [LogicalConnective α]
600
601
601
602
lemma map_conj_union [DecidableEq α] [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ]
602
603
(f : F) (s₁ s₂ : Finset α) : f (s₁ ∪ s₂).conj ↔ f (s₁.conj ⋏ s₂.conj) := by
603
- simp
604
- constructor;
605
- . intro h;
606
- constructor;
607
- . intro a ha;
608
- exact h a (Or.inl ha);
609
- . intro a ha;
610
- exact h a (Or.inr ha);
611
- . intro ⟨h₁, h₂⟩ a ha;
612
- cases ha <;> simp_all;
604
+ suffices (∀ (a : α), a ∈ s₁ ∨ a ∈ s₂ → f a) ↔ (∀ a ∈ s₁, f a) ∧ ∀ a ∈ s₂, f a by simpa
605
+ grind
613
606
614
607
lemma map_conj' {β : Type *} [LogicalConnective β] [FunLike F α β] [LogicalConnective.HomClass F α β]
615
608
(Φ : F) (s : Finset ι) (f : ι → α) : Φ (⩕ i ∈ s, f i) = ⩕ i ∈ s, Φ (f i) := by
@@ -630,14 +623,8 @@ lemma map_uconj [LogicalConnective β] [FunLike F α β] [LogicalConnective.HomC
630
623
631
624
lemma map_disj_union [DecidableEq α] [FunLike F α Prop ] [LogicalConnective.HomClass F α Prop ]
632
625
(f : F) (s₁ s₂ : Finset α) : f (s₁ ∪ s₂).disj ↔ f (s₁.disj ⋎ s₂.disj) := by
633
- simp [map_disj_prop];
634
- constructor;
635
- . rintro ⟨a, h₁ | h₂, hb⟩;
636
- . left; use a;
637
- . right; use a;
638
- . rintro (⟨a₁, h₁⟩ | ⟨a₂, h₂⟩);
639
- . use a₁; simp_all;
640
- . use a₂; simp_all;
626
+ suffices (∃ a, (a ∈ s₁ ∨ a ∈ s₂) ∧ f a) ↔ (∃ a ∈ s₁, f a) ∨ ∃ a ∈ s₂, f a by simpa [map_disj_prop]
627
+ grind
641
628
642
629
lemma map_disj' [LogicalConnective β] [FunLike F α β] [LogicalConnective.HomClass F α β]
643
630
(Φ : F) (s : Finset ι) (f : ι → α) : Φ (⩖ i ∈ s, f i) = ⩖ i ∈ s, Φ (f i) := by
0 commit comments