- 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 ∧* q) = (omega.nat.preform.holds v p ∧ omega.nat.preform.holds v q)
- omega.nat.preform.holds v (p ∨* q) = (omega.nat.preform.holds v p ∨ omega.nat.preform.holds v q)
- omega.nat.preform.holds v (¬* p) = ¬omega.nat.preform.holds v p
- omega.nat.preform.holds v (t ≤* s) = (omega.nat.preterm.val v t ≤ omega.nat.preterm.val v s)
- omega.nat.preform.holds v (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
Return expr of proof that argument is free of subtractions
Fresh de Brujin index not used by any variable in argument
Equations
- (p ∧* q).fresh_index = max p.fresh_index q.fresh_index
- (p ∨* q).fresh_index = max p.fresh_index q.fresh_index
- (¬* p).fresh_index = p.fresh_index
- (t ≤* s).fresh_index = max t.fresh_index s.fresh_index
- (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
@[protected, instance]
Equations
theorem
omega.nat.univ_close_of_valid
{p : omega.nat.preform}
{m : ℕ}
{v : ℕ → ℕ} :
p.valid → omega.nat.univ_close p v m