29 lines
792 B
Text
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
|