/- Copyright (c) 2019 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Leonardo de Moura -/ prelude import Lean.Util.FindExpr import Lean.Declaration namespace Lean def Expr.isSorry : Expr → Bool | app (app (.const ``sorryAx ..) ..) .. => true | _ => false def Expr.isSyntheticSorry : Expr → Bool | app (app (const ``sorryAx ..) ..) (const ``Bool.true ..) => true | _ => false def Expr.isNonSyntheticSorry : Expr → Bool | app (app (const ``sorryAx ..) ..) (const ``Bool.false ..) => true | _ => false def Expr.hasSorry (e : Expr) : Bool := Option.isSome <| e.find? (·.isConstOf ``sorryAx) def Expr.hasSyntheticSorry (e : Expr) : Bool := Option.isSome <| e.find? (·.isSyntheticSorry) def Expr.hasNonSyntheticSorry (e : Expr) : Bool := Option.isSome <| e.find? (·.isNonSyntheticSorry) def Declaration.hasSorry (d : Declaration) : Bool := Id.run do d.foldExprM (fun r e => r || e.hasSorry) false def Declaration.hasNonSyntheticSorry (d : Declaration) : Bool := Id.run do d.foldExprM (fun r e => r || e.hasNonSyntheticSorry) false end Lean