File: Mathlib/Logic/Function/FromTypes.lean

full_name: Function.FromTypes
code: /-- The type of `n`-ary functions `p 0 → p 1 → ... → p (n - 1) → τ`. -/
def FromTypes : {n : ℕ} → (Fin n → Type u) → Type u → Type u
  
goal: (Fin n → Type u) → Type u → Type u

full_name: Function.fromTypes_zero
code: theorem fromTypes_zero (p : Fin 0 → Type u) (τ : Type u) : FromTypes p τ = τ 
goal: Function.FromTypes p τ = τ

full_name: Function.fromTypes_nil
code: theorem fromTypes_nil (τ : Type u) : FromTypes ![] τ = τ 
goal: Function.FromTypes ![] τ = τ

full_name: Function.fromTypes_succ
code: theorem fromTypes_succ {n} (p : Fin (n + 1) → Type u) (τ : Type u) :
    FromTypes p τ = (vecHead p → FromTypes (vecTail p) τ) 
goal: Function.FromTypes p τ = (Matrix.vecHead p → Function.FromTypes (Matrix.vecTail p) τ)

full_name: Function.fromTypes_cons
code: theorem fromTypes_cons {n} (α : Type u) (p : Fin n → Type u) (τ : Type u) :
    FromTypes (vecCons α p) τ = (α → FromTypes p τ) 
goal: Function.FromTypes (Matrix.vecCons α p) τ = (α → Function.FromTypes p τ)

full_name: Function.fromTypes_zero_equiv
code: /-- The definitional equality between `0`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_zero_equiv (p : Fin 0 → Type u) (τ : Type u) :
    FromTypes p τ ≃ τ 
goal: Function.FromTypes p τ ≃ τ

full_name: Function.fromTypes_zero_equiv_apply
code: /-- The definitional equality between `0`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_zero_equiv (p : Fin 0 → Type u) (τ : Type u) :
    FromTypes p τ ≃ τ 
goal: (Function.fromTypes_zero_equiv p τ) a = a

full_name: Function.fromTypes_zero_equiv_symm_apply
code: /-- The definitional equality between `0`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_zero_equiv (p : Fin 0 → Type u) (τ : Type u) :
    FromTypes p τ ≃ τ 
goal: (Function.fromTypes_zero_equiv p τ).symm a = a

full_name: Function.fromTypes_nil_equiv_apply
code: /-- The definitional equality between `![]`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_nil_equiv (τ : Type u) : FromTypes ![] τ ≃ τ 
goal: (Function.fromTypes_nil_equiv τ) a = a

full_name: Function.fromTypes_nil_equiv_symm_apply
code: /-- The definitional equality between `![]`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_nil_equiv (τ : Type u) : FromTypes ![] τ ≃ τ 
goal: (Function.fromTypes_nil_equiv τ).symm a = a

full_name: Function.fromTypes_nil_equiv
code: /-- The definitional equality between `![]`-ary heterogeneous functions into `τ` and `τ`. -/
@[simps!]
def fromTypes_nil_equiv (τ : Type u) : FromTypes ![] τ ≃ τ 
goal: Function.FromTypes ![] τ ≃ τ

full_name: Function.fromTypes_succ_equiv_apply
code: /-- The definitional equality between `p`-ary heterogeneous functions into `τ`
  and function from `vecHead p` to `(vecTail p)`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_succ_equiv {n} (p : Fin (n + 1) → Type u) (τ : Type u) :
    FromTypes p τ ≃ (vecHead p → FromTypes (vecTail p) τ) 
goal: (Function.fromTypes_succ_equiv p τ) a = a

full_name: Function.fromTypes_succ_equiv_symm_apply
code: /-- The definitional equality between `p`-ary heterogeneous functions into `τ`
  and function from `vecHead p` to `(vecTail p)`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_succ_equiv {n} (p : Fin (n + 1) → Type u) (τ : Type u) :
    FromTypes p τ ≃ (vecHead p → FromTypes (vecTail p) τ) 
goal: (Function.fromTypes_succ_equiv p τ).symm a = a

full_name: Function.fromTypes_succ_equiv
code: /-- The definitional equality between `p`-ary heterogeneous functions into `τ`
  and function from `vecHead p` to `(vecTail p)`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_succ_equiv {n} (p : Fin (n + 1) → Type u) (τ : Type u) :
    FromTypes p τ ≃ (vecHead p → FromTypes (vecTail p) τ) 
goal: Function.FromTypes p τ ≃ (Matrix.vecHead p → Function.FromTypes (Matrix.vecTail p) τ)

full_name: Function.fromTypes_cons_equiv
code: /-- The definitional equality between `(vecCons α p)`-ary heterogeneous functions into `τ`
  and function from `α` to `p`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_cons_equiv {n} (α : Type u) (p : Fin n → Type u) (τ : Type u) :
    FromTypes (vecCons α p) τ ≃ (α → FromTypes p τ) 
goal: Function.FromTypes (Matrix.vecCons α p) τ ≃ (α → Function.FromTypes p τ)

full_name: Function.fromTypes_cons_equiv_apply
code: /-- The definitional equality between `(vecCons α p)`-ary heterogeneous functions into `τ`
  and function from `α` to `p`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_cons_equiv {n} (α : Type u) (p : Fin n → Type u) (τ : Type u) :
    FromTypes (vecCons α p) τ ≃ (α → FromTypes p τ) 
goal: (Function.fromTypes_cons_equiv α p τ) a = a

full_name: Function.fromTypes_cons_equiv_symm_apply
code: /-- The definitional equality between `(vecCons α p)`-ary heterogeneous functions into `τ`
  and function from `α` to `p`-ary heterogeneous functions into `τ`. -/
@[simps!]
def fromTypes_cons_equiv {n} (α : Type u) (p : Fin n → Type u) (τ : Type u) :
    FromTypes (vecCons α p) τ ≃ (α → FromTypes p τ) 
goal: (Function.fromTypes_cons_equiv α p τ).symm a = a

full_name: Function.FromTypes.const
code: /-- Constant `n`-ary function with value `t`. -/
def const : {n : ℕ} → (p : Fin n → Type u) → {τ : Type u} → (t : τ) → FromTypes p τ
  
goal: Function.FromTypes p τ

full_name: Function.FromTypes.const_zero
code: @[simp]
theorem const_zero (p : Fin 0 → Type u) {τ : Type u} (t : τ) : const p t = t 
goal: Function.FromTypes.const p t = t

full_name: Function.FromTypes.const_succ
code: @[simp]
theorem const_succ {n} (p : Fin (n + 1) → Type u) {τ : Type u} (t : τ) :
    const p t = fun _ => const (vecTail p) t 
goal: Function.FromTypes.const p t = fun x => Function.FromTypes.const (Matrix.vecTail p) t

full_name: Function.FromTypes.const_succ_apply
code: theorem const_succ_apply {n} (p : Fin (n + 1) → Type u) {τ : Type u} (t : τ)
    (x : p 0) : const p t x = const (vecTail p) t 
goal: Function.FromTypes.const p t x = Function.FromTypes.const (Matrix.vecTail p) t

full_name: Function.FromTypes.inhabited
code: instance inhabited {n} {p : Fin n → Type u} {τ} [Inhabited τ] :
    Inhabited (FromTypes p τ) 
goal: Inhabited (Function.FromTypes p τ)