/- Copyright (c) 2021 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Leonardo de Moura -/ module prelude public import Lean.Attributes public section namespace Lean.Meta /-- Environment extension for storing which declarations are recursive. This information is populated by the `PreDefinition` module, but the simplifier uses when unfolding declarations. -/ builtin_initialize recExt : TagDeclarationExtension ← mkTagDeclarationExtension `recExt (asyncMode := .async .asyncEnv) /-- Marks the given declaration as recursive. -/ def markAsRecursive (declName : Name) : CoreM Unit := modifyEnv (recExt.tag · declName) /-- Returns `true` if `declName` was defined using well-founded recursion, or structural recursion. -/ def isRecursiveDefinition (declName : Name) : CoreM Bool := return recExt.isTagged (← getEnv) declName