Documentation

Duper.Selection

def Duper.isNegative (l : Lit) (inclusive : Bool := true) :

Determines whether given lit l is negative. If inclusive is true, then this includies literals of the form e = False and False = e. If inclusive is false, then this only includes literals whose sign is negative.

Equations
Instances For

    Selection function that returns the first negative literal (including lits of the form e = False)

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

      Selection function that returns the first negative literal (excluding lits of the form e = False)

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

          Based on E's SelectPureVarNegLiterals: Select the first negative literal of the form x ≠ y

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

            Based on E's SelectLargestNegLit: Select the first maximal negative literal

            Note: This coincides with Zipperposition's max_goal selection function (with strict set to true) which is Zipperposition's default selection function (outside of portfolio mode)

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

              Based on Zipperposition's max_goal selection function with strict set to false: Select the first maximal negative literal and all positive literals

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

                Based on E's SelectSmallestNegLit: Select the first minimal negative literal

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

                  Based on E's SelectDiffNegLit: Select the first negative literal for which the size difference between both terms is maximal

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

                    Based on E's SelectGroundNegLit: Select the first negative ground literal for which the size difference between both terms is maximal

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

                      Based on E's SelectOptimalLit: If there is a negative ground literal, select as in selectFirstGroundNegLit. Otherwise, select as in selectFirstMaxDiffNegLit

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        def Duper.selectMaxLitComplex (c : MClause) (alreadyReduced : Bool) :

                        Based on E's SelectMaxLComplex: Select a maximal negative literal. If there are no maximal negative literals, select nothing. If there is just one maximal negative literal, select that. If there are multiple maximal negative literals, try to find one that satisfies any of the following properties (listed in order of precedence):

                        • Is a pure variable literal (i.e. of the form x ≠ y)
                        • Is a ground literal with the largest size difference
                        • Is a non-ground literal with the largest size difference
                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For

                          Based on E's SelectMaxLComplexAvoidPosPred (which coincides with Zipperposition's e_sel): It does the same as selectMaxLitComplex but uses the number of positive literals with a shared predicate symbol as a tiebreaker (preferring to select literals that share a predicate symbol with as few positive literals as possible). For this, specification, I am defining a predicate symbol as the top symbol for the lhs of a literal of the form e = True or e = False.

                          Note: According to "Extending a Brainiac Prover to Lambda-Free Higher-Order Logic", SelectMaxLComplexAvoidPosPred (aka SelectMLCAPP) should be have very similarly to E's SelectMLCAPPPreferAppVar and SelectMLCAPPAvoidAppVar. So it should be unnecessary to separately implement those two selection functions.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            def Duper.selectCQIPrecWNTNp (c : MClause) (alreadyReduced : Bool) :

                            Based on E's SelectCQIPrecWNTNp (which coincides with Zipperposition's e_sel2): Selects the negative literal with the highest-precedence predicate (as in selectMaxLitComplexAvoidPosPred, I define predicates as the top symbol for the lhs of a literal of the form e = True or e = False). If there are multiple negative literals with the same largest predicate, then the size difference between the lit's lhs and rhs will be the tiebreaker (with larger size differences being preferred).

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              def Duper.selectComplexG (c : MClause) (alreadyReduced : Bool) :

                              Based on E's SelectComplexG (which coincides with Zipperposition's e_sel3): Attempts to select a negative pure variable literal (if there are multiple, selects the first arbitrarily). If that fails and there is at least one negative ground literal, selects the smallest negative ground literal. If that also fails, it selects the negative literal with the largest size difference.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                def Duper.getSelections (c : MClause) (alreadyReduced : Bool) :
                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  Equations
                                  Instances For
                                    def Duper.litSelected (c : MClause) (i : Nat) (alreadyReduced : Bool) :
                                    Equations
                                    Instances For

                                      Data type to capture whether a literal in a clause is eligible. If it is not eligible, we distinguish the cases where there might be substitutions that make the literal eligble (potentiallyEligible) or not (notEligible).

                                      Instances For
                                        def Duper.eligibilityNoUnificationCheck (c : MClause) (alreadyReduced : Bool := true) (i : Nat) (strict : Bool := false) :

                                        Checks whether a literal is eligible in rules without unification.

                                        A literal L is (strictly) eligible in C if it is selected in C or there are no selected literals in C and L is (strictly) maximal in C.

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

                                          Checks whether a literal might be eligible before attempting to run the unification algorithm.

                                          A literal L is (strictly) eligible w.r.t. a substitution σ in C if it is selected in C or there are no selected literals in C and Lσ is (strictly) maximal in Cσ.

                                          The alreadyReduced variable indicates whether c has been betaEta reduced as well as whether its mvars have been instantiated (alreadyReduced is only set to true if both of these things are true)

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            def Duper.eligibilityPostUnificationCheck (c : MClause) (alreadyReduced : Bool := false) (i : Nat) (preUnificationResult : Eligibility) (strict : Bool := false) :

                                            Checks whether a literal might be eligible based on the result of eligibilityPreUnificationCheck.

                                            A literal L is (strictly) eligible w.r.t. a substitution σ in C if it is selected in C or there are no selected literals in C and Lσ is (strictly) maximal in Cσ.

                                            The alreadyReduced variable indicates whether c has been betaEta reduced as well as whether its mvars have been instantiated (alreadyReduced is only set to true if both of these things are true)

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