Zulip Chat Archive
Stream: new members
Topic: extract part of goal into separate variable
Eric Rodriguez (Apr 06 2022 at 01:02):
I can only find this being used in mathlib in docs#polynomial.gal.card_complex_roots_eq_card_real_add_card_not_gal_inv, it definitely should be in the tips and tricks page
Adam Topaz (Apr 06 2022 at 01:05):
We use it quite frequently in LTE.
Matt Diamond (Apr 06 2022 at 02:27):
I'm running into one other roadblock with the above code... trying to prove this:
example : ∀ (o : ordinal), beth o ≥ aleph o := begin
end
and Lean isn't happy about universes:
type mismatch at application
  aleph o
term
  o
has type
  ordinal.{?l_1} : Type (?l_1+1)
but is expected to have type
  ordinal.{(max (?l_1+1) ?l_2)} : Type ((max (?l_1+1) ?l_2)+1)
I tried changing ordinal to ordinal.{max (u+1) v} but that just led to this new error:
type mismatch at application
  aleph o
term
  o
has type
  ordinal.{(max (u+1) v)} : Type ((max (u+1) v)+1)
but is expected to have type
  ordinal.{(max ((max (u+1) v)+1) ?l_1)} : Type ((max ((max (u+1) v)+1) ?l_1)+1)
Is there any way I can get past this? Do I need to modify my definition of beth to explicitly declare universe variables?
Notification Bot (Apr 06 2022 at 02:27):
Matt Diamond has marked this topic as unresolved.
Junyan Xu (Apr 06 2022 at 05:43):
I think you won't get the universe issue with the definition beth':
noncomputable
def beth' (o: ordinal) : cardinal :=
  ordinal.limit_rec_on o
  (cardinal.aleph 0)
  (λ _ b, 2 ^ b)
  (λ lim _ IH, Sup (lim.brange IH))
set_option pp.universes true
#check beth
#check beth'
beth.{u_1 u_2} : ordinal.{u_1} → cardinal.{(max (u_1+1) u_2)}
beth'.{u_1 u_2} : ordinal.{u_1} → cardinal.{u_2}
(Notice that you need bdd_above(using the disjoint union / Sigma type) for Sup to be well behaved: docs#le_cSup )
I think it's good in this case to specify explicit universes like
universe u
def beth' (o: ordinal.{u}) : cardinal.{u} :=
Junyan Xu (Apr 06 2022 at 05:53):
The universe issue with your approach is that the indexing type ι in
noncomputable def cardinal.sup {ι : Type u} (f : ι → cardinal.{max u v}) : cardinal :=
is { o // o < lim } : Type (u_1+1).
Last updated: May 02 2025 at 03:31 UTC