Loogle!
Result
Found 181 declarations mentioning TypeVec.Arrow.
- TypeVec.Arrow 📋 Mathlib.Data.TypeVec
{n : ℕ} (α : TypeVec.{u} n) (β : TypeVec.{v} n) : Type (max u v) - TypeVec.id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} : α.Arrow α - TypeVec.prod.diag 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} : α.Arrow (α.prod α) - TypeVec.Subtype_ 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} : α.Arrow (TypeVec.repeat n Prop) → TypeVec.{u} n - TypeVec.const 📋 Mathlib.Data.TypeVec
{β : Type u_1} (x : β) {n : ℕ} (α : TypeVec.{u_2} n) : α.Arrow (TypeVec.repeat n β) - TypeVec.repeatEq 📋 Mathlib.Data.TypeVec
{n : ℕ} (α : TypeVec.{u_1} n) : (α.prod α).Arrow (TypeVec.repeat n Prop) - TypeVec.prod.fst 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u} n} : (α.prod β).Arrow α - TypeVec.prod.snd 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u} n} : (α.prod β).Arrow β - TypeVec.dropRepeat 📋 Mathlib.Data.TypeVec
(α : Type u_1) {n : ℕ} : (TypeVec.repeat n.succ α).drop.Arrow (TypeVec.repeat n α) - TypeVec.Arrow.mp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u_1} n} (h : α = β) : α.Arrow β - TypeVec.Arrow.mpr 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u_1} n} (h : α = β) : β.Arrow α - TypeVec.diagSub 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} : α.Arrow (TypeVec.Subtype_ α.repeatEq) - TypeVec.Arrow.inhabited 📋 Mathlib.Data.TypeVec
{n : ℕ} (α : TypeVec.{u_1} n) (β : TypeVec.{u_2} n) [(i : Fin2 n) → Inhabited (β i)] : Inhabited (α.Arrow β) - TypeVec.subtypeVal 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} (p : α.Arrow (TypeVec.repeat n Prop)) : (TypeVec.Subtype_ p).Arrow α - TypeVec.comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} {γ : TypeVec.{w} n} (g : β.Arrow γ) (f : α.Arrow β) : α.Arrow γ - TypeVec.nilFun 📋 Mathlib.Data.TypeVec
{α : TypeVec.{u_1} 0} {β : TypeVec.{u_2} 0} : α.Arrow β - TypeVec.comp_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} (f : α.Arrow β) : TypeVec.comp f TypeVec.id = f - TypeVec.id_comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} (f : α.Arrow β) : TypeVec.comp TypeVec.id f = f - TypeVec.id_eq_nilFun 📋 Mathlib.Data.TypeVec
{α : TypeVec.{u_1} 0} : TypeVec.id = TypeVec.nilFun - TypeVec.fst_diag 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} : TypeVec.comp TypeVec.prod.fst TypeVec.prod.diag = TypeVec.id - TypeVec.snd_diag 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} : TypeVec.comp TypeVec.prod.snd TypeVec.prod.diag = TypeVec.id - TypeVec.prod.map 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u} n} : α.Arrow β → α'.Arrow β' → (α.prod α').Arrow (β.prod β') - TypeVec.ofSubtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} (p : α.Arrow (TypeVec.repeat n Prop)) : (TypeVec.Subtype_ p).Arrow fun i => { x // TypeVec.ofRepeat (p i x) } - TypeVec.toSubtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} (p : α.Arrow (TypeVec.repeat n Prop)) : TypeVec.Arrow (fun i => { x // TypeVec.ofRepeat (p i x) }) (TypeVec.Subtype_ p) - TypeVec.Arrow.ext 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} (f g : α.Arrow β) : (∀ (i : Fin2 n), f i = g i) → f = g - TypeVec.Arrow.ext_iff 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} {f g : α.Arrow β} : f = g ↔ ∀ (i : Fin2 n), f i = g i - TypeVec.eq_nilFun 📋 Mathlib.Data.TypeVec
{α : TypeVec.{u_1} 0} {β : TypeVec.{u_2} 0} (f : α.Arrow β) : f = TypeVec.nilFun - TypeVec.prod_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u} n} : TypeVec.prod.map TypeVec.id TypeVec.id = TypeVec.id - TypeVec.prod_map_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α β : TypeVec.{u_1} n} : TypeVec.prod.map TypeVec.id TypeVec.id = TypeVec.id - TypeVec.appendFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : α.Arrow α') (g : β → β') : (α ::: β).Arrow (α' ::: β') - TypeVec.fromAppend1DropLast 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} : (α.drop ::: α.last).Arrow α - TypeVec.toAppend1DropLast 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} : α.Arrow (α.drop ::: α.last) - TypeVec.PredLast' 📋 Mathlib.Data.TypeVec
{n : ℕ} (α : TypeVec.{u_1} n) {β : Type u_1} (p : β → Prop) : (α ::: β).Arrow (TypeVec.repeat (n + 1) Prop) - TypeVec.const_nil 📋 Mathlib.Data.TypeVec
{β : Type u_1} (x : β) (α : TypeVec.{u_2} 0) : TypeVec.const x α = TypeVec.nilFun - TypeVec.diag_sub_val 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} : TypeVec.comp (TypeVec.subtypeVal α.repeatEq) TypeVec.diagSub = TypeVec.prod.diag - TypeVec.lastFun_appendFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : α.Arrow α') (g : β → β') : TypeVec.lastFun (f ::: g) = g - TypeVec.dropFun_appendFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : α.Arrow α') (g : β → β') : TypeVec.dropFun (f ::: g) = f - TypeVec.dropFun_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} : TypeVec.dropFun TypeVec.id = TypeVec.id - TypeVec.lastFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {β : TypeVec.{u_2} (n + 1)} (f : α.Arrow β) : α.last → β.last - TypeVec.repeat_eq_nil 📋 Mathlib.Data.TypeVec
(α : TypeVec.{u_1} 0) : α.repeatEq = TypeVec.nilFun - TypeVec.comp_assoc 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β : TypeVec.{v} n} {γ : TypeVec.{w} n} {δ : TypeVec.{x} n} (h : γ.Arrow δ) (g : β.Arrow γ) (f : α.Arrow β) : TypeVec.comp (TypeVec.comp h g) f = TypeVec.comp h (TypeVec.comp g f) - TypeVec.dropFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {β : TypeVec.{u_2} (n + 1)} (f : α.Arrow β) : α.drop.Arrow β.drop - TypeVec.subtypeVal_nil 📋 Mathlib.Data.TypeVec
{α : TypeVec.{u} 0} (ps : α.Arrow (TypeVec.repeat 0 Prop)) : TypeVec.subtypeVal ps = TypeVec.nilFun - TypeVec.appendFun_id_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {β : Type u_1} : (TypeVec.id ::: id) = TypeVec.id - TypeVec.dropFun_from_append1_drop_last 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} : TypeVec.dropFun TypeVec.fromAppend1DropLast = TypeVec.id - TypeVec.ofSubtype' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} (p : (α.prod α).Arrow (TypeVec.repeat n Prop)) : (TypeVec.Subtype_ p).Arrow fun i => { x // TypeVec.ofRepeat (p i (TypeVec.prod.mk i x.1 x.2)) } - TypeVec.toSubtype' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} (p : (α.prod α).Arrow (TypeVec.repeat n Prop)) : TypeVec.Arrow (fun i => { x // TypeVec.ofRepeat (p i (TypeVec.prod.mk i x.1 x.2)) }) (TypeVec.Subtype_ p) - TypeVec.RelLast' 📋 Mathlib.Data.TypeVec
{n : ℕ} (α : TypeVec.{u_1} n) {β : Type u_1} (p : β → β → Prop) : ((α ::: β).prod (α ::: β)).Arrow (TypeVec.repeat (n + 1) Prop) - TypeVec.toSubtype_of_subtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} (p : α.Arrow (TypeVec.repeat n Prop)) : TypeVec.comp (TypeVec.toSubtype p) (TypeVec.ofSubtype p) = TypeVec.id - TypeVec.splitFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.drop.Arrow α'.drop) (g : α.last → α'.last) : α.Arrow α' - TypeVec.fst_prod_mk 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u_1} n} (f : α.Arrow β) (g : α'.Arrow β') : TypeVec.comp TypeVec.prod.fst (TypeVec.prod.map f g) = TypeVec.comp f TypeVec.prod.fst - TypeVec.lastFun_splitFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.drop.Arrow α'.drop) (g : α.last → α'.last) : TypeVec.lastFun (TypeVec.splitFun f g) = g - TypeVec.snd_prod_mk 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u_1} n} (f : α.Arrow β) (g : α'.Arrow β') : TypeVec.comp TypeVec.prod.snd (TypeVec.prod.map f g) = TypeVec.comp g TypeVec.prod.snd - TypeVec.dropFun_splitFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.drop.Arrow α'.drop) (g : α.last → α'.last) : TypeVec.dropFun (TypeVec.splitFun f g) = f - TypeVec.typevecCasesNil₂ 📋 Mathlib.Data.TypeVec
{β : TypeVec.Arrow Fin2.elim0 Fin2.elim0 → Sort u_1} (f : β TypeVec.nilFun) (f✝ : TypeVec.Arrow Fin2.elim0 Fin2.elim0) : β f✝ - TypeVec.typevecCasesCons₂ 📋 Mathlib.Data.TypeVec
(n : ℕ) (t : Type u_1) (t' : Type u_2) (v : TypeVec.{u_1} n) (v' : TypeVec.{u_2} n) {β : (v ::: t).Arrow (v' ::: t') → Sort u_3} (F : (f : t → t') → (fs : v.Arrow v') → β (fs ::: f)) (fs : (v ::: t).Arrow (v' ::: t')) : β fs - TypeVec.subtypeVal_toSubtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} (p : α.Arrow (TypeVec.repeat n Prop)) : TypeVec.comp (TypeVec.subtypeVal p) (TypeVec.toSubtype p) = fun x => Subtype.val - TypeVec.appendFun_inj 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} {f f' : α.Arrow α'} {g g' : β → β'} : (f ::: g) = (f' ::: g') → f = f' ∧ g = g' - TypeVec.const_append1 📋 Mathlib.Data.TypeVec
{β : Type u_1} {γ : Type u_2} (x : γ) {n : ℕ} (α : TypeVec.{u_1} n) : TypeVec.const x (α ::: β) = (TypeVec.const x α ::: fun x_1 => x) - TypeVec.split_dropFun_lastFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} (f : α.Arrow α') : TypeVec.splitFun (TypeVec.dropFun f) (TypeVec.lastFun f) = f - TypeVec.dropFun_diag 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} : TypeVec.dropFun TypeVec.prod.diag = TypeVec.prod.diag - TypeVec.toSubtype_of_subtype_assoc 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (p : α.Arrow (TypeVec.repeat n Prop)) (f : β.Arrow (TypeVec.Subtype_ p)) : TypeVec.comp (TypeVec.toSubtype p) (TypeVec.comp (TypeVec.ofSubtype p) f) = f - TypeVec.nilFun_comp 📋 Mathlib.Data.TypeVec
{α₀ : TypeVec.{u_1} 0} (f₀ : α₀.Arrow Fin2.elim0) : TypeVec.comp TypeVec.nilFun f₀ = f₀ - TypeVec.typevecCasesNil₃ 📋 Mathlib.Data.TypeVec
{β : (v : TypeVec.{u_2} 0) → (v' : TypeVec.{u_3} 0) → v.Arrow v' → Sort u_1} (f : β Fin2.elim0 Fin2.elim0 TypeVec.nilFun) (v : TypeVec.{u_2} 0) (v' : TypeVec.{u_3} 0) (fs : v.Arrow v') : β v v' fs - TypeVec.typevecCasesCons₂_appendFun 📋 Mathlib.Data.TypeVec
(n : ℕ) (t : Type u_1) (t' : Type u_2) (v : TypeVec.{u_1} n) (v' : TypeVec.{u_2} n) {β : (v ::: t).Arrow (v' ::: t') → Sort u_3} (F : (f : t → t') → (fs : v.Arrow v') → β (fs ::: f)) (f : t → t') (fs : v.Arrow v') : TypeVec.typevecCasesCons₂ n t t' v v' F (fs ::: f) = F f fs - TypeVec.typevecCasesNil₂_appendFun 📋 Mathlib.Data.TypeVec
{β : TypeVec.Arrow Fin2.elim0 Fin2.elim0 → Sort u_1} (f : β TypeVec.nilFun) : TypeVec.typevecCasesNil₂ f TypeVec.nilFun = f - TypeVec.appendFun_comp_id 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u} n} {β₀ β₁ β₂ : Type u} (g₀ : β₀ → β₁) (g₁ : β₁ → β₂) : (TypeVec.id ::: g₁ ∘ g₀) = TypeVec.comp (TypeVec.id ::: g₁) (TypeVec.id ::: g₀) - TypeVec.dropFun_RelLast' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {β : Type u_1} (R : β → β → Prop) : TypeVec.dropFun (α.RelLast' R) = α.repeatEq - TypeVec.toSubtype'_of_subtype' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} (r : (α.prod α).Arrow (TypeVec.repeat n Prop)) : TypeVec.comp (TypeVec.toSubtype' r) (TypeVec.ofSubtype' r) = TypeVec.id - TypeVec.appendFun_comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α₀ : TypeVec.{u_1} n} {α₁ : TypeVec.{u_2} n} {α₂ : TypeVec.{u_3} n} {β₀ : Type u_1} {β₁ : Type u_2} {β₂ : Type u_3} (f₀ : α₀.Arrow α₁) (f₁ : α₁.Arrow α₂) (g₀ : β₀ → β₁) (g₁ : β₁ → β₂) : (TypeVec.comp f₁ f₀ ::: g₁ ∘ g₀) = TypeVec.comp (f₁ ::: g₁) (f₀ ::: g₀) - TypeVec.appendFun_comp' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α₀ : TypeVec.{u_1} n} {α₁ : TypeVec.{u_2} n} {α₂ : TypeVec.{u_3} n} {β₀ : Type u_1} {β₁ : Type u_2} {β₂ : Type u_3} (f₀ : α₀.Arrow α₁) (f₁ : α₁.Arrow α₂) (g₀ : β₀ → β₁) (g₁ : β₁ → β₂) : TypeVec.comp (f₁ ::: g₁) (f₀ ::: g₀) = (TypeVec.comp f₁ f₀ ::: g₁ ∘ g₀) - TypeVec.splitFun_inj 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {α' : TypeVec.{u_2} (n + 1)} {f f' : α.drop.Arrow α'.drop} {g g' : α.last → α'.last} (H : TypeVec.splitFun f g = TypeVec.splitFun f' g') : f = f' ∧ g = g' - TypeVec.lastFun_subtypeVal 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.lastFun (TypeVec.subtypeVal p) = Subtype.val - TypeVec.eq_of_drop_last_eq 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} {β : TypeVec.{u_2} (n + 1)} {f g : α.Arrow β} (h₀ : TypeVec.dropFun f = TypeVec.dropFun g) (h₁ : TypeVec.lastFun f = TypeVec.lastFun g) : f = g - TypeVec.appendFun_aux 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {α' : TypeVec.{u_2} n} {β : Type u_1} {β' : Type u_2} (f : (α ::: β).Arrow (α' ::: β')) : (TypeVec.dropFun f ::: TypeVec.lastFun f) = f - TypeVec.typevecCasesCons₃ 📋 Mathlib.Data.TypeVec
(n : ℕ) {β : (v : TypeVec.{u_2} (n + 1)) → (v' : TypeVec.{u_3} (n + 1)) → v.Arrow v' → Sort u_1} (F : (t : Type u_2) → (t' : Type u_3) → (f : t → t') → (v : TypeVec.{u_2} n) → (v' : TypeVec.{u_3} n) → (fs : v.Arrow v') → β (v ::: t) (v' ::: t') (fs ::: f)) (v : TypeVec.{u_2} (n + 1)) (v' : TypeVec.{u_3} (n + 1)) (fs : v.Arrow v') : β v v' fs - TypeVec.lastFun_comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α₀ : TypeVec.{u_1} (n + 1)} {α₁ : TypeVec.{u_2} (n + 1)} {α₂ : TypeVec.{u_3} (n + 1)} (f₀ : α₀.Arrow α₁) (f₁ : α₁.Arrow α₂) : TypeVec.lastFun (TypeVec.comp f₁ f₀) = TypeVec.lastFun f₁ ∘ TypeVec.lastFun f₀ - TypeVec.dropFun_comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α₀ : TypeVec.{u_1} (n + 1)} {α₁ : TypeVec.{u_2} (n + 1)} {α₂ : TypeVec.{u_3} (n + 1)} (f₀ : α₀.Arrow α₁) (f₁ : α₁.Arrow α₂) : TypeVec.dropFun (TypeVec.comp f₁ f₀) = TypeVec.comp (TypeVec.dropFun f₁) (TypeVec.dropFun f₀) - TypeVec.dropFun_subtypeVal 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.dropFun (TypeVec.subtypeVal p) = TypeVec.subtypeVal (TypeVec.dropFun p) - TypeVec.appendFun_comp_splitFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} {γ : TypeVec.{u_2} n} {β : Type u_1} {δ : Type u_2} {ε : TypeVec.{u_3} (n + 1)} (f₀ : ε.drop.Arrow α) (f₁ : α.Arrow γ) (g₀ : ε.last → β) (g₁ : β → δ) : TypeVec.comp (f₁ ::: g₁) (TypeVec.splitFun f₀ g₀) = TypeVec.splitFun (TypeVec.comp f₁ f₀) (g₁ ∘ g₀) - TypeVec.repeat_eq_append1 📋 Mathlib.Data.TypeVec
{β : Type u_1} {n : ℕ} (α : TypeVec.{u_1} n) : (α ::: β).repeatEq = TypeVec.splitFun α.repeatEq (Function.uncurry Eq) - TypeVec.append_prod_appendFun 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u} n} {φ φ' ψ ψ' : Type u} {f₀ : α.Arrow α'} {g₀ : β.Arrow β'} {f₁ : φ → φ'} {g₁ : ψ → ψ'} : (TypeVec.prod.map f₀ g₀ ::: Prod.map f₁ g₁) = TypeVec.prod.map (f₀ ::: f₁) (g₀ ::: g₁) - TypeVec.splitFun_comp 📋 Mathlib.Data.TypeVec
{n : ℕ} {α₀ : TypeVec.{u_1} (n + 1)} {α₁ : TypeVec.{u_2} (n + 1)} {α₂ : TypeVec.{u_3} (n + 1)} (f₀ : α₀.drop.Arrow α₁.drop) (f₁ : α₁.drop.Arrow α₂.drop) (g₀ : α₀.last → α₁.last) (g₁ : α₁.last → α₂.last) : TypeVec.splitFun (TypeVec.comp f₁ f₀) (g₁ ∘ g₀) = TypeVec.comp (TypeVec.splitFun f₁ g₁) (TypeVec.splitFun f₀ g₀) - TypeVec.dropFun_toSubtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.dropFun (TypeVec.toSubtype p) = TypeVec.toSubtype fun i => p i.fs - TypeVec.lastFun_of_subtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.lastFun (TypeVec.ofSubtype p) = id - TypeVec.dropFun_of_subtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.dropFun (TypeVec.ofSubtype p) = TypeVec.ofSubtype (TypeVec.dropFun p) - TypeVec.lastFun_prod 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u_1} (n + 1)} (f : α.Arrow β) (f' : α'.Arrow β') : TypeVec.lastFun (TypeVec.prod.map f f') = Prod.map (TypeVec.lastFun f) (TypeVec.lastFun f') - TypeVec.dropFun_prod 📋 Mathlib.Data.TypeVec
{n : ℕ} {α α' β β' : TypeVec.{u_1} (n + 1)} (f : α.Arrow β) (f' : α'.Arrow β') : TypeVec.dropFun (TypeVec.prod.map f f') = TypeVec.prod.map (TypeVec.dropFun f) (TypeVec.dropFun f') - TypeVec.lastFun_toSubtype 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} (n + 1)} (p : α.Arrow (TypeVec.repeat (n + 1) Prop)) : TypeVec.lastFun (TypeVec.toSubtype p) = id - TypeVec.subtypeVal_toSubtype' 📋 Mathlib.Data.TypeVec
{n : ℕ} {α : TypeVec.{u_1} n} (r : (α.prod α).Arrow (TypeVec.repeat n Prop)) : TypeVec.comp (TypeVec.subtypeVal r) (TypeVec.toSubtype' r) = fun i x => TypeVec.prod.mk i (↑x).1 (↑x).2 - MvFunctor.LiftP' 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α : TypeVec.{u} n} {F : TypeVec.{u} n → Type v} [MvFunctor F] (P : α.Arrow (TypeVec.repeat n Prop)) : F α → Prop - MvFunctor.map 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {F : TypeVec.{u_2} n → Type u_1} [self : MvFunctor F] {α β : TypeVec.{u_2} n} : α.Arrow β → F α → F β - MvFunctor.mk 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {F : TypeVec.{u_2} n → Type u_1} (map : {α β : TypeVec.{u_2} n} → α.Arrow β → F α → F β) : MvFunctor F - MvFunctor.LiftR' 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α : TypeVec.{u} n} {F : TypeVec.{u} n → Type v} [MvFunctor F] (R : (α.prod α).Arrow (TypeVec.repeat n Prop)) : F α → F α → Prop - MvFunctor.LiftP_def 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α : TypeVec.{u} n} {F : TypeVec.{u} n → Type v} [MvFunctor F] (P : α.Arrow (TypeVec.repeat n Prop)) [LawfulMvFunctor F] (x : F α) : MvFunctor.LiftP' P x ↔ ∃ u, MvFunctor.map (TypeVec.subtypeVal P) u = x - LawfulMvFunctor.comp_map 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {F : TypeVec.{u_2} n → Type u_1} {inst✝ : MvFunctor F} [self : LawfulMvFunctor F] {α β γ : TypeVec.{u_2} n} (g : α.Arrow β) (h : β.Arrow γ) (x : F α) : MvFunctor.map (TypeVec.comp h g) x = MvFunctor.map h (MvFunctor.map g x) - MvFunctor.map_map 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α β γ : TypeVec.{u} n} {F : TypeVec.{u} n → Type v} [MvFunctor F] [LawfulMvFunctor F] (g : α.Arrow β) (h : β.Arrow γ) (x : F α) : MvFunctor.map h (MvFunctor.map g x) = MvFunctor.map (TypeVec.comp h g) x - MvFunctor.exists_iff_exists_of_mono 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α β : TypeVec.{u} n} (F : TypeVec.{u} n → Type v) [MvFunctor F] [LawfulMvFunctor F] {P : F α → Prop} {q : F β → Prop} (f : α.Arrow β) (g : β.Arrow α) (h₀ : TypeVec.comp f g = TypeVec.id) (h₁ : ∀ (u : F α), P u ↔ q (MvFunctor.map f u)) : (∃ u, P u) ↔ ∃ u, q u - LawfulMvFunctor.mk 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {F : TypeVec.{u_2} n → Type u_1} [MvFunctor F] (id_map : ∀ {α : TypeVec.{u_2} n} (x : F α), MvFunctor.map TypeVec.id x = x) (comp_map : ∀ {α β γ : TypeVec.{u_2} n} (g : α.Arrow β) (h : β.Arrow γ) (x : F α), MvFunctor.map (TypeVec.comp h g) x = MvFunctor.map h (MvFunctor.map g x)) : LawfulMvFunctor F - MvFunctor.LiftR_def 📋 Mathlib.Control.Functor.Multivariate
{n : ℕ} {α : TypeVec.{u} n} {F : TypeVec.{u} n → Type v} [MvFunctor F] (R : (α.prod α).Arrow (TypeVec.repeat n Prop)) [LawfulMvFunctor F] (x y : F α) : MvFunctor.LiftR' R x y ↔ ∃ u, MvFunctor.map (TypeVec.comp TypeVec.prod.fst (TypeVec.subtypeVal R)) u = x ∧ MvFunctor.map (TypeVec.comp TypeVec.prod.snd (TypeVec.subtypeVal R)) u = y - MvPFunctor.map 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} (P : MvPFunctor.{u} n) {α β : TypeVec.{u} n} (f : α.Arrow β) : ↑P α → ↑P β - MvPFunctor.const.get_map 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} {A : Type u} {α β : TypeVec.{u} n} (f : α.Arrow β) (x : ↑(MvPFunctor.const n A) α) : MvPFunctor.const.get (MvFunctor.map f x) = MvPFunctor.const.get x - MvPFunctor.liftP_iff' 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} {P : MvPFunctor.{u} n} {α : TypeVec.{u} n} (p : ⦃i : Fin2 n⦄ → α i → Prop) (a : P.A) (f : (P.B a).Arrow α) : MvFunctor.LiftP p ⟨a, f⟩ ↔ ∀ (i : Fin2 n) (x : P.B a i), p (f i x) - MvPFunctor.supp_eq 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} {P : MvPFunctor.{u} n} {α : TypeVec.{u} n} (a : P.A) (f : (P.B a).Arrow α) (i : Fin2 n) : MvFunctor.supp ⟨a, f⟩ i = f i '' Set.univ - MvPFunctor.comp_map 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} (P : MvPFunctor.{u} n) {α β γ : TypeVec.{u} n} (f : α.Arrow β) (g : β.Arrow γ) (x : ↑P α) : MvFunctor.map (TypeVec.comp g f) x = MvFunctor.map g (MvFunctor.map f x) - MvPFunctor.map_eq 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} (P : MvPFunctor.{u} n) {α β : TypeVec.{u} n} (g : α.Arrow β) (a : P.A) (f : (P.B a).Arrow α) : MvFunctor.map g ⟨a, f⟩ = ⟨a, TypeVec.comp g f⟩ - MvPFunctor.appendContents 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {β : Type u_1} {a : P.A} (f' : (P.drop.B a).Arrow α) (f : P.last.B a → β) : (P.B a).Arrow (α ::: β) - MvPFunctor.liftP_iff 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} {P : MvPFunctor.{u} n} {α : TypeVec.{u} n} (p : ⦃i : Fin2 n⦄ → α i → Prop) (x : ↑P α) : MvFunctor.LiftP p x ↔ ∃ a f, x = ⟨a, f⟩ ∧ ∀ (i : Fin2 n) (j : P.B a i), p (f i j) - MvPFunctor.comp.get_map 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n m : ℕ} {P : MvPFunctor.{u} n} {Q : Fin2 n → MvPFunctor.{u} m} {α β : TypeVec.{u} m} (f : α.Arrow β) (x : ↑(P.comp Q) α) : MvPFunctor.comp.get (MvFunctor.map f x) = MvFunctor.map (fun i x => MvFunctor.map f x) (MvPFunctor.comp.get x) - MvPFunctor.liftR_iff 📋 Mathlib.Data.PFunctor.Multivariate.Basic
{n : ℕ} {P : MvPFunctor.{u} n} {α : TypeVec.{u} n} (r : ⦃i : Fin2 n⦄ → α i → α i → Prop) (x y : ↑P α) : MvFunctor.LiftR r x y ↔ ∃ a f₀ f₁, x = ⟨a, f₀⟩ ∧ y = ⟨a, f₁⟩ ∧ ∀ (i : Fin2 n) (j : P.B a i), r (f₀ i j) (f₁ i j) - MvPFunctor.M.corec' 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {β : Type v} (g₀ : β → P.A) (g₁ : (b : β) → (P.drop.B (g₀ b)).Arrow α) (g₂ : (b : β) → P.last.B (g₀ b) → β) : β → P.M α - MvPFunctor.castDropB 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {a a' : P.A} (h : a = a') : (P.drop.B a).Arrow (P.drop.B a') - MvPFunctor.M.corecContents 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {β : Type v} (g₀ : β → P.A) (g₁ : (b : β) → (P.drop.B (g₀ b)).Arrow α) (g₂ : (b : β) → P.last.B (g₀ b) → β) (x : P.last.M) (b : β) (h : x = MvPFunctor.M.corecShape P g₀ g₂ b) : TypeVec.Arrow (MvPFunctor.M.Path P x) α - MvPFunctor.M.pathDestLeft 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {x : P.last.M} {a : P.A} {f : P.last.B a → P.last.M} (h : x.dest = ⟨a, f⟩) (f' : TypeVec.Arrow (MvPFunctor.M.Path P x) α) : (P.drop.B a).Arrow α - MvPFunctor.M.pathDestRight 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {x : P.last.M} {a : P.A} {f : P.last.B a → P.last.M} (h : x.dest = ⟨a, f⟩) (f' : TypeVec.Arrow (MvPFunctor.M.Path P x) α) (j : P.last.B a) : TypeVec.Arrow (MvPFunctor.M.Path P (f j)) α - MvPFunctor.M.dest' 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {x : P.last.M} {a : P.A} {f : P.last.B a → P.last.M} (h : x.dest = ⟨a, f⟩) (f' : TypeVec.Arrow (MvPFunctor.M.Path P x) α) : ↑P (α ::: P.M α) - MvPFunctor.M.dest_eq_dest' 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {x : P.last.M} {a : P.A} {f : P.last.B a → P.last.M} (h : x.dest = ⟨a, f⟩) (f' : TypeVec.Arrow (MvPFunctor.M.Path P x) α) : MvPFunctor.M.dest P ⟨x, f'⟩ = MvPFunctor.M.dest' P h f' - MvPFunctor.M.dest_map 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α β : TypeVec.{u} n} (g : α.Arrow β) (x : P.M α) : MvPFunctor.M.dest P (MvFunctor.map g x) = MvFunctor.map (g ::: fun x => MvFunctor.map g x) (MvPFunctor.M.dest P x) - MvPFunctor.M.dest'_eq_dest' 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {x : P.last.M} {a₁ : P.A} {f₁ : P.last.B a₁ → P.last.M} (h₁ : x.dest = ⟨a₁, f₁⟩) {a₂ : P.A} {f₂ : P.last.B a₂ → P.last.M} (h₂ : x.dest = ⟨a₂, f₂⟩) (f' : TypeVec.Arrow (MvPFunctor.M.Path P x) α) : MvPFunctor.M.dest' P h₁ f' = MvPFunctor.M.dest' P h₂ f' - MvPFunctor.M.dest_corec' 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {β : Type v} (g₀ : β → P.A) (g₁ : (b : β) → (P.drop.B (g₀ b)).Arrow α) (g₂ : (b : β) → P.last.B (g₀ b) → β) (x : β) : MvPFunctor.M.dest P (MvPFunctor.M.corec' P g₀ g₁ g₂ x) = ⟨g₀ x, TypeVec.splitFun (g₁ x) (MvPFunctor.M.corec' P g₀ g₁ g₂ ∘ g₂ x)⟩ - MvPFunctor.M.map_dest 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α β : TypeVec.{u} n} (g : (α ::: P.M α).Arrow (β ::: P.M β)) (x : P.M α) (h : ∀ (x : P.M α), TypeVec.lastFun g x = MvFunctor.map (TypeVec.dropFun g) x) : MvFunctor.map g (MvPFunctor.M.dest P x) = MvPFunctor.M.dest P (MvFunctor.map (TypeVec.dropFun g) x) - MvPFunctor.M.bisim_lemma 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {a₁ : P.mp.A} {f₁ : (P.mp.B a₁).Arrow α} {a' : P.A} {f' : (P.B a').drop.Arrow α} {f₁' : (P.B a').last → P.M α} (e₁ : MvPFunctor.M.dest P ⟨a₁, f₁⟩ = ⟨a', TypeVec.splitFun f' f₁'⟩) : ∃ g₁', ∃ (e₁' : PFunctor.M.dest a₁ = ⟨a', g₁'⟩), f' = MvPFunctor.M.pathDestLeft P e₁' f₁ ∧ f₁' = fun x => ⟨g₁' x, MvPFunctor.M.pathDestRight P e₁' f₁ x⟩ - MvPFunctor.M.bisim 📋 Mathlib.Data.PFunctor.Multivariate.M
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (R : P.M α → P.M α → Prop) (h : ∀ (x y : P.M α), R x y → ∃ a f f₁ f₂, MvPFunctor.M.dest P x = ⟨a, TypeVec.splitFun f f₁⟩ ∧ MvPFunctor.M.dest P y = ⟨a, TypeVec.splitFun f f₂⟩ ∧ ∀ (i : (P.B a).last), R (f₁ i) (f₂ i)) (x y : P.M α) (r : R x y) : x = y - MvPFunctor.wMap 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α β : TypeVec.{u} n} (g : α.Arrow β) : P.W α → P.W β - MvPFunctor.wMk 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α) : P.W α - MvPFunctor.wpMk 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f : P.last.B a → P.last.W) (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α) : P.W α - MvPFunctor.wRec 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : Sort u_1} (g : (a : P.A) → (P.drop.B a).Arrow α → (P.last.B a → P.W α) → (P.last.B a → C) → C) : P.W α → C - MvPFunctor.objAppend1 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {β : Type u} (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → β) : ↑P (α ::: β) - MvPFunctor.wPathDestLeft 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (h : TypeVec.Arrow (P.WPath (WType.mk a f)) α) : (P.drop.B a).Arrow α - MvPFunctor.wCases 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Sort v} (ih : (a : P.A) → (f' : (P.drop.B a).Arrow α) → (f : P.last.B a → P.W α) → C (P.wMk a f' f)) (x : P.W α) : C x - MvPFunctor.w_cases 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Sort v} (ih : (a : P.A) → (f' : (P.drop.B a).Arrow α) → (f : P.last.B a → P.W α) → C (P.wMk a f' f)) (x : P.W α) : C x - MvPFunctor.wPathDestRight 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (h : TypeVec.Arrow (P.WPath (WType.mk a f)) α) (j : P.last.B a) : TypeVec.Arrow (P.WPath (f j)) α - MvPFunctor.wInd 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Sort v} (ih : (a : P.A) → (f' : (P.drop.B a).Arrow α) → (f : P.last.B a → P.W α) → ((i : P.last.B a) → C (f i)) → C (P.wMk a f' f)) (x : P.W α) : C x - MvPFunctor.w_ind 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Sort v} (ih : (a : P.A) → (f' : (P.drop.B a).Arrow α) → (f : P.last.B a → P.W α) → ((i : P.last.B a) → C (f i)) → C (P.wMk a f' f)) (x : P.W α) : C x - MvPFunctor.wpRec 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_2} n} {C : Sort u_1} (g : (a : P.A) → (f : P.last.B a → P.last.W) → TypeVec.Arrow (P.WPath (WType.mk a f)) α → (P.last.B a → C) → C) (x : P.last.W) : TypeVec.Arrow (P.WPath x) α → C - MvPFunctor.wPathCasesOn 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α) : TypeVec.Arrow (P.WPath (WType.mk a f)) α - MvPFunctor.wPathDestLeft_wPathCasesOn 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α) : P.wPathDestLeft (P.wPathCasesOn g' g) = g' - MvPFunctor.wPathDestRight_wPathCasesOn 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α) : P.wPathDestRight (P.wPathCasesOn g' g) = g - MvPFunctor.wPathCasesOn_eta 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (h : TypeVec.Arrow (P.WPath (WType.mk a f)) α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h - MvPFunctor.wpInd 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {C : (x : P.last.W) → TypeVec.Arrow (P.WPath x) α → Sort v} (ih : (a : P.A) → (f : P.last.B a → P.last.W) → (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α) → ((i : P.last.B a) → C (f i) (P.wPathDestRight f' i)) → C (WType.mk a f) f') (x : P.last.W) (f' : TypeVec.Arrow (P.WPath x) α) : C x f' - MvPFunctor.wp_ind 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {C : (x : P.last.W) → TypeVec.Arrow (P.WPath x) α → Sort v} (ih : (a : P.A) → (f : P.last.B a → P.last.W) → (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α) → ((i : P.last.B a) → C (f i) (P.wPathDestRight f' i)) → C (WType.mk a f) f') (x : P.last.W) (f' : TypeVec.Arrow (P.WPath x) α) : C x f' - MvPFunctor.w_map_wMk 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α β : TypeVec.{u} n} (g : α.Arrow β) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α) : MvFunctor.map g (P.wMk a f' f) = P.wMk a (TypeVec.comp g f') fun i => MvFunctor.map g (f i) - MvPFunctor.wRec_eq 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : Sort u_1} (g : (a : P.A) → (P.drop.B a).Arrow α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α) : P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i) - MvPFunctor.wMk_eq 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f : P.last.B a → P.last.W) (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α) : (P.wMk a g' fun i => ⟨f i, g i⟩) = ⟨WType.mk a f, P.wPathCasesOn g' g⟩ - MvPFunctor.wInd_wMk 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Sort v} (ih : (a : P.A) → (f' : (P.drop.B a).Arrow α) → (f : P.last.B a → P.W α) → ((i : P.last.B a) → C (f i)) → C (P.wMk a f' f)) {a : P.drop.A} {f' : (P.drop.B a).Arrow α} {f : P.last.B a → P.W α} : P.wInd ih (P.wMk a f' f) = ih a f' f fun i => P.wInd ih (f i) - MvPFunctor.comp_wPathCasesOn 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (h : α.Arrow β) {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α) : TypeVec.comp h (P.wPathCasesOn g' g) = P.wPathCasesOn (TypeVec.comp h g') fun i => TypeVec.comp h (g i) - MvPFunctor.wpRec_eq 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_2} n} {C : Sort u_1} (g : (a : P.A) → (f : P.last.B a → P.last.W) → TypeVec.Arrow (P.WPath (WType.mk a f)) α → (P.last.B a → C) → C) (a : P.A) (f : P.last.B a → P.last.W) (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α) : P.wpRec g (WType.mk a f) f' = g a f f' fun i => P.wpRec g (f i) (P.wPathDestRight f' i) - MvPFunctor.wDest'_wMk 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α) : P.wDest' (P.wMk a f' f) = ⟨a, TypeVec.splitFun f' f⟩ - MvPFunctor.map_objAppend1 📋 Mathlib.Data.PFunctor.Multivariate.W
{n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α γ : TypeVec.{u} n} (g : α.Arrow γ) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α) : MvFunctor.map (g ::: P.wMap g) (P.objAppend1 a f' f) = P.objAppend1 a (TypeVec.comp g f') fun x => P.wMap g (f x) - MvQPF.abs_map 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [self : MvQPF F] {α β : TypeVec.{u} n} (f : α.Arrow β) (p : ↑(MvQPF.P F) α) : MvQPF.abs (MvFunctor.map f p) = MvFunctor.map f (MvQPF.abs p) - MvQPF.comp_map 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α β γ : TypeVec.{u} n} (f : α.Arrow β) (g : β.Arrow γ) (x : F α) : MvFunctor.map (TypeVec.comp g f) x = MvFunctor.map g (MvFunctor.map f x) - MvQPF.supp_map 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] (h : MvQPF.IsUniform) {α β : TypeVec.{u} n} (g : α.Arrow β) (x : F α) (i : Fin2 n) : MvFunctor.supp (MvFunctor.map g x) i = g i '' MvFunctor.supp x i - MvQPF.mk 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [toMvFunctor : MvFunctor F] (P : MvPFunctor.{u} n) (abs : {α : TypeVec.{u} n} → ↑P α → F α) (repr : {α : TypeVec.{u} n} → F α → ↑P α) (abs_repr : ∀ {α : TypeVec.{u} n} (x : F α), abs (repr x) = x) (abs_map : ∀ {α β : TypeVec.{u} n} (f : α.Arrow β) (p : ↑P α), abs (MvFunctor.map f p) = MvFunctor.map f (abs p)) : MvQPF F - MvQPF.supp_eq_of_isUniform 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] (h : MvQPF.IsUniform) {α : TypeVec.{u} n} (a : (MvQPF.P F).A) (f : ((MvQPF.P F).B a).Arrow α) (i : Fin2 n) : MvFunctor.supp (MvQPF.abs ⟨a, f⟩) i = f i '' Set.univ - MvQPF.liftP_iff 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α : TypeVec.{u} n} (p : ⦃i : Fin2 n⦄ → α i → Prop) (x : F α) : MvFunctor.LiftP p x ↔ ∃ a f, x = MvQPF.abs ⟨a, f⟩ ∧ ∀ (i : Fin2 n) (j : (MvQPF.P F).B a i), p (f i j) - MvQPF.supp_eq 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α : TypeVec.{u} n} {i : Fin2 n} (x : F α) : MvFunctor.supp x i = {u | ∀ (a : (MvQPF.P F).A) (f : ((MvQPF.P F).B a).Arrow α), MvQPF.abs ⟨a, f⟩ = x → u ∈ f i '' Set.univ} - MvQPF.mem_supp 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α : TypeVec.{u} n} (x : F α) (i : Fin2 n) (u : α i) : u ∈ MvFunctor.supp x i ↔ ∀ (a : (MvQPF.P F).A) (f : ((MvQPF.P F).B a).Arrow α), MvQPF.abs ⟨a, f⟩ = x → u ∈ f i '' Set.univ - MvQPF.ofEquiv 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_2} {F' : TypeVec.{u} n → Type u_3} [q : MvQPF F'] [MvFunctor F] (eqv : (α : TypeVec.{u} n) → F α ≃ F' α) (map_eq : ∀ (α β : TypeVec.{u} n) (f : α.Arrow β) (a : F α), MvFunctor.map f a = (eqv β).symm (MvFunctor.map f ((eqv α) a)) := by intros; rfl) : MvQPF F - MvQPF.liftR_iff 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α : TypeVec.{u} n} (r : ⦃i : Fin2 n⦄ → α i → α i → Prop) (x y : F α) : MvFunctor.LiftR r x y ↔ ∃ a f₀ f₁, x = MvQPF.abs ⟨a, f₀⟩ ∧ y = MvQPF.abs ⟨a, f₁⟩ ∧ ∀ (i : Fin2 n) (j : (MvQPF.P F).B a i), r (f₀ i j) (f₁ i j) - MvQPF.has_good_supp_iff 📋 Mathlib.Data.QPF.Multivariate.Basic
{n : ℕ} {F : TypeVec.{u} n → Type u_1} [q : MvQPF F] {α : TypeVec.{u} n} (x : F α) : (∀ (p : (i : Fin2 n) → α i → Prop), MvFunctor.LiftP p x ↔ ∀ (i : Fin2 n), ∀ u ∈ MvFunctor.supp x i, p i u) ↔ ∃ a f, MvQPF.abs ⟨a, f⟩ = x ∧ ∀ (i : Fin2 n) (a' : (MvQPF.P F).A) (f' : ((MvQPF.P F).B a').Arrow α), MvQPF.abs ⟨a', f'⟩ = x → f i '' Set.univ ⊆ f' i '' Set.univ - MvQPF.Cofix.map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Cofix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α β : TypeVec.{u} n} (g : α.Arrow β) : MvQPF.Cofix F α → MvQPF.Cofix F β - MvQPF.liftR_map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Cofix
{n : ℕ} {α β : TypeVec.{u_1} n} {F' : TypeVec.{u_1} n → Type u} [MvFunctor F'] [LawfulMvFunctor F'] (R : (β.prod β).Arrow (TypeVec.repeat n Prop)) (x : F' α) (f g : α.Arrow β) (h : α.Arrow (TypeVec.Subtype_ R)) (hh : TypeVec.comp (TypeVec.subtypeVal R) h = TypeVec.comp (TypeVec.prod.map f g) TypeVec.prod.diag) : MvFunctor.LiftR' R (MvFunctor.map f x) (MvFunctor.map g x) - MvQPF.Cofix.bisim' 📋 Mathlib.Data.QPF.Multivariate.Constructions.Cofix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} {β : Type u_1} (Q : β → Prop) (u v : β → MvQPF.Cofix F α) (h : ∀ (x : β), Q x → ∃ a f' f₀ f₁, (u x).dest = MvQPF.abs ⟨a, (MvQPF.P F).appendContents f' f₀⟩ ∧ (v x).dest = MvQPF.abs ⟨a, (MvQPF.P F).appendContents f' f₁⟩ ∧ ∀ (i : (MvQPF.P F).last.B a), ∃ x', Q x' ∧ f₀ i = u x' ∧ f₁ i = v x') (x : β) : Q x → u x = v x - MvQPF.Comp.map' 📋 Mathlib.Data.QPF.Multivariate.Constructions.Comp
{n m : ℕ} {G : Fin2 n → TypeVec.{u} m → Type u} {α β : TypeVec.{u} m} (f : α.Arrow β) [(i : Fin2 n) → MvFunctor (G i)] : TypeVec.Arrow (fun i => G i α) fun i => G i β - MvQPF.Comp.map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Comp
{n m : ℕ} {F : TypeVec.{u} n → Type u_1} {G : Fin2 n → TypeVec.{u} m → Type u} {α β : TypeVec.{u} m} (f : α.Arrow β) [MvFunctor F] [(i : Fin2 n) → MvFunctor (G i)] : MvQPF.Comp F G α → MvQPF.Comp F G β - MvQPF.Comp.get_map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Comp
{n m : ℕ} {F : TypeVec.{u} n → Type u_1} {G : Fin2 n → TypeVec.{u} m → Type u} {α β : TypeVec.{u} m} (f : α.Arrow β) [MvFunctor F] [(i : Fin2 n) → MvFunctor (G i)] (x : MvQPF.Comp F G α) : (MvFunctor.map f x).get = MvFunctor.map (fun i x => MvFunctor.map f x) x.get - MvQPF.Comp.map_mk 📋 Mathlib.Data.QPF.Multivariate.Constructions.Comp
{n m : ℕ} {F : TypeVec.{u} n → Type u_1} {G : Fin2 n → TypeVec.{u} m → Type u} {α β : TypeVec.{u} m} (f : α.Arrow β) [MvFunctor F] [(i : Fin2 n) → MvFunctor (G i)] (x : F fun i => G i α) : MvFunctor.map f (MvQPF.Comp.mk x) = MvQPF.Comp.mk (MvFunctor.map (fun i x => MvFunctor.map f x) x) - MvQPF.Const.get_map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Const
{n : ℕ} {A : Type u} {α β : TypeVec.{u} n} (f : α.Arrow β) (x : MvQPF.Const n A α) : (MvFunctor.map f x).get = x.get - MvQPF.Const.map_mk 📋 Mathlib.Data.QPF.Multivariate.Constructions.Const
{n : ℕ} {A : Type u} {α β : TypeVec.{u} n} (f : α.Arrow β) (x : A) : MvFunctor.map f (MvQPF.Const.mk x) = MvQPF.Const.mk x - MvQPF.Fix.map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α β : TypeVec.{u} n} (g : α.Arrow β) : MvQPF.Fix F α → MvQPF.Fix F β - MvQPF.wEquiv_map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α β : TypeVec.{u} n} (g : α.Arrow β) (x y : (MvQPF.P F).W α) : MvQPF.WEquiv x y → MvQPF.WEquiv (MvFunctor.map g x) (MvFunctor.map g y) - MvQPF.WEquiv.ind 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} (a : (MvQPF.P F).A) (f' : ((MvQPF.P F).drop.B a).Arrow α) (f₀ f₁ : (MvQPF.P F).last.B a → (MvQPF.P F).W α) : (∀ (x : (MvQPF.P F).last.B a), MvQPF.WEquiv (f₀ x) (f₁ x)) → MvQPF.WEquiv ((MvQPF.P F).wMk a f' f₀) ((MvQPF.P F).wMk a f' f₁) - MvQPF.Fix.ind_aux 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} (a : (MvQPF.P F).A) (f' : ((MvQPF.P F).drop.B a).Arrow α) (f : (MvQPF.P F).last.B a → (MvQPF.P F).W α) : MvQPF.Fix.mk (MvQPF.abs ⟨a, (MvQPF.P F).appendContents f' fun x => ⟦f x⟧⟩) = ⟦(MvQPF.P F).wMk a f' f⟧ - MvQPF.recF_eq 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} {β : Type u} (g : F (α ::: β) → β) (a : (MvQPF.P F).A) (f' : ((MvQPF.P F).drop.B a).Arrow α) (f : (MvQPF.P F).last.B a → (MvQPF.P F).W α) : MvQPF.recF g ((MvQPF.P F).wMk a f' f) = g (MvQPF.abs ⟨a, TypeVec.splitFun f' (MvQPF.recF g ∘ f)⟩) - MvQPF.wrepr_wMk 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} (a : (MvQPF.P F).A) (f' : ((MvQPF.P F).drop.B a).Arrow α) (f : (MvQPF.P F).last.B a → (MvQPF.P F).W α) : MvQPF.wrepr ((MvQPF.P F).wMk a f' f) = (MvQPF.P F).wMk' (MvQPF.repr (MvQPF.abs (MvFunctor.map (TypeVec.id ::: MvQPF.wrepr) ⟨a, (MvQPF.P F).appendContents f' f⟩))) - MvQPF.WEquiv.abs 📋 Mathlib.Data.QPF.Multivariate.Constructions.Fix
{n : ℕ} {F : TypeVec.{u} (n + 1) → Type u} [q : MvQPF F] {α : TypeVec.{u} n} (a₀ : (MvQPF.P F).A) (f'₀ : ((MvQPF.P F).drop.B a₀).Arrow α) (f₀ : (MvQPF.P F).last.B a₀ → (MvQPF.P F).W α) (a₁ : (MvQPF.P F).A) (f'₁ : ((MvQPF.P F).drop.B a₁).Arrow α) (f₁ : (MvQPF.P F).last.B a₁ → (MvQPF.P F).W α) : MvQPF.abs ⟨a₀, (MvQPF.P F).appendContents f'₀ f₀⟩ = MvQPF.abs ⟨a₁, (MvQPF.P F).appendContents f'₁ f₁⟩ → MvQPF.WEquiv ((MvQPF.P F).wMk a₀ f'₀ f₀) ((MvQPF.P F).wMk a₁ f'₁ f₁) - MvQPF.Prj.map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Prj
{n : ℕ} (i : Fin2 n) ⦃α : TypeVec.{u_1} n⦄ ⦃β : TypeVec.{u_2} n⦄ (f : α.Arrow β) : MvQPF.Prj i α → MvQPF.Prj i β - MvQPF.Quot1.mvFunctor 📋 Mathlib.Data.QPF.Multivariate.Constructions.Quot
{n : ℕ} {F : TypeVec.{u} n → Type u} (R : ⦃α : TypeVec.{u} n⦄ → F α → F α → Prop) [MvFunctor F] (Hfunc : ∀ ⦃α β : TypeVec.{u} n⦄ (a b : F α) (f : α.Arrow β), R a b → R (MvFunctor.map f a) (MvFunctor.map f b)) : MvFunctor (MvQPF.Quot1 R) - MvQPF.relQuot 📋 Mathlib.Data.QPF.Multivariate.Constructions.Quot
{n : ℕ} {F : TypeVec.{u} n → Type u} (R : ⦃α : TypeVec.{u} n⦄ → F α → F α → Prop) [q : MvQPF F] (Hfunc : ∀ ⦃α β : TypeVec.{u} n⦄ (a b : F α) (f : α.Arrow β), R a b → R (MvFunctor.map f a) (MvFunctor.map f b)) : MvQPF (MvQPF.Quot1 R) - MvQPF.Quot1.map 📋 Mathlib.Data.QPF.Multivariate.Constructions.Quot
{n : ℕ} {F : TypeVec.{u} n → Type u} (R : ⦃α : TypeVec.{u} n⦄ → F α → F α → Prop) [MvFunctor F] (Hfunc : ∀ ⦃α β : TypeVec.{u} n⦄ (a b : F α) (f : α.Arrow β), R a b → R (MvFunctor.map f a) (MvFunctor.map f b)) ⦃α β : TypeVec.{u} n⦄ (f : α.Arrow β) : MvQPF.Quot1 R α → MvQPF.Quot1 R β - MvQPF.quotientQPF 📋 Mathlib.Data.QPF.Multivariate.Constructions.Quot
{n : ℕ} {F : TypeVec.{u} n → Type u} [q : MvQPF F] {G : TypeVec.{u} n → Type u} [MvFunctor G] {FG_abs : {α : TypeVec.{u} n} → F α → G α} {FG_repr : {α : TypeVec.{u} n} → G α → F α} (FG_abs_repr : ∀ {α : TypeVec.{u} n} (x : G α), FG_abs (FG_repr x) = x) (FG_abs_map : ∀ {α β : TypeVec.{u} n} (f : α.Arrow β) (x : F α), FG_abs (MvFunctor.map f x) = MvFunctor.map f (FG_abs x)) : MvQPF G
About
Loogle searches Lean and Mathlib definitions and theorems.
You can use Loogle from within the Lean4 VSCode language extension
using the Loogle command from the command palette. You can also try the
#loogle command from LeanSearchClient,
the CLI version, the Loogle
VS Code extension, the lean.nvim
integration or the Zulip bot.
Usage
Loogle finds definitions and lemmas in various ways:
By constant:
🔍Real.sin
finds all lemmas whose statement somehow mentions the sine function.By lemma name substring:
🔍"differ"
finds all lemmas that have"differ"somewhere in their lemma name.By subexpression:
🔍_ * (_ ^ _)
finds all lemmas whose statements somewhere include a product where the second argument is raised to some power.The pattern can also be non-linear, as in
🔍Real.sqrt ?a * Real.sqrt ?aIf the pattern has parameters, they are matched in any order. Both of these will find
List.map:
🔍(?a -> ?b) -> List ?a -> List ?b
🔍List ?a -> (?a -> ?b) -> List ?bBy main conclusion:
🔍|- tsum _ = _ * tsum _
finds all lemmas where the conclusion (the subexpression to the right of all→and∀) has the given shape.As before, if the pattern has parameters, they are matched against the hypotheses of the lemma in any order; for example,
🔍|- _ < _ → tsum _ < tsum _
will findtsum_lt_tsumeven though the hypothesisf i < g iis not the last.You can filter for definitions vs theorems: Using
⊢ (_ : Type _)finds all definitions which provide data while⊢ (_ : Prop)finds all theorems (and definitions of proofs).
If you pass more than one such search filter, separated by commas
Loogle will return lemmas which match all of them. The
search
🔍 Real.sin, "two", tsum, _ * _, _ ^ _, |- _ < _ → _
would find all lemmas which mention the constants Real.sin
and tsum, have "two" as a substring of the
lemma name, include a product and a power somewhere in the type,
and have a hypothesis of the form _ < _ (if
there were any such lemmas). Metavariables (?a) are
assigned independently in each filter.
The #lucky button will directly send you to the
documentation of the first hit.
Source code
You can find the source code for this service at https://github.com/nomeata/loogle. The https://loogle.lean-lang.org/ service is provided by the Lean FRO. Please review the Lean FRO Terms of Use and Privacy Policy.
This is Loogle revision 9f11169 serving mathlib revision ce5dd8c