{
  "challenge": {
    "bytes": 2027,
    "canonical_olean_sha256": "4db0185320ba018c937874ef03bb5044c585717fdd0ef23f133835dbfa71a500",
    "dependencies": [
      {
        "provenance": "allowlisted",
        "repository": "leanprover-community/mathlib4"
      }
    ],
    "direct_imports": [
      "Mathlib.Algebra.Polynomial.Basic",
      "Mathlib.RingTheory.Localization.Basic",
      "Mathlib.RingTheory.Noetherian.Defs",
      "Mathlib.RingTheory.UniqueFactorizationDomain.Defs"
    ],
    "lines": 59,
    "module": "Challenge",
    "path": "Challenge.lean",
    "sha256": "76dd7103a3fc14ea71e25a6f494930dd56217971e2ed83cb6f89b66680181d25",
    "transitive_source_count": 5,
    "trust_level": "high",
    "untrusted_sources": []
  },
  "checked_at": "2026-08-27T23:55:51Z",
  "classification": {
    "arxiv": [
      {
        "code": "math.AC",
        "name": "Commutative Algebra"
      },
      {
        "code": "cs.LO",
        "name": "Logic in Computer Science"
      }
    ],
    "msc2020": [
      {
        "code": "13A05",
        "name": "Divisibility and factorizations in commutative rings"
      },
      {
        "code": "13B30",
        "name": "Rings of fractions and localization for commutative rings"
      },
      {
        "code": "03B35",
        "name": "Mechanization of proofs and logical operations"
      }
    ]
  },
  "comparator": {
    "challenge_module": "Challenge",
    "definition_names": [],
    "path": "comparator.json",
    "permitted_axioms": [
      "propext",
      "Quot.sound",
      "Classical.choice"
    ],
    "sha256": "1f3f57f1e001e00a323bdb0c5376757ce5cca460d9b78c012fb6a72fe72385ce",
    "solution_module": "Solution",
    "theorem_names": [
      "NagataFactoriality.palomar_nagata_factoriality",
      "NagataFactoriality.palomar_nagata_factoriality_of_prime_generators",
      "NagataFactoriality.palomar_polynomial_ufd"
    ]
  },
  "comparator_commit": "575674928e239f5bc452aab72d1dd7b0f1326494",
  "comparator_log_tail": "Building Challenge\n\u26a0 [1277/1278] Built Challenge (1.4s)\nwarning: Challenge.lean:27:8: declaration uses `sorry`\nwarning: Challenge.lean:41:8: declaration uses `sorry`\nwarning: Challenge.lean:53:8: declaration uses `sorry`\nBuild completed successfully (1278 jobs).\nExporting #[Nat, String, String.mk, Char, Quot, Quot.mk, Quot.lift, Quot.ind, NagataFactoriality.palomar_nagata_factoriality, NagataFactoriality.palomar_nagata_factoriality_of_prime_generators, NagataFactoriality.palomar_polynomial_ufd, propext, Quot.sound, Classical.choice, Nat.add, Nat.sub, Nat.mul, Nat.pow, Nat.gcd, Nat.div, Nat.mod, Nat.beq, Nat.ble, Nat.land, Nat.lor, Nat.xor, Nat.shiftLeft, Nat.shiftRight, String.ofList, Char.ofNat, List, eagerReduce] from Challenge\nBuilding Solution\n\u2714 [1626/1638] Built NagataFactoriality.Basic.Ring (292ms)\n\u2714 [1627/1638] Built NagataFactoriality.Basic.Divisibility (1.6s)\n\u2714 [1628/1638] Built NagataFactoriality.Localization.MultSet (1.6s)\n\u26a0 [1629/1638] Built NagataFactoriality.Basic.Noetherian (1.5s)\nwarning: NagataFactoriality/Basic/Noetherian.lean:12:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\n\u26a0 [1630/1638] Built NagataFactoriality.Basic.UFD (2.4s)\nwarning: NagataFactoriality/Basic/UFD.lean:11:6: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Basic/UFD.lean:14:6: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Basic/UFD.lean:18:6: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Basic/UFD.lean:49:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Basic/UFD.lean:60:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\n\u2714 [1631/1638] Built NagataFactoriality.Localization.Localization (2.7s)\n\u2714 [1632/1638] Built NagataFactoriality.Localization.IsLocalization (2.8s)\n\u2714 [1633/1638] Built NagataFactoriality.Localization.Properties (1.3s)\n\u26a0 [1634/1638] Built NagataFactoriality.Nagata.Lemmas (2.6s)\nwarning: NagataFactoriality/Nagata/Lemmas.lean:14:0: Definition `_private.NagataFactoriality.Nagata.Lemmas.0.NagataFactoriality.submonoidZeroNotMemFact` of class type is semireducible. Most type class instances should be instance-reducible, so consider marking this\ndefinition with `@[instance_reducible]`. If it is intentionally semireducible, this warning can be disabled with `set_option warn.classDefReducibility false`.\nwarning: NagataFactoriality/Nagata/Lemmas.lean:14:0: Definition `submonoidZeroNotMemFact` is a proposition; use `theorem` instead of `def`\n\nNote: This linter can be disabled with `set_option linter.defProp false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:152:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:171:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:172:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:264:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:338:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:339:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:348:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:366:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:367:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:376:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:399:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:400:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:401:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:419:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:545:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:546:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:556:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:585:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:586:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:595:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:611:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:612:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:621:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:644:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:645:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Lemmas.lean:646:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\n\u26a0 [1635/1638] Built NagataFactoriality.Nagata.Theorem (1.5s)\nwarning: NagataFactoriality/Nagata/Theorem.lean:13:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Theorem.lean:14:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Theorem.lean:24:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Theorem.lean:77:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Theorem.lean:78:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Nagata/Theorem.lean:89:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\n\u26a0 [1636/1638] Built NagataFactoriality.Applications.Laurent (2.2s)\nwarning: NagataFactoriality/Applications/Laurent.lean:44:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Applications/Laurent.lean:93:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Applications/Laurent.lean:99:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\nwarning: NagataFactoriality/Applications/Laurent.lean:105:2: Try this: \n  letI\u0335\n\nThe goal is a proposition, so `let` is preferred over `letI`.\nThe difference between `let` and `letI` is that `letI` inlines the value.\nBut this is not relevant for proofs because of proof irrelevance.\n\nNote: This linter can be disabled with `set_option linter.style.haveILetI false`\n\u2714 [1637/1638] Built Solution (1.5s)\nBuild completed successfully (1638 jobs).\nExporting #[Nat, String, String.mk, Char, Quot, Quot.mk, Quot.lift, Quot.ind, NagataFactoriality.palomar_nagata_factoriality, NagataFactoriality.palomar_nagata_factoriality_of_prime_generators, NagataFactoriality.palomar_polynomial_ufd, propext, Quot.sound, Classical.choice, Nat.add, Nat.sub, Nat.mul, Nat.pow, Nat.gcd, Nat.div, Nat.mod, Nat.beq, Nat.ble, Nat.land, Nat.lor, Nat.xor, Nat.shiftLeft, Nat.shiftRight, String.ofList, Char.ofNat, List, eagerReduce] from Solution\nRunning nanoda kernel on solution\nnanoda kernel accepts the solution\nRunning Lean default kernel on solution.\nLean default kernel accepts the solution\nYour solution is okay!",
  "errors": [],
  "existing_id": null,
  "formalization": {
    "automation_method_count": 2,
    "path": "formalization.yaml",
    "project_name": "Prime-generated Nagata factoriality in Lean",
    "review_status": "self-assessed",
    "sha256": "fc19fcb04be28037ea066d932a6be76b33106b5b987e14d9d64f163fd8c4e3c9",
    "source_count": 3
  },
  "lake_manifest": {
    "path": "lake-manifest.json",
    "sha256": "5236edc07514faff14f8517a9e64dfd3669917a01792fc9558207cc912729044"
  },
  "lakefile": {
    "format": "lean",
    "path": "lakefile.lean",
    "sha256": "6be0d6013c001719bd4a9a0e1385da0b126195f82e3d12fe5938b92a84de5fff"
  },
  "landrun_commit": "811cfff51ceaf3d9843708aa6d22e9b84ccac8b4",
  "lean4export_commit": "15f6055e299ad5b89345e533cc2192f4cc00f659",
  "lean_toolchain": "leanprover/lean4:v4.33.0",
  "lean_toolchain_path": "lean-toolchain",
  "license": {
    "declared_identifier": "Apache-2.0",
    "detected_identifier": "Apache-2.0",
    "path": "LICENSE",
    "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30"
  },
  "mathlib_cache": {
    "available": true,
    "required": true
  },
  "nanoda_commit": "68d5ca9db226849b41a6fff59d796ff19d0a8840",
  "phase": "verification",
  "project_dependencies": [
    {
      "name": "mathlib",
      "repository": "leanprover-community/mathlib4",
      "revision": "db584cd6d46c92f209a44c0f1c829460d327499d",
      "url": "https://github.com/leanprover-community/mathlib4.git"
    },
    {
      "name": "plausible",
      "repository": "leanprover-community/plausible",
      "revision": "b7eb3304aeae834b12dda98993a37f6a41f6f0bb",
      "url": "https://github.com/leanprover-community/plausible"
    },
    {
      "name": "LeanSearchClient",
      "repository": "leanprover-community/LeanSearchClient",
      "revision": "5f4d51b81cbd3f6b32b156bfad9056621a040404",
      "url": "https://github.com/leanprover-community/LeanSearchClient"
    },
    {
      "name": "importGraph",
      "repository": "leanprover-community/import-graph",
      "revision": "16f02aa7642864af59f1ff0e384a015994db9118",
      "url": "https://github.com/leanprover-community/import-graph"
    },
    {
      "name": "proofwidgets",
      "repository": "leanprover-community/ProofWidgets4",
      "revision": "4be2e3d5087eeb272cf5a8853b8f9dd025ef5957",
      "url": "https://github.com/leanprover-community/ProofWidgets4"
    },
    {
      "name": "aesop",
      "repository": "leanprover-community/aesop",
      "revision": "3448c0bcc5ce01b2d1546e483ec3620e32df3d0e",
      "url": "https://github.com/leanprover-community/aesop"
    },
    {
      "name": "Qq",
      "repository": "leanprover-community/quote4",
      "revision": "92c15be17b7caf78c2ad767ec40f89052d908d81",
      "url": "https://github.com/leanprover-community/quote4"
    },
    {
      "name": "batteries",
      "repository": "leanprover-community/batteries",
      "revision": "4488d40d070b9700d4d5a6aa342f0d40c31b2a2d",
      "url": "https://github.com/leanprover-community/batteries"
    },
    {
      "name": "Cli",
      "repository": "leanprover/lean4-cli",
      "revision": "6130a47896ce867c6a4a55373441e59e565bad0f",
      "url": "https://github.com/leanprover/lean4-cli"
    }
  ],
  "provenance": {
    "mathematical_sources": [
      {
        "authors": [
          {
            "name": "Masayoshi Nagata"
          }
        ],
        "identifier": "10.2969/jmsj/00910143",
        "location": "https://doi.org/10.2969/jmsj/00910143",
        "note": "The repository independently formalizes the localization-to-base UFD implication in Lean, with a prime-generated submonoid hypothesis.",
        "relationship": "independently-proves",
        "title": "A remark on the unique factorization theorem",
        "type": "article"
      },
      {
        "authors": [
          {
            "name": "Masayoshi Nagata"
          }
        ],
        "note": "Classical commutative-algebra source for the theorem and its uses.",
        "relationship": "background",
        "title": "Local Rings",
        "type": "book"
      },
      {
        "authors": [
          {
            "name": "Pierre Samuel"
          }
        ],
        "note": "Background source for the factoriality argument and polynomial application.",
        "relationship": "background",
        "title": "Lectures on Unique Factorization Domains",
        "type": "book"
      }
    ],
    "related_formalizations": [],
    "repository_role": "substantive-development",
    "responsible_maintainers": [
      {
        "name": "Arthur Freitas Ramos"
      }
    ],
    "result_origin": "source-based"
  },
  "resource_usage": [
    {
      "elapsed_seconds": 0.005,
      "max_rss_kib": 13368,
      "peak_tasks_observed": 1,
      "phase": "touch",
      "returncode": 0,
      "system_cpu_seconds": 0.005,
      "user_cpu_seconds": 0.0,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.007,
      "max_rss_kib": 13188,
      "peak_tasks_observed": 1,
      "phase": "landrun",
      "returncode": 0,
      "system_cpu_seconds": 0.005,
      "user_cpu_seconds": 0.003,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.004,
      "max_rss_kib": 13200,
      "peak_tasks_observed": 1,
      "phase": "touch",
      "returncode": 1,
      "system_cpu_seconds": 0.004,
      "user_cpu_seconds": 0.001,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.026,
      "max_rss_kib": 13368,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 0,
      "system_cpu_seconds": 0.003,
      "user_cpu_seconds": 0.024,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.026,
      "max_rss_kib": 13368,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.005,
      "user_cpu_seconds": 0.022,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.027,
      "max_rss_kib": 13204,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.009,
      "user_cpu_seconds": 0.018,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.023,
      "max_rss_kib": 13188,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.007,
      "user_cpu_seconds": 0.017,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 2.423,
      "max_rss_kib": 892844,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 0.544,
      "user_cpu_seconds": 1.935,
      "workspace_disk_peak_bytes": 860160
    },
    {
      "elapsed_seconds": 0.063,
      "max_rss_kib": 92048,
      "peak_tasks_observed": 1,
      "phase": "lean",
      "returncode": 0,
      "system_cpu_seconds": 0.045,
      "user_cpu_seconds": 0.034,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 48.511,
      "max_rss_kib": 1027292,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 43.327,
      "user_cpu_seconds": 69.999,
      "workspace_disk_peak_bytes": 7787626496
    },
    {
      "elapsed_seconds": 6.85,
      "max_rss_kib": 1021152,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 3.828,
      "user_cpu_seconds": 6.669,
      "workspace_disk_peak_bytes": 1470464
    },
    {
      "elapsed_seconds": 2.669,
      "max_rss_kib": 892980,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 0.653,
      "user_cpu_seconds": 1.968,
      "workspace_disk_peak_bytes": 700416
    },
    {
      "elapsed_seconds": 1.742,
      "max_rss_kib": 1996848,
      "peak_tasks_observed": 1,
      "phase": "lean",
      "returncode": 0,
      "system_cpu_seconds": 0.595,
      "user_cpu_seconds": 0.84,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.067,
      "max_rss_kib": 92024,
      "peak_tasks_observed": 1,
      "phase": "lean",
      "returncode": 0,
      "system_cpu_seconds": 0.038,
      "user_cpu_seconds": 0.043,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.074,
      "max_rss_kib": 113056,
      "peak_tasks_observed": 1,
      "phase": "lean",
      "returncode": 0,
      "system_cpu_seconds": 0.045,
      "user_cpu_seconds": 0.046,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.004,
      "max_rss_kib": 13240,
      "peak_tasks_observed": 1,
      "phase": "touch",
      "returncode": 0,
      "system_cpu_seconds": 0.003,
      "user_cpu_seconds": 0.001,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.007,
      "max_rss_kib": 13204,
      "peak_tasks_observed": 1,
      "phase": "landrun",
      "returncode": 0,
      "system_cpu_seconds": 0.005,
      "user_cpu_seconds": 0.002,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.004,
      "max_rss_kib": 13240,
      "peak_tasks_observed": 1,
      "phase": "touch",
      "returncode": 1,
      "system_cpu_seconds": 0.004,
      "user_cpu_seconds": 0.0,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.026,
      "max_rss_kib": 13060,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 0,
      "system_cpu_seconds": 0.008,
      "user_cpu_seconds": 0.018,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.026,
      "max_rss_kib": 13076,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 0,
      "system_cpu_seconds": 0.008,
      "user_cpu_seconds": 0.018,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.026,
      "max_rss_kib": 13368,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.004,
      "user_cpu_seconds": 0.023,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.027,
      "max_rss_kib": 13104,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.007,
      "user_cpu_seconds": 0.02,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 0.024,
      "max_rss_kib": 12944,
      "peak_tasks_observed": 1,
      "phase": "python3.11",
      "returncode": 1,
      "system_cpu_seconds": 0.006,
      "user_cpu_seconds": 0.018,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 1.455,
      "max_rss_kib": 844908,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 0.676,
      "user_cpu_seconds": 0.748,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 1.369,
      "max_rss_kib": 844912,
      "peak_tasks_observed": 1,
      "phase": "lake",
      "returncode": 0,
      "system_cpu_seconds": 0.676,
      "user_cpu_seconds": 0.735,
      "workspace_disk_peak_bytes": 0
    },
    {
      "elapsed_seconds": 41.142,
      "max_rss_kib": 2271320,
      "peak_tasks_observed": 1,
      "phase": "comparator",
      "returncode": 0,
      "system_cpu_seconds": 11.745,
      "user_cpu_seconds": 42.095,
      "workspace_disk_peak_bytes": 76607488
    }
  ],
  "schema_version": 1,
  "solution": {
    "module": "Solution",
    "path": "Solution.lean",
    "sha256": "e3a673c72a1935a2ebe45651ec24b4596f5886e98a314555ee345ea8d221bc3b"
  },
  "source": {
    "bytes": 975223,
    "commit": "9ebcfa77a4f7eab6fdb663e7f151ceeb48abdff7",
    "repository": "Arthur742Ramos/NagataFactoriality",
    "repository_url": "https://github.com/Arthur742Ramos/NagataFactoriality",
    "tree_url": "https://github.com/Arthur742Ramos/NagataFactoriality/tree/9ebcfa77a4f7eab6fdb663e7f151ceeb48abdff7"
  },
  "stage": "complete",
  "status": "pass",
  "submission": {
    "authorization": {
      "relationship": "maintainer"
    },
    "requested_paths": {
      "comparator_config_path": "comparator.json",
      "formalization_metadata_path": "",
      "project_path": ""
    },
    "submission_id": "spwn5dxa2ndj"
  },
  "warnings": [],
  "workflow_url": "https://github.com/PalomarRegistry/PalomarSubmission/actions/runs/33127679460"
}
