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