Documentation

Trestle.Encode.Cardinality.Defs

Cardinality specification predicates #

This file defines useful predicates for specifying the behavior of cardinality encodings.

@[simp]
theorem Trestle.Encode.Cardinality.satisfies_cardPred {ν : Type u_1} (lits : Multiset (Literal ν)) (P : ℕ → Prop) [DecidablePred P] (τ : Model.PropAssignment ν) :
cardPred lits P τ ↔ P (card lits τ)
@[reducible, inline]
abbrev Trestle.Encode.Cardinality.atMost {ν : Type u_1} (k : ℕ) (lits : Multiset (Literal ν)) (τ : Model.PropAssignment ν) :
Equations
Instances For
    @[reducible, inline]
    abbrev Trestle.Encode.Cardinality.atLeast {ν : Type u_1} (k : ℕ) (lits : Multiset (Literal ν)) (τ : Model.PropAssignment ν) :
    Equations
    Instances For
      @[reducible, inline]
      abbrev Trestle.Encode.Cardinality.exactly {ν : Type u_1} (k : ℕ) (lits : Multiset (Literal ν)) (τ : Model.PropAssignment ν) :
      Equations
      Instances For
        @[reducible, inline]
        abbrev Trestle.Encode.Cardinality.lessThan {ν : Type u_1} (k : ℕ) (lits : Multiset (Literal ν)) (τ : Model.PropAssignment ν) :
        Equations
        Instances For
          @[simp]
          @[simp]
          theorem Trestle.Encode.Cardinality.card_append {ν : Type u_1} (L₁ L₂ : List (Literal ν)) :
          card ↑(L₁ ++ L₂) = card ↑L₁ + card ↑L₂
          @[simp]
          theorem Trestle.Encode.Cardinality.card_cons {ν : Type u_1} (l : Literal ν) (L : List (Literal ν)) :
          card ↑(l :: L) = card ↑[l] + card ↑L
          @[simp]
          theorem Trestle.Encode.Cardinality.card_map {ν : Type u_1} {ν' : Type u_2} (L : List (Literal ν)) (f : ν → ν') (τ : Model.PropAssignment ν') :
          card (↑(List.map (LitVar.map f) L)) τ = card (↑L) (τ ∘ f)
          theorem Trestle.Encode.Cardinality.card_eq_one {ν : Type u_1} {τ : Model.PropAssignment ν} (ls : Multiset (Literal ν)) (nodup : ls.Nodup) :
          card ls τ = 1 ↔ ∃! l : Literal ν, l ∈ ls ∧ τ ⊨ LitVar.toPropFun l