Created
August 29, 2025 14:13
-
-
Save gaxiiiiiiiiiiii/3272b907be8f45a809cde35f123e811c to your computer and use it in GitHub Desktop.
U : ๐ โฅค ๐ ใๅณ้ไผดใงใใไบใ ไปปๆใฎBใซใคใใฆHom(B, U -)ใ่กจ็พๅฏ่ฝใงใใไบใใฎๅๅคๆงใ่จผๆ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import Mathlib | |
| open CategoryTheory | |
| example [Category ๐] [Category ๐] (U : ๐ โฅค ๐) : | |
| U.IsRightAdjoint โ โ B : ๐, (U โ coyoneda.obj (Opposite.op B)).IsCorepresentable | |
| := by | |
| constructor<;> intro H | |
| ยท rcases H with โจF, โจฯโฉโฉ | |
| intro B; constructor | |
| use F.obj B; constructor | |
| refine { | |
| homEquiv := by | |
| intro A; simp | |
| exact ฯ.homEquiv B A | |
| homEquiv_comp {A A'} f g := by | |
| simp | |
| rw [ฯ.homEquiv_apply, ฯ.homEquiv_apply, U.map_comp, Category.assoc] | |
| } | |
| ยท | |
| let F : ๐ โฅค ๐ := { | |
| obj B := (H B).has_corepresentation.choose | |
| map {B B'} f := | |
| (H B).has_corepresentation.choose_spec.some.homEquiv.symm | |
| (f โซ (H B').has_corepresentation.choose_spec.some.homEquiv | |
| (๐ (H B').has_corepresentation.choose) | |
| ) | |
| map_id B := by simp | |
| map_comp {Bโ Bโ Bโ} f g := by | |
| simp | |
| let HBโ := (H Bโ).has_corepresentation | |
| let HBโ := (H Bโ).has_corepresentation | |
| let HBโ := (H Bโ).has_corepresentation | |
| let ฯโ := HBโ.choose_spec.some | |
| let ฯโ := HBโ.choose_spec.some | |
| let ฯโ := HBโ.choose_spec.some | |
| let Aโ := HBโ.choose | |
| let Aโ := HBโ.choose | |
| let Aโ := HBโ.choose | |
| set L : Aโ โถ Aโ := ฯโ.homEquiv.symm (f โซ ฯโ.homEquiv (๐ Aโ)) | |
| set R : Aโ โถ Aโ := ฯโ.homEquiv.symm (g โซ ฯโ.homEquiv (๐ Aโ)) | |
| set F : Aโ โถ Aโ := ฯโ.homEquiv.symm (f โซ g โซ ฯโ.homEquiv (๐ Aโ)) | |
| change F = L โซ R | |
| have E := ฯโ.homEquiv_comp R L; simp at E | |
| have := (ฯโ.homEquiv (Y := Aโ)).left_inv (L โซ R) | |
| rw [<- this]; clear this | |
| conv => arg 2; arg 2; simp; rw [E] | |
| simp; clear E | |
| conv => arg 2; arg 2; arg 1; simp [L]; change ฯโ.homEquiv.toFun (ฯโ.homEquiv.invFun (f โซ ฯโ.homEquiv (๐ Aโ))) | |
| have E := ฯโ.homEquiv.right_inv (f โซ ฯโ.homEquiv (๐ Aโ)) | |
| rw [E]; simp [F]; clear E | |
| have E := ฯโ.homEquiv_comp R (๐ Aโ); simp at E | |
| rw [<- E, Category.id_comp] | |
| simp only [R]; simp | |
| have := ฯโ.homEquiv.right_inv (g โซ ฯโ.homEquiv (๐ Aโ)); simp at this | |
| nth_rw 1 [<- this] | |
| } | |
| constructor; use F; constructor | |
| refine { | |
| unit := { | |
| app B := | |
| (H B).has_corepresentation.choose_spec.some.homEquiv | |
| (๐ (H B).has_corepresentation.choose) | |
| naturality {B B'} f := by | |
| simp [F] | |
| set HB := (H B).has_corepresentation.choose_spec | |
| set HB' := (H B').has_corepresentation.choose_spec | |
| let A := (H B).has_corepresentation.choose | |
| let A' := (H B').has_corepresentation.choose | |
| change f โซ HB'.some.homEquiv (๐ A') = HB.some.homEquiv (๐ A) โซ U.map (HB.some.homEquiv.symm (f โซ HB'.some.homEquiv (๐ A'))) | |
| set R := (HB.some.homEquiv.symm (f โซ HB'.some.homEquiv (๐ A'))) | |
| have E := HB.some.homEquiv_comp R (๐ A); simp at E | |
| rw [Category.id_comp] at E | |
| conv at E => arg 1; simp [R]; change HB.some.homEquiv.toFun (HB.some.homEquiv.invFun (f โซ HB'.some.homEquiv (๐ A'))) | |
| have := HB.some.homEquiv.right_inv (f โซ HB'.some.homEquiv (๐ A')) | |
| rw [this] at E | |
| rw [E]; rfl | |
| } | |
| counit := { | |
| app A := ((H (U.obj A)).has_corepresentation.choose_spec.some.homEquiv (Y := A)).symm (๐ _) | |
| naturality {A A'} f := by | |
| simp [F] | |
| set HA := (H (U.obj A)).has_corepresentation.choose_spec | |
| set HA' := (H (U.obj A')).has_corepresentation.choose_spec | |
| let B' := (H (U.obj A')).has_corepresentation.choose | |
| let B := (H (U.obj A)).has_corepresentation.choose | |
| conv => arg 1; arg 1; arg 2; arg 2; arg 2; change ๐ B' | |
| let L : B โถ B' := HA.some.homEquiv.symm (U.map f โซ HA'.some.homEquiv (๐ B')) | |
| let R : B' โถ A' := HA'.some.homEquiv.symm (๐ (U.obj A')) | |
| change L โซ R = _ | |
| have E := HA.some.homEquiv_comp R L; simp at E | |
| have := HA.some.homEquiv.left_inv (L โซ R) | |
| conv => arg 1; rw [<- this]; arg 2; simp; rw [E]; arg 1; simp [L]; change HA.some.homEquiv.toFun (HA.some.homEquiv.invFun (U.map f โซ HA'.some.homEquiv (๐ B'))) | |
| clear this E | |
| have E := HA.some.homEquiv.right_inv (U.map f โซ HA'.some.homEquiv (๐ B')) | |
| rw [E]; simp; clear E | |
| have E := HA'.some.homEquiv_comp R (๐ B'); simp at E | |
| rw [<- E, Category.id_comp]; simp [R]; clear E | |
| conv => arg 1; arg 2; arg 2; change HA'.some.homEquiv.toFun (HA'.some.homEquiv.invFun (๐ (U.obj A'))) | |
| have E := HA'.some.homEquiv.right_inv (๐ (U.obj A')); rw [E, Category.comp_id]; clear E | |
| have E := HA.some.homEquiv_comp f (HA.some.homEquiv.symm (๐ (U.obj A))); simp at E | |
| conv at E => arg 2; arg 1; change HA.some.homEquiv.toFun (HA.some.homEquiv.invFun (๐ (U.obj A))) | |
| have := HA.some.homEquiv.right_inv (๐ (U.obj A)); rw [this] at E; clear this; simp at E | |
| apply (Equiv.symm_apply_eq HA.some.homEquiv).mpr | |
| rw [<- E]; simp | |
| } | |
| left_triangle_components B := by | |
| simp [F] | |
| set HB := (H B).has_corepresentation.choose_spec | |
| set HB' := (H (U.obj (F.obj B))).has_corepresentation.choose_spec | |
| let A := (H B).has_corepresentation.choose | |
| let A' := (H (U.obj (F.obj B))).has_corepresentation.choose | |
| change HB.some.homEquiv.symm (HB.some.homEquiv (๐ A) โซ HB'.some.homEquiv (๐ A')) โซ HB'.some.homEquiv.symm (๐ (U.obj A)) = ๐ A | |
| set L : A โถ A' := HB.some.homEquiv.symm (HB.some.homEquiv (๐ A) โซ HB'.some.homEquiv (๐ A')) | |
| set R : A' โถ A := HB'.some.homEquiv.symm (๐ (U.obj A)) | |
| have E := HB.some.homEquiv.left_inv (L โซ R) | |
| have E' := HB.some.homEquiv_comp R L; simp at E' | |
| conv => arg 1; rw [<- E]; arg 2; simp; rw [E']; simp [L]; simp | |
| clear E E' | |
| set F := (HB.some.homEquiv (๐ A) โซ HB'.some.homEquiv (๐ A')) | |
| have E := HB.some.homEquiv.right_inv F; dsimp at F | |
| conv => arg 1; arg 2; arg 1; change HB.some.homEquiv.toFun (HB.some.homEquiv.invFun F); rw [E] | |
| simp [F]; clear E F | |
| have E := HB'.some.homEquiv_comp R (๐ A') ; simp at E | |
| rw [<- E, Category.id_comp]; simp [R]; clear E | |
| have E := HB'.some.homEquiv.right_inv (๐ (U.obj A)); dsimp at E | |
| rw [E]; simp | |
| right_triangle_components A := by | |
| simp | |
| set ฯ := (H (U.obj A)).has_corepresentation.choose_spec.some | |
| let B := (H (U.obj A)).has_corepresentation.choose | |
| conv => arg 1; arg 1; arg 2; change ๐ B | |
| have E := ฯ.homEquiv_comp ((ฯ.homEquiv.symm (๐ (U.obj A)))) (๐ B); simp at E | |
| rw [<- E, Category.id_comp]; clear E | |
| have E := ฯ.homEquiv.right_inv (๐ (U.obj A)); dsimp at E | |
| rw [E] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment