val reflexive : rel: FStar.ReflexiveTransitiveClosure.binrel a -> Prims.logical
let reflexive (#a:Type) (rel:binrel u#a u#r a) =
  forall (x:a). squash (rel x x)
(*
   Copyright 2008-2019 Microsoft Research

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*)
module FStar.ReflexiveTransitiveClosure

/// This module defines the reflexive transitive closure of a
/// relation. That is, the smallest preorder that includes it.
///
/// Closures are convenient for defining monotonic memory references:
///
/// - Define a `step` relation and take `closure step` as the
///   monotonic relation of the reference.
///
/// - To witness a property of the value of the reference, one must
///   show that the property is stable with respect to `closure step`,
///   but this boils down to proving that is stable with respect to
///   `step` (see lemma `stable_on_closure` below).
///
/// See examples/preorder/Closure.fst for usage examples.

let binrel (a:Type) = a -> a -> Type

let predicate (a:Type u#a) = a -> Type0
/
prims.fst.checked FStar.Pervasives.fsti.checked
FStar.ReflexiveTransitiveClosure.fsti
rel: FStar.ReflexiveTransitiveClosure.binrel a -> Prims.logical
FStar.ReflexiveTransitiveClosure.binrel Prims.l_Forall Prims.squash Prims.logical
let reflexive (#a: Type) (rel: binrel u#a u#r a) =
  
forall (x: a). squash (rel x x)