Documentation

Cvc.Untyped.Theory.Nullable.Bool

Boolean and sort-generic over nullables, sort-erased #

One lifted constructor per liftable operator, <id>?, each answering none unless every argument is some.

equal? is not Option's equality. The lift is strict, so equal? of two nones is none, not some true. The same goes for distinct? and for ite?, which is strict in its condition.

def Cvc.Untyped.Term.equalN'? [Ω] (terms : Terms) (on0 : Env Term := mkBool true >>= nullableSome) (on1 : Term → Env Term := fun (x : Term) => mkBool true >>= nullableSome) :

equal? over any number of terms: none gives some true, one gives some true. on0 and on1 override these.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def Cvc.Untyped.Term.and? [Ω] (lft rgt : Term) :

    and lifted over nullables, strictly: none unless every argument is some.

    Equations
    Instances For
      def Cvc.Untyped.Term.orN'? [Ω] (terms : Terms) (on0 : Env Term := mkBool false >>= nullableSome) (on1 : Term → Env Term := pure) :

      or? over any number of terms: none gives some false, one gives that term. on0 and on1 override these.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        equal lifted over nullables, strictly: none unless every argument is some.

        Equations
        Instances For

          implies lifted over nullables, strictly: none unless every argument is some.

          Equations
          Instances For
            def Cvc.Untyped.Term.distinctN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

            distinct? over two or more terms.

            Equations
            Instances For
              def Cvc.Untyped.Term.equalN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

              equal? over two or more terms.

              Equations
              Instances For
                def Cvc.Untyped.Term.andN'? [Ω] (terms : Terms) (on0 : Env Term := mkBool true >>= nullableSome) (on1 : Term → Env Term := pure) :

                and? over any number of terms: none gives some true, one gives that term. on0 and on1 override these.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  def Cvc.Untyped.Term.orN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

                  or? over two or more terms.

                  Equations
                  Instances For
                    def Cvc.Untyped.Term.xorN'? [Ω] (terms : Terms) (on0 : Env Term := mkBool false >>= nullableSome) (on1 : Term → Env Term := pure) :

                    xor? over any number of terms: none gives some false, one gives that term. on0 and on1 override these.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      def Cvc.Untyped.Term.ite? [Ω] (cnd thn els : Term) :

                      ite lifted over nullables, strictly: none unless every argument is some.

                      Equations
                      Instances For

                        distinct lifted over nullables, strictly: none unless every argument is some.

                        Equations
                        Instances For
                          def Cvc.Untyped.Term.andN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

                          and? over two or more terms.

                          Equations
                          Instances For
                            def Cvc.Untyped.Term.not? [Ω] (boolTerm : Term) :

                            not lifted over nullables, strictly: none unless every argument is some.

                            Equations
                            Instances For
                              def Cvc.Untyped.Term.or? [Ω] (lft rgt : Term) :

                              or lifted over nullables, strictly: none unless every argument is some.

                              Equations
                              Instances For
                                def Cvc.Untyped.Term.xor? [Ω] (lft rgt : Term) :

                                xor lifted over nullables, strictly: none unless every argument is some.

                                Equations
                                Instances For
                                  def Cvc.Untyped.Term.xorN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

                                  xor? over two or more terms.

                                  Equations
                                  Instances For
                                    def Cvc.Untyped.Term.impliesN? [Ω] (terms : Terms) (atLeastTwoElements : 2 ≤ Array.size terms := by (try grind) <;> fail "failed to prove term array has at least two elements") :

                                    implies? over two or more terms.

                                    Equations
                                    Instances For