File: .lake/packages/lean4/src/lean/Lean/Compiler/LCNF/Types.lean

full_name: Lean.Compiler.«_aux_.lake_packages_lean4_src_lean_Lean_Compiler_LCNF_Types___unexpand_lcErased_1»
code: scoped notation:max "◾" => lcErased
goal: Lean.PrettyPrinter.Unexpander

full_name: Lean.Compiler.«_aux_.lake_packages_lean4_src_lean_Lean_Compiler_LCNF_Types___macroRules_Lean_Compiler_term◾_1»
code: scoped notation:max "◾" => lcErased
goal: Lean.Macro

full_name: Lean.Compiler.LCNF.erasedExpr
code: def erasedExpr 
goal: Lean.Expr

full_name: Lean.Expr.isErased
code: def _root_.Lean.Expr.isErased (e : Expr) 
goal: Bool

full_name: Lean.Compiler.LCNF.isPropFormerTypeQuick
code: def isPropFormerTypeQuick : Expr → Bool
  
goal: Lean.Expr → Bool

full_name: Lean.Compiler.LCNF.isPropFormerType
code: /--
Return true iff `type` is `Prop` or `As → Prop`.
-/
partial def isPropFormerType (type : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Lean.Compiler.LCNF.isPropFormerType.go
code: /--
Return true iff `type` is `Prop` or `As → Prop`.
-/
partial def isPropFormerType (type : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Lean.Compiler.LCNF.isPropFormer
code: /--
Return true iff `e : Prop` or `e : As → Prop`.
-/
def isPropFormer (e : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Lean.Compiler.LCNF.toLCNFType.visitForall
code: /--
Convert a Lean type into a LCNF type used by the code generator.
-/
partial def toLCNFType (type : Expr) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Lean.Compiler.LCNF.toLCNFType.visitApp
code: /--
Convert a Lean type into a LCNF type used by the code generator.
-/
partial def toLCNFType (type : Expr) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Lean.Compiler.LCNF.toLCNFType
code: /--
Convert a Lean type into a LCNF type used by the code generator.
-/
partial def toLCNFType (type : Expr) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Lean.Compiler.LCNF.toLCNFType.whnfEta
code: /--
Convert a Lean type into a LCNF type used by the code generator.
-/
partial def toLCNFType (type : Expr) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Lean.Compiler.LCNF.isTypeFormerType
code: /--
Return `true` if `type` is a LCNF type former type.

Remark: This is faster than `Lean.Meta.isTypeFormer`, as this
        assumes that the input `type` is an LCNF type.
-/
partial def isTypeFormerType (type : Expr) : Bool 
goal: Bool

full_name: Lean.Compiler.LCNF.instantiateForall
code: /--
Given a LCNF `type` of the form `forall (a_1 : A_1) ... (a_n : A_n), B[a_1, ..., a_n]` and `p_1 : A_1, ... p_n : A_n`,
return `B[p_1, ..., p_n]`.

Remark: similar to `Meta.instantiateForall`, buf for LCNF types.
-/
def instantiateForall (type : Expr) (ps : Array Expr) : CoreM Expr 
goal: Lean.CoreM Lean.Expr

full_name: Lean.Compiler.LCNF.instantiateForall.go
code: /--
Given a LCNF `type` of the form `forall (a_1 : A_1) ... (a_n : A_n), B[a_1, ..., a_n]` and `p_1 : A_1, ... p_n : A_n`,
return `B[p_1, ..., p_n]`.

Remark: similar to `Meta.instantiateForall`, buf for LCNF types.
-/
def instantiateForall (type : Expr) (ps : Array Expr) : CoreM Expr 
goal: Lean.CoreM Lean.Expr

full_name: Lean.Compiler.LCNF.isPredicateType
code: /--
Return `true` if `type` is a predicate.
Examples: `Nat → Prop`, `Prop`, `Int → Bool → Prop`.
-/
partial def isPredicateType (type : Expr) : Bool 
goal: Bool

full_name: Lean.Compiler.LCNF.maybeTypeFormerType
code: /--
Return `true` if `type` is a LCNF type former type or it is an "any" type.
This function is similar to `isTypeFormerType`, but more liberal.
For example, `isTypeFormerType` returns false for `◾` and `Nat → ◾`, but
this function returns true.
-/
partial def maybeTypeFormerType (type : Expr) : Bool 
goal: Bool

full_name: Lean.Compiler.LCNF.isClass?
code: /--
`isClass? type` return `some ClsName` if the LCNF `type` is an instance of the class `ClsName`.
-/
def isClass? (type : Expr) : CoreM (Option Name) 
goal: Lean.CoreM (Option Lean.Name)

full_name: Lean.Compiler.LCNF.isArrowClass?
code: /--
`isArrowClass? type` return `some ClsName` if the LCNF `type` is an instance of the class `ClsName`, or
if it is arrow producing an instance of the class `ClsName`.
-/
partial def isArrowClass? (type : Expr) : CoreM (Option Name) 
goal: Lean.CoreM (Option Lean.Name)

full_name: Lean.Compiler.LCNF.getArrowArity
code: partial def getArrowArity (e : Expr) 
goal: Nat

full_name: Lean.Compiler.LCNF.isInductiveWithNoCtors
code: /-- Return `true` if `type` is an inductive datatype with 0 constructors. -/
def isInductiveWithNoCtors (type : Expr) : CoreM Bool 
goal: Lean.CoreM Bool