{"action":"created","comment":{"url":"https://api.github.com/repos/leanprover/mathlib/pulls/comments/169694038","pull_request_review_id":98261853,"id":169694038,"diff_hunk":"@@ -0,0 +1,263 @@\n+import algebra.group algebra.module algebra.ring data.set.basic tactic.ring data.quot ring_theory.ideals\n+\n+universe u\n+\n+namespace localization\n+\n+variables (α : Type u) [comm_ring α] (S : set α) [is_submonoid α S]\n+\n+def r : α × S → α × S → Prop :=\n+λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩, ∃ t ∈ S, (s₁ * r₂ - s₂ * r₁) * t = 0\n+\n+local infix ≈ := r α S\n+\n+theorem refl : ∀ (x : α × S), x ≈ x :=\n+λ ⟨r₁, s₁, hs₁⟩, ⟨1, is_submonoid.one_mem S, by simp⟩\n+\n+theorem symm : ∀ (x y : α × S), x ≈ y → y ≈ x :=\n+λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩ ⟨t, hts, ht⟩, ⟨t, hts, calc\n+        (s₂ * r₁ - s₁ * r₂) * t\n+      = -((s₁ * r₂ - s₂ * r₁) * t) : by simp [add_mul]\n+  ... = 0 : by rw ht; simp⟩\n+\n+theorem trans : ∀ (x y z : α × S), x ≈ y → y ≈ z → x ≈ z :=\n+λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩ ⟨r₃, s₃, hs₃⟩ ⟨t, hts, ht⟩ ⟨t', hts', ht'⟩,\n+⟨s₂ * t' * t, is_submonoid.mul_mem (is_submonoid.mul_mem hs₂ hts') hts, calc\n+         (s₁ * r₃ - s₃ * r₁) * (s₂ * t' * t)\n+       = t' * s₃ * ((s₁ * r₂ - s₂ * r₁) * t) + t * s₁ * ((s₂ * r₃ - s₃ * r₂) * t') :\n+           by simp [mul_left_comm, mul_add, mul_comm]\n+   ... = 0 : by rw [ht, ht']; simp⟩\n+\n+instance : setoid (α × S) :=\n+⟨r α S, refl α S, symm α S, trans α S⟩\n+\n+def loc := quotient $ localization.setoid α S\n+\n+private def add_aux : α × S → α × S → loc α S :=\n+λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩, ⟦⟨s₁ * r₂ + s₂ * r₁, s₁ * s₂, is_submonoid.mul_mem hs₁ hs₂⟩⟧\n+\n+instance : has_add (loc α S) :=\n+⟨quotient.lift₂ (add_aux α S) $\n+ λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩ ⟨r₃, s₃, hs₃⟩ ⟨r₄, s₄, hs₄⟩ ⟨t₅, hts₅, ht₅⟩ ⟨t₆, hts₆, ht₆⟩,\n+ quotient.sound ⟨t₆ * t₅, is_submonoid.mul_mem hts₆ hts₅, calc\n+         (s₁ * s₂ * (s₃ * r₄ + s₄ * r₃) - s₃ * s₄ * (s₁ * r₂ + s₂ * r₁)) * (t₆ * t₅)\n+       = s₁ * s₃ * ((s₂ * r₄ - s₄ * r₂) * t₆) * t₅ + s₂ * s₄ * ((s₁ * r₃ - s₃ * r₁) * t₅) * t₆ : by ring\n+   ... = 0 : by rw [ht₆, ht₅]; simp⟩⟩\n+\n+private def neg_aux : α × S → loc α S :=\n+λ ⟨r, s, hs⟩, ⟦⟨-r, s, hs⟩⟧\n+\n+instance : has_neg (loc α S) :=\n+⟨quotient.lift (neg_aux α S) $\n+ λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩ ⟨t, hts, ht⟩,\n+ quotient.sound ⟨t, hts, calc\n+         (s₁ * -r₂ - s₂ * -r₁) * t\n+       = -((s₁ * r₂ - s₂ * r₁) * t) : by ring\n+   ... = 0 : by rw ht; simp⟩⟩\n+\n+private def mul_aux : α × S → α × S → loc α S :=\n+λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩, ⟦⟨r₁ * r₂, s₁ * s₂, is_submonoid.mul_mem hs₁ hs₂⟩⟧\n+\n+instance : has_mul (loc α S) :=\n+⟨quotient.lift₂ (mul_aux α S) $\n+ λ ⟨r₁, s₁, hs₁⟩ ⟨r₂, s₂, hs₂⟩ ⟨r₃, s₃, hs₃⟩ ⟨r₄, s₄, hs₄⟩ ⟨t₅, hts₅, ht₅⟩ ⟨t₆, hts₆, ht₆⟩,\n+ quotient.sound ⟨t₆ * t₅, is_submonoid.mul_mem hts₆ hts₅, calc\n+         ((s₁ * s₂) * (r₃ * r₄) - (s₃ * s₄) * (r₁ * r₂)) * (t₆ * t₅)\n+       = t₆ * ((s₁ * r₃ - s₃ * r₁) * t₅) * r₂ * s₄ + t₅ * ((s₂ * r₄ - s₄ * r₂) * t₆) * r₃ * s₁ : by simp [mul_left_comm, mul_add, mul_comm]\n+   ... = 0 : by rw [ht₅, ht₆]; simp⟩⟩\n+\n+instance : comm_ring (loc α S) :=\n+by refine\n+{ add            := has_add.add,\n+  add_assoc      := λ m n k, quotient.induction_on₃ m n k _,\n+  zero           := ⟦⟨0, 1, is_submonoid.one_mem S⟩⟧,\n+  zero_add       := quotient.ind _,\n+  add_zero       := quotient.ind _,\n+  neg            := has_neg.neg,\n+  add_left_neg   := quotient.ind _,\n+  add_comm       := quotient.ind₂ _,\n+  mul            := has_mul.mul,\n+  mul_assoc      := λ m n k, quotient.induction_on₃ m n k _,\n+  one            := ⟦⟨1, 1, is_submonoid.one_mem S⟩⟧,\n+  one_mul        := quotient.ind _,\n+  mul_one        := quotient.ind _,\n+  left_distrib   := λ m n k, quotient.induction_on₃ m n k _,\n+  right_distrib  := λ m n k, quotient.induction_on₃ m n k _,\n+  mul_comm       := quotient.ind₂ _ };\n+{ intros,\n+  try {cases a with r₁ s₁, cases s₁ with s₁ hs₁},\n+  try {cases b with r₂ s₂, cases s₂ with s₂ hs₂},\n+  try {cases c with r₃ s₃, cases s₃ with s₃ hs₃},\n+  apply quotient.sound,\n+  existsi (1:α),\n+  existsi is_submonoid.one_mem S,\n+  simp [mul_left_comm, mul_add, mul_comm] }\n+\n+def of_comm_ring : α → loc α S :=\n+λ r, ⟦⟨r, 1, is_submonoid.one_mem S⟩⟧\n+\n+instance : is_ring_hom (of_comm_ring α S) :=\n+{ map_add := λ x y, quotient.sound $ by simp,\n+  map_mul := λ x y, quotient.sound $ by simp,\n+  map_one := rfl }\n+\n+local infix ^ := monoid.pow\n+\n+variable {α}\n+\n+def away (x : α) := loc α (powers x)\n+\n+instance away.comm_ring (x : α) : comm_ring (away x) :=\n+localization.comm_ring α (powers x)\n+\n+section at_prime\n+\n+variables (P : set α) [is_prime_ideal P]\n+\n+instance prime.is_submonoid :\n+  is_submonoid α (set.compl P) :=\n+{ one_mem := λ h, is_prime_ideal.ne_univ P $\n+    is_submodule.univ_of_one_mem P h,\n+  mul_mem := λ x y hnx hny hxy, or.cases_on\n+    (is_prime_ideal.mem_or_mem_of_mul_mem hxy) hnx hny }\n+\n+def at_prime := loc α (set.compl P)\n+\n+instance at_prime.comm_ring : comm_ring (at_prime P) :=\n+localization.comm_ring α (set.compl P)\n+\n+instance at_prime.local_ring : local_ring (at_prime P) :=\n+local_of_nonunits_ideal\n+  (λ hze, have _, from quotient.exact hze, let ⟨t, hts, ht⟩ := this in\n+     hts $ have htz : t = 0, by simpa using ht,\n+       suffices (0:α) ∈ P, by rwa htz,\n+       @is_submodule.zero _ _ _ _ P _)\n+  (λ x y hx hy ⟨z, hz⟩,\n+     let ⟨⟨r₁, s₁, hs₁⟩, hrs₁⟩ := quotient.exists_rep x,\n+         ⟨⟨r₂, s₂, hs₂⟩, hrs₂⟩ := quotient.exists_rep y,\n+         ⟨⟨r₃, s₃, hs₃⟩, hrs₃⟩ := quotient.exists_rep z in\n+     have _, by rw [← hrs₁, ← hrs₂, ← hrs₃] at hz; from quotient.exact hz,\n+     let ⟨t, hts, ht⟩ := this in\n+     have hr₁ : r₁ ∈ P, from classical.by_contradiction $\n+     λ hnr₁, hx ⟨⟦⟨s₁, r₁, hnr₁⟩⟧, by rw ←hrs₁;\n+       from quotient.sound ⟨1, is_submonoid.one_mem _, by simp [mul_comm]⟩⟩,\n+     have hr₂ : r₂ ∈ P, from classical.by_contradiction $\n+     λ hnr₂, hy ⟨⟦⟨s₂, r₂, hnr₂⟩⟧, by rw ←hrs₂;\n+       from quotient.sound ⟨1, is_submonoid.one_mem _, by simp [mul_comm]⟩⟩,\n+     have hr₃ : _ , from or.resolve_right\n+     (mem_or_mem_of_mul_eq_zero P ht) hts,\n+     have h : s₃ * (s₁ * s₂) - r₃ * (s₁ * r₂ + s₂ * r₁) ∈ P,\n+     by simpa using hr₃,\n+     have h1 : r₃ * (s₁ * r₂ + s₂ * r₁) ∈ P,\n+     from is_submodule.smul r₃ $ is_submodule.add\n+         (is_submodule.smul s₁ hr₂)\n+         (is_submodule.smul s₂ hr₁),\n+     have h2 : s₃ * (s₁ * s₂) ∈ P,\n+     from calc s₃ * (s₁ * s₂)\n+           = s₃ * (s₁ * s₂) - r₃ * (s₁ * r₂ + s₂ * r₁) + r₃ * (s₁ * r₂ + s₂ * r₁) : eq.symm $ sub_add_cancel _ _\n+       ... ∈ P : is_submodule.add h h1,\n+     have h3 : s₁ * s₂ ∈ P, from or.resolve_left\n+     (is_prime_ideal.mem_or_mem_of_mul_mem h2) hs₃,\n+     or.cases_on (is_prime_ideal.mem_or_mem_of_mul_mem h3) hs₁ hs₂)\n+\n+end at_prime\n+\n+def closure (S : set α) : set α := {y | ∃ (L:list α) (H:∀ x ∈ L, x ∈ S), L.prod = y }","path":"ring_theory/localization.lean","position":165,"original_position":165,"commit_id":"35809083ba71b94d9a28a413459dca1b08189a51","original_commit_id":"712822c28261e77cd461f22909f6f566dae01f3d","user":{"login":"johoelzl","id":5176109,"avatar_url":"https://avatars0.githubusercontent.com/u/5176109?v=4","gravatar_id":"","url":"https://api.github.com/users/johoelzl","html_url":"https://github.com/johoelzl","followers_url":"https://api.github.com/users/johoelzl/followers","following_url":"https://api.github.com/users/johoelzl/following{/other_user}","gists_url":"https://api.github.com/users/johoelzl/gists{/gist_id}","starred_url":"https://api.github.com/users/johoelzl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johoelzl/subscriptions","organizations_url":"https://api.github.com/users/johoelzl/orgs","repos_url":"https://api.github.com/users/johoelzl/repos","events_url":"https://api.github.com/users/johoelzl/events{/privacy}","received_events_url":"https://api.github.com/users/johoelzl/received_events","type":"User","site_admin":false},"body":"In the end we want to have both definitions, maybe using multisets instead of lists (when the monoid is commutative). But the advantage of starting with the inductive definition is that we can use the equation compiler. \r\n\r\nThere is also an alternative inductive definition:\r\n```lean\r\ninductive in_closure (S : set α) : α → Prop\r\n| one : in_closure 1\r\n| mul_basic : ∀x∈S, ∀y, in_closure x → in_closure (x * y)\r\n```\r\n\r\nBut finally we want to have the inductive view, want to know that each element of the closure is generated by a multiset / list, and we want to see the closure as the smallest submonoid containing `S`. From a abstract view it doesn't matter where we start and end. But due to the equation compiler we may want to start with a inductive definition.","created_at":"2018-02-21T16:23:59Z","updated_at":"2018-02-21T16:23:59Z","html_url":"https://github.com/leanprover/mathlib/pull/39#discussion_r169694038","pull_request_url":"https://api.github.com/repos/leanprover/mathlib/pulls/39","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/comments/169694038"},"html":{"href":"https://github.com/leanprover/mathlib/pull/39#discussion_r169694038"},"pull_request":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/39"}},"in_reply_to_id":169046779},"pull_request":{"url":"https://api.github.com/repos/leanprover/mathlib/pulls/39","id":166965912,"html_url":"https://github.com/leanprover/mathlib/pull/39","diff_url":"https://github.com/leanprover/mathlib/pull/39.diff","patch_url":"https://github.com/leanprover/mathlib/pull/39.patch","issue_url":"https://api.github.com/repos/leanprover/mathlib/issues/39","number":39,"state":"open","locked":false,"title":"Update localization","user":{"login":"kckennylau","id":17786901,"avatar_url":"https://avatars1.githubusercontent.com/u/17786901?v=4","gravatar_id":"","url":"https://api.github.com/users/kckennylau","html_url":"https://github.com/kckennylau","followers_url":"https://api.github.com/users/kckennylau/followers","following_url":"https://api.github.com/users/kckennylau/following{/other_user}","gists_url":"https://api.github.com/users/kckennylau/gists{/gist_id}","starred_url":"https://api.github.com/users/kckennylau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kckennylau/subscriptions","organizations_url":"https://api.github.com/users/kckennylau/orgs","repos_url":"https://api.github.com/users/kckennylau/repos","events_url":"https://api.github.com/users/kckennylau/events{/privacy}","received_events_url":"https://api.github.com/users/kckennylau/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-02-03T15:11:52Z","updated_at":"2018-02-21T16:23:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3704fee9e7dfa939ee6164d52cffc1536b28e89b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/leanprover/mathlib/pulls/39/commits","review_comments_url":"https://api.github.com/repos/leanprover/mathlib/pulls/39/comments","review_comment_url":"https://api.github.com/repos/leanprover/mathlib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/leanprover/mathlib/issues/39/comments","statuses_url":"https://api.github.com/repos/leanprover/mathlib/statuses/35809083ba71b94d9a28a413459dca1b08189a51","head":{"label":"kckennylau:patch-3","ref":"patch-3","sha":"35809083ba71b94d9a28a413459dca1b08189a51","user":{"login":"kckennylau","id":17786901,"avatar_url":"https://avatars1.githubusercontent.com/u/17786901?v=4","gravatar_id":"","url":"https://api.github.com/users/kckennylau","html_url":"https://github.com/kckennylau","followers_url":"https://api.github.com/users/kckennylau/followers","following_url":"https://api.github.com/users/kckennylau/following{/other_user}","gists_url":"https://api.github.com/users/kckennylau/gists{/gist_id}","starred_url":"https://api.github.com/users/kckennylau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kckennylau/subscriptions","organizations_url":"https://api.github.com/users/kckennylau/orgs","repos_url":"https://api.github.com/users/kckennylau/repos","events_url":"https://api.github.com/users/kckennylau/events{/privacy}","received_events_url":"https://api.github.com/users/kckennylau/received_events","type":"User","site_admin":false},"repo":{"id":109560458,"name":"mathlib","full_name":"kckennylau/mathlib","owner":{"login":"kckennylau","id":17786901,"avatar_url":"https://avatars1.githubusercontent.com/u/17786901?v=4","gravatar_id":"","url":"https://api.github.com/users/kckennylau","html_url":"https://github.com/kckennylau","followers_url":"https://api.github.com/users/kckennylau/followers","following_url":"https://api.github.com/users/kckennylau/following{/other_user}","gists_url":"https://api.github.com/users/kckennylau/gists{/gist_id}","starred_url":"https://api.github.com/users/kckennylau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kckennylau/subscriptions","organizations_url":"https://api.github.com/users/kckennylau/orgs","repos_url":"https://api.github.com/users/kckennylau/repos","events_url":"https://api.github.com/users/kckennylau/events{/privacy}","received_events_url":"https://api.github.com/users/kckennylau/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kckennylau/mathlib","description":"Lean mathematical components library","fork":true,"url":"https://api.github.com/repos/kckennylau/mathlib","forks_url":"https://api.github.com/repos/kckennylau/mathlib/forks","keys_url":"https://api.github.com/repos/kckennylau/mathlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kckennylau/mathlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kckennylau/mathlib/teams","hooks_url":"https://api.github.com/repos/kckennylau/mathlib/hooks","issue_events_url":"https://api.github.com/repos/kckennylau/mathlib/issues/events{/number}","events_url":"https://api.github.com/repos/kckennylau/mathlib/events","assignees_url":"https://api.github.com/repos/kckennylau/mathlib/assignees{/user}","branches_url":"https://api.github.com/repos/kckennylau/mathlib/branches{/branch}","tags_url":"https://api.github.com/repos/kckennylau/mathlib/tags","blobs_url":"https://api.github.com/repos/kckennylau/mathlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kckennylau/mathlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kckennylau/mathlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/kckennylau/mathlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kckennylau/mathlib/statuses/{sha}","languages_url":"https://api.github.com/repos/kckennylau/mathlib/languages","stargazers_url":"https://api.github.com/repos/kckennylau/mathlib/stargazers","contributors_url":"https://api.github.com/repos/kckennylau/mathlib/contributors","subscribers_url":"https://api.github.com/repos/kckennylau/mathlib/subscribers","subscription_url":"https://api.github.com/repos/kckennylau/mathlib/subscription","commits_url":"https://api.github.com/repos/kckennylau/mathlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/kckennylau/mathlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/kckennylau/mathlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/kckennylau/mathlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/kckennylau/mathlib/contents/{+path}","compare_url":"https://api.github.com/repos/kckennylau/mathlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kckennylau/mathlib/merges","archive_url":"https://api.github.com/repos/kckennylau/mathlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kckennylau/mathlib/downloads","issues_url":"https://api.github.com/repos/kckennylau/mathlib/issues{/number}","pulls_url":"https://api.github.com/repos/kckennylau/mathlib/pulls{/number}","milestones_url":"https://api.github.com/repos/kckennylau/mathlib/milestones{/number}","notifications_url":"https://api.github.com/repos/kckennylau/mathlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kckennylau/mathlib/labels{/name}","releases_url":"https://api.github.com/repos/kckennylau/mathlib/releases{/id}","deployments_url":"https://api.github.com/repos/kckennylau/mathlib/deployments","created_at":"2017-11-05T07:38:14Z","updated_at":"2017-11-05T07:38:16Z","pushed_at":"2018-02-21T13:29:28Z","git_url":"git://github.com/kckennylau/mathlib.git","ssh_url":"git@github.com:kckennylau/mathlib.git","clone_url":"https://github.com/kckennylau/mathlib.git","svn_url":"https://github.com/kckennylau/mathlib","homepage":"","size":2059,"stargazers_count":0,"watchers_count":0,"language":"Lean","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"leanprover:master","ref":"master","sha":"03fefd43615ffcd59ed39bb08a891bc76f65b07b","user":{"login":"leanprover","id":7233018,"avatar_url":"https://avatars3.githubusercontent.com/u/7233018?v=4","gravatar_id":"","url":"https://api.github.com/users/leanprover","html_url":"https://github.com/leanprover","followers_url":"https://api.github.com/users/leanprover/followers","following_url":"https://api.github.com/users/leanprover/following{/other_user}","gists_url":"https://api.github.com/users/leanprover/gists{/gist_id}","starred_url":"https://api.github.com/users/leanprover/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leanprover/subscriptions","organizations_url":"https://api.github.com/users/leanprover/orgs","repos_url":"https://api.github.com/users/leanprover/repos","events_url":"https://api.github.com/users/leanprover/events{/privacy}","received_events_url":"https://api.github.com/users/leanprover/received_events","type":"Organization","site_admin":false},"repo":{"id":97922418,"name":"mathlib","full_name":"leanprover/mathlib","owner":{"login":"leanprover","id":7233018,"avatar_url":"https://avatars3.githubusercontent.com/u/7233018?v=4","gravatar_id":"","url":"https://api.github.com/users/leanprover","html_url":"https://github.com/leanprover","followers_url":"https://api.github.com/users/leanprover/followers","following_url":"https://api.github.com/users/leanprover/following{/other_user}","gists_url":"https://api.github.com/users/leanprover/gists{/gist_id}","starred_url":"https://api.github.com/users/leanprover/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leanprover/subscriptions","organizations_url":"https://api.github.com/users/leanprover/orgs","repos_url":"https://api.github.com/users/leanprover/repos","events_url":"https://api.github.com/users/leanprover/events{/privacy}","received_events_url":"https://api.github.com/users/leanprover/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/leanprover/mathlib","description":"Lean mathematical components library","fork":false,"url":"https://api.github.com/repos/leanprover/mathlib","forks_url":"https://api.github.com/repos/leanprover/mathlib/forks","keys_url":"https://api.github.com/repos/leanprover/mathlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/leanprover/mathlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/leanprover/mathlib/teams","hooks_url":"https://api.github.com/repos/leanprover/mathlib/hooks","issue_events_url":"https://api.github.com/repos/leanprover/mathlib/issues/events{/number}","events_url":"https://api.github.com/repos/leanprover/mathlib/events","assignees_url":"https://api.github.com/repos/leanprover/mathlib/assignees{/user}","branches_url":"https://api.github.com/repos/leanprover/mathlib/branches{/branch}","tags_url":"https://api.github.com/repos/leanprover/mathlib/tags","blobs_url":"https://api.github.com/repos/leanprover/mathlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/leanprover/mathlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/leanprover/mathlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/leanprover/mathlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/leanprover/mathlib/statuses/{sha}","languages_url":"https://api.github.com/repos/leanprover/mathlib/languages","stargazers_url":"https://api.github.com/repos/leanprover/mathlib/stargazers","contributors_url":"https://api.github.com/repos/leanprover/mathlib/contributors","subscribers_url":"https://api.github.com/repos/leanprover/mathlib/subscribers","subscription_url":"https://api.github.com/repos/leanprover/mathlib/subscription","commits_url":"https://api.github.com/repos/leanprover/mathlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/leanprover/mathlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/leanprover/mathlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/leanprover/mathlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/leanprover/mathlib/contents/{+path}","compare_url":"https://api.github.com/repos/leanprover/mathlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/leanprover/mathlib/merges","archive_url":"https://api.github.com/repos/leanprover/mathlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/leanprover/mathlib/downloads","issues_url":"https://api.github.com/repos/leanprover/mathlib/issues{/number}","pulls_url":"https://api.github.com/repos/leanprover/mathlib/pulls{/number}","milestones_url":"https://api.github.com/repos/leanprover/mathlib/milestones{/number}","notifications_url":"https://api.github.com/repos/leanprover/mathlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/leanprover/mathlib/labels{/name}","releases_url":"https://api.github.com/repos/leanprover/mathlib/releases{/id}","deployments_url":"https://api.github.com/repos/leanprover/mathlib/deployments","created_at":"2017-07-21T08:02:10Z","updated_at":"2018-02-19T15:12:06Z","pushed_at":"2018-02-21T14:53:54Z","git_url":"git://github.com/leanprover/mathlib.git","ssh_url":"git@github.com:leanprover/mathlib.git","clone_url":"https://github.com/leanprover/mathlib.git","svn_url":"https://github.com/leanprover/mathlib","homepage":"","size":2026,"stargazers_count":20,"watchers_count":20,"language":"Lean","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":16,"open_issues":8,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/39"},"html":{"href":"https://github.com/leanprover/mathlib/pull/39"},"issue":{"href":"https://api.github.com/repos/leanprover/mathlib/issues/39"},"comments":{"href":"https://api.github.com/repos/leanprover/mathlib/issues/39/comments"},"review_comments":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/39/comments"},"review_comment":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/leanprover/mathlib/pulls/39/commits"},"statuses":{"href":"https://api.github.com/repos/leanprover/mathlib/statuses/35809083ba71b94d9a28a413459dca1b08189a51"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"johoelzl"}}