@[simp]
theorem
Function.const_apply
{β : Sort u_1}
{α : Sort u_2}
{y : β}
{x : α}
:
Function.const α y x = y
@[simp]
theorem
Function.comp_apply
{β : Sort u_1}
{δ : Sort u_2}
{α : Sort u_3}
{f : β → δ}
{g : α → β}
{x : α}
:
Function.comp f g x = f (g x)
@[extern lean_thunk_pure]
Equations
- Thunk.pure a = { fn := fun x => a }
@[inline]
Equations
- Thunk.bind x f = { fn := fun x => Thunk.get (f (Thunk.get x)) }
Equations
- «term_<->_» = Lean.ParserDescr.trailingNode `«term_<->_» 20 21 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " <-> ") (Lean.ParserDescr.cat `term 21))
Equations
- «term_↔_» = Lean.ParserDescr.trailingNode `«term_↔_» 20 21 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ↔ ") (Lean.ParserDescr.cat `term 21))
Equations
- «term_⊕_» = Lean.ParserDescr.trailingNode `«term_⊕_» 30 31 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊕ ") (Lean.ParserDescr.cat `term 30))
Equations
- «term_⊕'_» = Lean.ParserDescr.trailingNode `«term_⊕'_» 30 31 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⊕' ") (Lean.ParserDescr.cat `term 30))
class
ForIn
(m : Type u₁ → Type u₂)
(ρ : Type u)
(α : outParam (Type v))
:
Type (max (max (max u (u₁ + 1)) u₂) v)
Instances
- instForIn
- ByteArray.instForInByteArrayUInt8
- Lean.Syntax.instForInTopDownSyntax
- Lean.KVMap.instForInKVMapProdNameDataValue
- Lean.LocalContext.instForInLocalContextLocalDecl
- Std.Range.instForInRangeNat
- Lean.NameSet.instForInNameSetName
- Lean.instForInMVarIdSetMVarId
- Std.RBTree.instForInRBTree
- Std.PersistentArray.instForInPersistentArray
- List.instForInList
- Subarray.instForInSubarray
- Std.AssocList.instForInAssocListProd
- Array.instForInArray
- Lean.instForInMVarIdMapProdMVarId
- Lean.instForInOptionsProdNameDataValue
- FloatArray.instForInFloatArrayFloat
- Std.RBMap.instForInRBMapProd
- Lean.instForInFVarIdSetFVarId
- pure: {α β σ : Type u} → α → σ → DoResultPRBC α β σ
- return: {α β σ : Type u} → β → σ → DoResultPRBC α β σ
- break: {α β σ : Type u} → σ → DoResultPRBC α β σ
- continue: {α β σ : Type u} → σ → DoResultPRBC α β σ
- pure: {α β σ : Type u} → α → σ → DoResultPR α β σ
- return: {α β σ : Type u} → β → σ → DoResultPR α β σ
- break: {σ : Type u} → σ → DoResultBC σ
- continue: {σ : Type u} → σ → DoResultBC σ
- pureReturn: {α σ : Type u} → α → σ → DoResultSBC α σ
- break: {α σ : Type u} → σ → DoResultSBC α σ
- continue: {α σ : Type u} → σ → DoResultSBC α σ
- Equiv : α → α → Sort v
Instances
Equations
- «term_≈_» = Lean.ParserDescr.trailingNode `«term_≈_» 50 51 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≈ ") (Lean.ParserDescr.cat `term 51))
- emptyCollection : α
Instances
- Lean.instEmptyCollectionFVarIdMap
- ByteArray.instEmptyCollectionByteArray
- Lean.Parser.Trie.instEmptyCollectionTrie
- Std.HashMap.instEmptyCollectionHashMap
- Lean.NameSSet.instEmptyCollectionNameSSet
- Lean.NameHashSet.instEmptyCollectionNameHashSet
- Lean.NameSet.instEmptyCollectionNameSet
- Lean.instMVarIdSetEmptyCollection
- Lean.instEmptyCollectionPrefixTree
- Std.instEmptyCollectionRBTree
- List.instEmptyCollectionList
- Lean.instEmptyCollectionNameTrie
- Lean.Parser.TokenMap.instEmptyCollectionTokenMap
- Std.AssocList.instEmptyCollectionAssocList
- Lean.instFVarIdHashSetEmptyCollection
- Array.instEmptyCollectionArray
- Lean.instEmptyCollectionMVarIdMap
- Std.HashSet.instEmptyCollectionHashSet
- Std.PersistentHashSet.instEmptyCollectionPersistentHashSet
- FloatArray.instEmptyCollectionFloatArray
- Lean.NameMap.instEmptyCollectionNameMap
- Std.instEmptyCollectionRBMap
- Lean.instFVarIdSetEmptyCollection
Equations
- «term{}» = Lean.ParserDescr.node `«term{}» 1024 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "{") (Lean.ParserDescr.symbol "}"))
Equations
- «term∅» = Lean.ParserDescr.node `«term∅» 1024 (Lean.ParserDescr.symbol "∅")
@[noinline, extern lean_task_spawn]
def
Task.spawn
{α : Type u}
(fn : Unit → α)
(prio : optParam Task.Priority Task.Priority.default)
:
Task α
Equations
- Task.spawn fn prio = { get := fn () }
@[noinline, extern lean_task_map]
def
Task.map
{α : Type u}
{β : Type v}
(f : α → β)
(x : Task α)
(prio : optParam Task.Priority Task.Priority.default)
:
Task β
@[noinline, extern lean_task_bind]
def
Task.bind
{α : Type u}
{β : Type v}
(x : Task α)
(f : α → Task β)
(prio : optParam Task.Priority Task.Priority.default)
:
Task β
Equations
- «term_!=_» = Lean.ParserDescr.trailingNode `«term_!=_» 50 51 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " != ") (Lean.ParserDescr.cat `term 51))
theorem
implies.trans
{p : Prop}
{q : Prop}
{r : Prop}
(h₁ : implies p q)
(h₂ : implies q r)
:
implies p r
Equations
- «term_≠_» = Lean.ParserDescr.trailingNode `«term_≠_» 50 51 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≠ ") (Lean.ParserDescr.cat `term 51))
theorem
HEq.ndrecOn
{α : Sort u2}
{a : α}
{motive : {β : Sort u2} → β → Sort u1}
{β : Sort u2}
{b : β}
(h : HEq a b)
(m : motive α a)
:
motive β b
theorem
heq_of_heq_of_eq
{α : Sort u}
{β : Sort u}
{a : α}
{b : β}
{b' : β}
(h₁ : HEq a b)
(h₂ : b = b')
:
HEq a b'
theorem
heq_of_eq_of_heq
{α : Sort u}
{β : Sort u}
{a : α}
{a' : α}
{b : β}
(h₁ : a = a')
(h₂ : HEq a' b)
:
HEq a b
Equations
theorem
heq_of_eqRec_eq
{α : Sort u}
{β : Sort u}
{a : α}
{b : β}
(h₁ : α = β)
(h₂ : h₁ ▸ a = b)
:
HEq a b
theorem
Exists.elim
{α : Sort u}
{p : α → Prop}
{b : Prop}
(h₁ : ∃ x, p x)
(h₂ : (a : α) → p a → b)
:
b
@[inline]
Equations
- toBoolUsing d = decide p
Equations
@[macroInline]
Equations
- Decidable.byCases h1 h2 = match dec with | isTrue h => h1 h | isFalse h => h2 h
@[inline]
Equations
- decidableOfDecidableOfEq hp h = h ▸ hp
@[macroInline]
instance
instDecidableForAll
{p : Prop}
{q : Prop}
[inst : Decidable p]
[inst : Decidable q]
:
Decidable (p → q)
Equations
- instDecidableForAll = if hp : p then if hq : q then isTrue (instDecidableForAll.proof_1 hq) else isFalse (_ : (p → q) → False) else isTrue (instDecidableForAll.proof_3 hp)
@[inline]
abbrev
noConfusionTypeEnum
{α : Sort u}
{β : Sort v}
[inst : DecidableEq β]
(f : α → β)
(P : Sort w)
(x : α)
(y : α)
:
Sort w
Equations
- noConfusionTypeEnum f P x y = if f x = f y then P → P else P
@[inline]
abbrev
noConfusionEnum
{α : Sort u}
{β : Sort v}
[inst : DecidableEq β]
(f : α → β)
{P : Sort w}
{x : α}
{y : α}
(h : x = y)
:
noConfusionTypeEnum f P x y
Equations
- noConfusionEnum f h = if h' : f x = f y then cast (_ : (P → P) = if f x = f y then P → P else P) fun h => h else False.elim (_ : False)
Equations
- instInhabitedProp = { default := True }
Equations
- instInhabitedTrue = { default := True.intro }
Equations
- instInhabitedPNonScalar = { default := PNonScalar.mk default }
Equations
- instInhabitedNonScalar = { default := { val := default } }
Equations
- instInhabitedForInStep = { default := ForInStep.done default }
- intro :: (
- allEq : ∀ (a b : α), a = b
- )
Equations
noncomputable def
Subsingleton.helim
{α : Sort u}
{β : Sort u}
[h₁ : Subsingleton α]
(h₂ : α = β)
(a : α)
(b : β)
:
HEq a b
Equations
Equations
theorem
recSubsingleton
{p : Prop}
[h : Decidable p]
{h₁ : p → Sort u}
{h₂ : ¬p → Sort u}
[h₃ : ∀ (h : p), Subsingleton (h₁ h)]
[h₄ : ∀ (h : ¬p), Subsingleton (h₂ h)]
:
Subsingleton (Decidable.casesOn h h₂ h₁)
- refl : (x : α) → r x x
- symm : {x y : α} → r x y → r y x
- trans : {x y z : α} → r x y → r y z → r x z
Equations
- emptyRelation a₁ a₂ = False
Equations
- Subrelation q r = ({x y : α} → q x y → r x y)
theorem
Subtype.eta
{α : Type u}
{p : α → Prop}
(a : { x // p x })
(h : p a.val)
:
{ val := a.val, property := h } = a
instance
Subtype.instInhabitedSubtype
{α : Type u}
{p : α → Prop}
{a : α}
(h : p a)
:
Inhabited { x // p x }
Equations
- Subtype.instInhabitedSubtype h = { default := { val := a, property := h } }
instance
Subtype.instDecidableEqSubtype
{α : Type u}
{p : α → Prop}
[inst : DecidableEq α]
:
DecidableEq { x // p x }
Equations
- Subtype.instDecidableEqSubtype x x = match x with | { val := a, property := h₁ } => match x with | { val := b, property := h₂ } => if h : a = b then isTrue (_ : { val := a, property := h₁ } = { val := b, property := h₂ }) else isFalse (_ : { val := a, property := h₁ } = { val := b, property := h₂ } → False)
instance
instDecidableEqSum
{α : Type u}
{β : Type v}
[inst : DecidableEq α]
[inst : DecidableEq β]
:
DecidableEq (α ⊕ β)
Equations
- instDecidableEqSum a b = match a, b with | Sum.inl a, Sum.inl b => if h : a = b then isTrue (_ : Sum.inl a = Sum.inl b) else isFalse (_ : Sum.inl a = Sum.inl b → False) | Sum.inr a, Sum.inr b => if h : a = b then isTrue (_ : Sum.inr a = Sum.inr b) else isFalse (_ : Sum.inr a = Sum.inr b → False) | Sum.inr a, Sum.inl b => isFalse (_ : Sum.inr a = Sum.inl b → Sum.noConfusionType False (Sum.inr a) (Sum.inl b)) | Sum.inl a, Sum.inr b => isFalse (_ : Sum.inl a = Sum.inr b → Sum.noConfusionType False (Sum.inl a) (Sum.inr b))
instance
instDecidableEqProd
{α : Type u_1}
{β : Type u_2}
[inst : DecidableEq α]
[inst : DecidableEq β]
:
DecidableEq (α × β)
Equations
instance
prodHasDecidableLt
{α : Type u_1}
{β : Type u_2}
[inst : LT α]
[inst : LT β]
[inst : DecidableEq α]
[inst : DecidableEq β]
[inst : (a b : α) → Decidable (a < b)]
[inst : (a b : β) → Decidable (a < b)]
(s : α × β)
(t : α × β)
:
Equations
- prodHasDecidableLt t s = inferInstanceAs (Decidable (t.fst < s.fst ∨ t.fst = s.fst ∧ t.snd < s.snd))
theorem
PSigma.eta
{α : Sort u}
{β : α → Sort v}
{a₁ : α}
{a₂ : α}
{b₁ : β a₁}
{b₂ : β a₂}
(h₁ : a₁ = a₂)
(h₂ : h₁ ▸ b₁ = b₂)
:
{ fst := a₁, snd := b₁ } = { fst := a₂, snd := b₂ }
Equations
Equations
- instInhabitedPUnit = { default := PUnit.unit }
Equations
- instDecidableEqPUnit a b = isTrue (_ : a = b)
- r : α → α → Prop
- iseqv : Equivalence r
Instances
Equations
- instHasEquiv = { Equiv := Setoid.r }
@[inline]
abbrev
Quot.liftOn
{α : Sort u}
{β : Sort v}
{r : α → α → Prop}
(q : Quot r)
(f : α → β)
(c : ∀ (a b : α), r a b → f a = f b)
:
β
Equations
- Quot.liftOn q f c = Quot.lift f c q
theorem
Quot.inductionOn
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Prop}
(q : Quot r)
(h : (a : α) → motive (Quot.mk r a))
:
motive q
@[macroInline]
def
Quot.indep
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
(f : (a : α) → motive (Quot.mk r a))
(a : α)
:
PSigma motive
Equations
- Quot.indep f a = { fst := Quot.mk r a, snd := f a }
theorem
Quot.indepCoherent
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
(f : (a : α) → motive (Quot.mk r a))
(h : ∀ (a b : α), r a b → (_ : Quot.mk r a = Quot.mk r b) ▸ f a = f b)
(a : α)
(b : α)
:
∀ (a : r a b), Quot.indep f a = Quot.indep f b
theorem
Quot.liftIndepPr1
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
(f : (a : α) → motive (Quot.mk r a))
(h : ∀ (a b : α), r a b → (_ : Quot.mk r a = Quot.mk r b) ▸ f a = f b)
(q : Quot r)
:
(Quot.lift (Quot.indep f) (_ : ∀ (a b : α), r a b → Quot.indep f a = Quot.indep f b) q).fst = q
@[inline]
abbrev
Quot.rec
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
(f : (a : α) → motive (Quot.mk r a))
(h : ∀ (a b : α), r a b → (_ : Quot.mk r a = Quot.mk r b) ▸ f a = f b)
(q : Quot r)
:
motive q
Equations
- Quot.rec f h q = Eq.ndrecOn (_ : (Quot.lift (Quot.indep f) (_ : ∀ (a b : α), r a b → Quot.indep f a = Quot.indep f b) q).fst = q) (Quot.lift (Quot.indep f) (_ : ∀ (a b : α), r a b → Quot.indep f a = Quot.indep f b) q).snd
@[inline]
abbrev
Quot.recOnSubsingleton
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
[h : ∀ (a : α), Subsingleton (motive (Quot.mk r a))]
(q : Quot r)
(f : (a : α) → motive (Quot.mk r a))
:
motive q
@[inline]
abbrev
Quot.hrecOn
{α : Sort u}
{r : α → α → Prop}
{motive : Quot r → Sort v}
(q : Quot r)
(f : (a : α) → motive (Quot.mk r a))
(c : ∀ (a b : α), r a b → HEq (f a) (f b))
:
motive q
Equations
- Quot.hrecOn q f c = Quot.recOn q f (_ : ∀ (a b : α), r a b → (_ : Quot.mk r a = Quot.mk r b) ▸ f a = f b)
@[inline]
Equations
- Quotient.mk s a = Quot.mk Setoid.r a
Equations
- Quotient.mk' a = Quotient.mk s a
noncomputable def
Quotient.sound
{α : Sort u}
{s : Setoid α}
{a : α}
{b : α}
:
∀ (a : a ≈ b), Quotient.mk s a = Quotient.mk s b
Equations
@[inline]
Equations
- Quotient.lift f = Quot.lift f
theorem
Quotient.ind
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Prop}
:
((a : α) → motive (Quotient.mk s a)) → (q : Quot Setoid.r) → motive q
@[inline]
abbrev
Quotient.liftOn
{α : Sort u}
{β : Sort v}
{s : Setoid α}
(q : Quotient s)
(f : α → β)
(c : ∀ (a b : α), a ≈ b → f a = f b)
:
β
Equations
- Quotient.liftOn q f c = Quot.liftOn q f c
theorem
Quotient.inductionOn
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Prop}
(q : Quotient s)
(h : (a : α) → motive (Quotient.mk s a))
:
motive q
@[inline]
def
Quotient.rec
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Sort v}
(f : (a : α) → motive (Quotient.mk s a))
(h : ∀ (a b : α), a ≈ b → (_ : Quotient.mk s a = Quotient.mk s b) ▸ f a = f b)
(q : Quotient s)
:
motive q
Equations
- Quotient.rec f h q = Quot.rec f h q
@[inline]
abbrev
Quotient.recOn
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Sort v}
(q : Quotient s)
(f : (a : α) → motive (Quotient.mk s a))
(h : ∀ (a b : α), a ≈ b → (_ : Quotient.mk s a = Quotient.mk s b) ▸ f a = f b)
:
motive q
Equations
- Quotient.recOn q f h = Quot.recOn q f h
@[inline]
abbrev
Quotient.recOnSubsingleton
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Sort v}
[h : ∀ (a : α), Subsingleton (motive (Quotient.mk s a))]
(q : Quotient s)
(f : (a : α) → motive (Quotient.mk s a))
:
motive q
Equations
@[inline]
abbrev
Quotient.hrecOn
{α : Sort u}
{s : Setoid α}
{motive : Quotient s → Sort v}
(q : Quotient s)
(f : (a : α) → motive (Quotient.mk s a))
(c : ∀ (a b : α), a ≈ b → HEq (f a) (f b))
:
motive q
Equations
- Quotient.hrecOn q f c = Quot.hrecOn q f c
@[inline]
abbrev
Quotient.lift₂
{α : Sort uA}
{β : Sort uB}
{φ : Sort uC}
{s₁ : Setoid α}
{s₂ : Setoid β}
(f : α → β → φ)
(c : ∀ (a₁ : α) (b₁ : β) (a₂ : α) (b₂ : β), a₁ ≈ a₂ → b₁ ≈ b₂ → f a₁ b₁ = f a₂ b₂)
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
:
φ
Equations
- Quotient.lift₂ f c q₁ q₂ = Quotient.lift (fun a₁ => Quotient.lift (f a₁) (_ : ∀ (a b : β), a ≈ b → f a₁ a = f a₁ b) q₂) (_ : ∀ (a b : α), a ≈ b → (fun a₁ => Quotient.lift (f a₁) (fun a b => c a₁ a a₁ b (_ : a₁ ≈ a₁)) q₂) a = (fun a₁ => Quotient.lift (f a₁) (fun a b => c a₁ a a₁ b (_ : a₁ ≈ a₁)) q₂) b) q₁
@[inline]
abbrev
Quotient.liftOn₂
{α : Sort uA}
{β : Sort uB}
{φ : Sort uC}
{s₁ : Setoid α}
{s₂ : Setoid β}
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
(f : α → β → φ)
(c : ∀ (a₁ : α) (b₁ : β) (a₂ : α) (b₂ : β), a₁ ≈ a₂ → b₁ ≈ b₂ → f a₁ b₁ = f a₂ b₂)
:
φ
Equations
- Quotient.liftOn₂ q₁ q₂ f c = Quotient.lift₂ f c q₁ q₂
theorem
Quotient.ind₂
{α : Sort uA}
{β : Sort uB}
{s₁ : Setoid α}
{s₂ : Setoid β}
{motive : Quotient s₁ → Quotient s₂ → Prop}
(h : (a : α) → (b : β) → motive (Quotient.mk s₁ a) (Quotient.mk s₂ b))
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
:
motive q₁ q₂
theorem
Quotient.inductionOn₂
{α : Sort uA}
{β : Sort uB}
{s₁ : Setoid α}
{s₂ : Setoid β}
{motive : Quotient s₁ → Quotient s₂ → Prop}
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
(h : (a : α) → (b : β) → motive (Quotient.mk s₁ a) (Quotient.mk s₂ b))
:
motive q₁ q₂
theorem
Quotient.inductionOn₃
{α : Sort uA}
{β : Sort uB}
{φ : Sort uC}
{s₁ : Setoid α}
{s₂ : Setoid β}
{s₃ : Setoid φ}
{motive : Quotient s₁ → Quotient s₂ → Quotient s₃ → Prop}
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
(q₃ : Quotient s₃)
(h : (a : α) → (b : β) → (c : φ) → motive (Quotient.mk s₁ a) (Quotient.mk s₂ b) (Quotient.mk s₃ c))
:
motive q₁ q₂ q₃
theorem
Quotient.exact
{α : Sort u}
{s : Setoid α}
{a : α}
{b : α}
:
∀ (a : Quotient.mk s a = Quotient.mk s b), a ≈ b
@[inline]
abbrev
Quotient.recOnSubsingleton₂
{α : Sort uA}
{β : Sort uB}
{s₁ : Setoid α}
{s₂ : Setoid β}
{motive : Quotient s₁ → Quotient s₂ → Sort uC}
[s : ∀ (a : α) (b : β), Subsingleton (motive (Quotient.mk s₁ a) (Quotient.mk s₂ b))]
(q₁ : Quotient s₁)
(q₂ : Quotient s₂)
(g : (a : α) → (b : β) → motive (Quotient.mk s₁ a) (Quotient.mk s₂ b))
:
motive q₁ q₂
Equations
- Quotient.recOnSubsingleton₂ q₁ q₂ g = Quot.recOnSubsingleton q₁ fun a => Quot.recOnSubsingleton q₂ fun a_1 => g a a_1
instance
instDecidableEqQuotient
{α : Sort u}
{s : Setoid α}
[d : (a b : α) → Decidable (a ≈ b)]
:
DecidableEq (Quotient s)
Equations
- instDecidableEqQuotient q₁ q₂ = Quotient.recOnSubsingleton₂ q₁ q₂ fun a₁ a₂ => match d a₁ a₂ with | isTrue h₁ => isTrue (_ : Quotient.mk s a₁ = Quotient.mk s a₂) | isFalse h₂ => isFalse (_ : Quotient.mk s a₁ = Quotient.mk s a₂ → False)
noncomputable def
Function.Equiv
{α : Sort u}
{β : α → Sort v}
(f₁ : (x : α) → β x)
(f₂ : (x : α) → β x)
:
Prop
Equations
- Function.Equiv f₁ f₂ = ∀ (x : α), f₁ x = f₂ x
theorem
Function.Equiv.symm
{α : Sort u}
{β : α → Sort v}
{f₁ : (x : α) → β x}
{f₂ : (x : α) → β x}
:
Function.Equiv f₁ f₂ → Function.Equiv f₂ f₁
theorem
Function.Equiv.trans
{α : Sort u}
{β : α → Sort v}
{f₁ : (x : α) → β x}
{f₂ : (x : α) → β x}
{f₃ : (x : α) → β x}
:
Function.Equiv f₁ f₂ → Function.Equiv f₂ f₃ → Function.Equiv f₁ f₃
noncomputable instance
instSubsingletonForAll
{α : Sort u}
{β : α → Sort v}
[inst : ∀ (a : α), Subsingleton (β a)]
:
Subsingleton ((a : α) → β a)
theorem
Squash.ind
{α : Type u}
{motive : Squash α → Prop}
(h : (a : α) → motive (Squash.mk a))
(q : Squash α)
:
motive q
@[inline]
def
Squash.lift
{α : Type u_1}
{β : Sort u_2}
[inst : Subsingleton β]
(s : Squash α)
(f : α → β)
:
β
Equations
- Squash.lift s f = Quot.lift f (_ : ∀ (a b : α), True → f a = f b) s