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

full_name: Lean.Compiler.LCNF.InferType.InferTypeM
code: /--
We use a regular local context to store temporary local declarations
created during type inference.
-/
abbrev InferTypeM 
goal: Type

full_name: Lean.Compiler.LCNF.InferType.getBinderName
code: def getBinderName (fvarId : FVarId) : InferTypeM Name 
goal: Lean.Compiler.LCNF.InferType.InferTypeM Lean.Name

full_name: Lean.Compiler.LCNF.InferType.getType
code: def getType (fvarId : FVarId) : InferTypeM Expr 
goal: Lean.Compiler.LCNF.InferType.InferTypeM Lean.Expr

full_name: Lean.Compiler.LCNF.InferType.mkForallFVars
code: def mkForallFVars (xs : Array Expr) (type : Expr) : InferTypeM Expr 
goal: Lean.Compiler.LCNF.InferType.InferTypeM Lean.Expr

full_name: Lean.Compiler.LCNF.InferType.mkForallParams
code: def mkForallParams (params : Array Param) (type : Expr) : InferTypeM Expr 
goal: Lean.Compiler.LCNF.InferType.InferTypeM Lean.Expr

full_name: Lean.Compiler.LCNF.InferType.withLocalDecl
code: @[inline] def withLocalDecl (binderName : Name) (type : Expr) (binderInfo : BinderInfo) (k : Expr → InferTypeM α) : InferTypeM α 
goal: Lean.Compiler.LCNF.InferType.InferTypeM α

full_name: Lean.Compiler.LCNF.InferType.inferConstType
code: def inferConstType (declName : Name) (us : List Level) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.InferType.inferLitValueType
code: def inferLitValueType (value : LitValue) : Expr 
goal: Lean.Expr

full_name: Lean.Compiler.LCNF.inferType
code: def inferType (e : Expr) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.inferAppType
code: def inferAppType (fnType : Expr) (args : Array Arg) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.getLevel
code: def getLevel (type : Expr) : CompilerM Level 
goal: Lean.Compiler.LCNF.CompilerM Lean.Level

full_name: Lean.Compiler.LCNF.Arg.inferType
code: def Arg.inferType (arg : Arg) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.LetValue.inferType
code: def LetValue.inferType (e : LetValue) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.Code.inferType
code: def Code.inferType (code : Code) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.Code.inferParamType
code: def Code.inferParamType (params : Array Param) (code : Code) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.AltCore.inferType
code: def AltCore.inferType (alt : Alt) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.mkAuxLetDecl
code: def mkAuxLetDecl (e : LetValue) (prefixName := `_x) : CompilerM LetDecl 
goal: Lean.Compiler.LCNF.CompilerM Lean.Compiler.LCNF.LetDecl

full_name: Lean.Compiler.LCNF.mkForallParams
code: def mkForallParams (params : Array Param) (type : Expr) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.mkAuxFunDecl
code: def mkAuxFunDecl (params : Array Param) (code : Code) (prefixName := `_f) : CompilerM FunDecl 
goal: Lean.Compiler.LCNF.CompilerM Lean.Compiler.LCNF.FunDecl

full_name: Lean.Compiler.LCNF.mkAuxJpDecl
code: def mkAuxJpDecl (params : Array Param) (code : Code) (prefixName := `_jp) : CompilerM FunDecl 
goal: Lean.Compiler.LCNF.CompilerM Lean.Compiler.LCNF.FunDecl

full_name: Lean.Compiler.LCNF.mkAuxJpDecl'
code: def mkAuxJpDecl' (param : Param) (code : Code) (prefixName := `_jp) : CompilerM FunDecl 
goal: Lean.Compiler.LCNF.CompilerM Lean.Compiler.LCNF.FunDecl

full_name: Lean.Compiler.LCNF.mkCasesResultType
code: def mkCasesResultType (alts : Array Alt) : CompilerM Expr 
goal: Lean.Compiler.LCNF.CompilerM Lean.Expr

full_name: Lean.Compiler.LCNF.isErasedCompatible
code: /--
Return `true` if `type` should be erased. See item 1 in the note above where `x ◾ ◾` is
a proposition and should be erased when the universe level parameter is set to 0.

Remark: `predVars` is a bitmask that indicates whether de-bruijn variables are predicates or not.
That is, `#i` is a predicate if `predVars[predVars.size - i - 1] = true`
-/
partial def isErasedCompatible (type : Expr) (predVars : Array Bool := #[]): CompilerM Bool 
goal: Lean.Compiler.LCNF.CompilerM Bool

full_name: Lean.Compiler.LCNF.isErasedCompatible.go
code: /--
Return `true` if `type` should be erased. See item 1 in the note above where `x ◾ ◾` is
a proposition and should be erased when the universe level parameter is set to 0.

Remark: `predVars` is a bitmask that indicates whether de-bruijn variables are predicates or not.
That is, `#i` is a predicate if `predVars[predVars.size - i - 1] = true`
-/
partial def isErasedCompatible (type : Expr) (predVars : Array Bool := #[]): CompilerM Bool 
goal: Lean.Compiler.LCNF.CompilerM Bool

full_name: Lean.Compiler.LCNF.eqvTypes
code: /--
Return `true` if the given LCNF are equivalent.
`List Nat` and `(fun x => List x) Nat` are both equivalent.
-/
partial def eqvTypes (a b : Expr) : Bool 
goal: Bool