- eq : omega.nat.exprterm → omega.nat.exprterm → omega.nat.exprform
- le : omega.nat.exprterm → omega.nat.exprterm → omega.nat.exprform
- not : omega.nat.exprform → omega.nat.exprform
- or : omega.nat.exprform → omega.nat.exprform → omega.nat.exprform
- and : omega.nat.exprform → omega.nat.exprform → omega.nat.exprform
Intermediate shadow syntax for LNA formulas that includes unreified exprs
- eq : omega.nat.preterm → omega.nat.preterm → omega.nat.preform
- le : omega.nat.preterm → omega.nat.preterm → omega.nat.preform
- not : omega.nat.preform → omega.nat.preform
- or : omega.nat.preform → omega.nat.preform → omega.nat.preform
- and : omega.nat.preform → omega.nat.preform → omega.nat.preform
Intermediate shadow syntax for LNA formulas that includes non-canonical terms
@[simp]
Evaluate a preform into prop using the valuation v
.
Equations
- omega.nat.preform.holds v (p.and q) = (omega.nat.preform.holds v p ∧ omega.nat.preform.holds v q)
- omega.nat.preform.holds v (p.or q) = (omega.nat.preform.holds v p ∨ omega.nat.preform.holds v q)
- omega.nat.preform.holds v p.not = ¬omega.nat.preform.holds v p
- omega.nat.preform.holds v (omega.nat.preform.le t s) = (omega.nat.preterm.val v t ≤ omega.nat.preterm.val v s)
- omega.nat.preform.holds v (omega.nat.preform.eq t s) = (omega.nat.preterm.val v t = omega.nat.preterm.val v s)
@[simp]
univ_close p n
:= p
closed by prepending n
universal quantifiers
Equations
- omega.nat.univ_close p v (k + 1) = ∀ (i : ℕ), omega.nat.univ_close p (omega.update_zero i v) k
- omega.nat.univ_close p v 0 = omega.nat.preform.holds v p
Argument is free of negations
Return expr of proof that argument is free of subtractions
Fresh de Brujin index not used by any variable in argument
Equations
- (p.and q).fresh_index = max p.fresh_index q.fresh_index
- (p.or q).fresh_index = max p.fresh_index q.fresh_index
- p.not.fresh_index = p.fresh_index
- (omega.nat.preform.le t s).fresh_index = max t.fresh_index s.fresh_index
- (omega.nat.preform.eq t s).fresh_index = max t.fresh_index s.fresh_index
theorem
omega.nat.preform.holds_constant
{v w : ℕ → ℕ}
(p : omega.nat.preform) :
(∀ (x : ℕ), x < p.fresh_index → v x = w x) → (omega.nat.preform.holds v p ↔ omega.nat.preform.holds w p)
All valuations satisfy argument
Equations
- p.valid = ∀ (v : ℕ → ℕ), omega.nat.preform.holds v p
There exists some valuation that satisfies argument
Equations
- p.sat = ∃ (v : ℕ → ℕ), omega.nat.preform.holds v p
implies p q
:= under any valuation, q
holds if p
holds
Equations
- p.implies q = ∀ (v : ℕ → ℕ), omega.nat.preform.holds v p → omega.nat.preform.holds v q
equiv p q
:= under any valuation, p
holds iff q
holds
Equations
- p.equiv q = ∀ (v : ℕ → ℕ), omega.nat.preform.holds v p ↔ omega.nat.preform.holds v q
There does not exist any valuation that satisfies argument
@[instance]
Equations
theorem
omega.nat.univ_close_of_valid
{p : omega.nat.preform}
{m : ℕ}
{v : ℕ → ℕ} :
p.valid → omega.nat.univ_close p v m
Tactic for setting up proof by induction over preforms.