data.semiquot
⟷
Mathlib.Data.Semiquot
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/8efcf8022aac8e01df8d302dcebdbc25d6a886c8
@@ -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⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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:
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -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 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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 α
@@ -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]
∃ 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.
@@ -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. -/
@@ -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 :=
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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⟩
@@ -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
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.
@@ -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
@@ -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
sSup
/iSup
(#3938)
As discussed on Zulip
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>
@@ -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
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>
@@ -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
@@ -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
All dependencies are ported!