Created
December 8, 2025 22:31
-
-
Save gaxiiiiiiiiiiii/7ad9c6209e79cab13532c19b7bc4c6a3 to your computer and use it in GitHub Desktop.
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 Order | |
| instance Ideal.isCoatomic (B : Type _) [BooleanAlgebra B] : | |
| IsCoatomic (Ideal B) | |
| := { | |
| eq_top_or_exists_le_coatom I := by | |
| rw [or_iff_not_imp_left]; intro HI | |
| let π := {J : Ideal B | J.IsProper β§ I β€ J} | |
| set π' := (LowerSet.carrier β Ideal.toLowerSet) '' π | |
| have Hπ' : (β c β π', IsChain (fun x1 x2 => x1 β x2) c β c.Nonempty β β ub β π', β s β c, s β ub) := by { | |
| intro π ππ Hπ Hπ' | |
| unfold IsChain at Hπ; simp at Hπ | |
| let J : Ideal B := { | |
| carrier := ββ π | |
| lower' := by | |
| intro x y yx Hx; simp at * | |
| rcases Hx with β¨C, HC, Cxβ© | |
| have := ππ HC; simp [π', π] at this | |
| rcases this with β¨J, β¨HJ, IJβ©, Eβ© | |
| use C, HC | |
| subst C | |
| apply J.lower yx Cx | |
| nonempty' := by | |
| use β₯; simp | |
| rcases Hπ' with β¨c, Hcβ© | |
| use c, Hc | |
| apply ππ at Hc; simp [π', π] at Hc | |
| rcases Hc with β¨J, β¨HJ, IJβ©, Eβ©; subst c | |
| apply J.bot_mem | |
| directed' := by | |
| intro x Hx y Hy; simp at Hx Hy; simp | |
| rcases Hx with β¨X, HX, Xxβ© | |
| rcases Hy with β¨Y, HY, Yyβ© | |
| have β¨X', β¨HX', IX'β©, EXβ©:= ππ HX; simp at EX | |
| have β¨Y', β¨HY', IY'β©, EYβ©:= ππ HY; simp at EY | |
| have := Hπ HX HY; simp at this | |
| by_cases HXY : X = Y | |
| Β· subst Y X | |
| simp at HXY; subst Y' | |
| have β¨z, Hz, H1, H2β© := X'.directed _ Xx _ Yy | |
| simp at H1 H2 | |
| use z, β¨X', HX, Hzβ©, H1, H2 | |
| Β· rcases this HXY with XY | YX | |
| Β· apply XY at Xx | |
| subst Y | |
| have β¨z, Hz, H1, H2β©:= Y'.directed _ Xx _ Yy | |
| simp at H1 H2 | |
| use z, β¨Y', HY, Hzβ©, H1, H2 | |
| Β· apply YX at Yy | |
| subst X | |
| have β¨z, Hz, H1, H2β©:= X'.directed _ Xx _ Yy | |
| simp at H1 H2 | |
| use z, β¨X', HX, Hzβ©, H1, H2 | |
| } | |
| use J; constructor | |
| Β· simp [π', π]; constructor | |
| Β· constructor | |
| intro F | |
| have : (β€ : B) β Set.univ := by simp | |
| rw [<- F] at this | |
| change β€ β ββ π at this | |
| simp at this | |
| rcases this with β¨C, HC, Ctβ© | |
| apply ππ at HC; simp [π', π] at HC | |
| rcases HC with β¨C', β¨HC', IC'β©, Eβ© | |
| apply HC'.ne_univ; ext x; simp; subst C | |
| apply C'.lower (by simp) Ct | |
| Β· intro x Hx | |
| change x β ββ π; simp | |
| by_contra F; simp at F | |
| have β¨C, HCβ© := Hπ' | |
| have FC := F C HC | |
| apply ππ at HC; simp [π', π] at HC | |
| rcases HC with β¨C', β¨HC', IC'β©, Eβ© | |
| subst C | |
| apply FC; apply IC' Hx | |
| Β· intro C HC c Hc | |
| change c β ββ π; simp | |
| use C | |
| } | |
| have Iπ' : I.carrier β π' := by { | |
| simp [π', π] | |
| apply I.isProper_of_ne_top HI | |
| } | |
| have β¨J, IJ, Jπ', HJβ© := zorn_subset_nonempty _ Hπ' _ Iπ' | |
| simp at * | |
| simp [π', π] at Jπ' | |
| rcases Jπ' with β¨J', β¨HJ', IJ'β©, Eβ© | |
| subst J; simp at * | |
| use J', ?_, IJ' | |
| constructor | |
| Β· exact HJ'.ne_top | |
| Β· intro K JK | |
| by_contra F | |
| rw [lt_iff_le_not_ge] at JK | |
| rcases JK with β¨JK, KJβ© | |
| apply KJ; clear KJ | |
| apply HJ ?_ JK | |
| simp [π', π]; constructor | |
| Β· apply K.isProper_of_ne_top F | |
| Β· apply le_trans IJ JK | |
| } | |
| noncomputable def Order.Ideal.maximal [BooleanAlgebra B] (I : Ideal B) [HI : I.IsProper] : | |
| Ideal B | |
| := by | |
| have H := or_iff_not_imp_left.mp ((Ideal.isCoatomic B).eq_top_or_exists_le_coatom I) HI.ne_top | |
| exact H.choose | |
| lemma Order.Ideal.maximal_isMaximal [BooleanAlgebra B] (I : Ideal B) [HI : I.IsProper] : | |
| (I.maximal).IsMaximal | |
| := by | |
| have H := or_iff_not_imp_left.mp ((Ideal.isCoatomic B).eq_top_or_exists_le_coatom I) HI.ne_top | |
| rw [Ideal.isMaximal_iff_isCoatom] | |
| exact H.choose_spec.1 | |
| lemma Order.Ideal.le_maximal [BooleanAlgebra B] (I : Ideal B) [HI : I.IsProper] : | |
| I β€ I.maximal | |
| := by | |
| have H := or_iff_not_imp_left.mp ((Ideal.isCoatomic B).eq_top_or_exists_le_coatom I) HI.ne_top | |
| exact H.choose_spec.2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment