algebra.big_operators.optionMathlib.Algebra.BigOperators.Option

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -38,7 +38,12 @@ theorem prod_insertNone (f : Option α → M) (s : Finset α) :
 #print Finset.prod_eraseNone /-
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
-    ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by classical
+    ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by
+  classical calc
+    ∏ x in s.erase_none, f x = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
+      (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
+    _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
+    _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
 #align finset.prod_erase_none Finset.prod_eraseNone
 #align finset.sum_erase_none Finset.sum_eraseNone
 -/
Diff
@@ -38,12 +38,7 @@ theorem prod_insertNone (f : Option α → M) (s : Finset α) :
 #print Finset.prod_eraseNone /-
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
-    ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by
-  classical calc
-    ∏ x in s.erase_none, f x = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
-      (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
-    _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
-    _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
+    ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by classical
 #align finset.prod_erase_none Finset.prod_eraseNone
 #align finset.sum_erase_none Finset.sum_eraseNone
 -/
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
 -/
-import Mathbin.Algebra.BigOperators.Basic
-import Mathbin.Data.Finset.Option
+import Algebra.BigOperators.Basic
+import Data.Finset.Option
 
 #align_import algebra.big_operators.option from "leanprover-community/mathlib"@"327c3c0d9232d80e250dc8f65e7835b82b266ea5"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.big_operators.option
-! leanprover-community/mathlib commit 327c3c0d9232d80e250dc8f65e7835b82b266ea5
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.BigOperators.Basic
 import Mathbin.Data.Finset.Option
 
+#align_import algebra.big_operators.option from "leanprover-community/mathlib"@"327c3c0d9232d80e250dc8f65e7835b82b266ea5"
+
 /-!
 # Lemmas about products and sums over finite sets in `option α`
 
Diff
@@ -30,12 +30,15 @@ namespace Finset
 
 variable {α M : Type _} [CommMonoid M]
 
+#print Finset.prod_insertNone /-
 @[simp, to_additive]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
     ∏ x in s.insertNone, f x = f none * ∏ x in s, f (some x) := by simp [insert_none]
 #align finset.prod_insert_none Finset.prod_insertNone
 #align finset.sum_insert_none Finset.sum_insertNone
+-/
 
+#print Finset.prod_eraseNone /-
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
     ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by
@@ -46,6 +49,7 @@ theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
     _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
 #align finset.prod_erase_none Finset.prod_eraseNone
 #align finset.sum_erase_none Finset.sum_eraseNone
+-/
 
 end Finset
 
Diff
@@ -32,15 +32,15 @@ variable {α M : Type _} [CommMonoid M]
 
 @[simp, to_additive]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
-    (∏ x in s.insertNone, f x) = f none * ∏ x in s, f (some x) := by simp [insert_none]
+    ∏ x in s.insertNone, f x = f none * ∏ x in s, f (some x) := by simp [insert_none]
 #align finset.prod_insert_none Finset.prod_insertNone
 #align finset.sum_insert_none Finset.sum_insertNone
 
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
-    (∏ x in s.eraseNone, f x) = ∏ x in s, Option.elim' 1 f x := by
+    ∏ x in s.eraseNone, f x = ∏ x in s, Option.elim' 1 f x := by
   classical calc
-    (∏ x in s.erase_none, f x) = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
+    ∏ x in s.erase_none, f x = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
       (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
     _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
     _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
Diff
@@ -44,7 +44,6 @@ theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
       (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
     _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
     _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
-    
 #align finset.prod_erase_none Finset.prod_eraseNone
 #align finset.sum_erase_none Finset.sum_eraseNone
 
Diff
@@ -40,11 +40,11 @@ theorem prod_insertNone (f : Option α → M) (s : Finset α) :
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
     (∏ x in s.eraseNone, f x) = ∏ x in s, Option.elim' 1 f x := by
   classical calc
-      (∏ x in s.erase_none, f x) = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
-        (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
-      _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
-      _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
-      
+    (∏ x in s.erase_none, f x) = ∏ x in s.erase_none.map embedding.some, Option.elim' 1 f x :=
+      (Prod_map s.erase_none embedding.some <| Option.elim' 1 f).symm
+    _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_erase_none]
+    _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
+    
 #align finset.prod_erase_none Finset.prod_eraseNone
 #align finset.sum_erase_none Finset.sum_eraseNone
 
Diff
@@ -22,7 +22,7 @@ In this file we prove formulas for products and sums over `finset.insert_none s`
 -/
 
 
-open BigOperators
+open scoped BigOperators
 
 open Function
 
Diff
@@ -30,24 +30,12 @@ namespace Finset
 
 variable {α M : Type _} [CommMonoid M]
 
-/- warning: finset.prod_insert_none -> Finset.prod_insertNone is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : (Option.{u1} α) -> M) (s : Finset.{u1} α), Eq.{succ u2} M (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))))) (fun (_x : RelEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) => (Finset.{u1} α) -> (Finset.{u1} (Option.{u1} α))) (RelEmbedding.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) (Finset.insertNone.{u1} α) s) (fun (x : Option.{u1} α) => f x)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))) (f (Option.none.{u1} α)) (Finset.prod.{u2, u1} M α _inst_1 s (fun (x : α) => f (Option.some.{u1} α x))))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (RelHomClass.toFunLike.{u2, u2, u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699) (RelEmbedding.instRelHomClassRelEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699))) (Finset.insertNone.{u2} α) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
-Case conversion may be inaccurate. Consider using '#align finset.prod_insert_none Finset.prod_insertNoneₓ'. -/
 @[simp, to_additive]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
     (∏ x in s.insertNone, f x) = f none * ∏ x in s, f (some x) := by simp [insert_none]
 #align finset.prod_insert_none Finset.prod_insertNone
 #align finset.sum_insert_none Finset.sum_insertNone
 
-/- warning: finset.prod_erase_none -> Finset.prod_eraseNone is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : α -> M) (s : Finset.{u1} (Option.{u1} α)), Eq.{succ u2} M (Finset.prod.{u2, u1} M α _inst_1 (coeFn.{succ u1, succ u1} (OrderHom.{u1, u1} (Finset.{u1} (Option.{u1} α)) (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (fun (_x : OrderHom.{u1, u1} (Finset.{u1} (Option.{u1} α)) (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) => (Finset.{u1} (Option.{u1} α)) -> (Finset.{u1} α)) (OrderHom.hasCoeToFun.{u1, u1} (Finset.{u1} (Option.{u1} α)) (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Finset.eraseNone.{u1} α) s) (fun (x : α) => f x)) (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 s (fun (x : Option.{u1} α) => Option.elim'.{u1, u2} α M (OfNat.ofNat.{u2} M 1 (OfNat.mk.{u2} M 1 (One.one.{u2} M (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))))) f x))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : α -> M) (s : Finset.{u2} (Option.{u2} α)), Eq.{succ u1} M (Finset.prod.{u1, u2} M α _inst_1 (OrderHom.toFun.{u2, u2} (Finset.{u2} (Option.{u2} α)) (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α)) (Finset.eraseNone.{u2} α) s) (fun (x : α) => f x)) (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 s (fun (x : Option.{u2} α) => Option.elim'.{u2, u1} α M (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (Monoid.toOne.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) f x))
-Case conversion may be inaccurate. Consider using '#align finset.prod_erase_none Finset.prod_eraseNoneₓ'. -/
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
     (∏ x in s.eraseNone, f x) = ∏ x in s, Option.elim' 1 f x := by
Diff
@@ -34,7 +34,7 @@ variable {α M : Type _} [CommMonoid M]
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : (Option.{u1} α) -> M) (s : Finset.{u1} α), Eq.{succ u2} M (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))))) (fun (_x : RelEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) => (Finset.{u1} α) -> (Finset.{u1} (Option.{u1} α))) (RelEmbedding.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) (Finset.insertNone.{u1} α) s) (fun (x : Option.{u1} α) => f x)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))) (f (Option.none.{u1} α)) (Finset.prod.{u2, u1} M α _inst_1 s (fun (x : α) => f (Option.some.{u1} α x))))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (RelHomClass.toFunLike.{u2, u2, u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Finset.insertNone.{u2} α) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (RelHomClass.toFunLike.{u2, u2, u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699) (RelEmbedding.instRelHomClassRelEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699))) (Finset.insertNone.{u2} α) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
 Case conversion may be inaccurate. Consider using '#align finset.prod_insert_none Finset.prod_insertNoneₓ'. -/
 @[simp, to_additive]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
Diff
@@ -32,7 +32,7 @@ variable {α M : Type _} [CommMonoid M]
 
 /- warning: finset.prod_insert_none -> Finset.prod_insertNone is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : (Option.{u1} α) -> M) (s : Finset.{u1} α), Eq.{succ u2} M (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))))) (fun (_x : RelEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) => (Finset.{u1} α) -> (Finset.{u1} (Option.{u1} α))) (RelEmbedding.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) (Finset.insertNone.{u1} α) s) (fun (x : Option.{u1} α) => f x)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))) (f (Option.none.{u1} α)) (Finset.prod.{u2, u1} M α _inst_1 s (fun (x : α) => f (Option.some.{u1} α x))))
+  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : (Option.{u1} α) -> M) (s : Finset.{u1} α), Eq.{succ u2} M (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))))) (fun (_x : RelEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) => (Finset.{u1} α) -> (Finset.{u1} (Option.{u1} α))) (RelEmbedding.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toHasLe.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toHasLe.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) (Finset.insertNone.{u1} α) s) (fun (x : Option.{u1} α) => f x)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))) (f (Option.none.{u1} α)) (Finset.prod.{u2, u1} M α _inst_1 s (fun (x : α) => f (Option.some.{u1} α x))))
 but is expected to have type
   forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (RelHomClass.toFunLike.{u2, u2, u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Finset.insertNone.{u2} α) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
 Case conversion may be inaccurate. Consider using '#align finset.prod_insert_none Finset.prod_insertNoneₓ'. -/
Diff
@@ -34,7 +34,7 @@ variable {α M : Type _} [CommMonoid M]
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : CommMonoid.{u2} M] (f : (Option.{u1} α) -> M) (s : Finset.{u1} α), Eq.{succ u2} M (Finset.prod.{u2, u1} M (Option.{u1} α) _inst_1 (coeFn.{succ u1, succ u1} (OrderEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α))) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α))))) (fun (_x : RelEmbedding.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) => (Finset.{u1} α) -> (Finset.{u1} (Option.{u1} α))) (RelEmbedding.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Option.{u1} α)) (LE.le.{u1} (Finset.{u1} α) (Preorder.toLE.{u1} (Finset.{u1} α) (PartialOrder.toPreorder.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α)))) (LE.le.{u1} (Finset.{u1} (Option.{u1} α)) (Preorder.toLE.{u1} (Finset.{u1} (Option.{u1} α)) (PartialOrder.toPreorder.{u1} (Finset.{u1} (Option.{u1} α)) (Finset.partialOrder.{u1} (Option.{u1} α)))))) (Finset.insertNone.{u1} α) s) (fun (x : Option.{u1} α) => f x)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M (CommMonoid.toMonoid.{u2} M _inst_1)))) (f (Option.none.{u1} α)) (Finset.prod.{u2, u1} M α _inst_1 s (fun (x : α) => f (Option.some.{u1} α x))))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (Function.Embedding.{succ u2, succ u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (EmbeddingLike.toFunLike.{succ u2, succ u2, succ u2} (Function.Embedding.{succ u2, succ u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Function.instEmbeddingLikeEmbedding.{succ u2, succ u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)))) (RelEmbedding.toEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (Finset.insertNone.{u2} α)) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : CommMonoid.{u1} M] (f : (Option.{u2} α) -> M) (s : Finset.{u2} α), Eq.{succ u1} M (Finset.prod.{u1, u2} M (Option.{u2} α) _inst_1 (FunLike.coe.{succ u2, succ u2, succ u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (fun (_x : Finset.{u2} α) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Finset.{u2} α) => Finset.{u2} (Option.{u2} α)) _x) (RelHomClass.toFunLike.{u2, u2, u2} (OrderEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α))))) (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Option.{u2} α)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Finset.{u2} α) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Finset.{u2} α) => LE.le.{u2} (Finset.{u2} α) (Preorder.toLE.{u2} (Finset.{u2} α) (PartialOrder.toPreorder.{u2} (Finset.{u2} α) (Finset.partialOrder.{u2} α))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Finset.{u2} (Option.{u2} α)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Finset.{u2} (Option.{u2} α)) => LE.le.{u2} (Finset.{u2} (Option.{u2} α)) (Preorder.toLE.{u2} (Finset.{u2} (Option.{u2} α)) (PartialOrder.toPreorder.{u2} (Finset.{u2} (Option.{u2} α)) (Finset.partialOrder.{u2} (Option.{u2} α)))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Finset.insertNone.{u2} α) s) (fun (x : Option.{u2} α) => f x)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_1)))) (f (Option.none.{u2} α)) (Finset.prod.{u1, u2} M α _inst_1 s (fun (x : α) => f (Option.some.{u2} α x))))
 Case conversion may be inaccurate. Consider using '#align finset.prod_insert_none Finset.prod_insertNoneₓ'. -/
 @[simp, to_additive]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :

Changes in mathlib4

mathlib3
mathlib4
feat: lemmas about finset (#7337)

From the marginal project

Diff
@@ -29,6 +29,11 @@ theorem prod_insertNone (f : Option α → M) (s : Finset α) :
 #align finset.prod_insert_none Finset.prod_insertNone
 #align finset.sum_insert_none Finset.sum_insertNone
 
+@[to_additive]
+theorem mul_prod_eq_prod_insertNone (f : α → M) (x : M) (s : Finset α) :
+    x * ∏ i in s, f i = ∏ i in insertNone s, i.elim x f :=
+  (prod_insertNone (fun i => i.elim x f) _).symm
+
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
     ∏ x in eraseNone s, f x = ∏ x in s, Option.elim' 1 f x := by
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -21,7 +21,7 @@ open Function
 
 namespace Finset
 
-variable {α M : Type _} [CommMonoid M]
+variable {α M : Type*} [CommMonoid M]
 
 @[to_additive (attr := simp)]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.big_operators.option
-! leanprover-community/mathlib commit 008205aa645b3f194c1da47025c5f110c8406eab
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.BigOperators.Basic
 import Mathlib.Data.Finset.Option
 
+#align_import algebra.big_operators.option from "leanprover-community/mathlib"@"008205aa645b3f194c1da47025c5f110c8406eab"
+
 /-!
 # Lemmas about products and sums over finite sets in `Option α`
 
fix: ∑' precedence (#5615)
  • Also remove most superfluous parentheses around big operators (, and variants).
  • roughly the used regex: ([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤]) replaced by $1 $2 $3
Diff
@@ -28,15 +28,15 @@ variable {α M : Type _} [CommMonoid M]
 
 @[to_additive (attr := simp)]
 theorem prod_insertNone (f : Option α → M) (s : Finset α) :
-    (∏ x in insertNone s, f x) = f none * ∏ x in s, f (some x) := by simp [insertNone]
+    ∏ x in insertNone s, f x = f none * ∏ x in s, f (some x) := by simp [insertNone]
 #align finset.prod_insert_none Finset.prod_insertNone
 #align finset.sum_insert_none Finset.sum_insertNone
 
 @[to_additive]
 theorem prod_eraseNone (f : α → M) (s : Finset (Option α)) :
-    (∏ x in eraseNone s, f x) = ∏ x in s, Option.elim' 1 f x := by
+    ∏ x in eraseNone s, f x = ∏ x in s, Option.elim' 1 f x := by
   classical calc
-      (∏ x in eraseNone s, f x) = ∏ x in (eraseNone s).map Embedding.some, Option.elim' 1 f x :=
+      ∏ x in eraseNone s, f x = ∏ x in (eraseNone s).map Embedding.some, Option.elim' 1 f x :=
         (prod_map (eraseNone s) Embedding.some <| Option.elim' 1 f).symm
       _ = ∏ x in s.erase none, Option.elim' 1 f x := by rw [map_some_eraseNone]
       _ = ∏ x in s, Option.elim' 1 f x := prod_erase _ rfl
chore: scoped BigOperators notation (#1952)
Diff
@@ -18,8 +18,7 @@ In this file we prove formulas for products and sums over `Finset.insertNone s`
 `Finset.eraseNone s`.
 -/
 
--- Porting note: big operators are currently global
---open BigOperators
+open BigOperators
 
 open Function
 
feat: port Algebra.BigOperators.Option (#1653)

Dependencies 3 + 189

190 files ported (98.4%)
84411 lines ported (98.8%)
Show graph

The unported dependencies are