data.semiquotMathlib.Data.Semiquot

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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
@@ -136,7 +136,7 @@ def toTrunc (q : Semiquot α) : Trunc α :=
 #align semiquot.to_trunc Semiquot.toTrunc
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn /-
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
@@ -145,7 +145,7 @@ def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ :
 #align semiquot.lift_on Semiquot.liftOn
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn_ofMem /-
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
@@ -256,7 +256,7 @@ theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
 #align semiquot.pure_le Semiquot.pure_le
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.IsPure /-
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
Diff
@@ -288,7 +288,7 @@ theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
 #print Semiquot.pure_isPure /-
 @[simp]
 theorem pure_isPure (a : α) : IsPure (pure a)
-  | b, ab, c, ac => by rw [mem_pure] at ab ac ; cc
+  | b, ab, c, ac => by rw [mem_pure] at ab ac; cc
 #align semiquot.pure_is_pure Semiquot.pure_isPure
 -/
 
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Mario Carneiro
 -/
-import Mathbin.Data.Set.Lattice
+import Data.Set.Lattice
 
 #align_import data.semiquot from "leanprover-community/mathlib"@"c3291da49cfa65f0d43b094750541c0731edc932"
 
@@ -136,7 +136,7 @@ def toTrunc (q : Semiquot α) : Trunc α :=
 #align semiquot.to_trunc Semiquot.toTrunc
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn /-
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
@@ -145,7 +145,7 @@ def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ :
 #align semiquot.lift_on Semiquot.liftOn
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn_ofMem /-
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
@@ -256,7 +256,7 @@ theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
 #align semiquot.pure_le Semiquot.pure_le
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.IsPure /-
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2018 Mario Carneiro. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Mario Carneiro
-
-! This file was ported from Lean 3 source module data.semiquot
-! leanprover-community/mathlib commit c3291da49cfa65f0d43b094750541c0731edc932
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.Set.Lattice
 
+#align_import data.semiquot from "leanprover-community/mathlib"@"c3291da49cfa65f0d43b094750541c0731edc932"
+
 /-! # Semiquotients
 
 > THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
@@ -139,7 +136,7 @@ def toTrunc (q : Semiquot α) : Trunc α :=
 #align semiquot.to_trunc Semiquot.toTrunc
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn /-
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
@@ -148,7 +145,7 @@ def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ :
 #align semiquot.lift_on Semiquot.liftOn
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.liftOn_ofMem /-
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
@@ -259,7 +256,7 @@ theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
 #align semiquot.pure_le Semiquot.pure_le
 -/
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 #print Semiquot.IsPure /-
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
Diff
@@ -233,7 +233,7 @@ instance : LawfulMonad Semiquot
           ⟨fun ⟨b, ⟨a, as, bf⟩, cg⟩ => ⟨a, as, b, bf, cg⟩, fun ⟨a, as, b, bf, cg⟩ =>
             ⟨b, ⟨a, as, bf⟩, cg⟩⟩
   id_map α q := ext.2 <| by simp
-  bind_pure_comp_eq_map α β f s := ext.2 <| by simp [eq_comm]
+  bind_pure_comp α β f s := ext.2 <| by simp [eq_comm]
 
 instance : LE (Semiquot α) :=
   ⟨fun s t => s.s ⊆ t.s⟩
Diff
@@ -42,11 +42,14 @@ variable {α : Type _} {β : Type _}
 instance : Membership α (Semiquot α) :=
   ⟨fun a q => a ∈ q.s⟩
 
+#print Semiquot.mk /-
 /-- Construct a `semiquot α` from `h : a ∈ s` where `s : set α`. -/
 def mk {a : α} {s : Set α} (h : a ∈ s) : Semiquot α :=
   ⟨s, Trunc.mk ⟨a, h⟩⟩
 #align semiquot.mk Semiquot.mk
+-/
 
+#print Semiquot.ext_s /-
 theorem ext_s {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ q₁.s = q₂.s :=
   by
   refine' ⟨congr_arg _, fun h => _⟩
@@ -54,124 +57,171 @@ theorem ext_s {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ q₁.s = q₂.s :=
   cases q₂
   cc
 #align semiquot.ext_s Semiquot.ext_s
+-/
 
+#print Semiquot.ext /-
 theorem ext {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ ∀ a, a ∈ q₁ ↔ a ∈ q₂ :=
   ext_s.trans Set.ext_iff
 #align semiquot.ext Semiquot.ext
+-/
 
+#print Semiquot.exists_mem /-
 theorem exists_mem (q : Semiquot α) : ∃ a, a ∈ q :=
   let ⟨⟨a, h⟩, h₂⟩ := q.2.exists_rep
   ⟨a, h⟩
 #align semiquot.exists_mem Semiquot.exists_mem
+-/
 
+#print Semiquot.eq_mk_of_mem /-
 theorem eq_mk_of_mem {q : Semiquot α} {a : α} (h : a ∈ q) : q = @mk _ a q.1 h :=
   ext_s.2 rfl
 #align semiquot.eq_mk_of_mem Semiquot.eq_mk_of_mem
+-/
 
+#print Semiquot.nonempty /-
 theorem nonempty (q : Semiquot α) : q.s.Nonempty :=
   q.exists_mem
 #align semiquot.nonempty Semiquot.nonempty
+-/
 
+#print Semiquot.pure /-
 /-- `pure a` is `a` reinterpreted as an unspecified element of `{a}`. -/
 protected def pure (a : α) : Semiquot α :=
   mk (Set.mem_singleton a)
 #align semiquot.pure Semiquot.pure
+-/
 
+#print Semiquot.mem_pure' /-
 @[simp]
 theorem mem_pure' {a b : α} : a ∈ Semiquot.pure b ↔ a = b :=
   Set.mem_singleton_iff
 #align semiquot.mem_pure' Semiquot.mem_pure'
+-/
 
+#print Semiquot.blur' /-
 /-- Replace `s` in a `semiquot` with a superset. -/
 def blur' (q : Semiquot α) {s : Set α} (h : q.s ⊆ s) : Semiquot α :=
   ⟨s, Trunc.lift (fun a : q.s => Trunc.mk ⟨a.1, h a.2⟩) (fun _ _ => Trunc.eq _ _) q.2⟩
 #align semiquot.blur' Semiquot.blur'
+-/
 
+#print Semiquot.blur /-
 /-- Replace `s` in a `q : semiquot α` with a union `s ∪ q.s` -/
 def blur (s : Set α) (q : Semiquot α) : Semiquot α :=
   blur' q (Set.subset_union_right s q.s)
 #align semiquot.blur Semiquot.blur
+-/
 
+#print Semiquot.blur_eq_blur' /-
 theorem blur_eq_blur' (q : Semiquot α) (s : Set α) (h : q.s ⊆ s) : blur s q = blur' q h := by
   unfold blur <;> congr <;> exact Set.union_eq_self_of_subset_right h
 #align semiquot.blur_eq_blur' Semiquot.blur_eq_blur'
+-/
 
+#print Semiquot.mem_blur' /-
 @[simp]
 theorem mem_blur' (q : Semiquot α) {s : Set α} (h : q.s ⊆ s) {a : α} : a ∈ blur' q h ↔ a ∈ s :=
   Iff.rfl
 #align semiquot.mem_blur' Semiquot.mem_blur'
+-/
 
+#print Semiquot.ofTrunc /-
 /-- Convert a `trunc α` to a `semiquot α`. -/
 def ofTrunc (q : Trunc α) : Semiquot α :=
   ⟨Set.univ, q.map fun a => ⟨a, trivial⟩⟩
 #align semiquot.of_trunc Semiquot.ofTrunc
+-/
 
+#print Semiquot.toTrunc /-
 /-- Convert a `semiquot α` to a `trunc α`. -/
 def toTrunc (q : Semiquot α) : Trunc α :=
   q.2.map Subtype.val
 #align semiquot.to_trunc Semiquot.toTrunc
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+#print Semiquot.liftOn /-
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
 def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) : β :=
   Trunc.liftOn q.2 (fun x => f x.1) fun x y => h _ x.2 _ y.2
 #align semiquot.lift_on Semiquot.liftOn
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+#print Semiquot.liftOn_ofMem /-
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
   revert h <;> rw [eq_mk_of_mem aq] <;> intro <;> rfl
 #align semiquot.lift_on_of_mem Semiquot.liftOn_ofMem
+-/
 
+#print Semiquot.map /-
 /-- Apply a function to the unknown value stored in a `semiquot α`. -/
 def map (f : α → β) (q : Semiquot α) : Semiquot β :=
   ⟨f '' q.1, q.2.map fun x => ⟨f x.1, Set.mem_image_of_mem _ x.2⟩⟩
 #align semiquot.map Semiquot.map
+-/
 
+#print Semiquot.mem_map /-
 @[simp]
 theorem mem_map (f : α → β) (q : Semiquot α) (b : β) : b ∈ map f q ↔ ∃ a, a ∈ q ∧ f a = b :=
   Set.mem_image _ _ _
 #align semiquot.mem_map Semiquot.mem_map
+-/
 
+#print Semiquot.bind /-
 /-- Apply a function returning a `semiquot` to a `semiquot`. -/
 def bind (q : Semiquot α) (f : α → Semiquot β) : Semiquot β :=
   ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_biUnion a.2 b.2⟩⟩
 #align semiquot.bind Semiquot.bind
+-/
 
+#print Semiquot.mem_bind /-
 @[simp]
 theorem mem_bind (q : Semiquot α) (f : α → Semiquot β) (b : β) : b ∈ bind q f ↔ ∃ a ∈ q, b ∈ f a :=
   Set.mem_iUnion₂
 #align semiquot.mem_bind Semiquot.mem_bind
+-/
 
 instance : Monad Semiquot where
   pure := @Semiquot.pure
   map := @Semiquot.map
   bind := @Semiquot.bind
 
+#print Semiquot.map_def /-
 @[simp]
 theorem map_def {β} : ((· <$> ·) : (α → β) → Semiquot α → Semiquot β) = map :=
   rfl
 #align semiquot.map_def Semiquot.map_def
+-/
 
+#print Semiquot.bind_def /-
 @[simp]
 theorem bind_def {β} : ((· >>= ·) : Semiquot α → (α → Semiquot β) → Semiquot β) = bind :=
   rfl
 #align semiquot.bind_def Semiquot.bind_def
+-/
 
+#print Semiquot.mem_pure /-
 @[simp]
 theorem mem_pure {a b : α} : a ∈ (pure b : Semiquot α) ↔ a = b :=
   Set.mem_singleton_iff
 #align semiquot.mem_pure Semiquot.mem_pure
+-/
 
+#print Semiquot.mem_pure_self /-
 theorem mem_pure_self (a : α) : a ∈ (pure a : Semiquot α) :=
   Set.mem_singleton a
 #align semiquot.mem_pure_self Semiquot.mem_pure_self
+-/
 
+#print Semiquot.pure_inj /-
 @[simp]
 theorem pure_inj {a b : α} : (pure a : Semiquot α) = pure b ↔ a = b :=
   ext_s.trans Set.singleton_eq_singleton_iff
 #align semiquot.pure_inj Semiquot.pure_inj
+-/
 
 instance : LawfulMonad Semiquot
     where
@@ -202,78 +252,106 @@ instance : SemilatticeSup (Semiquot α) :=
     le_sup_right := fun s t => Set.subset_union_right _ _
     sup_le := fun s t u => Set.union_subset }
 
+#print Semiquot.pure_le /-
 @[simp]
 theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
   Set.singleton_subset_iff
 #align semiquot.pure_le Semiquot.pure_le
+-/
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+#print Semiquot.IsPure /-
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
   ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b
 #align semiquot.is_pure Semiquot.IsPure
+-/
 
+#print Semiquot.get /-
 /-- Extract the value from a `is_pure` semiquotient. -/
 def get (q : Semiquot α) (h : q.IsPure) : α :=
   liftOn q id h
 #align semiquot.get Semiquot.get
+-/
 
+#print Semiquot.get_mem /-
 theorem get_mem {q : Semiquot α} (p) : get q p ∈ q :=
   by
   let ⟨a, h⟩ := exists_mem q
   unfold get <;> rw [lift_on_of_mem q _ _ a h] <;> exact h
 #align semiquot.get_mem Semiquot.get_mem
+-/
 
+#print Semiquot.eq_pure /-
 theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
   ext.2 fun a => by simp <;> exact ⟨fun h => p _ h _ (get_mem _), fun e => e.symm ▸ get_mem _⟩
 #align semiquot.eq_pure Semiquot.eq_pure
+-/
 
+#print Semiquot.pure_isPure /-
 @[simp]
 theorem pure_isPure (a : α) : IsPure (pure a)
   | b, ab, c, ac => by rw [mem_pure] at ab ac ; cc
 #align semiquot.pure_is_pure Semiquot.pure_isPure
+-/
 
+#print Semiquot.isPure_iff /-
 theorem isPure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
   ⟨fun h => ⟨_, eq_pure h⟩, fun ⟨a, e⟩ => e.symm ▸ pure_isPure _⟩
 #align semiquot.is_pure_iff Semiquot.isPure_iff
+-/
 
+#print Semiquot.IsPure.mono /-
 theorem IsPure.mono {s t : Semiquot α} (st : s ≤ t) (h : IsPure t) : IsPure s
   | a, as, b, bs => h _ (st as) _ (st bs)
 #align semiquot.is_pure.mono Semiquot.IsPure.mono
+-/
 
+#print Semiquot.IsPure.min /-
 theorem IsPure.min {s t : Semiquot α} (h : IsPure t) : s ≤ t ↔ s = t :=
   ⟨fun st =>
     le_antisymm st <| by
       rw [eq_pure h, eq_pure (h.mono st)] <;> simp <;> exact h _ (get_mem _) _ (st <| get_mem _),
     le_of_eq⟩
 #align semiquot.is_pure.min Semiquot.IsPure.min
+-/
 
+#print Semiquot.isPure_of_subsingleton /-
 theorem isPure_of_subsingleton [Subsingleton α] (q : Semiquot α) : IsPure q
   | a, b, aq, bq => Subsingleton.elim _ _
 #align semiquot.is_pure_of_subsingleton Semiquot.isPure_of_subsingleton
+-/
 
+#print Semiquot.univ /-
 /-- `univ : semiquot α` represents an unspecified element of `univ : set α`. -/
 def univ [Inhabited α] : Semiquot α :=
   mk <| Set.mem_univ default
 #align semiquot.univ Semiquot.univ
+-/
 
 instance [Inhabited α] : Inhabited (Semiquot α) :=
   ⟨univ⟩
 
+#print Semiquot.mem_univ /-
 @[simp]
 theorem mem_univ [Inhabited α] : ∀ a, a ∈ @univ α _ :=
   @Set.mem_univ α
 #align semiquot.mem_univ Semiquot.mem_univ
+-/
 
+#print Semiquot.univ_unique /-
 @[congr]
 theorem univ_unique (I J : Inhabited α) : @univ _ I = @univ _ J :=
   ext.2 <| by simp
 #align semiquot.univ_unique Semiquot.univ_unique
+-/
 
+#print Semiquot.isPure_univ /-
 @[simp]
 theorem isPure_univ [Inhabited α] : @IsPure α univ ↔ Subsingleton α :=
   ⟨fun h => ⟨fun a b => h a trivial b trivial⟩, fun ⟨h⟩ a _ b _ => h a b⟩
 #align semiquot.is_pure_univ Semiquot.isPure_univ
+-/
 
 instance [Inhabited α] : OrderTop (Semiquot α)
     where
Diff
@@ -111,14 +111,14 @@ def toTrunc (q : Semiquot α) : Trunc α :=
   q.2.map Subtype.val
 #align semiquot.to_trunc Semiquot.toTrunc
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
 def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) : β :=
   Trunc.liftOn q.2 (fun x => f x.1) fun x y => h _ x.2 _ y.2
 #align semiquot.lift_on Semiquot.liftOn
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
   revert h <;> rw [eq_mk_of_mem aq] <;> intro <;> rfl
@@ -207,7 +207,7 @@ theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
   Set.singleton_subset_iff
 #align semiquot.pure_le Semiquot.pure_le
 
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
   ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b
Diff
@@ -230,7 +230,7 @@ theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
 
 @[simp]
 theorem pure_isPure (a : α) : IsPure (pure a)
-  | b, ab, c, ac => by rw [mem_pure] at ab ac; cc
+  | b, ab, c, ac => by rw [mem_pure] at ab ac ; cc
 #align semiquot.pure_is_pure Semiquot.pure_isPure
 
 theorem isPure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
Diff
@@ -42,23 +42,11 @@ variable {α : Type _} {β : Type _}
 instance : Membership α (Semiquot α) :=
   ⟨fun a q => a ∈ q.s⟩
 
-/- warning: semiquot.mk -> Semiquot.mk is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {a : α} {s : Set.{u_1} α}, (Membership.Mem.{u_1, u_1} α (Set.{u_1} α) (Set.hasMem.{u_1} α) a s) -> (Semiquotₓ.{u_2, u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}} {a : α} {s : Set.{u_1} α}, (Membership.mem.{u_1, u_1} α (Set.{u_1} α) (Set.instMembershipSet.{u_1} α) a s) -> (Semiquot.{u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.mk Semiquot.mkₓ'. -/
 /-- Construct a `semiquot α` from `h : a ∈ s` where `s : set α`. -/
 def mk {a : α} {s : Set α} (h : a ∈ s) : Semiquot α :=
   ⟨s, Trunc.mk ⟨a, h⟩⟩
 #align semiquot.mk Semiquot.mk
 
-/- warning: semiquot.ext_s -> Semiquot.ext_s is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {q₁ : Semiquotₓ.{u_2, u_1} α} {q₂ : Semiquotₓ.{u_2, u_1} α}, Iff (Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) q₁ q₂) (Eq.{max (succ u_1) 1} (Set.{u_1} α) (Semiquotₓ.s.{u_2, u_1} α q₁) (Semiquotₓ.s.{u_2, u_1} α q₂))
-but is expected to have type
-  forall {α : Type.{u_1}} {q₁ : Semiquot.{u_1} α} {q₂ : Semiquot.{u_1} α}, Iff (Eq.{succ u_1} (Semiquot.{u_1} α) q₁ q₂) (Eq.{succ u_1} (Set.{u_1} α) (Semiquot.s.{u_1} α q₁) (Semiquot.s.{u_1} α q₂))
-Case conversion may be inaccurate. Consider using '#align semiquot.ext_s Semiquot.ext_sₓ'. -/
 theorem ext_s {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ q₁.s = q₂.s :=
   by
   refine' ⟨congr_arg _, fun h => _⟩
@@ -67,140 +55,62 @@ theorem ext_s {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ q₁.s = q₂.s :=
   cc
 #align semiquot.ext_s Semiquot.ext_s
 
-/- warning: semiquot.ext -> Semiquot.ext is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {q₁ : Semiquotₓ.{u_2, u_1} α} {q₂ : Semiquotₓ.{u_2, u_1} α}, Iff (Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) q₁ q₂) (forall (a : α), Iff (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a q₁) (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a q₂))
-but is expected to have type
-  forall {α : Type.{u_1}} {q₁ : Semiquot.{u_1} α} {q₂ : Semiquot.{u_1} α}, Iff (Eq.{succ u_1} (Semiquot.{u_1} α) q₁ q₂) (forall (a : α), Iff (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q₁) (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q₂))
-Case conversion may be inaccurate. Consider using '#align semiquot.ext Semiquot.extₓ'. -/
 theorem ext {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ ∀ a, a ∈ q₁ ↔ a ∈ q₂ :=
   ext_s.trans Set.ext_iff
 #align semiquot.ext Semiquot.ext
 
-/- warning: semiquot.exists_mem -> Semiquot.exists_mem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α), Exists.{succ u_1} α (fun (a : α) => Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a q)
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α), Exists.{succ u_1} α (fun (a : α) => Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q)
-Case conversion may be inaccurate. Consider using '#align semiquot.exists_mem Semiquot.exists_memₓ'. -/
 theorem exists_mem (q : Semiquot α) : ∃ a, a ∈ q :=
   let ⟨⟨a, h⟩, h₂⟩ := q.2.exists_rep
   ⟨a, h⟩
 #align semiquot.exists_mem Semiquot.exists_mem
 
-/- warning: semiquot.eq_mk_of_mem -> Semiquot.eq_mk_of_mem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {q : Semiquotₓ.{u_2, u_1} α} {a : α} (h : Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a q), Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) q (Semiquot.mk.{u_1, u_2} α a (Semiquotₓ.s.{u_2, u_1} α q) h)
-but is expected to have type
-  forall {α : Type.{u_1}} {q : Semiquot.{u_1} α} {a : α} (h : Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q), Eq.{succ u_1} (Semiquot.{u_1} α) q (Semiquot.mk.{u_1} α a (Semiquot.s.{u_1} α q) h)
-Case conversion may be inaccurate. Consider using '#align semiquot.eq_mk_of_mem Semiquot.eq_mk_of_memₓ'. -/
 theorem eq_mk_of_mem {q : Semiquot α} {a : α} (h : a ∈ q) : q = @mk _ a q.1 h :=
   ext_s.2 rfl
 #align semiquot.eq_mk_of_mem Semiquot.eq_mk_of_mem
 
-/- warning: semiquot.nonempty -> Semiquot.nonempty is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α), Set.Nonempty.{u_1} α (Semiquotₓ.s.{u_2, u_1} α q)
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α), Set.Nonempty.{u_1} α (Semiquot.s.{u_1} α q)
-Case conversion may be inaccurate. Consider using '#align semiquot.nonempty Semiquot.nonemptyₓ'. -/
 theorem nonempty (q : Semiquot α) : q.s.Nonempty :=
   q.exists_mem
 #align semiquot.nonempty Semiquot.nonempty
 
-/- warning: semiquot.pure -> Semiquot.pure is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}}, α -> (Semiquotₓ.{u_2, u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}}, α -> (Semiquot.{u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.pure Semiquot.pureₓ'. -/
 /-- `pure a` is `a` reinterpreted as an unspecified element of `{a}`. -/
 protected def pure (a : α) : Semiquot α :=
   mk (Set.mem_singleton a)
 #align semiquot.pure Semiquot.pure
 
-/- warning: semiquot.mem_pure' -> Semiquot.mem_pure' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a (Semiquot.pure.{u_1, u_2} α b)) (Eq.{succ u_1} α a b)
-but is expected to have type
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a (Semiquot.pure.{u_1} α b)) (Eq.{succ u_1} α a b)
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_pure' Semiquot.mem_pure'ₓ'. -/
 @[simp]
 theorem mem_pure' {a b : α} : a ∈ Semiquot.pure b ↔ a = b :=
   Set.mem_singleton_iff
 #align semiquot.mem_pure' Semiquot.mem_pure'
 
-/- warning: semiquot.blur' -> Semiquot.blur' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α) {s : Set.{u_1} α}, (HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.hasSubset.{u_1} α) (Semiquotₓ.s.{u_2, u_1} α q) s) -> (Semiquotₓ.{u_3, u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α) {s : Set.{u_1} α}, (HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.instHasSubsetSet.{u_1} α) (Semiquot.s.{u_1} α q) s) -> (Semiquot.{u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.blur' Semiquot.blur'ₓ'. -/
 /-- Replace `s` in a `semiquot` with a superset. -/
 def blur' (q : Semiquot α) {s : Set α} (h : q.s ⊆ s) : Semiquot α :=
   ⟨s, Trunc.lift (fun a : q.s => Trunc.mk ⟨a.1, h a.2⟩) (fun _ _ => Trunc.eq _ _) q.2⟩
 #align semiquot.blur' Semiquot.blur'
 
-/- warning: semiquot.blur -> Semiquot.blur is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}}, (Set.{u_1} α) -> (Semiquotₓ.{u_2, u_1} α) -> (Semiquotₓ.{u_3, u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}}, (Set.{u_1} α) -> (Semiquot.{u_1} α) -> (Semiquot.{u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.blur Semiquot.blurₓ'. -/
 /-- Replace `s` in a `q : semiquot α` with a union `s ∪ q.s` -/
 def blur (s : Set α) (q : Semiquot α) : Semiquot α :=
   blur' q (Set.subset_union_right s q.s)
 #align semiquot.blur Semiquot.blur
 
-/- warning: semiquot.blur_eq_blur' -> Semiquot.blur_eq_blur' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α) (s : Set.{u_1} α) (h : HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.hasSubset.{u_1} α) (Semiquotₓ.s.{u_2, u_1} α q) s), Eq.{succ u_1} (Semiquotₓ.{u_3, u_1} α) (Semiquot.blur.{u_1, u_2, u_3} α s q) (Semiquot.blur'.{u_1, u_2, u_3} α q s h)
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α) (s : Set.{u_1} α) (h : HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.instHasSubsetSet.{u_1} α) (Semiquot.s.{u_1} α q) s), Eq.{succ u_1} (Semiquot.{u_1} α) (Semiquot.blur.{u_1} α s q) (Semiquot.blur'.{u_1} α q s h)
-Case conversion may be inaccurate. Consider using '#align semiquot.blur_eq_blur' Semiquot.blur_eq_blur'ₓ'. -/
 theorem blur_eq_blur' (q : Semiquot α) (s : Set α) (h : q.s ⊆ s) : blur s q = blur' q h := by
   unfold blur <;> congr <;> exact Set.union_eq_self_of_subset_right h
 #align semiquot.blur_eq_blur' Semiquot.blur_eq_blur'
 
-/- warning: semiquot.mem_blur' -> Semiquot.mem_blur' is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α) {s : Set.{u_1} α} (h : HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.hasSubset.{u_1} α) (Semiquotₓ.s.{u_2, u_1} α q) s) {a : α}, Iff (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a (Semiquot.blur'.{u_1, u_2, u_3} α q s h)) (Membership.Mem.{u_1, u_1} α (Set.{u_1} α) (Set.hasMem.{u_1} α) a s)
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α) {s : Set.{u_1} α} (h : HasSubset.Subset.{u_1} (Set.{u_1} α) (Set.instHasSubsetSet.{u_1} α) (Semiquot.s.{u_1} α q) s) {a : α}, Iff (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a (Semiquot.blur'.{u_1} α q s h)) (Membership.mem.{u_1, u_1} α (Set.{u_1} α) (Set.instMembershipSet.{u_1} α) a s)
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_blur' Semiquot.mem_blur'ₓ'. -/
 @[simp]
 theorem mem_blur' (q : Semiquot α) {s : Set α} (h : q.s ⊆ s) {a : α} : a ∈ blur' q h ↔ a ∈ s :=
   Iff.rfl
 #align semiquot.mem_blur' Semiquot.mem_blur'
 
-/- warning: semiquot.of_trunc -> Semiquot.ofTrunc is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}}, (Trunc.{succ u_1} α) -> (Semiquotₓ.{u_2, u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}}, (Trunc.{succ u_1} α) -> (Semiquot.{u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.of_trunc Semiquot.ofTruncₓ'. -/
 /-- Convert a `trunc α` to a `semiquot α`. -/
 def ofTrunc (q : Trunc α) : Semiquot α :=
   ⟨Set.univ, q.map fun a => ⟨a, trivial⟩⟩
 #align semiquot.of_trunc Semiquot.ofTrunc
 
-/- warning: semiquot.to_trunc -> Semiquot.toTrunc is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}}, (Semiquotₓ.{u_2, u_1} α) -> (Trunc.{succ u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}}, (Semiquot.{u_1} α) -> (Trunc.{succ u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.to_trunc Semiquot.toTruncₓ'. -/
 /-- Convert a `semiquot α` to a `trunc α`. -/
 def toTrunc (q : Semiquot α) : Trunc α :=
   q.2.map Subtype.val
 #align semiquot.to_trunc Semiquot.toTrunc
 
-/- warning: semiquot.lift_on -> Semiquot.liftOn is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquotₓ.{u_3, u_1} α) (f : α -> β), (forall (a : α), (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) -> (forall (b : α), (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) -> β
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquot.{u_1} α) (f : α -> β), (forall (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (forall (b : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) -> β
-Case conversion may be inaccurate. Consider using '#align semiquot.lift_on Semiquot.liftOnₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
@@ -208,57 +118,27 @@ def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ :
   Trunc.liftOn q.2 (fun x => f x.1) fun x y => h _ x.2 _ y.2
 #align semiquot.lift_on Semiquot.liftOn
 
-/- warning: semiquot.lift_on_of_mem -> Semiquot.liftOn_ofMem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquotₓ.{u_3, u_1} α) (f : α -> β) (h : forall (a : α), (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) -> (forall (b : α), (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) (a : α), (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) -> (Eq.{succ u_2} β (Semiquot.liftOn.{u_1, u_2, u_3} α β q f h) (f a))
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquot.{u_1} α) (f : α -> β) (h : forall (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (forall (b : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (Eq.{succ u_2} β (Semiquot.liftOn.{u_1, u_2} α β q f h) (f a))
-Case conversion may be inaccurate. Consider using '#align semiquot.lift_on_of_mem Semiquot.liftOn_ofMemₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
   revert h <;> rw [eq_mk_of_mem aq] <;> intro <;> rfl
 #align semiquot.lift_on_of_mem Semiquot.liftOn_ofMem
 
-/- warning: semiquot.map -> Semiquot.map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (α -> β) -> (Semiquotₓ.{u_3, u_1} α) -> (Semiquotₓ.{u_4, u_2} β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (α -> β) -> (Semiquot.{u_1} α) -> (Semiquot.{u_2} β)
-Case conversion may be inaccurate. Consider using '#align semiquot.map Semiquot.mapₓ'. -/
 /-- Apply a function to the unknown value stored in a `semiquot α`. -/
 def map (f : α → β) (q : Semiquot α) : Semiquot β :=
   ⟨f '' q.1, q.2.map fun x => ⟨f x.1, Set.mem_image_of_mem _ x.2⟩⟩
 #align semiquot.map Semiquot.map
 
-/- warning: semiquot.mem_map -> Semiquot.mem_map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (f : α -> β) (q : Semiquotₓ.{u_3, u_1} α) (b : β), Iff (Membership.Mem.{u_2, u_2} β (Semiquotₓ.{u_4, u_2} β) (Semiquotₓ.hasMem.{u_2, u_4} β) b (Semiquot.map.{u_1, u_2, u_3, u_4} α β f q)) (Exists.{succ u_1} α (fun (a : α) => And (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) (Eq.{succ u_2} β (f a) b)))
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (f : α -> β) (q : Semiquot.{u_1} α) (b : β), Iff (Membership.mem.{u_2, u_2} β (Semiquot.{u_2} β) (Semiquot.instMembershipSemiquot.{u_2} β) b (Semiquot.map.{u_1, u_2} α β f q)) (Exists.{succ u_1} α (fun (a : α) => And (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) (Eq.{succ u_2} β (f a) b)))
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_map Semiquot.mem_mapₓ'. -/
 @[simp]
 theorem mem_map (f : α → β) (q : Semiquot α) (b : β) : b ∈ map f q ↔ ∃ a, a ∈ q ∧ f a = b :=
   Set.mem_image _ _ _
 #align semiquot.mem_map Semiquot.mem_map
 
-/- warning: semiquot.bind -> Semiquot.bind is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (Semiquotₓ.{u_3, u_1} α) -> (α -> (Semiquotₓ.{u_4, u_2} β)) -> (Semiquotₓ.{u_5, u_2} β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}}, (Semiquot.{u_1} α) -> (α -> (Semiquot.{u_2} β)) -> (Semiquot.{u_2} β)
-Case conversion may be inaccurate. Consider using '#align semiquot.bind Semiquot.bindₓ'. -/
 /-- Apply a function returning a `semiquot` to a `semiquot`. -/
 def bind (q : Semiquot α) (f : α → Semiquot β) : Semiquot β :=
   ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_biUnion a.2 b.2⟩⟩
 #align semiquot.bind Semiquot.bind
 
-/- warning: semiquot.mem_bind -> Semiquot.mem_bind is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquotₓ.{u_3, u_1} α) (f : α -> (Semiquotₓ.{u_4, u_2} β)) (b : β), Iff (Membership.Mem.{u_2, u_2} β (Semiquotₓ.{u_5, u_2} β) (Semiquotₓ.hasMem.{u_2, u_5} β) b (Semiquot.bind.{u_1, u_2, u_3, u_4, u_5} α β q f)) (Exists.{succ u_1} α (fun (a : α) => Exists.{0} (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) (fun (H : Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_3, u_1} α) (Semiquotₓ.hasMem.{u_1, u_3} α) a q) => Membership.Mem.{u_2, u_2} β (Semiquotₓ.{u_4, u_2} β) (Semiquotₓ.hasMem.{u_2, u_4} β) b (f a))))
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquot.{u_1} α) (f : α -> (Semiquot.{u_2} β)) (b : β), Iff (Membership.mem.{u_2, u_2} β (Semiquot.{u_2} β) (Semiquot.instMembershipSemiquot.{u_2} β) b (Semiquot.bind.{u_1, u_2} α β q f)) (Exists.{succ u_1} α (fun (a : α) => And (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) (Membership.mem.{u_2, u_2} β (Semiquot.{u_2} β) (Semiquot.instMembershipSemiquot.{u_2} β) b (f a))))
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_bind Semiquot.mem_bindₓ'. -/
 @[simp]
 theorem mem_bind (q : Semiquot α) (f : α → Semiquot β) (b : β) : b ∈ bind q f ↔ ∃ a ∈ q, b ∈ f a :=
   Set.mem_iUnion₂
@@ -269,55 +149,25 @@ instance : Monad Semiquot where
   map := @Semiquot.map
   bind := @Semiquot.bind
 
-/- warning: semiquot.map_def -> Semiquot.map_def is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((α -> β) -> (Semiquotₓ.{u_2, u_1} α) -> (Semiquotₓ.{u_2, u_1} β)) (Functor.map.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Applicative.toFunctor.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Monad.toApplicative.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) Semiquotₓ.monad.{u_1, u_2})) α β) (Semiquot.map.{u_1, u_1, u_2, u_2} α β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((α -> β) -> (Semiquot.{u_1} α) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.991 : α -> β) (x._@.Mathlib.Data.Semiquot._hyg.993 : Semiquot.{u_1} α) => Functor.map.{u_1, u_1} Semiquot.{u_1} (Applicative.toFunctor.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α β x._@.Mathlib.Data.Semiquot._hyg.991 x._@.Mathlib.Data.Semiquot._hyg.993) (Semiquot.map.{u_1, u_1} α β)
-Case conversion may be inaccurate. Consider using '#align semiquot.map_def Semiquot.map_defₓ'. -/
 @[simp]
 theorem map_def {β} : ((· <$> ·) : (α → β) → Semiquot α → Semiquot β) = map :=
   rfl
 #align semiquot.map_def Semiquot.map_def
 
-/- warning: semiquot.bind_def -> Semiquot.bind_def is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((Semiquotₓ.{u_2, u_1} α) -> (α -> (Semiquotₓ.{u_2, u_1} β)) -> (Semiquotₓ.{u_2, u_1} β)) (Bind.bind.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toHasBind.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2}) α β) (Semiquot.bind.{u_1, u_1, u_2, u_2, u_2} α β)
-but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((Semiquot.{u_1} α) -> (α -> (Semiquot.{u_1} β)) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.1031 : Semiquot.{u_1} α) (x._@.Mathlib.Data.Semiquot._hyg.1033 : α -> (Semiquot.{u_1} β)) => Bind.bind.{u_1, u_1} Semiquot.{u_1} (Monad.toBind.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1}) α β x._@.Mathlib.Data.Semiquot._hyg.1031 x._@.Mathlib.Data.Semiquot._hyg.1033) (Semiquot.bind.{u_1, u_1} α β)
-Case conversion may be inaccurate. Consider using '#align semiquot.bind_def Semiquot.bind_defₓ'. -/
 @[simp]
 theorem bind_def {β} : ((· >>= ·) : Semiquot α → (α → Semiquot β) → Semiquot β) = bind :=
   rfl
 #align semiquot.bind_def Semiquot.bind_def
 
-/- warning: semiquot.mem_pure -> Semiquot.mem_pure is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α b)) (Eq.{succ u_1} α a b)
-but is expected to have type
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α b)) (Eq.{succ u_1} α a b)
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_pure Semiquot.mem_pureₓ'. -/
 @[simp]
 theorem mem_pure {a b : α} : a ∈ (pure b : Semiquot α) ↔ a = b :=
   Set.mem_singleton_iff
 #align semiquot.mem_pure Semiquot.mem_pure
 
-/- warning: semiquot.mem_pure_self -> Semiquot.mem_pure_self is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (a : α), Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α a)
-but is expected to have type
-  forall {α : Type.{u_1}} (a : α), Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α a)
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_pure_self Semiquot.mem_pure_selfₓ'. -/
 theorem mem_pure_self (a : α) : a ∈ (pure a : Semiquot α) :=
   Set.mem_singleton a
 #align semiquot.mem_pure_self Semiquot.mem_pure_self
 
-/- warning: semiquot.pure_inj -> Semiquot.pure_inj is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α a) (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α b)) (Eq.{succ u_1} α a b)
-but is expected to have type
-  forall {α : Type.{u_1}} {a : α} {b : α}, Iff (Eq.{succ u_1} (Semiquot.{u_1} α) (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α a) (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α b)) (Eq.{succ u_1} α a b)
-Case conversion may be inaccurate. Consider using '#align semiquot.pure_inj Semiquot.pure_injₓ'. -/
 @[simp]
 theorem pure_inj {a b : α} : (pure a : Semiquot α) = pure b ↔ a = b :=
   ext_s.trans Set.singleton_eq_singleton_iff
@@ -352,99 +202,45 @@ instance : SemilatticeSup (Semiquot α) :=
     le_sup_right := fun s t => Set.subset_union_right _ _
     sup_le := fun s t u => Set.union_subset }
 
-/- warning: semiquot.pure_le -> Semiquot.pure_le is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {a : α} {s : Semiquotₓ.{u_2, u_1} α}, Iff (LE.le.{u_1} (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasLe.{u_1, u_2} α) (Pure.pure.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Applicative.toHasPure.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Monad.toApplicative.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) Semiquotₓ.monad.{u_1, u_2})) α a) s) (Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a s)
-but is expected to have type
-  forall {α : Type.{u_1}} {a : α} {s : Semiquot.{u_1} α}, Iff (LE.le.{u_1} (Semiquot.{u_1} α) (Semiquot.instLESemiquot.{u_1} α) (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α a) s) (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a s)
-Case conversion may be inaccurate. Consider using '#align semiquot.pure_le Semiquot.pure_leₓ'. -/
 @[simp]
 theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
   Set.singleton_subset_iff
 #align semiquot.pure_le Semiquot.pure_le
 
-/- warning: semiquot.is_pure -> Semiquot.IsPure is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}}, (Semiquotₓ.{u_2, u_1} α) -> Prop
-but is expected to have type
-  forall {α : Type.{u_1}}, (Semiquot.{u_1} α) -> Prop
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure Semiquot.IsPureₓ'. -/
 /- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
   ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b
 #align semiquot.is_pure Semiquot.IsPure
 
-/- warning: semiquot.get -> Semiquot.get is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (q : Semiquotₓ.{u_2, u_1} α), (Semiquot.IsPure.{u_1, u_2} α q) -> α
-but is expected to have type
-  forall {α : Type.{u_1}} (q : Semiquot.{u_1} α), (Semiquot.IsPure.{u_1} α q) -> α
-Case conversion may be inaccurate. Consider using '#align semiquot.get Semiquot.getₓ'. -/
 /-- Extract the value from a `is_pure` semiquotient. -/
 def get (q : Semiquot α) (h : q.IsPure) : α :=
   liftOn q id h
 #align semiquot.get Semiquot.get
 
-/- warning: semiquot.get_mem -> Semiquot.get_mem is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {q : Semiquotₓ.{u_2, u_1} α} (p : Semiquot.IsPure.{u_1, u_2} α q), Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) (Semiquot.get.{u_1, u_2} α q p) q
-but is expected to have type
-  forall {α : Type.{u_1}} {q : Semiquot.{u_1} α} (p : Semiquot.IsPure.{u_1} α q), Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) (Semiquot.get.{u_1} α q p) q
-Case conversion may be inaccurate. Consider using '#align semiquot.get_mem Semiquot.get_memₓ'. -/
 theorem get_mem {q : Semiquot α} (p) : get q p ∈ q :=
   by
   let ⟨a, h⟩ := exists_mem q
   unfold get <;> rw [lift_on_of_mem q _ _ a h] <;> exact h
 #align semiquot.get_mem Semiquot.get_mem
 
-/- warning: semiquot.eq_pure -> Semiquot.eq_pure is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {q : Semiquotₓ.{u_2, u_1} α} (p : Semiquot.IsPure.{u_1, u_2} α q), Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) q (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α (Semiquot.get.{u_1, u_2} α q p))
-but is expected to have type
-  forall {α : Type.{u_1}} {q : Semiquot.{u_1} α} (p : Semiquot.IsPure.{u_1} α q), Eq.{succ u_1} (Semiquot.{u_1} α) q (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α (Semiquot.get.{u_1} α q p))
-Case conversion may be inaccurate. Consider using '#align semiquot.eq_pure Semiquot.eq_pureₓ'. -/
 theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
   ext.2 fun a => by simp <;> exact ⟨fun h => p _ h _ (get_mem _), fun e => e.symm ▸ get_mem _⟩
 #align semiquot.eq_pure Semiquot.eq_pure
 
-/- warning: semiquot.pure_is_pure -> Semiquot.pure_isPure is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (a : α), Semiquot.IsPure.{u_1, u_2} α (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α a)
-but is expected to have type
-  forall {α : Type.{u_1}} (a : α), Semiquot.IsPure.{u_1} α (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α a)
-Case conversion may be inaccurate. Consider using '#align semiquot.pure_is_pure Semiquot.pure_isPureₓ'. -/
 @[simp]
 theorem pure_isPure (a : α) : IsPure (pure a)
   | b, ab, c, ac => by rw [mem_pure] at ab ac; cc
 #align semiquot.pure_is_pure Semiquot.pure_isPure
 
-/- warning: semiquot.is_pure_iff -> Semiquot.isPure_iff is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {s : Semiquotₓ.{u_2, u_1} α}, Iff (Semiquot.IsPure.{u_1, u_2} α s) (Exists.{succ u_1} α (fun (a : α) => Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) s (Pure.pure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Applicative.toHasPure.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toApplicative.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2})) α a)))
-but is expected to have type
-  forall {α : Type.{u_1}} {s : Semiquot.{u_1} α}, Iff (Semiquot.IsPure.{u_1} α s) (Exists.{succ u_1} α (fun (a : α) => Eq.{succ u_1} (Semiquot.{u_1} α) s (Pure.pure.{u_1, u_1} Semiquot.{u_1} (Applicative.toPure.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α a)))
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure_iff Semiquot.isPure_iffₓ'. -/
 theorem isPure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
   ⟨fun h => ⟨_, eq_pure h⟩, fun ⟨a, e⟩ => e.symm ▸ pure_isPure _⟩
 #align semiquot.is_pure_iff Semiquot.isPure_iff
 
-/- warning: semiquot.is_pure.mono -> Semiquot.IsPure.mono is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {s : Semiquotₓ.{u_2, u_1} α} {t : Semiquotₓ.{u_2, u_1} α}, (LE.le.{u_1} (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasLe.{u_1, u_2} α) s t) -> (Semiquot.IsPure.{u_1, u_2} α t) -> (Semiquot.IsPure.{u_1, u_2} α s)
-but is expected to have type
-  forall {α : Type.{u_1}} {s : Semiquot.{u_1} α} {t : Semiquot.{u_1} α}, (LE.le.{u_1} (Semiquot.{u_1} α) (Semiquot.instLESemiquot.{u_1} α) s t) -> (Semiquot.IsPure.{u_1} α t) -> (Semiquot.IsPure.{u_1} α s)
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure.mono Semiquot.IsPure.monoₓ'. -/
 theorem IsPure.mono {s t : Semiquot α} (st : s ≤ t) (h : IsPure t) : IsPure s
   | a, as, b, bs => h _ (st as) _ (st bs)
 #align semiquot.is_pure.mono Semiquot.IsPure.mono
 
-/- warning: semiquot.is_pure.min -> Semiquot.IsPure.min is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} {s : Semiquotₓ.{u_2, u_1} α} {t : Semiquotₓ.{u_2, u_1} α}, (Semiquot.IsPure.{u_1, u_2} α t) -> (Iff (LE.le.{u_1} (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasLe.{u_1, u_2} α) s t) (Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) s t))
-but is expected to have type
-  forall {α : Type.{u_1}} {s : Semiquot.{u_1} α} {t : Semiquot.{u_1} α}, (Semiquot.IsPure.{u_1} α t) -> (Iff (LE.le.{u_1} (Semiquot.{u_1} α) (Semiquot.instLESemiquot.{u_1} α) s t) (Eq.{succ u_1} (Semiquot.{u_1} α) s t))
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure.min Semiquot.IsPure.minₓ'. -/
 theorem IsPure.min {s t : Semiquot α} (h : IsPure t) : s ≤ t ↔ s = t :=
   ⟨fun st =>
     le_antisymm st <| by
@@ -452,22 +248,10 @@ theorem IsPure.min {s t : Semiquot α} (h : IsPure t) : s ≤ t ↔ s = t :=
     le_of_eq⟩
 #align semiquot.is_pure.min Semiquot.IsPure.min
 
-/- warning: semiquot.is_pure_of_subsingleton -> Semiquot.isPure_of_subsingleton is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} [_inst_1 : Subsingleton.{succ u_1} α] (q : Semiquotₓ.{u_2, u_1} α), Semiquot.IsPure.{u_1, u_2} α q
-but is expected to have type
-  forall {α : Type.{u_1}} [_inst_1 : Subsingleton.{succ u_1} α] (q : Semiquot.{u_1} α), Semiquot.IsPure.{u_1} α q
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure_of_subsingleton Semiquot.isPure_of_subsingletonₓ'. -/
 theorem isPure_of_subsingleton [Subsingleton α] (q : Semiquot α) : IsPure q
   | a, b, aq, bq => Subsingleton.elim _ _
 #align semiquot.is_pure_of_subsingleton Semiquot.isPure_of_subsingleton
 
-/- warning: semiquot.univ -> Semiquot.univ is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α], Semiquotₓ.{u_2, u_1} α
-but is expected to have type
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α], Semiquot.{u_1} α
-Case conversion may be inaccurate. Consider using '#align semiquot.univ Semiquot.univₓ'. -/
 /-- `univ : semiquot α` represents an unspecified element of `univ : set α`. -/
 def univ [Inhabited α] : Semiquot α :=
   mk <| Set.mem_univ default
@@ -476,34 +260,16 @@ def univ [Inhabited α] : Semiquot α :=
 instance [Inhabited α] : Inhabited (Semiquot α) :=
   ⟨univ⟩
 
-/- warning: semiquot.mem_univ -> Semiquot.mem_univ is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α] (a : α), Membership.Mem.{u_1, u_1} α (Semiquotₓ.{u_2, u_1} α) (Semiquotₓ.hasMem.{u_1, u_2} α) a (Semiquot.univ.{u_1, u_2} α _inst_1)
-but is expected to have type
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α] (a : α), Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a (Semiquot.univ.{u_1} α _inst_1)
-Case conversion may be inaccurate. Consider using '#align semiquot.mem_univ Semiquot.mem_univₓ'. -/
 @[simp]
 theorem mem_univ [Inhabited α] : ∀ a, a ∈ @univ α _ :=
   @Set.mem_univ α
 #align semiquot.mem_univ Semiquot.mem_univ
 
-/- warning: semiquot.univ_unique -> Semiquot.univ_unique is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} (I : Inhabited.{succ u_1} α) (J : Inhabited.{succ u_1} α), Eq.{succ u_1} (Semiquotₓ.{u_2, u_1} α) (Semiquot.univ.{u_1, u_2} α I) (Semiquot.univ.{u_1, u_2} α J)
-but is expected to have type
-  forall {α : Type.{u_1}} (I : Inhabited.{succ u_1} α) (J : Inhabited.{succ u_1} α), Eq.{succ u_1} (Semiquot.{u_1} α) (Semiquot.univ.{u_1} α I) (Semiquot.univ.{u_1} α J)
-Case conversion may be inaccurate. Consider using '#align semiquot.univ_unique Semiquot.univ_uniqueₓ'. -/
 @[congr]
 theorem univ_unique (I J : Inhabited α) : @univ _ I = @univ _ J :=
   ext.2 <| by simp
 #align semiquot.univ_unique Semiquot.univ_unique
 
-/- warning: semiquot.is_pure_univ -> Semiquot.isPure_univ is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α], Iff (Semiquot.IsPure.{u_1, u_2} α (Semiquot.univ.{u_1, u_2} α _inst_1)) (Subsingleton.{succ u_1} α)
-but is expected to have type
-  forall {α : Type.{u_1}} [_inst_1 : Inhabited.{succ u_1} α], Iff (Semiquot.IsPure.{u_1} α (Semiquot.univ.{u_1} α _inst_1)) (Subsingleton.{succ u_1} α)
-Case conversion may be inaccurate. Consider using '#align semiquot.is_pure_univ Semiquot.isPure_univₓ'. -/
 @[simp]
 theorem isPure_univ [Inhabited α] : @IsPure α univ ↔ Subsingleton α :=
   ⟨fun h => ⟨fun a b => h a trivial b trivial⟩, fun ⟨h⟩ a _ b _ => h a b⟩
Diff
@@ -416,9 +416,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align semiquot.pure_is_pure Semiquot.pure_isPureₓ'. -/
 @[simp]
 theorem pure_isPure (a : α) : IsPure (pure a)
-  | b, ab, c, ac => by
-    rw [mem_pure] at ab ac
-    cc
+  | b, ab, c, ac => by rw [mem_pure] at ab ac; cc
 #align semiquot.pure_is_pure Semiquot.pure_isPure
 
 /- warning: semiquot.is_pure_iff -> Semiquot.isPure_iff is a dubious translation:
Diff
@@ -250,7 +250,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align semiquot.bind Semiquot.bindₓ'. -/
 /-- Apply a function returning a `semiquot` to a `semiquot`. -/
 def bind (q : Semiquot α) (f : α → Semiquot β) : Semiquot β :=
-  ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_bunionᵢ a.2 b.2⟩⟩
+  ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_biUnion a.2 b.2⟩⟩
 #align semiquot.bind Semiquot.bind
 
 /- warning: semiquot.mem_bind -> Semiquot.mem_bind is a dubious translation:
@@ -261,7 +261,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align semiquot.mem_bind Semiquot.mem_bindₓ'. -/
 @[simp]
 theorem mem_bind (q : Semiquot α) (f : α → Semiquot β) (b : β) : b ∈ bind q f ↔ ∃ a ∈ q, b ∈ f a :=
-  Set.mem_unionᵢ₂
+  Set.mem_iUnion₂
 #align semiquot.mem_bind Semiquot.mem_bind
 
 instance : Monad Semiquot where
Diff
@@ -273,7 +273,7 @@ instance : Monad Semiquot where
 lean 3 declaration is
   forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((α -> β) -> (Semiquotₓ.{u_2, u_1} α) -> (Semiquotₓ.{u_2, u_1} β)) (Functor.map.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Applicative.toFunctor.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) (Monad.toApplicative.{u_1, u_1} (fun {α : Type.{u_1}} => Semiquotₓ.{u_2, u_1} α) Semiquotₓ.monad.{u_1, u_2})) α β) (Semiquot.map.{u_1, u_1, u_2, u_2} α β)
 but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((α -> β) -> (Semiquot.{u_1} α) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.993 : α -> β) (x._@.Mathlib.Data.Semiquot._hyg.995 : Semiquot.{u_1} α) => Functor.map.{u_1, u_1} Semiquot.{u_1} (Applicative.toFunctor.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α β x._@.Mathlib.Data.Semiquot._hyg.993 x._@.Mathlib.Data.Semiquot._hyg.995) (Semiquot.map.{u_1, u_1} α β)
+  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((α -> β) -> (Semiquot.{u_1} α) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.991 : α -> β) (x._@.Mathlib.Data.Semiquot._hyg.993 : Semiquot.{u_1} α) => Functor.map.{u_1, u_1} Semiquot.{u_1} (Applicative.toFunctor.{u_1, u_1} Semiquot.{u_1} (Monad.toApplicative.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1})) α β x._@.Mathlib.Data.Semiquot._hyg.991 x._@.Mathlib.Data.Semiquot._hyg.993) (Semiquot.map.{u_1, u_1} α β)
 Case conversion may be inaccurate. Consider using '#align semiquot.map_def Semiquot.map_defₓ'. -/
 @[simp]
 theorem map_def {β} : ((· <$> ·) : (α → β) → Semiquot α → Semiquot β) = map :=
@@ -284,7 +284,7 @@ theorem map_def {β} : ((· <$> ·) : (α → β) → Semiquot α → Semiquot 
 lean 3 declaration is
   forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((Semiquotₓ.{u_2, u_1} α) -> (α -> (Semiquotₓ.{u_2, u_1} β)) -> (Semiquotₓ.{u_2, u_1} β)) (Bind.bind.{u_1, u_1} Semiquotₓ.{u_2, u_1} (Monad.toHasBind.{u_1, u_1} Semiquotₓ.{u_2, u_1} Semiquotₓ.monad.{u_1, u_2}) α β) (Semiquot.bind.{u_1, u_1, u_2, u_2, u_2} α β)
 but is expected to have type
-  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((Semiquot.{u_1} α) -> (α -> (Semiquot.{u_1} β)) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.1033 : Semiquot.{u_1} α) (x._@.Mathlib.Data.Semiquot._hyg.1035 : α -> (Semiquot.{u_1} β)) => Bind.bind.{u_1, u_1} Semiquot.{u_1} (Monad.toBind.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1}) α β x._@.Mathlib.Data.Semiquot._hyg.1033 x._@.Mathlib.Data.Semiquot._hyg.1035) (Semiquot.bind.{u_1, u_1} α β)
+  forall {α : Type.{u_1}} {β : Type.{u_1}}, Eq.{succ u_1} ((Semiquot.{u_1} α) -> (α -> (Semiquot.{u_1} β)) -> (Semiquot.{u_1} β)) (fun (x._@.Mathlib.Data.Semiquot._hyg.1031 : Semiquot.{u_1} α) (x._@.Mathlib.Data.Semiquot._hyg.1033 : α -> (Semiquot.{u_1} β)) => Bind.bind.{u_1, u_1} Semiquot.{u_1} (Monad.toBind.{u_1, u_1} Semiquot.{u_1} Semiquot.instMonadSemiquot.{u_1}) α β x._@.Mathlib.Data.Semiquot._hyg.1031 x._@.Mathlib.Data.Semiquot._hyg.1033) (Semiquot.bind.{u_1, u_1} α β)
 Case conversion may be inaccurate. Consider using '#align semiquot.bind_def Semiquot.bind_defₓ'. -/
 @[simp]
 theorem bind_def {β} : ((· >>= ·) : Semiquot α → (α → Semiquot β) → Semiquot β) = bind :=
Diff
@@ -201,7 +201,7 @@ lean 3 declaration is
 but is expected to have type
   forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquot.{u_1} α) (f : α -> β), (forall (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (forall (b : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) -> β
 Case conversion may be inaccurate. Consider using '#align semiquot.lift_on Semiquot.liftOnₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- If `f` is a constant on `q.s`, then `q.lift_on f` is the value of `f`
 at any point of `q`. -/
 def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) : β :=
@@ -214,7 +214,7 @@ lean 3 declaration is
 but is expected to have type
   forall {α : Type.{u_1}} {β : Type.{u_2}} (q : Semiquot.{u_1} α) (f : α -> β) (h : forall (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (forall (b : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) b q) -> (Eq.{succ u_2} β (f a) (f b)))) (a : α), (Membership.mem.{u_1, u_1} α (Semiquot.{u_1} α) (Semiquot.instMembershipSemiquot.{u_1} α) a q) -> (Eq.{succ u_2} β (Semiquot.liftOn.{u_1, u_2} α β q f h) (f a))
 Case conversion may be inaccurate. Consider using '#align semiquot.lift_on_of_mem Semiquot.liftOn_ofMemₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b)
     (a : α) (aq : a ∈ q) : liftOn q f h = f a := by
   revert h <;> rw [eq_mk_of_mem aq] <;> intro <;> rfl
@@ -369,7 +369,7 @@ lean 3 declaration is
 but is expected to have type
   forall {α : Type.{u_1}}, (Semiquot.{u_1} α) -> Prop
 Case conversion may be inaccurate. Consider using '#align semiquot.is_pure Semiquot.IsPureₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (a b «expr ∈ » q) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- Assert that a `semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
   ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b

Changes in mathlib4

mathlib3
mathlib4
chore: change from plural to singular in porting notes (#10761)
Diff
@@ -24,7 +24,7 @@ predicate `S`) but are not completely determined.
   of the set `s`. The specific element of `s` that the VM computes
   is hidden by a quotient construction, allowing for the representation
   of nondeterministic functions. -/
-  -- porting notes: removed universe parameter
+  -- Porting note: removed universe parameter
 structure Semiquot (α : Type*) where mk' ::
   /-- Set containing some element of `α`-/
   s : Set α
chore(*): drop $/<| before fun (#9361)

Subset of #9319

Diff
@@ -263,7 +263,7 @@ theorem mem_univ [Inhabited α] : ∀ a, a ∈ @univ α _ :=
 
 @[congr]
 theorem univ_unique (I J : Inhabited α) : @univ _ I = @univ _ J :=
-  ext.2 <| fun a => refl (a ∈ univ)
+  ext.2 fun a => refl (a ∈ univ)
 #align semiquot.univ_unique Semiquot.univ_unique
 
 @[simp]
chore(*): use ∃ x ∈ s, _ instead of ∃ (x) (_ : x ∈ s), _ (#9184)

Search for [∀∃].*(_ and manually replace some occurrences with more readable versions. In case of , the new expressions are defeq to the old ones. In case of , they differ by exists_prop.

In some rare cases, golf proofs that needed fixing.

Diff
@@ -110,14 +110,14 @@ def toTrunc (q : Semiquot α) : Trunc α :=
 warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- If `f` is a constant on `q.s`, then `q.liftOn f` is the value of `f`
 at any point of `q`. -/
-def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) : β :=
+def liftOn (q : Semiquot α) (f : α → β) (h : ∀ a ∈ q, ∀ b ∈ q, f a = f b) : β :=
   Trunc.liftOn q.2 (fun x => f x.1) fun x y => h _ x.2 _ y.2
 #align semiquot.lift_on Semiquot.liftOn
 
 /- ./././Mathport/Syntax/Translate/Basic.lean:632:2:
 warning: expanding binder collection (a b «expr ∈ » q) -/
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β)
-    (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) (a : α) (aq : a ∈ q) : liftOn q f h = f a :=
+    (h : ∀ a ∈ q, ∀ b ∈ q, f a = f b) (a : α) (aq : a ∈ q) : liftOn q f h = f a :=
   by revert h; rw [eq_mk_of_mem aq]; intro; rfl
 #align semiquot.lift_on_of_mem Semiquot.liftOn_ofMem
 
@@ -205,7 +205,7 @@ theorem pure_le {a : α} {s : Semiquot α} : pure a ≤ s ↔ a ∈ s :=
 warning: expanding binder collection (a b «expr ∈ » q) -/
 /-- Assert that a `Semiquot` contains only one possible value. -/
 def IsPure (q : Semiquot α) : Prop :=
-  ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b
+  ∀ a ∈ q, ∀ b ∈ q, a = b
 #align semiquot.is_pure Semiquot.IsPure
 
 /-- Extract the value from an `IsPure` semiquotient. -/
chore: space after (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -226,7 +226,7 @@ theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
 theorem pure_isPure (a : α) : IsPure (pure a)
   | b, ab, c, ac => by
     rw [mem_pure] at ab ac
-    rwa [←ac] at ab
+    rwa [← ac] at ab
 #align semiquot.pure_is_pure Semiquot.pure_isPure
 
 theorem isPure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
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
@@ -25,7 +25,7 @@ predicate `S`) but are not completely determined.
   is hidden by a quotient construction, allowing for the representation
   of nondeterministic functions. -/
   -- porting notes: removed universe parameter
-structure Semiquot (α : Type _) where mk' ::
+structure Semiquot (α : Type*) where mk' ::
   /-- Set containing some element of `α`-/
   s : Set α
   /-- Assertion of non-emptiness via `Trunc`-/
@@ -34,7 +34,7 @@ structure Semiquot (α : Type _) where mk' ::
 
 namespace Semiquot
 
-variable {α : Type _} {β : Type _}
+variable {α : Type*} {β : Type*}
 
 instance : Membership α (Semiquot α) :=
   ⟨fun a q => a ∈ q.s⟩
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,14 +2,11 @@
 Copyright (c) 2018 Mario Carneiro. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Mario Carneiro
-
-! This file was ported from Lean 3 source module data.semiquot
-! leanprover-community/mathlib commit 09597669f02422ed388036273d8848119699c22f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Data.Set.Lattice
 
+#align_import data.semiquot from "leanprover-community/mathlib"@"09597669f02422ed388036273d8848119699c22f"
+
 /-! # Semiquotients
 
 A data type for semiquotients, which are classically equivalent to
chore: remove occurrences of semicolon after space (#5713)

This is the second half of the changes originally in #5699, removing all occurrences of ; after a space and implementing a linter rule to enforce it.

In most cases this 2-character substring has a space after it, so the following command was run first:

find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;

The remaining cases were few enough in number that they were done manually.

Diff
@@ -49,7 +49,7 @@ def mk {a : α} {s : Set α} (h : a ∈ s) : Semiquot α :=
 
 theorem ext_s {q₁ q₂ : Semiquot α} : q₁ = q₂ ↔ q₁.s = q₂.s := by
   refine' ⟨congr_arg _, fun h => _⟩
-  cases' q₁ with _ v₁ ; cases' q₂ with _ v₂ ; congr
+  cases' q₁ with _ v₁; cases' q₂ with _ v₂; congr
   exact Subsingleton.helim (congrArg Trunc (congrArg Set.Elem h)) v₁ v₂
 #align semiquot.ext_s Semiquot.ext_s
 
@@ -91,7 +91,7 @@ def blur (s : Set α) (q : Semiquot α) : Semiquot α :=
 #align semiquot.blur Semiquot.blur
 
 theorem blur_eq_blur' (q : Semiquot α) (s : Set α) (h : q.s ⊆ s) : blur s q = blur' q h := by
-  unfold blur ; congr ; exact Set.union_eq_self_of_subset_right h
+  unfold blur; congr; exact Set.union_eq_self_of_subset_right h
 #align semiquot.blur_eq_blur' Semiquot.blur_eq_blur'
 
 @[simp]
@@ -121,7 +121,7 @@ def liftOn (q : Semiquot α) (f : α → β) (h : ∀ (a) (_ : a ∈ q) (b) (_ :
 warning: expanding binder collection (a b «expr ∈ » q) -/
 theorem liftOn_ofMem (q : Semiquot α) (f : α → β)
     (h : ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), f a = f b) (a : α) (aq : a ∈ q) : liftOn q f h = f a :=
-  by revert h ; rw [eq_mk_of_mem aq] ; intro ; rfl
+  by revert h; rw [eq_mk_of_mem aq]; intro; rfl
 #align semiquot.lift_on_of_mem Semiquot.liftOn_ofMem
 
 /-- Apply a function to the unknown value stored in a `Semiquot α`. -/
@@ -177,10 +177,9 @@ instance : LawfulMonad Semiquot := LawfulMonad.mk'
   (pure_bind := fun {α β} x f => ext.2 <| by simp)
   (bind_assoc := fun {α β} γ s f g =>
     ext.2 <| by
-    simp only [bind_def, mem_bind] ;
-     exact fun c =>
-          ⟨fun ⟨b, ⟨a, as, bf⟩, cg⟩ => ⟨a, as, b, bf, cg⟩, fun ⟨a, as, b, bf, cg⟩ =>
-            ⟨b, ⟨a, as, bf⟩, cg⟩⟩)
+    simp only [bind_def, mem_bind]
+    exact fun c => ⟨fun ⟨b, ⟨a, as, bf⟩, cg⟩ => ⟨a, as, b, bf, cg⟩,
+      fun ⟨a, as, b, bf, cg⟩ => ⟨b, ⟨a, as, bf⟩, cg⟩⟩)
   (id_map := fun {α} q => ext.2 <| by simp)
   (bind_pure_comp := fun {α β} f s => ext.2 <| by simp [eq_comm])
 
@@ -219,11 +218,11 @@ def get (q : Semiquot α) (h : q.IsPure) : α :=
 
 theorem get_mem {q : Semiquot α} (p) : get q p ∈ q := by
   let ⟨a, h⟩ := exists_mem q
-  unfold get ; rw [liftOn_ofMem q _ _ a h] ; exact h
+  unfold get; rw [liftOn_ofMem q _ _ a h]; exact h
 #align semiquot.get_mem Semiquot.get_mem
 
 theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
-  ext.2 fun a => by simp ; exact ⟨fun h => p _ h _ (get_mem _), fun e => e.symm ▸ get_mem _⟩
+  ext.2 fun a => by simp; exact ⟨fun h => p _ h _ (get_mem _), fun e => e.symm ▸ get_mem _⟩
 #align semiquot.eq_pure Semiquot.eq_pure
 
 @[simp]
@@ -244,7 +243,7 @@ theorem IsPure.mono {s t : Semiquot α} (st : s ≤ t) (h : IsPure t) : IsPure s
 theorem IsPure.min {s t : Semiquot α} (h : IsPure t) : s ≤ t ↔ s = t :=
   ⟨fun st =>
     le_antisymm st <| by
-      rw [eq_pure h, eq_pure (h.mono st)] ; simp ; exact h _ (get_mem _) _ (st <| get_mem _),
+      rw [eq_pure h, eq_pure (h.mono st)]; simp; exact h _ (get_mem _) _ (st <| get_mem _),
     le_of_eq⟩
 #align semiquot.is_pure.min Semiquot.IsPure.min
 
chore: fix grammar 2/3 (#5002)

Part 2 of #5001

Diff
@@ -212,7 +212,7 @@ def IsPure (q : Semiquot α) : Prop :=
   ∀ (a) (_ : a ∈ q) (b) (_ : b ∈ q), a = b
 #align semiquot.is_pure Semiquot.IsPure
 
-/-- Extract the value from a `IsPure` semiquotient. -/
+/-- Extract the value from an `IsPure` semiquotient. -/
 def get (q : Semiquot α) (h : q.IsPure) : α :=
   liftOn q id h
 #align semiquot.get Semiquot.get
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supₛsSup
  • infₛsInf
  • supᵢiSup
  • infᵢiInf
  • bsupₛbsSup
  • binfₛbsInf
  • bsupᵢbiSup
  • binfᵢbiInf
  • csupₛcsSup
  • cinfₛcsInf
  • csupᵢciSup
  • cinfᵢciInf
  • unionₛsUnion
  • interₛsInter
  • unionᵢiUnion
  • interᵢiInter
  • bunionₛbsUnion
  • binterₛbsInter
  • bunionᵢbiUnion
  • binterᵢbiInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -136,12 +136,12 @@ theorem mem_map (f : α → β) (q : Semiquot α) (b : β) : b ∈ map f q ↔ 
 
 /-- Apply a function returning a `Semiquot` to a `Semiquot`. -/
 def bind (q : Semiquot α) (f : α → Semiquot β) : Semiquot β :=
-  ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_bunionᵢ a.2 b.2⟩⟩
+  ⟨⋃ a ∈ q.1, (f a).1, q.2.bind fun a => (f a.1).2.map fun b => ⟨b.1, Set.mem_biUnion a.2 b.2⟩⟩
 #align semiquot.bind Semiquot.bind
 
 @[simp]
 theorem mem_bind (q : Semiquot α) (f : α → Semiquot β) (b : β) : b ∈ bind q f ↔ ∃ a ∈ q, b ∈ f a :=
-  by simp_rw [← exists_prop]; exact Set.mem_unionᵢ₂
+  by simp_rw [← exists_prop]; exact Set.mem_iUnion₂
 #align semiquot.mem_bind Semiquot.mem_bind
 
 instance : Monad Semiquot where
chore: format by line breaks (#1523)

During porting, I usually fix the desired format we seem to want for the line breaks around by with

awk '{do {{if (match($0, "^  by$") && length(p) < 98) {p=p " by";} else {if (NR!=1) {print p}; p=$0}}} while (getline == 1) if (getline==0) print p}' Mathlib/File/Im/Working/On.lean

I noticed there are some more files that slipped through.

This pull request is the result of running this command:

grep -lr "^  by\$" Mathlib | xargs -n 1 awk -i inplace '{do {{if (match($0, "^  by$") && length(p) < 98 && not (match(p, "^[ \t]*--"))) {p=p " by";} else {if (NR!=1) {print p}; p=$0}}} while (getline == 1) if (getline==0) print p}'

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -217,8 +217,7 @@ def get (q : Semiquot α) (h : q.IsPure) : α :=
   liftOn q id h
 #align semiquot.get Semiquot.get
 
-theorem get_mem {q : Semiquot α} (p) : get q p ∈ q :=
-  by
+theorem get_mem {q : Semiquot α} (p) : get q p ∈ q := by
   let ⟨a, h⟩ := exists_mem q
   unfold get ; rw [liftOn_ofMem q _ _ a h] ; exact h
 #align semiquot.get_mem Semiquot.get_mem
chore: tidy various files (#1311)
Diff
@@ -187,8 +187,7 @@ instance : LawfulMonad Semiquot := LawfulMonad.mk'
 instance : LE (Semiquot α) :=
   ⟨fun s t => s.s ⊆ t.s⟩
 
-instance partialOrder : PartialOrder (Semiquot α)
-    where
+instance partialOrder : PartialOrder (Semiquot α) where
   le s t := ∀ ⦃x⦄, x ∈ s → x ∈ t
   le_refl s := Set.Subset.refl _
   le_trans s t u := Set.Subset.trans
@@ -229,15 +228,15 @@ theorem eq_pure {q : Semiquot α} (p) : q = pure (get q p) :=
 #align semiquot.eq_pure Semiquot.eq_pure
 
 @[simp]
-theorem pure_is_pure (a : α) : IsPure (pure a)
+theorem pure_isPure (a : α) : IsPure (pure a)
   | b, ab, c, ac => by
     rw [mem_pure] at ab ac
     rwa [←ac] at ab
-#align semiquot.pure_is_pure Semiquot.pure_is_pure
+#align semiquot.pure_is_pure Semiquot.pure_isPure
 
-theorem is_pure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
-  ⟨fun h => ⟨_, eq_pure h⟩, fun ⟨_, e⟩ => e.symm ▸ pure_is_pure _⟩
-#align semiquot.is_pure_iff Semiquot.is_pure_iff
+theorem isPure_iff {s : Semiquot α} : IsPure s ↔ ∃ a, s = pure a :=
+  ⟨fun h => ⟨_, eq_pure h⟩, fun ⟨_, e⟩ => e.symm ▸ pure_isPure _⟩
+#align semiquot.is_pure_iff Semiquot.isPure_iff
 
 theorem IsPure.mono {s t : Semiquot α} (st : s ≤ t) (h : IsPure t) : IsPure s
   | _, as, _, bs => h _ (st as) _ (st bs)
@@ -250,9 +249,9 @@ theorem IsPure.min {s t : Semiquot α} (h : IsPure t) : s ≤ t ↔ s = t :=
     le_of_eq⟩
 #align semiquot.is_pure.min Semiquot.IsPure.min
 
-theorem is_pure_of_subsingleton [Subsingleton α] (q : Semiquot α) : IsPure q
+theorem isPure_of_subsingleton [Subsingleton α] (q : Semiquot α) : IsPure q
   | _, _, _, _ => Subsingleton.elim _ _
-#align semiquot.is_pure_of_subsingleton Semiquot.is_pure_of_subsingleton
+#align semiquot.is_pure_of_subsingleton Semiquot.isPure_of_subsingleton
 
 /-- `univ : Semiquot α` represents an unspecified element of `univ : Set α`. -/
 def univ [Inhabited α] : Semiquot α :=
@@ -273,9 +272,9 @@ theorem univ_unique (I J : Inhabited α) : @univ _ I = @univ _ J :=
 #align semiquot.univ_unique Semiquot.univ_unique
 
 @[simp]
-theorem is_pure_univ [Inhabited α] : @IsPure α univ ↔ Subsingleton α :=
+theorem isPure_univ [Inhabited α] : @IsPure α univ ↔ Subsingleton α :=
   ⟨fun h => ⟨fun a b => h a trivial b trivial⟩, fun ⟨h⟩ a _ b _ => h a b⟩
-#align semiquot.is_pure_univ Semiquot.is_pure_univ
+#align semiquot.is_pure_univ Semiquot.isPure_univ
 
 instance [Inhabited α] : OrderTop (Semiquot α) where
   top := univ
feat: Port data.semiquot (#1275)

Port of data.semiquot

Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: Reid Barton <rwbarton@gmail.com>

Dependencies 59

60 files ported (100.0%)
33726 lines ported (100.0%)

All dependencies are ported!