Zulip Chat Archive
Stream: lean4
Topic: upstreaming Mathlib.Lean.Json
llllvvuu (Jan 17 2025 at 21:31):
do people think it’s worth upstreaming file#Mathlib/Lean/Json (a pretty small file) and adding the one-liners for UInt64 etc?
Eric Wieser (Jan 18 2025 at 00:01):
I think the entire Mathlib.Lean folder is "things which should be upstreamed but the author doesn't want to wait 1-2 months before they are available in mathlib".
Eric Wieser (Jan 18 2025 at 00:02):
Obviously core probably doesn't want everything in there, but I think the Json file should be uncontroversial (modulo bikeshedding the error messages)
llllvvuu (Jan 18 2025 at 00:35):
somewhat unrelated: out of curiosity, are JSON/XML parsing not intended to be in the stdlib? I was somewhat surprised to see them under Lean and not Init
Eric Wieser (Jan 18 2025 at 00:38):
I think at one point Init was not allowed to import Lean, and so it would be impossible to write the json% elaborator solely within Init. Maybe that rule has been relaxed now.
François G. Dorais (Jan 18 2025 at 02:03):
That rule hasn't been relaxed but now there is also Std in between Init and Lean.
Kim Morrison (Jan 18 2025 at 05:09):
I'm a bit skeptical about running predicates in fromJson?
Eric Wieser (Jan 18 2025 at 09:42):
Kim Morrison said:
I'm a bit skeptical about running predicates in
fromJson?
Is this complaint leveled at the Fin instance, or just the Subtype one?
Henrik Böving (Jan 18 2025 at 11:29):
Eric Wieser said:
Kim Morrison said:
I'm a bit skeptical about running predicates in
fromJson?Is this complaint leveled at the Fin instance, or just the Subtype one?
And I do think that Fin makes sense as it's a cheap check but Subtype is potentially dangerous as an adversary could make you execute potentially highly expensive computation.
llllvvuu (Jan 18 2025 at 23:38):
I took a look at Lean/Data/Json/FromToJson and it seems UInt64 is already handled (I didn't notice since the one that I needed was actually UInt32), but it gets serialized as a string, unlike Nat/Int:
import Lean
#eval Lean.toJson (UInt64.size - 1 : Nat)
#eval Lean.toJson (UInt64.size - 1 : Int)
#eval Lean.toJson (0-1 : UInt64)
Now I'm not sure what would be the right thing for Fin (probably still a number like Nat?).
Notification Bot (Jan 20 2025 at 01:29):
A message was moved from this topic to #lean4 > Importing Lean from Std and Init by Eric Wieser.
Eric Wieser (Jan 20 2025 at 01:32):
Json serializing as a string sounds wrong to me there
Eric Wieser (Jan 20 2025 at 01:34):
I understand that the javascript JSON.parse loses precision when parsing uint64s, but really that's the job of the parser to use a better parsing library (like https://www.npmjs.com/package/json-with-bigint).
Eric Wieser (Jan 20 2025 at 01:36):
Henrik Böving said:
And I do think that
Finmakes sense as it's a cheap check butSubtypeis potentially dangerous as an adversary could make you execute potentially highly expensive computation.
For instance if your field is {p : Nat // p.Prime}, and your adversary gives you a very large prime?
Henrik Böving (Jan 20 2025 at 08:07):
Yes
Last updated: May 02 2025 at 03:31 UTC