lean4-htt/src/Lean/Util/FVarSubset.lean
2025-07-25 12:02:51 +00:00

29 lines
792 B
Text

/-
Copyright (c) 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
module
prelude
public import Lean.Util.CollectFVars
public import Lean.Util.FindExpr
public section
namespace Lean.Expr
/-- Returns true if the free variables in `a` are subset of the free variables in `b`. -/
def fvarsSubset (a b : Expr) : Bool :=
if !a.hasFVar then
true -- Empty set is subset of anything
else if !b.hasFVar then
false -- Empty set is not a superset of a nonempty set.
else
let s := collectFVars {} b
Option.isNone <| a.findExt? fun e =>
if !e.hasFVar then .done
else if e.isFVar && !s.fvarSet.contains e.fvarId! then .found
else .visit
end Lean.Expr