Report #9 — Selected network and iterator behavior in ipnet 2.12.2
Aeneas be86ab0f1989 + patch 5067f5146882
160 verified claims · 3 findings
Overview
The selected IPv4, IPv6 and IpNet operations preserve the address supplied to a valid constructor, including host bits. new rejects prefixes longer than the address width; new_assert succeeds for valid prefixes. Network and broadcast return the lower and upper endpoints of the represented address set, while trunc replaces the stored address with its lower endpoint. These guarantees include /0 and full-width prefixes.
The selected contracts also describe masks, containment, supernets, sibling checks, address arithmetic, value comparisons and range and subnet iterator operations. Containment across address families is false. Sibling checks include a network compared with itself when its prefix is positive and the parent matches. The mapped iterator contracts specify their results and state transitions, including exhaustion and specified errors or modeled panic paths. The mapping lists the particular methods and their preconditions.
For both address families, actual-call subnet traces establish ordered, disjoint partitions and minimum block counts among finite canonical exact covers whose block prefixes are at least the requested prefix, for arbitrary raw endpoints and valid requested prefixes q ≤ 32 for IPv4 or q ≤ 128 for IPv6. Some range count and size contracts require a 64-bit platform; counts exceeding usize::MAX retain checked overflow behavior.
These claims concern the selected release bodies and contracts, not every API. Native tests and the optional-integration findings below are separate observations.
Findings (3)
The heapless feature does not select allocation-free serialization
IpNet schema rejects a serialized IPv4 network
APIs (151)
Functions
pub fn ip_mask_to_prefix(mask: std::net::IpAddr) -> Result<u8, crate::PrefixLenError>pub fn ipv4_mask_to_prefix(mask: std::net::Ipv4Addr) -> Result<u8, crate::PrefixLenError>pub fn ipv6_mask_to_prefix(mask: std::net::Ipv6Addr) -> Result<u8, crate::PrefixLenError>Associated functions
impl IpNet
pub fn new(ip: IpAddr, prefix_len: u8) -> Result<IpNet, PrefixLenError>pub const fn new_assert(ip: IpAddr, prefix_len: u8) -> IpNetpub fn with_netmask(ip: IpAddr, netmask: IpAddr) -> Result<IpNet, PrefixLenError>impl Ipv4AddrRange
pub fn new(start: Ipv4Addr, end: Ipv4Addr) -> Selfimpl Ipv4Net
pub const fn new(ip: Ipv4Addr, prefix_len: u8) -> Result<Ipv4Net, PrefixLenError>pub const fn new_assert(ip: Ipv4Addr, prefix_len: u8) -> Ipv4Netpub fn with_netmask(ip: Ipv4Addr, netmask: Ipv4Addr) -> Result<Ipv4Net, PrefixLenError>impl Ipv4Subnets
pub fn new(start: Ipv4Addr, end: Ipv4Addr, min_prefix_len: u8) -> Selfimpl Ipv6AddrRange
pub fn new(start: Ipv6Addr, end: Ipv6Addr) -> Selfimpl Ipv6Net
pub const fn new(ip: Ipv6Addr, prefix_len: u8) -> Result<Ipv6Net, PrefixLenError>pub const fn new_assert(ip: Ipv6Addr, prefix_len: u8) -> Ipv6Netpub fn with_netmask(ip: Ipv6Addr, netmask: Ipv6Addr) -> Result<Ipv6Net, PrefixLenError>impl Ipv6Subnets
pub fn new(start: Ipv6Addr, end: Ipv6Addr, min_prefix_len: u8) -> SelfMethods
impl IpNet
pub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>pub fn hostmask(self: &Self) -> IpAddrpub fn hosts(self: &Self) -> IpAddrRangepub fn is_sibling(self: &Self, other: &IpNet) -> boolpub fn max_prefix_len(self: &Self) -> u8pub fn netmask(self: &Self) -> IpAddrpub fn network(self: &Self) -> IpAddrpub fn prefix_len(self: &Self) -> u8pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<IpSubnets, PrefixLenError>pub fn supernet(self: &Self) -> Option<IpNet>pub fn trunc(self: &Self) -> IpNetimpl Ipv4Net
pub const fn addr(self: &Self) -> Ipv4Addrpub fn broadcast(self: &Self) -> Ipv4Addrpub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>pub fn hostmask(self: &Self) -> Ipv4Addrpub fn hosts(self: &Self) -> Ipv4AddrRangepub fn is_sibling(self: &Self, other: &Ipv4Net) -> boolpub const fn max_prefix_len(self: &Self) -> u8pub fn netmask(self: &Self) -> Ipv4Addrpub fn network(self: &Self) -> Ipv4Addrpub const fn prefix_len(self: &Self) -> u8pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<Ipv4Subnets, PrefixLenError>pub fn supernet(self: &Self) -> Option<Ipv4Net>pub fn trunc(self: &Self) -> Ipv4Netimpl Ipv6Net
pub const fn addr(self: &Self) -> Ipv6Addrpub fn broadcast(self: &Self) -> Ipv6Addrpub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>pub fn hostmask(self: &Self) -> Ipv6Addrpub fn hosts(self: &Self) -> Ipv6AddrRangepub fn is_sibling(self: &Self, other: &Ipv6Net) -> boolpub const fn max_prefix_len(self: &Self) -> u8pub fn netmask(self: &Self) -> Ipv6Addrpub fn network(self: &Self) -> Ipv6Addrpub const fn prefix_len(self: &Self) -> u8pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<Ipv6Subnets, PrefixLenError>pub fn supernet(self: &Self) -> Option<Ipv6Net>pub fn trunc(self: &Self) -> Ipv6NetTrait implementations
impl core::clone::Clone for …
fn clone11 implementations
impl core::cmp::Ord for …
fn cmp9 implementations
impl core::cmp::PartialEq for …
fn eq11 implementations
impl core::cmp::PartialOrd for …
fn partial_cmp9 implementations
impl core::convert::From<core::net::ip_addr::IpAddr> for IpNet
impl core::convert::From<core::net::ip_addr::Ipv4Addr> for Ipv4Net
impl core::convert::From<core::net::ip_addr::Ipv6Addr> for Ipv6Net
impl core::convert::From<ipnet::Ipv4AddrRange> for IpAddrRange
impl core::convert::From<ipnet::Ipv4Net> for IpNet
impl core::convert::From<ipnet::Ipv4Subnets> for IpSubnets
impl core::convert::From<ipnet::Ipv6AddrRange> for IpAddrRange
impl core::convert::From<ipnet::Ipv6Net> for IpNet
impl core::convert::From<ipnet::Ipv6Subnets> for IpSubnets
impl core::default::Default for …
impl core::iter::traits::double_ended::DoubleEndedIterator for …
fn next_back3 implementations
impl core::iter::traits::iterator::Iterator for …
fn count3 implementations
fn last3 implementations
fn max3 implementations
fn min3 implementations
fn next6 implementations
fn nth3 implementations
impl ipnet::IpAdd<u128> for core::net::ip_addr::Ipv6Addr
pub fn saturating_add(self: Self, rhs: u128) -> Ipv6Addrimpl ipnet::IpAdd<u32> for core::net::ip_addr::Ipv4Addr
pub fn saturating_add(self: Self, rhs: u32) -> Ipv4Addrimpl ipnet::IpBitAnd for …
impl ipnet::IpBitAnd<u128> for core::net::ip_addr::Ipv6Addr
impl ipnet::IpBitAnd<u32> for core::net::ip_addr::Ipv4Addr
impl ipnet::IpBitOr for …
impl ipnet::IpBitOr<u128> for core::net::ip_addr::Ipv6Addr
impl ipnet::IpBitOr<u32> for core::net::ip_addr::Ipv4Addr
impl ipnet::IpSub for …
fn saturating_sub2 implementations
impl ipnet::IpSub<u128> for core::net::ip_addr::Ipv6Addr
pub fn saturating_sub(self: Self, rhs: u128) -> Ipv6Addrimpl ipnet::IpSub<u32> for core::net::ip_addr::Ipv4Addr
pub fn saturating_sub(self: Self, rhs: u32) -> Ipv4AddrEvidence
https://github.com/keiichiw/crate-proofs/tree/6364881c457cf5494b026701c0c684cdaaf3896e
Reproduce
Aeneas be86ab0f1989 + patch 5067f5146882
Recorded toolchain sources and use
- aeneas (aeneas)
- https://github.com/AeneasVerif/aeneas
Official base:be86ab0f1989d04944292b345b24c435be3ad10a
Patch: ipnet/2.12.2/aeneas/profiles/default/patches/aeneas-runtime-ipv6-constructor.patch
SHA-256:5067f5146882aad7461109ff97e7be6bc0557c0b0211ffed07d22a051ffc14eb
Materialized tree:818b384f6f3d2c82f3d39a2205d3f443add1fc84 - charon (charon)
- https://github.com/AeneasVerif/charon
Official base:08d7c9d50144bd84848212c24701253585e90d1f
Patch: ipnet/2.12.2/aeneas/profiles/default/patches/charon-runtime-ipv6-matcher.patch
SHA-256:8ce7a0e21229fdc3a4ee0ddddcbd7bf6bebd865248a8bbacacc4711edcd62c9c
Materialized tree:8bc8af4729f6833de500e607b24dfd68847ca316 - lean (lean)
- leanprover/lean4:v4.35.0
- aeneas / lean_library: Lake dependency aeneas resolved to backends/lean
- aeneas / translator: not run
- charon / rust_frontend: not run
- lean / proof_checker: process executed — Lean (version 4.35.0, arm64-apple-darwin24.6.0, commit eb6cafb7290e8bd5f2937522d8d804f58f02bafc, Release)
Sources were restored and the Lean dependency was resolved. Rust → Lean translation was not rerun; this does not establish which translator produced the saved Lean. Dependency resolution does not mean every source definition was used. Version output does not authenticate a binary. These are the author's recorded observations; proofs.rs checks submitted consistency.
Run locally
git clone -- https://github.com/keiichiw/crate-proofs report-9-source-1
git -C report-9-source-1 checkout --detach 6364881c457cf5494b026701c0c684cdaaf3896e
git -C report-9-source-1 submodule update --init --recursive --checkout
cargo proofs prepare --manifest-path report-9-source-1/ipnet/2.12.2/Cargo.toml
cd report-9-source-1/ipnet/2.12.2/aeneas/profiles/default/proofs
lake --no-cache build +Proofs.AddrParseErrorValue +Proofs.Arithmetic +Proofs.BitOps +Proofs.Collections +Proofs.Contains +Proofs.Core +Proofs.IPv4Derived +Proofs.IPv4IteratorDerived +Proofs.IPv4MaskOps +Proofs.IPv4NetOps +Proofs.IPv4SubnetAll +Proofs.IPv6BitOps +Proofs.IPv6Default +Proofs.IPv6Derived +Proofs.IPv6MaskOps +Proofs.IPv6NetOps +Proofs.IPv6RangeBasic +Proofs.IPv6RangeSkips +Proofs.IPv6RangeSteps +Proofs.IPv6SubnetAll +Proofs.NewAssertInvalid +Proofs.PrefixLenErrorValue +Proofs.RangeMore +Proofs.RangeNext +Proofs.TaggedDefaultFrom +Proofs.TaggedDerived +Proofs.TaggedIPv4 +Proofs.TaggedIPv6 +Proofs.TaggedMask +Proofs.TaggedRange +Proofs.TaggedSubnets
printf '%s' 'import Aeneas
import Proofs.AddrParseErrorValue
import Proofs.Arithmetic
import Proofs.BitOps
import Proofs.Collections
import Proofs.Contains
import Proofs.Core
import Proofs.IPv4Derived
import Proofs.IPv4IteratorDerived
import Proofs.IPv4MaskOps
import Proofs.IPv4NetOps
import Proofs.IPv4SubnetAll
import Proofs.IPv6BitOps
import Proofs.IPv6Default
import Proofs.IPv6Derived
import Proofs.IPv6MaskOps
import Proofs.IPv6NetOps
import Proofs.IPv6RangeBasic
import Proofs.IPv6RangeSkips
import Proofs.IPv6RangeSteps
import Proofs.IPv6SubnetAll
import Proofs.NewAssertInvalid
import Proofs.PrefixLenErrorValue
import Proofs.RangeMore
import Proofs.RangeNext
import Proofs.TaggedDefaultFrom
import Proofs.TaggedDerived
import Proofs.TaggedIPv4
import Proofs.TaggedIPv6
import Proofs.TaggedMask
import Proofs.TaggedRange
import Proofs.TaggedSubnets
set_option pp.all true
set_option pp.universes true
set_option pp.explicit true
set_option pp.fullNames true
set_option pp.notation false
set_option pp.proofs true
set_option pp.deepTerms true
set_option pp.maxSteps 10000000
-- proofs.rs adapter for Lean 4.35.0 / Aeneas be86ab0f.
-- Uses Lean'\''s environment, Meta telescope and pretty-printer, never source parsing.
open Lean Meta Elab Command
namespace ProofsProbe
meta def moduleOf (env : Environment) (n : Name) : String :=
match env.getModuleIdxFor? n with
| some idx => env.header.moduleNames[idx.toNat]!.toString
| none => ""
meta def pretty (e : Expr) : MetaM String := do
let s := (← ppExpr e).pretty
if s.contains '\''⋯'\'' then
throwError "Lean display contains an omission marker (or literal ⋯); refusing an incomplete proposition"
if s.utf8ByteSize > 1000000 then throwError "Proposition exceeds 1,000,000-byte recording limit"
return s
-- The full statement stays explicit; the inspection view uses Lean notation.
meta def readable (e : Expr) : MetaM String :=
withOptions (fun o =>
let o := o.setBool `pp.all false
let o := o.setBool `pp.explicit false
let o := o.setBool `pp.universes false
o.setBool `pp.notation true) (pretty e)
-- Only a constant'\''s own tag grants a link; names in plain text are never guessed.
partial def segments (code : Widget.CodeWithInfos) (ref : Option Name := none) : Array Json :=
match code with
| .text text => #[Json.mkObj (([("text", toJson text)]) ++
(ref.toList.map fun n => ("ref", toJson n.toString)))]
| .append parts => parts.foldl (fun acc part => acc ++ segments part ref) #[]
| .tag info part =>
let ref := match info.info.val.info with
| .ofTermInfo ti => ti.expr.constName?
| _ => none
segments part ref
meta def readableFields (key : String) (e : Expr) : MetaM (List (String × Json)) := do
let text ← readable e
let base := [(key, toJson text)]
try
let code ← withOptions (fun o =>
let o := o.setBool `pp.all false
let o := o.setBool `pp.explicit false
let o := o.setBool `pp.universes false
let o := o.setBool `pp.notation true
o.setBool `pp.tagAppFns true) (Widget.ppExprTagged e)
let parts := segments code
let joined := String.join (parts.toList.map fun j =>
(j.getObjValAs? String "text").toOption.getD "")
if joined != text || parts.size > 10000 || joined.utf8ByteSize > 1000000 then
return base
return base ++ [(key ++ "_segments", toJson parts)]
catch _ => return base
meta def inspect (n : Name) (ty : Expr) (manual : Bool) : MetaM (Option Json) := do
let env ← getEnv
forallTelescope ty fun xs conclusion => do
let programExpr ← try
let normalized ← Aeneas.Utils.normalizeLetBindings conclusion
let (expr, _) ← Aeneas.Step.getStepSpecFunArgsExpr normalized
pure (some expr)
catch _ => pure none
if programExpr.isNone && !manual then return none
let full ← pretty ty
let program ← match programExpr with
| some expr => pure (toJson (← readable expr))
| none => pure Json.null
let head := toJson (programExpr.bind (·.getAppFn.constName?) |>.map Name.toString)
let mut binders := #[]
for x in xs do
let d ← x.fvarId!.getDecl
let prop ← isProp d.type
binders := binders.push (Json.mkObj ((← readableFields "type" d.type) ++ [
("name", toJson d.userName.toString),
("kind", toJson (if d.binderInfo.isInstImplicit then "instance" else if prop then "hypothesis" else "variable")),
("binder", toJson (if d.binderInfo.isInstImplicit then "instance" else if d.binderInfo.isExplicit then "explicit" else "implicit"))]))
if binders.size > 1000 then throwError "More than 1000 binders"
let some ranges ← findDeclarationRanges? n | throwError "Missing theorem source range: {n}"
let axioms ← Lean.collectAxioms n
let constants := ty.getUsedConstants
let mut definitions := #[]
for nm in constants.extract 0 100 do
let ranges ← findDeclarationRanges? nm
definitions := definitions.push (Json.mkObj [
("name", toJson nm.toString), ("module", toJson (moduleOf env nm)),
("source", match ranges with
| some r => Json.mkObj [("first_line", toJson r.range.pos.line), ("last_line", toJson r.range.endPos.line)]
| none => Json.null)])
return some (Json.mkObj ((← readableFields "conclusion" conclusion) ++ [
("version", toJson (1 : Nat)), ("theorem", toJson n.toString),
("module", toJson (moduleOf env n)), ("statement", toJson full),
("binders", toJson binders),
("program", program), ("program_head", head),
("axioms", toJson (axioms.map Name.toString)),
("first_line", toJson ranges.range.pos.line), ("last_line", toJson ranges.range.endPos.line),
("definitions", toJson definitions), ("definitions_truncated", toJson (decide (constants.size > 100))),
("translation_rerun", toJson false)]))
end ProofsProbe
run_cmd do
let manual : Array Name := #[`ipnet.ipnet.ipv4_new_spec, `NewAssertInvalid.ipv4_full_spec, `ipnet.ipnet.ipv4_addr_spec, `ipnet.ipnet.ipv4_prefix_len_spec, `ipnet.ipnet.ipv4_max_prefix_len_spec, `ipnet.ipnet.ipv6_new_spec, `NewAssertInvalid.ipv6_full_spec, `ipnet.ipnet.ipv6_addr_spec, `ipnet.ipnet.ipv6_prefix_len_spec, `ipnet.ipnet.ipv6_max_prefix_len_spec, `ipnet.ipnet.ip_new_spec, `NewAssertInvalid.tagged_full_spec, `ipnet.ipnet.ip_addr_spec, `ipnet.ipnet.ip_prefix_len_spec, `ipnet.ipnet.ip_max_prefix_len_spec, `ipnet.ipnet.from_ipv4_spec, `ipnet.ipnet.from_ipv6_spec, `ipnet.ipv4_range_new_spec, `ipnet.ipv6_range_new_spec, `ipnet.ipnet.ipv4_subnets_new_spec, `ipnet.ipnet.ipv6_subnets_new_spec, `ipnet.ipv4_netmask_nat_spec, `ipnet.ipv4_hostmask_nat_spec, `ipnet.ipv4_network_nat_spec, `ipnet.ipv4_broadcast_nat_spec, `ipnet.ipv4_trunc_nat_spec, `ipnet.ipv6_netmask_nat_spec, `ipnet.ipv6_hostmask_nat_spec, `ipnet.ipv6_network_nat_spec, `ipnet.ipv6_broadcast_nat_spec, `ipnet.ipv6_trunc_nat_spec, `ipnet.ip_netmask_nat_spec, `ipnet.ip_hostmask_nat_spec, `ipnet.ip_network_nat_spec, `ipnet.ip_broadcast_nat_spec, `ipnet.ip_trunc_nat_spec, `ipnet.ipv4_public_contains_addr_spec, `ipnet.ipv6_public_contains_addr_spec, `ipnet.ipv4_public_contains_net_spec, `ipnet.ipv6_public_contains_net_spec, `ipnet.ip_public_contains_addr_spec, `ipnet.ip_public_contains_net_spec, `RangeNext.range_next_spec, `RangeMore.range_next_back_spec, `RangeMore.range_nth_spec, `RangeMore.range_nth_back_spec, `RangeMore.range_count_spec, `RangeMore.range_size_hint_spec, `RangeMore.range_last_spec, `RangeMore.range_min_spec, `RangeMore.range_max_spec, `RangeMore.ipv4_saturating_sub_spec, `RangeMore.ipv4_saturating_sub_addr_spec, `IPv4NetOps.default_spec, `IPv4NetOps.from_ipv4_spec, `IPv4NetOps.hosts_spec, `IPv4NetOps.subnets_spec, `IPv4NetOps.supernet_spec, `IPv4NetOps.is_sibling_spec, `BitOps.ipv4_and_addr_spec, `BitOps.ipv4_and_u32_spec, `BitOps.ipv4_or_addr_spec, `BitOps.ipv4_or_u32_spec, `RangeNext.ipv4_saturating_add_spec, `IPv4MaskOps.ipv4_mask_to_prefix_spec, `IPv4MaskOps.with_netmask_spec, `IPv4SubnetAll.next_raw_spec, `IPv4Derived.clone_spec, `IPv4Derived.eq_spec, `IPv4Derived.cmp_spec, `IPv4Derived.partial_cmp_spec, `IPv4IteratorDerived.range_clone_spec, `IPv4IteratorDerived.range_eq_spec, `IPv4IteratorDerived.range_cmp_spec, `IPv4IteratorDerived.range_partial_cmp_spec, `IPv4IteratorDerived.subnets_clone_spec, `IPv4IteratorDerived.subnets_eq_spec, `IPv4IteratorDerived.subnets_cmp_spec, `IPv4IteratorDerived.subnets_partial_cmp_spec, `TaggedIPv4.from_ipv4_range_spec, `TaggedIPv4.from_ipv4_subnets_spec, `TaggedIPv4.from_ipv6_range_spec, `TaggedIPv4.from_ipv6_subnets_spec, `TaggedIPv4.hosts_v4_spec, `TaggedIPv4.subnets_v4_spec, `TaggedIPv4.supernet_v4_spec, `TaggedIPv4.is_sibling_v4_spec, `TaggedIPv4.is_sibling_v4_v6_spec, `TaggedIPv4.is_sibling_v6_v4_spec, `TaggedDefaultFrom.ipnet_default_spec, `TaggedDefaultFrom.ipnet_from_addr_spec, `TaggedDefaultFrom.ipv6_from_addr_spec, `IPv6NetOps.hosts_spec, `IPv6NetOps.subnets_spec, `IPv6NetOps.supernet_spec, `IPv6NetOps.is_sibling_spec, `TaggedIPv6.hosts_v6_spec, `TaggedIPv6.subnets_v6_spec, `TaggedIPv6.supernet_v6_spec, `TaggedIPv6.is_sibling_v6_spec, `IPv6Derived.net_clone_spec, `IPv6Derived.net_eq_spec, `IPv6Derived.net_cmp_spec, `IPv6Derived.net_partial_cmp_spec, `IPv6Derived.range_clone_spec, `IPv6Derived.range_eq_spec, `IPv6Derived.range_cmp_spec, `IPv6Derived.range_partial_cmp_spec, `IPv6Derived.subnets_clone_spec, `IPv6Derived.subnets_eq_spec, `IPv6Derived.subnets_cmp_spec, `IPv6Derived.subnets_partial_cmp_spec, `IPv6RangeBasic.last_spec, `IPv6RangeBasic.max_spec, `IPv6RangeBasic.min_spec, `IPv6RangeBasic.ipv6_saturating_sub_addr_spec, `IPv6RangeBasic.count_spec, `IPv6RangeSteps.ipv6_saturating_add_spec, `IPv6RangeSteps.ipv6_saturating_sub_spec, `IPv6RangeSteps.range_next_spec, `IPv6RangeSteps.range_next_back_spec, `IPv6RangeSkips.size_hint_spec, `IPv6RangeSkips.nth_remaining_spec, `IPv6RangeSkips.nth_back_remaining_spec, `IPv6MaskOps.ipv6_mask_to_prefix_spec, `IPv6MaskOps.with_netmask_spec, `IPv6BitOps.ipv6_and_addr_spec, `IPv6BitOps.ipv6_and_u128_spec, `IPv6BitOps.ipv6_or_addr_spec, `IPv6BitOps.ipv6_or_u128_spec, `IPv6Default.default_spec, `IPv6SubnetAll.next_raw_spec, `TaggedSubnets.next_raw_spec, `TaggedRange.next_spec, `TaggedRange.next_back_spec, `TaggedRange.nth_spec, `TaggedRange.nth_back_spec, `TaggedRange.last_spec, `TaggedRange.max_spec, `TaggedRange.min_spec, `TaggedRange.size_hint_spec, `TaggedRange.count_spec, `TaggedMask.ip_mask_to_prefix_spec, `TaggedMask.with_netmask_spec, `TaggedDerived.net_clone_spec, `TaggedDerived.net_eq_spec, `TaggedDerived.net_cmp_spec, `TaggedDerived.net_partial_cmp_spec, `TaggedDerived.range_clone_spec, `TaggedDerived.range_eq_spec, `TaggedDerived.range_cmp_spec, `TaggedDerived.range_partial_cmp_spec, `TaggedDerived.subnets_clone_spec, `TaggedDerived.subnets_eq_spec, `TaggedDerived.subnets_cmp_spec, `TaggedDerived.subnets_partial_cmp_spec, `PrefixLenErrorValue.clone_spec, `PrefixLenErrorValue.eq_spec, `AddrParseErrorValue.clone_spec, `AddrParseErrorValue.eq_spec]
let localModules : Array String := #[]
let roots : Array Name := #[]
let env ← getEnv
let mut closure : Array Name := #[]
let mut pending := roots.toList
while !pending.isEmpty do
let m := pending.head!
pending := pending.tail!
if !closure.contains m then
closure := closure.push m
if let some idx := env.header.moduleNames.findIdx? (· == m) then
pending := (env.header.moduleData[idx]!.imports.toList.map (·.module)) ++ pending
let scope := closure.filter (fun m => localModules.contains m.toString)
for n in manual do
match env.find? n with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: {n}"
for (n, ci) in env.constants.toList do
let explicit := manual.contains n
if explicit || scope.contains (ProofsProbe.moduleOf env n).toName then
if let .thmInfo th := ci then
let result ← liftTermElabM <| ProofsProbe.inspect n th.type explicit
if let some value := result then
liftIO <| IO.println ("proofs.rs:formal:" ++ value.compress)
run_cmd do
let theorem_name := `RangeNext.ipv4_saturating_add_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeNext.ipv4_saturating_add_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeNext.ipv4_saturating_add_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeNext.ipv4_saturating_add_spec"
run_cmd do
let theorem_name := `BitOps.ipv4_and_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: BitOps.ipv4_and_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in BitOps.ipv4_and_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:BitOps.ipv4_and_addr_spec"
run_cmd do
let theorem_name := `BitOps.ipv4_and_u32_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: BitOps.ipv4_and_u32_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in BitOps.ipv4_and_u32_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:BitOps.ipv4_and_u32_spec"
run_cmd do
let theorem_name := `BitOps.ipv4_or_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: BitOps.ipv4_or_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in BitOps.ipv4_or_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:BitOps.ipv4_or_addr_spec"
run_cmd do
let theorem_name := `BitOps.ipv4_or_u32_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: BitOps.ipv4_or_u32_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in BitOps.ipv4_or_u32_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:BitOps.ipv4_or_u32_spec"
run_cmd do
let theorem_name := `RangeMore.ipv4_saturating_sub_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.ipv4_saturating_sub_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.ipv4_saturating_sub_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.ipv4_saturating_sub_addr_spec"
run_cmd do
let theorem_name := `RangeMore.ipv4_saturating_sub_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.ipv4_saturating_sub_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.ipv4_saturating_sub_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.ipv4_saturating_sub_spec"
run_cmd do
let theorem_name := `IPv6RangeSteps.ipv6_saturating_add_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSteps.ipv6_saturating_add_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSteps.ipv6_saturating_add_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSteps.ipv6_saturating_add_spec"
run_cmd do
let theorem_name := `IPv6BitOps.ipv6_and_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6BitOps.ipv6_and_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6BitOps.ipv6_and_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6BitOps.ipv6_and_addr_spec"
run_cmd do
let theorem_name := `IPv6BitOps.ipv6_and_u128_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6BitOps.ipv6_and_u128_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6BitOps.ipv6_and_u128_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6BitOps.ipv6_and_u128_spec"
run_cmd do
let theorem_name := `IPv6BitOps.ipv6_or_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6BitOps.ipv6_or_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6BitOps.ipv6_or_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6BitOps.ipv6_or_addr_spec"
run_cmd do
let theorem_name := `IPv6BitOps.ipv6_or_u128_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6BitOps.ipv6_or_u128_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6BitOps.ipv6_or_u128_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6BitOps.ipv6_or_u128_spec"
run_cmd do
let theorem_name := `IPv6RangeBasic.ipv6_saturating_sub_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeBasic.ipv6_saturating_sub_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeBasic.ipv6_saturating_sub_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeBasic.ipv6_saturating_sub_addr_spec"
run_cmd do
let theorem_name := `IPv6RangeSteps.ipv6_saturating_sub_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSteps.ipv6_saturating_sub_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSteps.ipv6_saturating_sub_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSteps.ipv6_saturating_sub_spec"
run_cmd do
let theorem_name := `AddrParseErrorValue.clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: AddrParseErrorValue.clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in AddrParseErrorValue.clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:AddrParseErrorValue.clone_spec"
run_cmd do
let theorem_name := `AddrParseErrorValue.eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: AddrParseErrorValue.eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in AddrParseErrorValue.eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:AddrParseErrorValue.eq_spec"
run_cmd do
let theorem_name := `TaggedDerived.range_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.range_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.range_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.range_clone_spec"
run_cmd do
let theorem_name := `TaggedRange.next_back_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.next_back_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.next_back_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.next_back_spec"
run_cmd do
let theorem_name := `TaggedRange.nth_back_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.nth_back_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.nth_back_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.nth_back_spec"
run_cmd do
let theorem_name := `TaggedIPv4.from_ipv4_range_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.from_ipv4_range_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.from_ipv4_range_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.from_ipv4_range_spec"
run_cmd do
let theorem_name := `TaggedIPv4.from_ipv6_range_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.from_ipv6_range_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.from_ipv6_range_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.from_ipv6_range_spec"
run_cmd do
let theorem_name := `TaggedRange.count_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.count_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.count_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.count_spec"
run_cmd do
let theorem_name := `TaggedRange.last_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.last_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.last_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.last_spec"
run_cmd do
let theorem_name := `TaggedRange.max_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.max_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.max_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.max_spec"
run_cmd do
let theorem_name := `TaggedRange.min_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.min_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.min_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.min_spec"
run_cmd do
let theorem_name := `TaggedRange.next_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.next_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.next_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.next_spec"
run_cmd do
let theorem_name := `TaggedRange.nth_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.nth_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.nth_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.nth_spec"
run_cmd do
let theorem_name := `TaggedRange.size_hint_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedRange.size_hint_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedRange.size_hint_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedRange.size_hint_spec"
run_cmd do
let theorem_name := `TaggedDerived.range_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.range_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.range_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.range_cmp_spec"
run_cmd do
let theorem_name := `TaggedDerived.range_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.range_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.range_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.range_eq_spec"
run_cmd do
let theorem_name := `TaggedDerived.range_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.range_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.range_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.range_partial_cmp_spec"
run_cmd do
let theorem_name := `TaggedDerived.net_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.net_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.net_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.net_clone_spec"
run_cmd do
let theorem_name := `TaggedDefaultFrom.ipnet_default_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDefaultFrom.ipnet_default_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDefaultFrom.ipnet_default_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDefaultFrom.ipnet_default_spec"
run_cmd do
let theorem_name := `TaggedDefaultFrom.ipnet_from_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDefaultFrom.ipnet_from_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDefaultFrom.ipnet_from_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDefaultFrom.ipnet_from_addr_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.from_ipv4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.from_ipv4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.from_ipv4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.from_ipv4_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.from_ipv6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.from_ipv6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.from_ipv6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.from_ipv6_spec"
run_cmd do
let theorem_name := `TaggedDerived.net_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.net_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.net_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.net_cmp_spec"
run_cmd do
let theorem_name := `TaggedDerived.net_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.net_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.net_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.net_eq_spec"
run_cmd do
let theorem_name := `TaggedDerived.net_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.net_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.net_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.net_partial_cmp_spec"
run_cmd do
let theorem_name := `TaggedDerived.subnets_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.subnets_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.subnets_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.subnets_clone_spec"
run_cmd do
let theorem_name := `TaggedIPv4.from_ipv4_subnets_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.from_ipv4_subnets_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.from_ipv4_subnets_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.from_ipv4_subnets_spec"
run_cmd do
let theorem_name := `TaggedIPv4.from_ipv6_subnets_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.from_ipv6_subnets_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.from_ipv6_subnets_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.from_ipv6_subnets_spec"
run_cmd do
let theorem_name := `TaggedSubnets.next_raw_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedSubnets.next_raw_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedSubnets.next_raw_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedSubnets.next_raw_spec"
run_cmd do
let theorem_name := `TaggedDerived.subnets_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.subnets_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.subnets_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.subnets_cmp_spec"
run_cmd do
let theorem_name := `TaggedDerived.subnets_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.subnets_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.subnets_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.subnets_eq_spec"
run_cmd do
let theorem_name := `TaggedDerived.subnets_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDerived.subnets_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDerived.subnets_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDerived.subnets_partial_cmp_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.range_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.range_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.range_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.range_clone_spec"
run_cmd do
let theorem_name := `RangeMore.range_next_back_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_next_back_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_next_back_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_next_back_spec"
run_cmd do
let theorem_name := `RangeMore.range_nth_back_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_nth_back_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_nth_back_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_nth_back_spec"
run_cmd do
let theorem_name := `RangeMore.range_count_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_count_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_count_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_count_spec"
run_cmd do
let theorem_name := `RangeMore.range_last_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_last_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_last_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_last_spec"
run_cmd do
let theorem_name := `RangeMore.range_max_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_max_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_max_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_max_spec"
run_cmd do
let theorem_name := `RangeMore.range_min_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_min_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_min_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_min_spec"
run_cmd do
let theorem_name := `RangeNext.range_next_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeNext.range_next_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeNext.range_next_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeNext.range_next_spec"
run_cmd do
let theorem_name := `RangeMore.range_nth_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_nth_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_nth_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_nth_spec"
run_cmd do
let theorem_name := `RangeMore.range_size_hint_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: RangeMore.range_size_hint_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in RangeMore.range_size_hint_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:RangeMore.range_size_hint_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.range_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.range_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.range_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.range_cmp_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.range_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.range_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.range_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.range_eq_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.range_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.range_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.range_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.range_partial_cmp_spec"
run_cmd do
let theorem_name := `IPv4Derived.clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4Derived.clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4Derived.clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4Derived.clone_spec"
run_cmd do
let theorem_name := `IPv4NetOps.default_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.default_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.default_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.default_spec"
run_cmd do
let theorem_name := `IPv4NetOps.from_ipv4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.from_ipv4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.from_ipv4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.from_ipv4_spec"
run_cmd do
let theorem_name := `IPv4Derived.cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4Derived.cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4Derived.cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4Derived.cmp_spec"
run_cmd do
let theorem_name := `IPv4Derived.eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4Derived.eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4Derived.eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4Derived.eq_spec"
run_cmd do
let theorem_name := `IPv4Derived.partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4Derived.partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4Derived.partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4Derived.partial_cmp_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.subnets_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.subnets_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.subnets_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.subnets_clone_spec"
run_cmd do
let theorem_name := `IPv4SubnetAll.next_raw_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4SubnetAll.next_raw_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4SubnetAll.next_raw_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4SubnetAll.next_raw_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.subnets_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.subnets_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.subnets_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.subnets_cmp_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.subnets_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.subnets_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.subnets_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.subnets_eq_spec"
run_cmd do
let theorem_name := `IPv4IteratorDerived.subnets_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4IteratorDerived.subnets_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4IteratorDerived.subnets_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4IteratorDerived.subnets_partial_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.range_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.range_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.range_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.range_clone_spec"
run_cmd do
let theorem_name := `IPv6RangeSteps.range_next_back_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSteps.range_next_back_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSteps.range_next_back_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSteps.range_next_back_spec"
run_cmd do
let theorem_name := `IPv6RangeSkips.nth_back_remaining_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSkips.nth_back_remaining_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSkips.nth_back_remaining_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSkips.nth_back_remaining_spec"
run_cmd do
let theorem_name := `IPv6RangeBasic.count_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeBasic.count_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeBasic.count_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeBasic.count_spec"
run_cmd do
let theorem_name := `IPv6RangeBasic.last_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeBasic.last_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeBasic.last_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeBasic.last_spec"
run_cmd do
let theorem_name := `IPv6RangeBasic.max_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeBasic.max_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeBasic.max_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeBasic.max_spec"
run_cmd do
let theorem_name := `IPv6RangeBasic.min_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeBasic.min_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeBasic.min_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeBasic.min_spec"
run_cmd do
let theorem_name := `IPv6RangeSteps.range_next_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSteps.range_next_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSteps.range_next_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSteps.range_next_spec"
run_cmd do
let theorem_name := `IPv6RangeSkips.nth_remaining_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSkips.nth_remaining_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSkips.nth_remaining_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSkips.nth_remaining_spec"
run_cmd do
let theorem_name := `IPv6RangeSkips.size_hint_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6RangeSkips.size_hint_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6RangeSkips.size_hint_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6RangeSkips.size_hint_spec"
run_cmd do
let theorem_name := `IPv6Derived.range_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.range_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.range_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.range_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.range_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.range_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.range_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.range_eq_spec"
run_cmd do
let theorem_name := `IPv6Derived.range_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.range_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.range_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.range_partial_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.net_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.net_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.net_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.net_clone_spec"
run_cmd do
let theorem_name := `IPv6Default.default_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Default.default_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Default.default_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Default.default_spec"
run_cmd do
let theorem_name := `TaggedDefaultFrom.ipv6_from_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedDefaultFrom.ipv6_from_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedDefaultFrom.ipv6_from_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedDefaultFrom.ipv6_from_addr_spec"
run_cmd do
let theorem_name := `IPv6Derived.net_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.net_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.net_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.net_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.net_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.net_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.net_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.net_eq_spec"
run_cmd do
let theorem_name := `IPv6Derived.net_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.net_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.net_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.net_partial_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.subnets_clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.subnets_clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.subnets_clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.subnets_clone_spec"
run_cmd do
let theorem_name := `IPv6SubnetAll.next_raw_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6SubnetAll.next_raw_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6SubnetAll.next_raw_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6SubnetAll.next_raw_spec"
run_cmd do
let theorem_name := `IPv6Derived.subnets_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.subnets_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.subnets_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.subnets_cmp_spec"
run_cmd do
let theorem_name := `IPv6Derived.subnets_eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.subnets_eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.subnets_eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.subnets_eq_spec"
run_cmd do
let theorem_name := `IPv6Derived.subnets_partial_cmp_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6Derived.subnets_partial_cmp_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6Derived.subnets_partial_cmp_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6Derived.subnets_partial_cmp_spec"
run_cmd do
let theorem_name := `PrefixLenErrorValue.clone_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: PrefixLenErrorValue.clone_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in PrefixLenErrorValue.clone_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:PrefixLenErrorValue.clone_spec"
run_cmd do
let theorem_name := `PrefixLenErrorValue.eq_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: PrefixLenErrorValue.eq_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in PrefixLenErrorValue.eq_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:PrefixLenErrorValue.eq_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ip_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ip_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ip_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ip_addr_spec"
run_cmd do
let theorem_name := `ipnet.ip_broadcast_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_broadcast_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_broadcast_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_broadcast_nat_spec"
run_cmd do
let theorem_name := `ipnet.ip_public_contains_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_public_contains_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_public_contains_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_public_contains_addr_spec"
run_cmd do
let theorem_name := `ipnet.ip_public_contains_net_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_public_contains_net_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_public_contains_net_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_public_contains_net_spec"
run_cmd do
let theorem_name := `ipnet.ip_hostmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_hostmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_hostmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_hostmask_nat_spec"
run_cmd do
let theorem_name := `TaggedIPv6.hosts_v6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv6.hosts_v6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv6.hosts_v6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv6.hosts_v6_spec"
run_cmd do
let theorem_name := `TaggedIPv4.hosts_v4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.hosts_v4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.hosts_v4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.hosts_v4_spec"
run_cmd do
let theorem_name := `TaggedIPv4.is_sibling_v6_v4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.is_sibling_v6_v4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.is_sibling_v6_v4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.is_sibling_v6_v4_spec"
run_cmd do
let theorem_name := `TaggedIPv6.is_sibling_v6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv6.is_sibling_v6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv6.is_sibling_v6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv6.is_sibling_v6_spec"
run_cmd do
let theorem_name := `TaggedIPv4.is_sibling_v4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.is_sibling_v4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.is_sibling_v4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.is_sibling_v4_spec"
run_cmd do
let theorem_name := `TaggedIPv4.is_sibling_v4_v6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.is_sibling_v4_v6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.is_sibling_v4_v6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.is_sibling_v4_v6_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ip_max_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ip_max_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ip_max_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ip_max_prefix_len_spec"
run_cmd do
let theorem_name := `ipnet.ip_netmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_netmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_netmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_netmask_nat_spec"
run_cmd do
let theorem_name := `ipnet.ip_network_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_network_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_network_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_network_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ip_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ip_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ip_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ip_new_spec"
run_cmd do
let theorem_name := `NewAssertInvalid.tagged_full_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: NewAssertInvalid.tagged_full_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in NewAssertInvalid.tagged_full_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:NewAssertInvalid.tagged_full_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ip_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ip_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ip_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ip_prefix_len_spec"
run_cmd do
let theorem_name := `TaggedIPv6.subnets_v6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv6.subnets_v6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv6.subnets_v6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv6.subnets_v6_spec"
run_cmd do
let theorem_name := `TaggedIPv4.subnets_v4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.subnets_v4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.subnets_v4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.subnets_v4_spec"
run_cmd do
let theorem_name := `TaggedIPv6.supernet_v6_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv6.supernet_v6_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv6.supernet_v6_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv6.supernet_v6_spec"
run_cmd do
let theorem_name := `TaggedIPv4.supernet_v4_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedIPv4.supernet_v4_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedIPv4.supernet_v4_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedIPv4.supernet_v4_spec"
run_cmd do
let theorem_name := `ipnet.ip_trunc_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ip_trunc_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ip_trunc_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ip_trunc_nat_spec"
run_cmd do
let theorem_name := `TaggedMask.with_netmask_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedMask.with_netmask_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedMask.with_netmask_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedMask.with_netmask_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_range_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_range_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_range_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_range_new_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv4_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv4_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv4_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv4_addr_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_broadcast_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_broadcast_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_broadcast_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_broadcast_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_public_contains_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_public_contains_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_public_contains_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_public_contains_addr_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_public_contains_net_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_public_contains_net_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_public_contains_net_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_public_contains_net_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_hostmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_hostmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_hostmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_hostmask_nat_spec"
run_cmd do
let theorem_name := `IPv4NetOps.hosts_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.hosts_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.hosts_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.hosts_spec"
run_cmd do
let theorem_name := `IPv4NetOps.is_sibling_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.is_sibling_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.is_sibling_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.is_sibling_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv4_max_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv4_max_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv4_max_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv4_max_prefix_len_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_netmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_netmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_netmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_netmask_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_network_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_network_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_network_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_network_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv4_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv4_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv4_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv4_new_spec"
run_cmd do
let theorem_name := `NewAssertInvalid.ipv4_full_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: NewAssertInvalid.ipv4_full_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in NewAssertInvalid.ipv4_full_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:NewAssertInvalid.ipv4_full_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv4_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv4_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv4_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv4_prefix_len_spec"
run_cmd do
let theorem_name := `IPv4NetOps.subnets_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.subnets_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.subnets_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.subnets_spec"
run_cmd do
let theorem_name := `IPv4NetOps.supernet_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4NetOps.supernet_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4NetOps.supernet_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4NetOps.supernet_spec"
run_cmd do
let theorem_name := `ipnet.ipv4_trunc_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv4_trunc_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv4_trunc_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv4_trunc_nat_spec"
run_cmd do
let theorem_name := `IPv4MaskOps.with_netmask_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4MaskOps.with_netmask_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4MaskOps.with_netmask_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4MaskOps.with_netmask_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv4_subnets_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv4_subnets_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv4_subnets_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv4_subnets_new_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_range_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_range_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_range_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_range_new_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv6_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv6_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv6_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv6_addr_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_broadcast_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_broadcast_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_broadcast_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_broadcast_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_public_contains_addr_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_public_contains_addr_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_public_contains_addr_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_public_contains_addr_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_public_contains_net_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_public_contains_net_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_public_contains_net_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_public_contains_net_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_hostmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_hostmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_hostmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_hostmask_nat_spec"
run_cmd do
let theorem_name := `IPv6NetOps.hosts_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6NetOps.hosts_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6NetOps.hosts_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6NetOps.hosts_spec"
run_cmd do
let theorem_name := `IPv6NetOps.is_sibling_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6NetOps.is_sibling_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6NetOps.is_sibling_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6NetOps.is_sibling_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv6_max_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv6_max_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv6_max_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv6_max_prefix_len_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_netmask_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_netmask_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_netmask_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_netmask_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_network_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_network_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_network_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_network_nat_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv6_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv6_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv6_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv6_new_spec"
run_cmd do
let theorem_name := `NewAssertInvalid.ipv6_full_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: NewAssertInvalid.ipv6_full_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in NewAssertInvalid.ipv6_full_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:NewAssertInvalid.ipv6_full_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv6_prefix_len_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv6_prefix_len_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv6_prefix_len_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv6_prefix_len_spec"
run_cmd do
let theorem_name := `IPv6NetOps.subnets_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6NetOps.subnets_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6NetOps.subnets_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6NetOps.subnets_spec"
run_cmd do
let theorem_name := `IPv6NetOps.supernet_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6NetOps.supernet_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6NetOps.supernet_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6NetOps.supernet_spec"
run_cmd do
let theorem_name := `ipnet.ipv6_trunc_nat_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipv6_trunc_nat_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipv6_trunc_nat_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipv6_trunc_nat_spec"
run_cmd do
let theorem_name := `IPv6MaskOps.with_netmask_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6MaskOps.with_netmask_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6MaskOps.with_netmask_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6MaskOps.with_netmask_spec"
run_cmd do
let theorem_name := `ipnet.ipnet.ipv6_subnets_new_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: ipnet.ipnet.ipv6_subnets_new_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in ipnet.ipnet.ipv6_subnets_new_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:ipnet.ipnet.ipv6_subnets_new_spec"
run_cmd do
let theorem_name := `TaggedMask.ip_mask_to_prefix_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: TaggedMask.ip_mask_to_prefix_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in TaggedMask.ip_mask_to_prefix_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:TaggedMask.ip_mask_to_prefix_spec"
run_cmd do
let theorem_name := `IPv4MaskOps.ipv4_mask_to_prefix_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv4MaskOps.ipv4_mask_to_prefix_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv4MaskOps.ipv4_mask_to_prefix_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv4MaskOps.ipv4_mask_to_prefix_spec"
run_cmd do
let theorem_name := `IPv6MaskOps.ipv6_mask_to_prefix_spec
match (← getEnv).find? theorem_name with
| some (.thmInfo _) => pure ()
| _ => throwError "Expected a theorem: IPv6MaskOps.ipv6_mask_to_prefix_spec"
let axioms ← Lean.collectAxioms theorem_name
for ax in axioms do
unless [``propext, ``Classical.choice, ``Quot.sound].contains ax do
throwError "Unapproved axiom in IPv6MaskOps.ipv6_mask_to_prefix_spec: {ax}"
liftIO <| IO.println "proofs.rs:checked:IPv6MaskOps.ipv6_mask_to_prefix_spec"
' | lake env lean --stdinSource on GitHub · SARIF with logs (.json)
Recorded run
Completed · 160 checks passed · 0 failed
| Check | Result | Claim |
|---|---|---|
| Lean checked theorem RangeNext.ipv4_saturating_add_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #1 |
| Lean checked theorem BitOps.ipv4_and_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #2 |
| Lean checked theorem BitOps.ipv4_and_u32_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #3 |
| Lean checked theorem BitOps.ipv4_or_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #4 |
| Lean checked theorem BitOps.ipv4_or_u32_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #5 |
| Lean checked theorem RangeMore.ipv4_saturating_sub_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #6 |
| Lean checked theorem RangeMore.ipv4_saturating_sub_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #7 |
| Lean checked theorem IPv6RangeSteps.ipv6_saturating_add_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #8 |
| Lean checked theorem IPv6BitOps.ipv6_and_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #9 |
| Lean checked theorem IPv6BitOps.ipv6_and_u128_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #10 |
| Lean checked theorem IPv6BitOps.ipv6_or_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #11 |
| Lean checked theorem IPv6BitOps.ipv6_or_u128_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #12 |
| Lean checked theorem IPv6RangeBasic.ipv6_saturating_sub_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #13 |
| Lean checked theorem IPv6RangeSteps.ipv6_saturating_sub_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #14 |
| Lean checked theorem AddrParseErrorValue.clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #15 |
| Lean checked theorem AddrParseErrorValue.eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #16 |
| Lean checked theorem TaggedDerived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #17 |
| Lean checked theorem TaggedRange.next_back_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #18 |
| Lean checked theorem TaggedRange.nth_back_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #19 |
| Lean checked theorem TaggedIPv4.from_ipv4_range_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #20 |
| Lean checked theorem TaggedIPv4.from_ipv6_range_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #21 |
| Lean checked theorem TaggedRange.count_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #22 |
| Lean checked theorem TaggedRange.last_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #23 |
| Lean checked theorem TaggedRange.max_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #24 |
| Lean checked theorem TaggedRange.min_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #25 |
| Lean checked theorem TaggedRange.next_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #26 |
| Lean checked theorem TaggedRange.nth_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #27 |
| Lean checked theorem TaggedRange.size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #28 |
| Lean checked theorem TaggedDerived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #29 |
| Lean checked theorem TaggedDerived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #30 |
| Lean checked theorem TaggedDerived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #31 |
| Lean checked theorem TaggedDerived.net_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #32 |
| Lean checked theorem TaggedDefaultFrom.ipnet_default_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #33 |
| Lean checked theorem TaggedDefaultFrom.ipnet_from_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #34 |
| Lean checked theorem ipnet.ipnet.from_ipv4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #35 |
| Lean checked theorem ipnet.ipnet.from_ipv6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #36 |
| Lean checked theorem TaggedDerived.net_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #37 |
| Lean checked theorem TaggedDerived.net_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #38 |
| Lean checked theorem TaggedDerived.net_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #39 |
| Lean checked theorem TaggedDerived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #40 |
| Lean checked theorem TaggedIPv4.from_ipv4_subnets_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #41 |
| Lean checked theorem TaggedIPv4.from_ipv6_subnets_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #42 |
| Lean checked theorem TaggedSubnets.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #43 |
| Lean checked theorem TaggedDerived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #44 |
| Lean checked theorem TaggedDerived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #45 |
| Lean checked theorem TaggedDerived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #46 |
| Lean checked theorem IPv4IteratorDerived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #47 |
| Lean checked theorem RangeMore.range_next_back_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #48 |
| Lean checked theorem RangeMore.range_nth_back_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #49 |
| Lean checked theorem RangeMore.range_count_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #50 |
| Lean checked theorem RangeMore.range_last_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #51 |
| Lean checked theorem RangeMore.range_max_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #52 |
| Lean checked theorem RangeMore.range_min_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #53 |
| Lean checked theorem RangeNext.range_next_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #54 |
| Lean checked theorem RangeMore.range_nth_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #55 |
| Lean checked theorem RangeMore.range_size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #56 |
| Lean checked theorem IPv4IteratorDerived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #57 |
| Lean checked theorem IPv4IteratorDerived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #58 |
| Lean checked theorem IPv4IteratorDerived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #59 |
| Lean checked theorem IPv4Derived.clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #60 |
| Lean checked theorem IPv4NetOps.default_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #61 |
| Lean checked theorem IPv4NetOps.from_ipv4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #62 |
| Lean checked theorem IPv4Derived.cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #63 |
| Lean checked theorem IPv4Derived.eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #64 |
| Lean checked theorem IPv4Derived.partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #65 |
| Lean checked theorem IPv4IteratorDerived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #66 |
| Lean checked theorem IPv4SubnetAll.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #67 |
| Lean checked theorem IPv4IteratorDerived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #68 |
| Lean checked theorem IPv4IteratorDerived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #69 |
| Lean checked theorem IPv4IteratorDerived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #70 |
| Lean checked theorem IPv6Derived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #71 |
| Lean checked theorem IPv6RangeSteps.range_next_back_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #72 |
| Lean checked theorem IPv6RangeSkips.nth_back_remaining_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #73 |
| Lean checked theorem IPv6RangeBasic.count_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #74 |
| Lean checked theorem IPv6RangeBasic.last_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #75 |
| Lean checked theorem IPv6RangeBasic.max_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #76 |
| Lean checked theorem IPv6RangeBasic.min_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #77 |
| Lean checked theorem IPv6RangeSteps.range_next_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #78 |
| Lean checked theorem IPv6RangeSkips.nth_remaining_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #79 |
| Lean checked theorem IPv6RangeSkips.size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #80 |
| Lean checked theorem IPv6Derived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #81 |
| Lean checked theorem IPv6Derived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #82 |
| Lean checked theorem IPv6Derived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #83 |
| Lean checked theorem IPv6Derived.net_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #84 |
| Lean checked theorem IPv6Default.default_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #85 |
| Lean checked theorem TaggedDefaultFrom.ipv6_from_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #86 |
| Lean checked theorem IPv6Derived.net_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #87 |
| Lean checked theorem IPv6Derived.net_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #88 |
| Lean checked theorem IPv6Derived.net_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #89 |
| Lean checked theorem IPv6Derived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #90 |
| Lean checked theorem IPv6SubnetAll.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #91 |
| Lean checked theorem IPv6Derived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #92 |
| Lean checked theorem IPv6Derived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #93 |
| Lean checked theorem IPv6Derived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #94 |
| Lean checked theorem PrefixLenErrorValue.clone_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #95 |
| Lean checked theorem PrefixLenErrorValue.eq_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #96 |
| Lean checked theorem ipnet.ipnet.ip_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #97 |
| Lean checked theorem ipnet.ip_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #98 |
| Lean checked theorem ipnet.ip_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #99 |
| Lean checked theorem ipnet.ip_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #100 |
| Lean checked theorem ipnet.ip_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #101 |
| Lean checked theorem TaggedIPv6.hosts_v6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #102 |
| Lean checked theorem TaggedIPv4.hosts_v4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #103 |
| Lean checked theorem TaggedIPv4.is_sibling_v6_v4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #104 |
| Lean checked theorem TaggedIPv6.is_sibling_v6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #105 |
| Lean checked theorem TaggedIPv4.is_sibling_v4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #106 |
| Lean checked theorem TaggedIPv4.is_sibling_v4_v6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #107 |
| Lean checked theorem ipnet.ipnet.ip_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #108 |
| Lean checked theorem ipnet.ip_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #109 |
| Lean checked theorem ipnet.ip_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #110 |
| Lean checked theorem ipnet.ipnet.ip_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #111 |
| Lean checked theorem NewAssertInvalid.tagged_full_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #112 |
| Lean checked theorem ipnet.ipnet.ip_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #113 |
| Lean checked theorem TaggedIPv6.subnets_v6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #114 |
| Lean checked theorem TaggedIPv4.subnets_v4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #115 |
| Lean checked theorem TaggedIPv6.supernet_v6_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #116 |
| Lean checked theorem TaggedIPv4.supernet_v4_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #117 |
| Lean checked theorem ipnet.ip_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #118 |
| Lean checked theorem TaggedMask.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #119 |
| Lean checked theorem ipnet.ipv4_range_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #120 |
| Lean checked theorem ipnet.ipnet.ipv4_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #121 |
| Lean checked theorem ipnet.ipv4_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #122 |
| Lean checked theorem ipnet.ipv4_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #123 |
| Lean checked theorem ipnet.ipv4_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #124 |
| Lean checked theorem ipnet.ipv4_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #125 |
| Lean checked theorem IPv4NetOps.hosts_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #126 |
| Lean checked theorem IPv4NetOps.is_sibling_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #127 |
| Lean checked theorem ipnet.ipnet.ipv4_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #128 |
| Lean checked theorem ipnet.ipv4_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #129 |
| Lean checked theorem ipnet.ipv4_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #130 |
| Lean checked theorem ipnet.ipnet.ipv4_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #131 |
| Lean checked theorem NewAssertInvalid.ipv4_full_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #132 |
| Lean checked theorem ipnet.ipnet.ipv4_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #133 |
| Lean checked theorem IPv4NetOps.subnets_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #134 |
| Lean checked theorem IPv4NetOps.supernet_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #135 |
| Lean checked theorem ipnet.ipv4_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #136 |
| Lean checked theorem IPv4MaskOps.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #137 |
| Lean checked theorem ipnet.ipnet.ipv4_subnets_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #138 |
| Lean checked theorem ipnet.ipv6_range_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #139 |
| Lean checked theorem ipnet.ipnet.ipv6_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #140 |
| Lean checked theorem ipnet.ipv6_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #141 |
| Lean checked theorem ipnet.ipv6_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #142 |
| Lean checked theorem ipnet.ipv6_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #143 |
| Lean checked theorem ipnet.ipv6_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #144 |
| Lean checked theorem IPv6NetOps.hosts_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #145 |
| Lean checked theorem IPv6NetOps.is_sibling_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #146 |
| Lean checked theorem ipnet.ipnet.ipv6_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #147 |
| Lean checked theorem ipnet.ipv6_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #148 |
| Lean checked theorem ipnet.ipv6_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #149 |
| Lean checked theorem ipnet.ipnet.ipv6_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #150 |
| Lean checked theorem NewAssertInvalid.ipv6_full_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #151 |
| Lean checked theorem ipnet.ipnet.ipv6_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #152 |
| Lean checked theorem IPv6NetOps.subnets_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #153 |
| Lean checked theorem IPv6NetOps.supernet_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #154 |
| Lean checked theorem ipnet.ipv6_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #155 |
| Lean checked theorem IPv6MaskOps.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #156 |
| Lean checked theorem ipnet.ipnet.ipv6_subnets_new_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #157 |
| Lean checked theorem TaggedMask.ip_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #158 |
| Lean checked theorem IPv4MaskOps.ipv4_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #159 |
| Lean checked theorem IPv6MaskOps.ipv6_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound | Passed | Claim #160 |
Execution details
- Started
- 2026-10-28T12:43:22.128930+00:00
- Finished
- 2026-10-28T12:55:51.429679+00:00
- Platform
- macos aarch64
- Rust compiler
- rustc 1.91.1 (ed61e7d7e 2025-11-07) binary: rustc commit-hash: ed61e7d7e242494fb7057f2657300d9e77bb4fcb commit-date: 2025-11-07 host: aarch64-apple-darwin release: 1.91.1 LLVM version: 21.1.2
- Working directory
- ipnet/2.12.2/aeneas/profiles/default/proofs
- Environment overrides
- None recorded
- Git repository
- https://github.com/keiichiw/crate-proofs
- Git commit
- 6364881c457cf5494b026701c0c684cdaaf3896e
Diagnostics & logs
=== stdout ===
✔ [4/69] Built AeneasMeta.Simp.RegisterCommand (910ms)
✔ [5/70] Built AeneasMeta.UtilsCore (1.7s)
✔ [6/70] Built AeneasMeta.BvEnumToBitVec (1.5s)
✔ [7/70] Built Aeneas.Data.Coinductive.Effect (1.1s)
✔ [8/71] Built AeneasMeta.Simp.RegisterCommand:c.o (809ms)
✔ [9/71] Built Aeneas.Tactic.Solver.Grind.Attribute (1.2s)
✔ [10/73] Built Aeneas.Std.Global (2.1s)
✔ [11/73] Built AeneasMeta.UtilsCore:c.o (267ms)
✔ [12/74] Built AeneasMeta.Simp.RegisterCommand:dynlib (383ms)
✔ [13/74] Built AeneasMeta.BvEnumToBitVec:c.o (648ms)
✔ [14/74] Built Qq.ForLean.ReduceEval (1.4s)
✔ [15/74] Built AeneasMeta.UtilsCore:dynlib (367ms)
✔ [16/74] Built Qq.ForLean.ToExpr (1.7s)
✔ [17/80] Built AeneasMeta.BvEnumToBitVec:dynlib (463ms)
✔ [18/80] Built Qq.Typ (1.3s)
✔ [20/88] Built AeneasMeta.OptionConfig (3.0s)
✔ [22/91] Built Qq.ForLean.Do (1.1s)
✔ [23/91] Built Qq.SortLocalDecls (1.1s)
✔ [24/91] Built Batteries.CodeAction.Deprecated (1.2s)
✔ [25/91] Built Batteries.Util.LibraryNote (1.4s)
✔ [26/91] Built ImportGraph.Lean.Syntax (825ms)
✔ [27/94] Built Batteries.Tactic.Lint.Basic (1.6s)
✔ [28/94] Built ImportGraph.Lean.MessageData (945ms)
✔ [29/97] Built Aeneas.Tactic.Solver.Grind.Init (2.7s)
✔ [30/97] Built Aeneas.Data.Coinductive.CoInd (4.4s)
✔ [31/98] Built ImportGraph.Lean.EnvExtension (769ms)
✔ [32/101] Built AeneasMeta.OptionConfig:c.o (2.6s)
✔ [33/101] Built Batteries.Tactic.Lint.Misc (1.3s)
✔ [34/101] Built ImportGraph.Shake.Core (1.2s)
✔ [35/101] Built AeneasMeta.OptionConfig:dynlib (423ms)
✔ [36/101] Built Batteries.Tactic.Alias (2.2s)
✔ [37/101] Built ImportGraph.Imports.Pretty (2.0s)
✔ [38/110] Built Batteries.Tactic.HelpCmd (2.3s)
✔ [39/112] Built Aeneas.Data.Coinductive.ITree (1.8s)
✔ [40/112] Built ImportGraph.Shake.EnvExtension (987ms)
✔ [41/115] Built ImportGraph.Lean.Json (1.4s)
✔ [42/116] Built ImportGraph.Util.Modules (867ms)
✔ [43/116] Built ImportGraph.Shake.Basic (1.6s)
✔ [44/116] Built ImportGraph.Imports.ImportGraph (1000ms)
✔ [45/116] Built ImportGraph.Lean.Environment (866ms)
✔ [46/116] Built ImportGraph.Graph.TransitiveClosure (961ms)
✔ [47/116] Built Qq.Macro (4.0s)
✔ [48/116] Built ImportGraph.Widget.Collapsible (1.1s)
✔ [49/118] Built ImportGraph.Widget.Copy (1.1s)
✔ [50/118] Built ImportGraph.WorkspaceModel.Base (1.1s)
✔ [51/119] Built ImportGraph.Imports.RequiredModules (1.2s)
✔ [52/119] Built ImportGraph.Widget.GoToModule (1.5s)
✔ [53/121] Built ImportGraph.Shake.Algebra (1.3s)
✔ [54/127] Built ImportGraph.Tools.ImportDiff (1.2s)
✔ [55/129] Built ImportGraph.Imports.Redundant (854ms)
✔ [56/129] Built Qq.Commands (1.4s)
✔ [57/130] Built Batteries.Util.ProofWanted (3.4s)
✔ [58/146] Built ImportGraph.Imports.FromSource (929ms)
✔ [59/146] Built ImportGraph.WorkspaceModel.Summary.Core (1.2s)
✔ [60/150] Built Qq.Delab (1.9s)
✔ [61/150] Built AeneasMeta.Utils (7.5s)
✔ [62/150] Built ImportGraph.WorkspaceModel.Model (1.7s)
✔ [63/151] Built ImportGraph.Tools.RedundantImports (1.1s)
✔ [64/158] Built Batteries.Lean.Position (924ms)
✔ [65/165] Built ImportGraph.Tools.MinImports (1.3s)
✔ [66/172] Built Mathlib.Tactic.Linter.DirectoryDependency (1.8s)
✔ [67/174] Built ImportGraph.WorkspaceModel.Summary.Cache (934ms)
✔ [68/174] Built Batteries.Tactic.Lint.TypeClass (1.1s)
✔ [69/175] Built ImportGraph.Shake.DeclNeeds (3.7s)
✔ [70/176] Built Batteries.Tactic.Lint.Simp (1.6s)
✔ [71/176] Built Qq.MetaM (1.2s)
✔ [72/176] Built ImportGraph.WorkspaceModel.Summary.Get (825ms)
✔ [73/176] Built Batteries.Tactic.Unreachable (1.2s)
✔ [74/176] Built Batteries.Lean.Meta.Inaccessible (1.2s)
✔ [75/177] Built Aeneas.Data.Coinductive.ITreeWP.EffectWP (730ms)
✔ [76/177] Built Batteries.Tactic.Lint.Frontend (2.2s)
✔ [77/177] Built Mathlib.Tactic.Linter.Header (1.7s)
✔ [78/177] Built ImportGraph.WorkspaceModel.Summary (863ms)
✔ [79/177] Built Qq.Simp (1.1s)
✔ [80/177] Built Qq.MatchImpl (1.3s)
✔ [81/177] Built Aeneas.Tactic.Step.Trace (1.0s)
✔ [82/177] Built Qq.AssertInstancesCommute (1.7s)
✔ [83/177] Built Batteries.Tactic.Lint (953ms)
✔ [84/177] Built Batteries.Logic (1.1s)
✔ [85/177] Built ImportGraph.Shake.Environment (2.5s)
✔ [86/177] Built Mathlib.Tactic.TypeStar (1.1s)
✔ [87/177] Built Mathlib.Util.CodeActions.BinderPlicity (1.3s)
✔ [88/177] Built Mathlib.Util.ParseCommand (1.2s)
✔ [89/177] Built Mathlib.Lean.Elab.Tactic.Meta (1.3s)
✔ [90/177] Built Mathlib.Tactic.Linter.TacticDocumentation (1.2s)
✔ [91/177] Built Mathlib.Tactic.Linter.PrivateModule (1.2s)
✔ [92/177] Built Mathlib.Tactic.Linter.UnusedTacticExtension (1.6s)
✔ [93/177] Built Mathlib.Tactic.MinImports (1.7s)
✔ [94/177] Built Mathlib.Tactic.Linter.OldObtain (1.2s)
✔ [95/177] Built Mathlib.Tactic.Linter.Whitespace (1.8s)
✔ [96/177] Built Mathlib.Tactic.Linter.InternalConstructor (1.3s)
✔ [97/177] Built Mathlib.Tactic.DeclarationNames (1.3s)
✔ [98/177] Built Mathlib.Tactic.Linter.Multigoal (1.4s)
✔ [99/177] Built Mathlib.Tactic.Linter.HaveILetI (1.3s)
✔ [100/177] Built Mathlib.Tactic.Linter.HashCommandLinter (1.3s)
✔ [101/177] Built Mathlib.Tactic.Linter.EmptyLine (1.4s)
✔ [102/177] Built Mathlib.Lean.Environment (1.2s)
✔ [103/177] Built Mathlib.Tactic.Linter.DocString (1.6s)
✔ [104/177] Built Mathlib.Tactic.Lemma (1.2s)
✔ [105/177] Built Mathlib.Tactic.Linter.DeprecatedSyntaxLinter (1.6s)
✔ [106/177] Built Mathlib.Tactic.AdaptationNote (1.1s)
✔ [107/177] Built Mathlib.Tactic.Linter.AuxLemma (1.6s)
✔ [108/177] Built Mathlib.Lean.Expr.Basic (1.9s)
✔ [109/177] Built Mathlib.Tactic.Linter.FlexibleLinter (2.6s)
✔ [110/177] Built Mathlib.Tactic.Linter.DocPrime (2.4s)
✔ [111/177] Built Mathlib.Lean.Linter (1.2s)
✔ [112/177] Built ImportGraph.WorkspaceModel.Build (1.2s)
✔ [113/178] Built ImportGraph.Tools.NormImports (1.1s)
✔ [114/180] Built Mathlib.Util.CodeActions (1.1s)
✔ [115/183] Built Mathlib.Lean.ContextInfo (1.2s)
✔ [116/186] Built Mathlib.Lean.Elab.InfoTree (1.1s)
✔ [117/186] Built Mathlib.Tactic.Linter.Lint (1.4s)
✔ [118/186] Built Mathlib.Tactic.Linter.UnusedTactic (1.6s)
✔ [119/186] Built Mathlib.Tactic.ExtractGoal (1.6s)
✔ [120/219] Built Batteries.Lean.NameMapAttribute (902ms)
✔ [121/237] Built ImportGraph.Shake.Workspace (1.7s)
✔ [122/245] Built Mathlib.Tactic.Linter.Style (2.2s)
✔ [123/247] Built Mathlib.Tactic.TacticAnalysis (1.5s)
✔ [124/247] Built AeneasMeta.Utils:c.o (10s)
✔ [125/247] Built Batteries.Tactic.Trans (2.4s)
✔ [126/247] Built Batteries.Util.ExtendedBinder (1.3s)
✔ [127/251] Built Mathlib.Tactic.Linter.UnusedInstancesInType (1.8s)
✔ [128/251] Built Batteries.Tactic.Init (1.6s)
✔ [129/251] Built Batteries.Lean.Expr (1.2s)
✔ [130/251] Built Batteries.Lean.Syntax (884ms)
✔ [131/254] Built AeneasMeta.Utils:dynlib (275ms)
✔ [132/254] Built Qq.Match (4.1s)
✔ [134/261] Built Batteries.Linter.UnreachableTactic (1.1s)
✔ [135/262] Built Qq (913ms)
✔ [136/264] Built ImportGraph.Tools.FindHome (2.2s)
✔ [137/267] Built Aesop.Script.Tactic (833ms)
✔ [138/268] Built Aesop.Script.GoalWithMVars (967ms)
✔ [139/268] Built Batteries.Control.Lemmas (1.1s)
✔ [140/270] Built Mathlib.Tactic.Linter.OverlappingInstances (2.0s)
✔ [141/270] Built Aesop.Nanos (964ms)
✔ [142/270] Built ImportGraph.Tools (1.1s)
✔ [143/276] Built Aesop.Index.DiscrTreeConfig (759ms)
✔ [144/277] Built Mathlib.Tactic.TacticAnalysis.Declarations (2.8s)
✔ [145/279] Built AeneasMeta.Extensions (2.5s)
✔ [146/280] Built AeneasMeta.Async.Async (2.5s)
✔ [147/280] Built Batteries.Lean.MonadBacktrack (719ms)
✔ [148/281] Built AeneasMeta.Extensions:c.o (440ms)
✔ [149/281] Built Batteries.Control.AlternativeMonad (1.2s)
✔ [150/281] Built Batteries.Data.Array.Merge (1.7s)
✔ [151/282] Built AeneasMeta.Extensions:dynlib (384ms)
✔ [152/282] Built Mathlib.Tactic.Linter.DeclType (1.5s)
✔ [153/282] Built Batteries.Tactic.PermuteGoals (1.7s)
✔ [154/282] Built Aesop.Check (1.1s)
✔ [155/284] Built AeneasMeta.Simp.Simp (3.5s)
✔ [156/284] Built Aesop.Rule.Name (1.2s)
✔ [157/284] Built AeneasMeta.Async.Async:c.o (782ms)
✔ [158/286] Built AeneasMeta.Async.Async:dynlib (370ms)
✔ [159/286] Built Batteries.Lean.Meta.Basic (1.0s)
✔ [160/286] Built Aesop.Options.Public (1.3s)
✔ [161/286] Built Aesop.Util.UnorderedArraySet (758ms)
✔ [162/286] Built Aesop.Script.OptimizeSyntax (1.0s)
✔ [163/286] Built AeneasMeta.Simp.Simp:c.o (1.1s)
✔ [164/286] Built Aesop.Options.Internal (643ms)
✔ [165/290] Built AeneasMeta.Simp.Simp:dynlib (252ms)
✔ [166/291] Built Mathlib.Init (1.9s)
✔ [167/291] Built Batteries.Lean.Meta.SavedState (1.2s)
✔ [168/295] Built Aesop.Script.TacticState (1.1s)
✔ [169/295] Built Aesop.Forward.LevelIndex (797ms)
✔ [170/295] Built Aesop.Forward.PremiseIndex (671ms)
✔ [171/295] Built Aesop.Percent (811ms)
✔ [172/295] Built Aesop.Util.Basic (1.0s)
✔ [173/295] Built Mathlib.Lean.Elab.Term (1.3s)
✔ [174/295] Built Mathlib.Tactic.Core (1.9s)
✔ [175/295] Built Aesop.Util.EqualUpToIds (3.0s)
✔ [176/295] Built AeneasMeta.Saturate.Attribute (3.9s)
✔ [177/295] Built Mathlib.Tactic.Inhabit (1.5s)
✔ [178/295] Built Mathlib.Tactic.SimpRw (2.1s)
✔ [179/295] Built Mathlib.Tactic.ExtendDoc (1.7s)
✔ [180/295] Built AeneasMeta.Simp.SimpAllAssumptions (3.0s)
✔ [181/295] Built Mathlib.Tactic.Simproc.ExistsAndEq (2.6s)
✔ [182/295] Built Mathlib.Tactic.Use (2.4s)
✔ [183/295] Built Mathlib.Tactic.Eqns (1.5s)
✔ [184/295] Built Mathlib.Lean.PrettyPrinter.Delaborator (1.6s)
✔ [185/295] Built Mathlib.Tactic.Simps.NotationClass (1.8s)
✔ [186/295] Built Mathlib.Basic.Nonempty (1.6s)
✔ [187/295] Built Mathlib.Basic.IsEmpty.Defs (1.7s)
✔ [188/295] Built Mathlib.Basic.ExistsUnique (1.9s)
✔ [189/295] Built Mathlib.Util.WithWeakNamespace (1.7s)
✔ [190/295] Built Mathlib.Tactic.OfNat (1.7s)
✔ [191/295] Built Mathlib.Data.Int.Notation (1.4s)
✔ [192/295] Built Mathlib.Tactic.Attr.Register (2.3s)
✔ [193/295] Built Mathlib.Data.Nat.Notation (1.6s)
✔ [194/295] Built Mathlib.Tactic.Push.Attr (1.9s)
✔ [195/295] Built Mathlib.Tactic.CrossRefAttribute (2.6s)
✔ [196/295] Built Mathlib.Lean.Meta (1.5s)
✔ [197/295] Built Mathlib.Data.Nat.BinaryRec (1.9s)
✔ [198/295] Built Mathlib.Util.AddRelatedDecl (1.9s)
✔ [199/295] Built Mathlib.Data.String.Defs (1.5s)
✔ [200/295] Built Mathlib.Tactic.Translate.Attributes (1.4s)
✔ [201/295] Built Mathlib.Lean.Name (1.6s)
✔ [202/295] Built Mathlib.Tactic.Translate.UnfoldBoundary (2.4s)
✔ [203/295] Built Mathlib.Lean.Meta.Simp (1.7s)
✔ [204/295] Built Aesop.Forward.Substitution (1.3s)
✔ [205/295] Built Aesop.Script.Util (1.1s)
✔ [206/296] Built AeneasMeta.Simp.SimpAllAssumptions:c.o (1.9s)
✔ [207/296] Built Aesop.Tracing (1.4s)
✔ [208/296] Built Mathlib.Tactic.Translate.Reorder (3.2s)
✔ [209/296] Built Mathlib.Tactic.SplitIfs (1.9s)
✔ [210/297] Built Mathlib.Basic.Nontrivial.Defs (1.4s)
✔ [211/297] Built AeneasMeta.Saturate.Attribute:c.o (3.2s)
✔ [212/298] Built AeneasMeta.Simp.SimpAllAssumptions:dynlib (399ms)
✔ [213/298] Built Mathlib.Logic.Function.Defs (2.2s)
✔ [214/298] Built Aesop.RulePattern.Cache (1.1s)
✔ [215/298] Built AeneasMeta.Saturate.Attribute:dynlib (445ms)
✔ [216/298] Built Aesop.Index.Basic (1.0s)
✔ [217/298] Built Mathlib.Tactic.Translate.GuessName (2.3s)
✔ [218/298] Built Mathlib.Tactic.ScopedNS (2.8s)
✔ [219/298] Built Aesop.Forward.SlotIndex (873ms)
✔ [220/298] Built Mathlib.Tactic.MkIffOfInductiveProp (2.6s)
✔ [221/302] Built Mathlib.Basic.Logic.Basic (2.0s)
✔ [222/302] Built Aesop.Util.UnionFind (1.3s)
✔ [223/311] Built Aesop.Script.Step (1.7s)
✔ [224/311] Built Aesop.Stats.Basic (2.0s)
✔ [225/315] Built Mathlib.Logic.Relator (1.9s)
✔ [226/315] Built Batteries.Lean.TagAttribute (892ms)
✔ [227/315] Built Aesop.Script.SScript (1.1s)
✔ [228/315] Built AeneasMeta.Simp (2.9s)
✔ [229/315] Built Aesop.Script.UScript (976ms)
✔ [230/315] Built Batteries.Tactic.SeqFocus (1.6s)
✔ [231/315] Built Aesop.RuleTac.RuleTerm (701ms)
✔ [232/317] Built AeneasMeta.Simp:c.o (293ms)
✔ [233/317] Built Mathlib.Tactic.SetNotationForOrder (2.7s)
✔ [234/317] Built AeneasMeta.Simp:dynlib (420ms)
✔ [235/317] Built Mathlib.Tactic.Simps.Basic (5.5s)
✔ [236/319] Built Aesop.BaseM (1.3s)
✔ [237/319] Built Batteries.Lean.AttributeExtra (1.2s)
✔ [238/319] Built Aesop.Script.CtorNames (1.3s)
✔ [239/319] Built Mathlib.Tactic.Translate.Expr (3.2s)
✔ [240/319] Built Aesop.Script.Check (1.2s)
✔ [241/320] Built Aesop.Script.UScriptToSScript (1.4s)
✔ [242/320] Built Aesop.ElabM (1.2s)
✔ [243/320] Built Aesop.Util.Tactic.Ext (1.3s)
✔ [244/320] Built Mathlib.Tactic.Simps (1.8s)
✔ [245/320] Built Aesop.Script.ScriptM (1.1s)
✔ [246/323] Built Aesop.RuleTac.GoalDiff (1.6s)
✔ [247/323] Built Aesop.RulePattern (1.8s)
✔ [248/324] Built Batteries.Linter.UnnecessarySeqFocus (1.7s)
✔ [249/324] Built Aesop.Util.Tactic (901ms)
✔ [250/327] Built Aesop.Script.StructureStatic (1.2s)
✔ [251/327] Built Aesop.Script.StructureDynamic (1.7s)
✔ [252/327] Built AeneasMeta.Async.TestTactics (3.5s)
✔ [253/327] Built Aesop.RuleTac.Basic (1.4s)
✔ [254/327] Built Aesop.RuleTac.ElabRuleTerm (1.4s)
✔ [255/329] Built AeneasMeta.Saturate.Tactic (7.1s)
✔ [256/329] Built Batteries.Linter (1.1s)
✔ [257/329] Built Aesop.Util.Unfold (1.4s)
✔ [258/330] Built AeneasMeta.Async.TestTactics:c.o (717ms)
✔ [259/333] Built Mathlib.Util.Notation3 (7.4s)
✔ [260/333] Built Aesop.Script.Main (1.0s)
✔ [261/333] Built Aesop.RuleTac.Forward.Basic (1.4s)
✔ [262/333] Built Batteries.Lean.Meta.UnusedNames (1.2s)
✔ [263/333] Built AeneasMeta.Async.TestTactics:dynlib (284ms)
✔ [264/333] Built Aesop.Constants (730ms)
✔ [265/342] Built Batteries.Tactic.Basic (1.4s)
✔ [266/342] Built Aesop.Util.Tactic.Unfold (1.1s)
✔ [267/342] Built Aesop.EMap (1.3s)
✔ [268/342] Built Aesop.Util.OrderedHashSet (846ms)
✔ [269/342] Built Batteries.Lean.Meta.Expr (872ms)
✔ [270/342] Built Batteries.Lean.PersistentHashMap (867ms)
✔ [271/344] Built Batteries.Lean.Meta.InstantiateMVars (728ms)
✔ [272/354] Built Batteries.Lean.PersistentHashSet (727ms)
✔ [273/364] Built Batteries.Lean.Meta.DiscrTree (754ms)
✔ [274/364] Built Aesop.RuleSet.Name (759ms)
✔ [275/367] Built Batteries.Classes.Order (1.5s)
✔ [276/367] Built Batteries.Lean.HashSet (757ms)
✔ [277/370] Built Aesop.RuleTac.Tactic (1.1s)
✔ [278/381] Built Aesop.Search.Expansion.Basic (1.1s)
✔ [279/381] Built Aesop.Search.Expansion.Simp (947ms)
✔ [280/381] Built Mathlib.Tactic.Translate.Core (6.5s)
✔ [281/381] Built Aesop.RuleSet.Filter (808ms)
✔ [282/395] Built Aesop.Index.RulePattern (1.3s)
✔ [283/396] Built Batteries.Data.UInt (1.3s)
✔ [284/396] Built Aesop.Script.SpecificTactics (2.7s)
✔ [285/396] Built Aesop.Exception (1.2s)
✔ [286/396] Built Batteries.Control.ForInStep.Basic (1.1s)
✔ [287/397] Built Aesop.Stats.Extension (1.2s)
✔ [288/399] Built Aesop.Stats.File (1.4s)
✔ [289/399] Built Aesop.RuleTac.Cases (1.4s)
✔ [290/399] Built Aesop.RuleTac.Preprocess (1.4s)
✔ [291/416] Built Mathlib.Tactic.Translate.TagUnfoldBoundary (2.2s)
✔ [292/422] Built Mathlib.Tactic.Translate.ToAdditive (2.4s)
✔ [293/422] Built Aesop.RuleTac.Apply (1.5s)
✔ [294/435] Built Aesop.Frontend.Basic (938ms)
✔ [295/438] Built Aesop.Stats.Report (1.5s)
✔ [296/441] Built Mathlib.Tactic.ToAdditive (1.9s)
✔ [297/441] Built Mathlib.Tactic.Spread (2.1s)
✔ [298/441] Built Mathlib.Tactic.Translate.ToDual (2.0s)
✔ [299/441] Built Mathlib.Tactic.Conv (2.6s)
✔ [300/441] Built Mathlib.Tactic.Attr.Core (1.9s)
✔ [301/446] Built Batteries.Data.Array.Basic (5.3s)
✔ [302/446] Built Mathlib.Tactic.Lift (2.5s)
✔ [303/446] Built Mathlib.Algebra.Notation.Defs (2.5s)
✔ [304/446] Built Mathlib.Algebra.Regular.Defs (2.1s)
✔ [305/449] Built Mathlib.Tactic.Subsingleton (2.3s)
✔ [306/449] Built Mathlib.Tactic.ToDual (2.2s)
✔ [307/449] Built Mathlib.Tactic.DepRewrite (5.7s)
✔ [308/449] Built Mathlib.Util.AtLocation (1.9s)
✔ [309/449] Built Batteries.Data.BinomialHeap.Basic (6.9s)
✔ [310/449] Built Aesop.Forward.RuleInfo (2.0s)
✔ [311/453] Built Mathlib.Algebra.Notation.Pi.Defs (2.7s)
✔ [312/453] Built Mathlib.Util.CompileInductive (2.8s)
✔ [313/457] Built Mathlib.Order.Defs.Prop (1.9s)
✔ [314/457] Built Mathlib.Lean.Meta.CongrTheorems (2.8s)
✔ [315/458] Built Mathlib.Algebra.Group.Semigroup (3.1s)
✔ [316/458] Built Mathlib.Data.Set.Defs (2.0s)
✔ [317/463] Built Mathlib.Data.Int.Init (2.7s)
✔ [318/463] Built Aesop.Rule.Forward (1.5s)
✔ [319/463] Built Mathlib.Tactic.Relation.Rfl (1.8s)
✔ [320/463] Built Mathlib.Control.Combinators (1.8s)
✔ [321/463] Built Mathlib.Tactic.Push (3.4s)
✔ [322/463] Built AeneasMeta.Saturate.Tactic:c.o (16s)
✔ [323/463] Built Mathlib.Data.Option.Defs (1.7s)
✔ [324/467] Built AeneasMeta.Saturate.Tactic:dynlib (308ms)
✔ [325/467] Built Mathlib.Tactic.Coe (1.5s)
✔ [326/468] Built Aesop.Forward.Match.Types (1.2s)
✔ [327/468] Built Mathlib.Order.Defs.Unbundled (1.9s)
✔ [328/468] Built Mathlib.Tactic.Contrapose (2.0s)
✔ [329/468] Built Mathlib.Data.Ordering.Basic (1.7s)
✔ [330/468] Built Aesop.Index.Forward (1.1s)
✔ [331/468] Built Mathlib.Algebra.Group.Monoid (3.6s)
✔ [332/468] Built Mathlib.Tactic.TermCongr (3.9s)
✔ [333/471] Built Mathlib.Order.Defs.PartialOrder (2.3s)
✔ [334/471] Built Aesop.RuleTac.Descr (1.1s)
✔ [335/473] Built Mathlib.Order.Notation (2.4s)
✔ [336/473] Built Batteries.Data.Except (722ms)
✔ [337/473] Built AeneasMeta.Saturate (3.0s)
✔ [338/473] Built Mathlib.Tactic.CongrExclamation (3.9s)
✔ [339/473] Built AeneasMeta.Saturate:c.o (238ms)
✔ [340/475] Built Aesop.Rule.Basic (1.3s)
✔ [341/475] Built Mathlib.Tactic.FastInstance (3.0s)
✔ [342/475] Built Batteries.Tactic.Exact (1.3s)
✔ [343/475] Built AeneasMeta.Saturate:dynlib (327ms)
✔ [344/482] Built Batteries.Lean.Except (1.2s)
✔ [345/482] Built Mathlib.Algebra.Group.DivInvMonoid (3.0s)
✔ [346/482] Built Mathlib.Logic.Function.Basic (3.2s)
✔ [347/482] Built Mathlib.Tactic.GCongr.ForwardAttr (2.3s)
✔ [348/484] Built Mathlib.Logic.Relation (3.8s)
✔ [349/484] Built Mathlib.Order.Defs.LinearOrder (2.0s)
✔ [350/484] Built Batteries.Data.MLList.Basic (1.2s)
✔ [351/484] Built Aesop.Rule (1.2s)
✔ [352/484] Built Aesop.Index (1.8s)
✔ [353/484] Built Mathlib.Tactic.PPWithUniv (1.6s)
✔ [354/485] Built Mathlib.Tactic.Convert (2.7s)
✔ [355/486] Built Mathlib.Data.Sigma.Basic (1.9s)
✔ [356/486] Built Mathlib.Algebra.Group.Defs (2.5s)
✔ [357/486] Built Mathlib.Data.Sum.Basic (2.0s)
✔ [358/486] Built Mathlib.Algebra.Notation.Pi.Basic (2.5s)
✔ [359/486] Built Mathlib.Basic.Unique (2.3s)
✔ [360/486] Built Batteries.Control.Nondet.Basic (1.2s)
✔ [361/486] Built Mathlib.Data.Subtype (2.2s)
✔ [362/488] Built Mathlib.Logic.Function.Conjugate (2.1s)
✔ [363/488] Built Mathlib.Logic.Function.ULift (1.6s)
✔ [364/488] Built Aesop.RuleSet.Member (1.2s)
✔ [365/488] Built Aesop.Tree.UnsafeQueue (1.3s)
✔ [366/488] Built Aesop.Forward.Match (1.9s)
✔ [367/488] Built Mathlib.Tactic.Basic (2.1s)
✔ [368/488] Built Mathlib.Tactic.ByCases (1.7s)
✔ [369/489] Built Mathlib.Algebra.Group.Semiconj.Defs (1.7s)
✔ [370/489] Built Mathlib.Tactic.GCongr.Core (5.8s)
✔ [371/489] Built Mathlib.Basic.FunLike.Basic (1.0s)
✔ [372/490] Built Aesop.Builder.Basic (1.2s)
✔ [373/490] Built Mathlib.Tactic.Basify.Attr (2.1s)
✔ [374/490] Built Mathlib.Data.Quot (2.7s)
✔ [375/490] Built Aesop.Tree.Data.ForwardRuleMatches (1.3s)
✔ [376/490] Built Mathlib.Logic.Function.Iterate (1.0s)
✔ [377/490] Built Mathlib.Algebra.Group.Pi.Basic (3.5s)
✔ [378/490] Built Aesop.RuleTac.Forward (2.1s)
✔ [379/490] Built Mathlib.Algebra.Group.InjSurj (4.3s)
✔ [380/490] Built Aesop.Builder.Unfold (1.1s)
✔ [381/490] Built Mathlib.Tactic.Hint (1.9s)
✔ [382/490] Built Mathlib.Basic.FunLike.Embedding (1.6s)
✔ [383/490] Built Mathlib.Data.Bool.Basic (1.9s)
✔ [384/490] Built Mathlib.Algebra.Group.Commute.Defs (2.2s)
✔ [385/490] Built Aesop.Builder.Forward (1.8s)
✔ [386/490] Built Aesop.Builder.Apply (1.3s)
✔ [387/490] Built Aesop.Builder.Tactic (1.3s)
✔ [388/490] Built Aesop.Builder.Constructors (1.1s)
✔ [389/490] Built Aesop.Builder.NormSimp (1.2s)
✔ [390/490] Built Aesop.Builder.Cases (1.3s)
✔ [391/494] Built Mathlib.Logic.Pairwise (1.4s)
✔ [392/494] Built Aesop.RuleTac (990ms)
✔ [393/495] Built Mathlib.Tactic.GCongr (1.7s)
✔ [394/495] Built Aesop.Builder.Default (1.1s)
✔ [395/495] Built Mathlib.Data.Prod.Basic (2.1s)
✔ [396/499] Built Mathlib.Basic.FunLike.Equiv (1.0s)
✔ [397/500] Built Aesop.Forward.State (5.7s)
✔ [398/500] Built Aesop.RuleSet (3.4s)
✔ [399/500] Built Mathlib.Data.Int.Order.Basic (1.9s)
✔ [400/500] Built Batteries.Data.Nat.Basic (1.0s)
✔ [401/500] Built Mathlib.Algebra.Group.Units.Defs (4.0s)
✔ [402/500] Built Aesop.Frontend.RuleExpr (2.8s)
✔ [403/500] Built Mathlib.Algebra.Notation.Prod (2.6s)
✔ [404/503] Built Aesop.Forward.State.Initial (1.4s)
✔ [405/506] Built Aesop.Forward.State.ApplyGoalDiff (1.2s)
✔ [406/506] Built Aesop.Frontend.Extension.Init (1.2s)
✔ [407/508] Built Batteries.Data.Nat.Lemmas (1.1s)
✔ [408/515] Built Mathlib.Algebra.Group.Hom.Defs (6.5s)
✔ [409/515] Built Aesop.Tree.Data (2.5s)
✔ [410/516] Built Mathlib.Logic.Equiv.Defs (4.0s)
✔ [411/516] Built Mathlib.Tactic.GRewrite.Core (5.6s)
✔ [412/516] Built Aesop.Frontend.Extension (1.3s)
✔ [413/516] Built Mathlib.Tactic.ToExpr (1.7s)
✔ [414/516] Built Mathlib.Order.Basic (5.4s)
✔ [415/516] Built Mathlib.Data.Set.CoeSort (1.6s)
✔ [416/516] Built Aesop.Tree.Traversal (1.1s)
✔ [418/516] Built Aesop.Tree.TreeM (1.4s)
✔ [419/516] Built Mathlib.Basic.IsEmpty.Basic (1.7s)
✔ [420/516] Built Aesop.Tree.RunMetaM (1.0s)
✔ [421/516] Built Aesop.Search.Queue.Class (1.2s)
✔ [422/516] Built Mathlib.Data.Nat.Init (2.6s)
✔ [423/516] Built Mathlib.Control.EquivFunctor (1.9s)
✔ [424/516] Built Mathlib.Tactic.Choose (2.5s)
✔ [425/516] Built Aesop.Saturate (4.7s)
✔ [426/516] Built Aesop.Frontend.Tactic (1.9s)
✔ [427/516] Built Mathlib.Tactic.GRewrite.Elab (2.9s)
✔ [428/517] Built Mathlib.Tactic.FBinop (2.2s)
✔ [429/517] Built Mathlib.Algebra.Opposites (2.8s)
✔ [430/517] Built Aesop.Frontend.Attribute (1.7s)
✔ [431/517] Built Aesop.Tree.Free (1.0s)
✔ [432/517] Built Aesop.Tree.Stats (1.2s)
✔ [433/517] Built Mathlib.Logic.Equiv.Prod (3.5s)
✔ [434/517] Built Mathlib.Algebra.Group.Equiv.Defs (4.1s)
✔ [435/517] Built Aesop.Tree.State (1.4s)
✔ [436/517] Built Aesop.Frontend.Command (2.7s)
✔ [437/517] Built Mathlib.Order.OrderDual (2.4s)
✔ [438/517] Built Mathlib.Order.ULift (2.2s)
✔ [439/517] Built Aesop.Forward.State.UpdateGoal (1.4s)
✔ [440/518] Built Aesop.Tree.ExtractScript (1.9s)
✔ [441/518] Built Aesop.Tree.ExtractProof (1.8s)
✔ [442/518] Built Aesop.Search.Queue (1.8s)
✔ [443/518] Built Aesop.Search.SearchM (1.6s)
✔ [444/518] Built Aesop.Tree.Tracing (2.1s)
✔ [445/518] Built Aesop.Tree.AddRapp (2.6s)
✔ [446/518] Built Aesop.Frontend.Saturate (1.9s)
✔ [447/518] Built Plausible.Random (1.0s)
✔ [448/518] Built Mathlib.Data.Nat.Basic (2.3s)
✔ [449/518] Built Mathlib.Tactic.GRewrite (1.8s)
✔ [450/518] Built Mathlib.Basic.SProd (1.8s)
✔ [451/518] Built Aesop.BuiltinRules.Split (1.6s)
✔ [452/518] Built Aesop.BuiltinRules.Subst (1.8s)
✔ [453/518] Built Aesop.BuiltinRules.Rfl (1.6s)
✔ [454/518] Built Aesop.BuiltinRules.Intros (1.6s)
✔ [455/518] Built Aesop.BuiltinRules.Ext (1.7s)
✔ [456/518] Built Aesop.BuiltinRules.ApplyHyps (1.7s)
✔ [457/518] Built Aesop.BuiltinRules.DestructProducts (1.8s)
✔ [458/518] Built Aesop.BuiltinRules.Assumption (2.2s)
✔ [459/519] Built Aesop.Tree.Check (2.1s)
✔ [460/521] Built Aesop.Search.RuleSelection (1.5s)
✔ [461/522] Built Plausible.Gen (1.5s)
✔ [462/523] Built Aesop.Frontend (1.7s)
✔ [463/524] Built Mathlib.Order.Compare (2.7s)
✔ [464/524] Built Mathlib.Logic.Equiv.Sum (3.4s)
✔ [465/531] Built Mathlib.Order.Max (3.1s)
✔ [466/531] Built Plausible.Shrinkable (1.3s)
✔ [467/533] Built Aesop.BuiltinRules (2.0s)
✔ [468/533] Built Mathlib.Order.RelClasses (3.9s)
✔ [469/533] Built Plausible.Arbitrary (1.5s)
✔ [470/533] Built Plausible.Attr (1.2s)
✔ [471/538] Built Mathlib.Order.Defs.Lattice (3.4s)
✔ [472/538] Built Mathlib.Tactic.Finiteness.Attr (2.1s)
✔ [474/540] Built Plausible.ArbitraryFueled (879ms)
✔ [475/540] Built Plausible.Sampleable (1.6s)
✔ [476/543] Built Batteries.CodeAction.Attr (1.7s)
✔ [477/543] Built Batteries.Tactic.Case (2.3s)
✔ [478/543] Built Aesop.Search.Expansion.Norm (3.9s)
✔ [479/543] Built LeanSearchClient.Basic (999ms)
✔ [480/543] Built Plausible.DeriveShrinkable (3.0s)
✔ [481/545] Built Plausible.Functions (1.7s)
✔ [482/545] Built Batteries.Tactic.GeneralizeProofs (3.0s)
✔ [483/546] Built Batteries.CodeAction.Basic (1.0s)
✔ [484/547] Built Plausible.DeriveArbitrary (2.9s)
✔ [485/548] Built Batteries.Data.List.Basic (3.8s)
✔ [486/549] Built Mathlib.Tactic.ApplyCongr (2.0s)
✔ [487/550] Built Mathlib.Order.BoundedOrder.Basic (4.0s)
✔ [488/550] Built Plausible.Testable (3.2s)
✔ [489/551] Built Batteries.CodeAction.Misc (3.6s)
✔ [490/552] Built Mathlib.Lean.Meta.Basic (1.9s)
✔ [491/552] Built Aesop.Search.Expansion (2.0s)
✔ [492/552] Built LeanSearchClient.Syntax (2.9s)
✔ [493/552] Built Mathlib.Tactic.ByContra (2.2s)
✔ [494/553] Built Plausible.Tactic (1.8s)
✔ [495/553] Built Mathlib.Tactic.ApplyWith (2.4s)
✔ [496/554] Built Mathlib.Tactic.ClearExclamation (1.7s)
✔ [497/554] Built Mathlib.Tactic.CasesM (2.5s)
✔ [498/554] Built Mathlib.Tactic.Check (2.5s)
✔ [499/555] Built Mathlib.Tactic.ClearExcept (1.8s)
✔ [500/555] Built Batteries.CodeAction.Match (2.0s)
✔ [501/558] Built Plausible (1.3s)
✔ [502/558] Built Mathlib.Tactic.Clear_ (1.9s)
✔ [503/563] Built Mathlib.Tactic.ApplyAt (2.1s)
✔ [504/568] Built Aesop.Search.ExpandSafePrefix (1.0s)
✔ [512/572] Built LeanSearchClient.LoogleSyntax (2.3s)
✔ [513/572] Built Mathlib.Lean.GoalsLocation (1.8s)
✔ [514/586] Built Mathlib.Lean.Meta.KAbstractPositions (1.9s)
✔ [515/591] Built Mathlib.Lean.FoldEnvironment (1.7s)
✔ [516/591] Built Batteries.CodeAction (1.3s)
✔ [517/591] Built ProofWidgets.Compat (1.1s)
✔ [518/594] Built Mathlib.Tactic.NthRewrite (1.8s)
✔ [519/594] Built LeanSearchClient (1.5s)
✔ [520/594] Built ProofWidgets.Util (1.4s)
✔ [521/596] Built Mathlib.Lean.Meta.RefinedDiscrTree.Basic (2.4s)
✔ [522/596] Built Mathlib.Tactic.Constructor (1.9s)
✔ [523/597] Built ProofWidgets.Component.Basic (1.8s)
✔ [524/597] Built Mathlib.Tactic.CongrM (2.2s)
✔ [525/598] Built Mathlib.Control.Basic (2.6s)
✔ [526/598] Built Mathlib.Lean.MessageData.Trace (1.7s)
✔ [527/599] Built Aesop.Search.Main (3.5s)
✔ [528/599] Built ProofWidgets.Cancellable (1.7s)
✔ [529/599] Built Mathlib.Tactic.DeprecateTo (2.1s)
✔ [530/599] Built Mathlib.Tactic.DefEqTransformations (2.5s)
✔ [531/599] Built Mathlib.Tactic.DSimpPercent (1.5s)
✔ [532/599] Built Mathlib.Lean.Meta.RefinedDiscrTree.Encode (1.9s)
✔ [533/601] Built ProofWidgets.Component.Panel.Basic (1.4s)
✔ [534/601] Built Mathlib.Lean.Meta.RefinedDiscrTree.Initialize (2.4s)
✔ [535/601] Built ProofWidgets.Component.MakeEditLink (1.5s)
✔ [536/605] Built Mathlib.Tactic.ErwQuestion (2.1s)
✔ [537/605] Built Mathlib.Tactic.ExistsI (1.6s)
✔ [538/608] Built Batteries.Util.Cache (1.0s)
✔ [539/609] Built Aesop.Main (1.8s)
✔ [540/612] Built ProofWidgets.Data.Html (3.3s)
✔ [541/613] Built Mathlib.Tactic.FailIfNoProgress (2.1s)
✔ [542/613] Built Mathlib.Tactic.DefEqAbuse (2.6s)
✔ [543/613] Built Mathlib.Lean.Meta.RefinedDiscrTree.Lookup (2.2s)
✔ [544/613] Built Mathlib.Tactic.FunProp.Decl (1.9s)
✔ [545/614] Built Mathlib.Tactic.FunProp.Mor (2.0s)
✔ [546/615] Built Mathlib.Tactic.Find (1.7s)
✔ [547/615] Built Aesop (1.2s)
✔ [548/616] Built Mathlib.Tactic.FunProp.ToBatteries (2.4s)
✔ [549/616] Built ProofWidgets.Component.FilterDetails (1.2s)
✔ [550/616] Built ProofWidgets.Component.RefreshComponent (1.6s)
✔ [551/616] Built ProofWidgets.Component.OfRpcMethod (1.6s)
✔ [552/618] Built Mathlib.Data.Set.Operations (2.5s)
✔ [553/618] Built Mathlib.Tactic.InferParam (1.6s)
✔ [554/618] Built Mathlib.Tactic.GrindAttrs (1.7s)
✔ [555/621] Built Mathlib.Lean.Meta.RefinedDiscrTree (1.6s)
✔ [556/621] Built Mathlib.Tactic.GuardGoalNums (1.4s)
✔ [557/621] Built Mathlib.Tactic.GuardHypNums (1.3s)
✔ [558/621] Built Mathlib.Data.Option.Basic (1.9s)
✔ [559/624] Built Mathlib.Tactic.HigherOrder (1.8s)
✔ [560/624] Built Mathlib.Tactic.FunProp.FunctionData (1.9s)
✔ [561/625] Built Mathlib.Util.TermReduce (1.7s)
✔ [562/625] Built Mathlib.Tactic.Linter.HaveLetLinter (1.7s)
✔ [563/626] Built Mathlib.Tactic.Linter.MinImports (1.9s)
✔ [564/626] Built Mathlib.Tactic.Linter.PPRoundtrip (1.7s)
✔ [565/627] Built Mathlib.Order.Monotone.Defs (2.0s)
✔ [566/627] Built Mathlib.Tactic.Linter.UpstreamableDecl (1.6s)
✔ [567/627] Built Mathlib.Tactic.ClickSuggestions.Util (3.6s)
✔ [568/629] Built Mathlib.Tactic.Observe (1.9s)
✔ [569/630] Built Mathlib.Logic.Equiv.Option (2.5s)
✔ [570/630] Built Mathlib.Tactic.FunProp.Types (2.0s)
✔ [571/630] Built Mathlib.Tactic.RSuffices (1.5s)
✔ [572/631] Built Mathlib.Tactic.IrreducibleDef (2.3s)
✔ [573/631] Built Mathlib.Tactic.Recover (1.6s)
✔ [574/631] Built Mathlib.Tactic.Linter (1.2s)
✔ [575/631] Built Mathlib.Tactic.Rename (1.6s)
✔ [576/634] Built Mathlib.Util.Tactic (1.5s)
✔ [577/635] Built Mathlib.Algebra.Group.Basic (6.7s)
✔ [578/635] Built Mathlib.Tactic.ClickSuggestions.SectionState (2.2s)
✔ [579/635] Built Mathlib.Tactic.ClickSuggestions.Unfold (2.0s)
✔ [580/635] Built Mathlib.Order.Monotone.Basic (3.1s)
✔ [581/635] Built Mathlib.Tactic.Says (2.1s)
✔ [582/635] Built Mathlib.Tactic.Set (1.9s)
✔ [583/635] Built Mathlib.Tactic.FunProp.Theorems (2.3s)
✔ [584/635] Built Mathlib.Lean.Elab.Tactic.Basic (1.5s)
✔ [585/635] Built Mathlib.Tactic.RenameBVar (1.5s)
✔ [586/635] Built Mathlib.Tactic.SimpIntro (1.8s)
✔ [587/636] Built Mathlib.Tactic.ClickSuggestions.Apply (2.2s)
✔ [588/636] Built Mathlib.Tactic.ClickSuggestions.ApplyAt (1.0s)
✔ [589/636] Built Mathlib.Logic.Equiv.Basic (4.1s)
✔ [590/637] Built Mathlib.Algebra.Group.Semiconj.Basic (1.0s)
✔ [591/637] Built Mathlib.Algebra.Group.SelfInv (2.1s)
✔ [592/637] Built Mathlib.Tactic.ClickSuggestions.GRewrite (2.9s)
✔ [593/637] Built AeneasMeta.Async.Test (76s)
✔ [594/637] Built Mathlib.Tactic.ClickSuggestions.Rewrite (2.8s)
✔ [595/637] Built Mathlib.Tactic.Substs (1.4s)
✔ [596/638] Built Mathlib.Tactic.FunProp.Attr (1.3s)
✔ [597/639] Built AeneasMeta.Async.Test:c.o (574ms)
✔ [598/639] Built Mathlib.Algebra.Group.Units.Basic (3.1s)
✔ [599/640] Built Mathlib.Algebra.Group.Hom.Basic (2.8s)
✔ [600/641] Built AeneasMeta.Async.Test:dynlib (354ms)
✔ [601/642] Built Mathlib.Tactic.SuccessIfFailWithMsg (1.6s)
✔ [602/642] Built Mathlib.Tactic.Setm (1.8s)
✔ [603/642] Built Mathlib.Tactic.SudoSetOption (1.5s)
✔ [604/642] Built Mathlib.Tactic.SwapVar (1.7s)
✔ [605/643] Built Mathlib.Algebra.Group.Commute.Basic (2.8s)
✔ [606/644] Built Mathlib.Order.Lattice (4.2s)
✔ [607/644] Built Mathlib.Tactic.ClickSuggestions.FindPremises (2.6s)
✔ [608/644] Built Mathlib.Tactic.ToFun (2.1s)
✔ [609/644] Built Mathlib.Tactic.ToLevel (1.5s)
✔ [610/644] Built Mathlib.Tactic.FunProp.Core (4.2s)
✔ [611/644] Built Mathlib.Tactic.Tauto (2.8s)
✔ [612/650] Built Mathlib.Algebra.Group.Units.Hom (2.8s)
✔ [613/650] Built Mathlib.Tactic.Trace (1.4s)
✔ [614/652] Built Mathlib.Tactic.UnsetOption (1.3s)
✔ [615/653] Built Mathlib.Algebra.Group.Equiv.Basic (3.0s)
✔ [616/654] Built AeneasMeta.Async (2.7s)
✔ [617/657] Built Mathlib.Algebra.Group.Torsion (2.1s)
✔ [618/657] Built AeneasMeta.Async:c.o (226ms)
✔ [619/657] Built Mathlib.Order.BoundedOrder.Lattice (2.2s)
✔ [620/657] Built Mathlib.Tactic.Widget.SelectInsertParamsClass (1.4s)
✔ [621/657] Built AeneasMeta.Async:dynlib (297ms)
✔ [622/657] Built Mathlib.Tactic.ClickSuggestions.TryPremises (2.6s)
✔ [623/657] Built Mathlib.Tactic.FunProp.Elab (2.1s)
✔ [624/657] Built Mathlib.Tactic.Variable (2.2s)
✔ [625/657] Built Mathlib.Tactic.WLOG (2.1s)
✔ [626/657] Built Mathlib.Util.PrintSorries (1.8s)
✔ [627/657] Built Mathlib.Util.CountHeartbeats (2.3s)
✔ [628/662] Built Mathlib.Util.TransImports (1.4s)
✔ [629/663] Built Mathlib.Util.WhatsNew (1.5s)
✔ [630/674] Built Mathlib.Algebra.Group.Units.Equiv (2.3s)
✔ [631/674] Built Mathlib.Tactic.Widget.SelectPanelUtils (1.6s)
✔ [632/676] Built Mathlib.Tactic.FunProp (1.4s)
✔ [633/676] Built Batteries.Tactic.Congr (1.5s)
✔ [634/676] Built Mathlib.Algebra.Group.Opposite (2.9s)
✔ [635/676] Built Mathlib.Tactic.ClickSuggestions (2.2s)
✔ [636/676] Built Mathlib.Control.ULift (1.6s)
✔ [637/682] Built Mathlib.Algebra.Group.TypeTags.Basic (3.2s)
✔ [638/682] Built Mathlib.Order.Disjoint (3.2s)
✔ [639/682] Built Mathlib.Tactic.Widget.CongrM (1.7s)
✔ [640/683] Built AeneasMeta (3.8s)
✔ [641/683] Built Mathlib.Order.GaloisConnection.Defs (2.9s)
✔ [642/683] Built Mathlib.Data.Prod.PProd (1.5s)
✔ [643/686] Built Mathlib.Data.ULift (1.0s)
✔ [644/686] Built AeneasMeta:c.o (368ms)
✔ [645/686] Built Mathlib.Tactic.Widget.Conv (3.2s)
✔ [646/686] Built AeneasMeta:shared (293ms)
✔ [647/686] Built Mathlib.Tactic.Monotonicity.Attr (1.5s)
✔ [648/686] Built Mathlib.Tactic.Widget.Calc (3.0s)
✔ [649/686] Built Mathlib.Tactic.Widget.LibraryRewrite (3.8s)
✔ [650/690] Built Mathlib.Algebra.Group.TypeTags.Hom (2.6s)
✔ [651/690] Built Mathlib.Order.PropInstances (1.9s)
✔ [652/690] Built Mathlib.Order.BoundedOrder.Monotone (2.0s)
✔ [653/690] Built Mathlib.Util.PPOptions (1.2s)
✔ [654/690] Built Mathlib.Algebra.Order.ZeroLEOne (1.6s)
✔ [655/690] Built Mathlib.Logic.Embedding.Basic (2.5s)
✔ [656/694] Built Aeneas.Std.Spec (2.2s)
✔ [657/695] Built Mathlib.Algebra.Group.Prod (5.1s)
✔ [658/695] Built Mathlib.Tactic.Common (2.4s)
✔ [659/704] Built Mathlib.Order.Interval.Set.Defs (1.9s)
✔ [660/711] Built Aeneas.Tactic.Step.DspecInduction (3.6s)
✔ [661/711] Built Mathlib.Data.Set.Basic (3.6s)
✔ [662/711] Built Mathlib.Order.Bounds.Defs (1.8s)
✔ [663/712] Built Mathlib.Algebra.Group.Equiv.TypeTags (2.7s)
✔ [664/713] Built Mathlib.Algebra.Order.IsBotOne (2.6s)
✔ [665/713] Built Mathlib.Basic.Nontrivial.Basic (1.0s)
✔ [666/714] Built Aeneas.Extract.Extract (4.8s)
✔ [667/714] Built Mathlib.Data.Option.NAry (1.7s)
✔ [668/714] Built Mathlib.Util.Delaborators (3.6s)
✔ [669/714] Built Mathlib.Order.TypeTags (1.7s)
✔ [670/716] Built Mathlib.Data.Set.Inclusion (1.9s)
✔ [671/718] Built Mathlib.Control.Monad.Basic (1.6s)
✔ [672/718] Built Mathlib.Order.Heyting.Basic (6.3s)
✔ [673/721] Built Mathlib.Data.Set.Disjoint (2.2s)
✔ [674/723] Built Mathlib.Order.RelIso.Basic (4.5s)
✔ [675/723] Built Mathlib.Dynamics.FixedPoints.Defs (1.8s)
✔ [676/723] Built Aeneas.Extract (1.8s)
✔ [677/723] Built Batteries.Control.ForInStep.Lemmas (742ms)
✔ [678/723] Built Batteries.Data.List.Pairwise (780ms)
✔ [679/725] Built Mathlib.Order.Iterate (2.0s)
✔ [680/727] Built Mathlib.Tactic.SetLike (1.6s)
✔ [681/727] Built Mathlib.Order.SetNotation (3.8s)
✔ [682/730] Built Mathlib.Order.BooleanAlgebra.Defs (2.1s)
✔ [683/747] Built Mathlib.Data.List.TFAE (1.4s)
✔ [684/747] Built Mathlib.Algebra.Group.End (4.6s)
✔ [685/748] Built Mathlib.Lean.Expr.ExtraRecognizers (1.6s)
✔ [686/749] Built Mathlib.Data.Set.Insert (3.3s)
✔ [687/749] Built Mathlib.Basic.SetLike.Basic (2.8s)
✔ [688/752] Built Aeneas.Std.Primitives (3.8s)
✔ [689/752] Built Aeneas.Tactic.Step.Simp (2.5s)
✔ [690/752] Built Mathlib.Data.Set.Notation (2.6s)
✔ [691/754] Built Aeneas.Tactic.Elab.TraitDefault.Init (2.8s)
✔ [692/754] Built Mathlib.Data.Set.Subsingleton (2.9s)
✔ [693/754] Built Batteries.Data.List.Lemmas (5.4s)
✔ [694/755] Built Mathlib.Data.Bool.Set (2.3s)
✔ [695/755] Built Mathlib.Order.BooleanAlgebra.Basic (5.0s)
✔ [696/755] Built Mathlib.Util.AtomM (1.6s)
✔ [697/755] Built Mathlib.Order.Hom.Basic (6.9s)
✔ [698/757] Built Aeneas.Std.Core.Ops (3.2s)
✔ [699/758] Built Aeneas.Std.Delab (3.3s)
✔ [700/758] Built Aeneas.Std.Core.Result (2.7s)
✔ [701/768] Built Mathlib.Algebra.Group.Int.Defs (1.5s)
✔ [702/768] Built Mathlib.Order.WithBot (9.6s)
✔ [703/771] Built Mathlib.Util.AtomM.Recurse (1.8s)
✔ [704/774] Built Mathlib.Data.Part (3.1s)
✔ [705/774] Built Mathlib.Data.List.Pairwise (2.0s)
✔ [706/775] Built Mathlib.Logic.OpClass (1.5s)
✔ [707/777] Built Batteries.Classes.RatCast (743ms)
✔ [708/777] Built Mathlib.Order.BooleanAlgebra.Set (3.4s)
✔ [709/780] Built Mathlib.Order.Antisymmetrization (2.0s)
✔ [710/780] Built Mathlib.Algebra.Order.Monoid.Unbundled.Defs (2.0s)
✔ [711/784] Built Mathlib.Order.SymmDiff (3.9s)
✔ [712/784] Built Mathlib.Data.Int.Basic (2.1s)
✔ [713/785] Built Mathlib.Algebra.Group.Equiv.Opposite (3.5s)
✔ [714/785] Built Mathlib.Data.Nat.Cast.Defs (1.0s)
✔ [715/786] Built Mathlib.Data.Rat.Init (1.4s)
✔ [716/786] Built Mathlib.Algebra.Group.IsCommutative (1.7s)
✔ [717/790] Built Mathlib.Order.Part (2.7s)
✔ [718/791] Built Mathlib.Order.MinMax (2.6s)
✔ [719/794] Built Mathlib.Algebra.GroupWithZero.Defs (1.9s)
✔ [720/798] Built Mathlib.Order.Lex (1.7s)
✔ [721/798] Built Mathlib.Algebra.Notation.Bracket (1.5s)
✔ [722/799] Built Mathlib.Data.Int.Cast.Defs (1.7s)
✔ [723/799] Built Mathlib.Data.Set.SymmDiff (2.2s)
✔ [724/799] Built Mathlib.Algebra.NeZero (1.4s)
✔ [725/799] Built Mathlib.Data.Rat.Defs (2.6s)
✔ [726/799] Built Mathlib.Algebra.Group.Even (2.7s)
✔ [727/803] Built Mathlib.Algebra.CharZero.Defs (1.6s)
✔ [728/803] Built Mathlib.Data.Int.Cast.Basic (2.0s)
✔ [729/809] Built Mathlib.Tactic.TFAE (3.0s)
✔ [730/810] Built Mathlib.Order.Interval.Set.Basic (5.1s)
✔ [731/813] Built Mathlib.Algebra.GroupWithZero.NeZero (1.8s)
✔ [732/813] Built Mathlib.Algebra.Group.Hom.Instances (3.9s)
✔ [733/813] Built Mathlib.Algebra.Order.Group.Synonym (4.2s)
✔ [734/815] Built Mathlib.Algebra.Ring.Defs (4.1s)
✔ [735/815] Built Mathlib.Algebra.Group.Invertible.Defs (2.1s)
✔ [736/815] Built Mathlib.Algebra.Group.Semiconj.Units (2.4s)
✔ [737/815] Built Mathlib.Algebra.Order.Monoid.Unbundled.Basic (5.3s)
✔ [738/815] Built Mathlib.Tactic.Nontriviality.Core (2.7s)
✔ [739/815] Built Mathlib.Tactic.Bound.Init (1.5s)
✔ [740/815] Built Mathlib.Algebra.GroupWithZero.InjSurj (2.5s)
✔ [741/815] Built Mathlib.Algebra.Order.GroupWithZero.Defs (3.2s)
✔ [742/815] Built Mathlib.Algebra.GroupWithZero.Basic (2.8s)
✔ [743/815] Built Mathlib.Data.Set.Image (5.4s)
✔ [744/815] Built Mathlib.Algebra.Order.Ring.Synonym (2.5s)
✔ [745/815] Built Mathlib.Algebra.Ring.Int.Defs (2.4s)
✔ [746/817] Built Mathlib.Algebra.Ring.GrindInstances (2.4s)
✔ [747/817] Built Mathlib.Algebra.Ring.Basic (2.9s)
✔ [748/817] Built Mathlib.Algebra.Ring.Semiconj (1.0s)
✔ [749/817] Built Mathlib.Algebra.Field.Defs (2.0s)
✔ [750/817] Built Mathlib.Algebra.Order.Monoid.Unbundled.OrderDual (2.1s)
✔ [751/817] Built Mathlib.Tactic.Nontriviality (1.5s)
✔ [752/819] Built Mathlib.Algebra.Order.Sub.Defs (2.3s)
✔ [753/819] Built Mathlib.Algebra.Group.Commute.Units (2.6s)
✔ [754/819] Built Mathlib.Tactic.Bound.Attribute (2.1s)
✔ [755/819] Built Mathlib.Data.Set.Restrict (2.3s)
✔ [756/823] Built Mathlib.Algebra.GroupWithZero.Hom (2.5s)
✔ [757/823] Built Mathlib.Data.Nat.Set (2.2s)
✔ [758/826] Built Mathlib.Order.Directed (3.1s)
✔ [759/829] Built Mathlib.Algebra.Group.Nat.Defs (2.1s)
✔ [760/829] Built Mathlib.Algebra.Divisibility.Basic (3.0s)
✔ [761/829] Built Mathlib.Data.Nat.Cast.Pi (1.7s)
✔ [762/829] Built Mathlib.Data.Set.Prod (4.5s)
✔ [763/829] Built Mathlib.Algebra.Order.Monoid.Unbundled.Pow (3.6s)
✔ [764/829] Built Mathlib.Algebra.Group.Invertible.Basic (2.8s)
✔ [765/829] Built Mathlib.Algebra.GroupWithZero.Units.Basic (3.8s)
✔ [766/832] Built Mathlib.Data.Nat.Cast.NeZero (1.9s)
✔ [767/832] Built Mathlib.Algebra.Ring.InjSurj (6.2s)
✔ [768/832] Built Mathlib.Algebra.GroupWithZero.Nat (1.5s)
✔ [769/832] Built Mathlib.Algebra.Group.Nat.Hom (2.0s)
✔ [770/832] Built Mathlib.Algebra.Ring.Hom.Defs (4.3s)
✔ [771/832] Built Mathlib.Algebra.Order.Group.Unbundled.Basic (4.9s)
✔ [772/836] Built Mathlib.Algebra.Divisibility.Hom (2.6s)
✔ [773/839] Built Mathlib.Algebra.GroupWithZero.Invertible (2.3s)
✔ [774/842] Built Mathlib.Data.Set.NAry (2.6s)
✔ [775/845] Built Mathlib.Algebra.Ring.Rat (2.8s)
✔ [776/849] Built Mathlib.Algebra.GroupWithZero.Semiconj (2.5s)
✔ [777/849] Built Mathlib.Algebra.Ring.Nat (2.1s)
✔ [778/850] Built Mathlib.Data.Nat.Sqrt (1.8s)
✔ [779/850] Built Mathlib.Data.Set.Function (4.6s)
✔ [780/850] Built Mathlib.Algebra.Ring.Units (2.5s)
✔ [781/850] Built Mathlib.Algebra.Order.Group.OrderIso (2.7s)
✔ [782/852] Built Mathlib.Order.Bounds.Basic (6.2s)
✔ [783/852] Built Mathlib.Data.PNat.Notation (1.4s)
✔ [784/852] Built Mathlib.Algebra.Ring.Invertible (2.6s)
✔ [785/852] Built Mathlib.Algebra.Divisibility.Units (2.9s)
✔ [786/852] Built Mathlib.Data.Nat.Find (2.1s)
✔ [787/852] Built Mathlib.Algebra.GroupWithZero.Commute (2.0s)
✔ [788/852] Built Mathlib.Tactic.HaveI (1.5s)
✔ [789/852] Built Mathlib.Data.Int.Sqrt (2.3s)
✔ [790/856] Built Mathlib.Data.Nat.Cast.Basic (2.6s)
✔ [791/856] Built Mathlib.Algebra.Group.Nat.Even (2.6s)
✔ [792/859] Built Mathlib.Algebra.Ring.Commute (2.5s)
✔ [793/859] Built Mathlib.Lean.Expr.Rat (1.7s)
✔ [794/859] Built Mathlib.Data.Set.Pairwise.Basic (2.8s)
✔ [795/859] Built Mathlib.Order.WellFounded (2.8s)
✔ [796/859] Built Mathlib.Algebra.Order.Group.Lattice (2.7s)
✔ [797/859] Built Mathlib.Util.Qq (1.8s)
✔ [798/861] Built Mathlib.Data.PNat.Defs (2.1s)
✔ [799/861] Built Mathlib.Logic.Equiv.Set (4.1s)
✔ [800/861] Built Mathlib.Order.Nat (2.1s)
✔ [801/861] Built Mathlib.Algebra.Order.GroupWithZero.Basic (5.7s)
✔ [802/861] Built Mathlib.Order.Bounds.Image (3.7s)
✔ [803/861] Built Mathlib.Algebra.GroupWithZero.Units.Lemmas (2.4s)
✔ [804/861] Built Mathlib.Algebra.GroupWithZero.Divisibility (2.9s)
✔ [805/861] Built Mathlib.Order.CompleteLattice.Defs (3.6s)
✔ [806/862] Built Mathlib.Data.Nat.Cast.Order.Basic (3.0s)
✔ [807/866] Built Mathlib.Algebra.Group.Int.Even (2.9s)
✔ [808/866] Built Mathlib.Data.Nat.Cast.Commute (2.2s)
✔ [809/866] Built Mathlib.Data.Ineq (847ms)
✔ [810/868] Built Mathlib.Tactic.NormNum.Result (3.5s)
✔ [811/868] Built Mathlib.Tactic.TryThis (1.5s)
✔ [812/869] Built Mathlib.Order.ScottContinuity (2.7s)
✔ [813/876] Built Mathlib.Algebra.Field.Basic (3.7s)
✔ [814/876] Built Mathlib.Algebra.Order.Monoid.Defs (2.1s)
✔ [815/877] Built Mathlib.Algebra.Order.Monoid.Unbundled.ExistsOfLE (2.2s)
✔ [816/877] Built Mathlib.Algebra.Order.Group.Unbundled.Abs (3.7s)
✔ [817/877] Built Mathlib.Order.Hom.Set (4.4s)
✔ [818/879] Built Mathlib.Algebra.Order.Nonneg.Basic (3.7s)
✔ [819/879] Built Mathlib.Algebra.Group.WithOne.Defs (3.1s)
✔ [820/879] Built Mathlib.Algebra.GroupWithZero.Regular (1.8s)
✔ [821/880] Built Mathlib.Algebra.Ring.Parity (3.7s)
✔ [822/880] Built Mathlib.Tactic.NormNum.Core (3.5s)
✔ [823/880] Built Mathlib.Algebra.GroupWithZero.Equiv (2.2s)
✔ [824/880] Built Mathlib.Algebra.Regular.Basic (2.5s)
✔ [825/880] Built Mathlib.Algebra.Order.Group.Defs (2.5s)
✔ [826/883] Built Mathlib.Algebra.Order.Group.Int (1.9s)
✔ [827/883] Built Mathlib.Algebra.Order.Monoid.Canonical.Defs (2.3s)
✔ [828/883] Built Mathlib.Algebra.Order.Group.Unbundled.Int (2.5s)
✔ [829/883] Built Mathlib.Algebra.Order.Monoid.Units (2.3s)
✔ [830/883] Built Mathlib.Algebra.Group.WithOne.Map (2.7s)
✔ [831/883] Built Mathlib.Algebra.Order.Monoid.OrderDual (2.1s)
✔ [832/883] Built Mathlib.Order.Preorder.Chain (2.0s)
✔ [833/884] Built Mathlib.Algebra.Order.Monoid.Unbundled.WithTop (5.2s)
✔ [834/888] Built Mathlib.Algebra.Ring.Int.Parity (3.4s)
✔ [835/888] Built Mathlib.Algebra.Order.Monoid.Unbundled.TypeTags (2.1s)
✔ [836/888] Built Mathlib.Data.Int.Cast.Lemmas (3.4s)
✔ [837/888] Built Mathlib.Algebra.Order.Group.Nat (2.2s)
✔ [838/888] Built Mathlib.Algebra.Order.Group.Units (2.2s)
✔ [839/892] Built Mathlib.Order.CompleteLattice.Basic (6.1s)
✔ [840/892] Built Mathlib.Algebra.GroupWithZero.WithZero (3.0s)
✔ [841/894] Built Mathlib.Algebra.Order.Monoid.WithTop (2.0s)
✔ [842/894] Built Mathlib.Algebra.Order.Monoid.NatCast (2.1s)
✔ [843/894] Built Mathlib.Algebra.Order.Monoid.Unbundled.MinMax (2.3s)
✔ [844/894] Built Mathlib.Algebra.Order.Monoid.TypeTags (2.2s)
✔ [845/899] Built Mathlib.Data.Rat.Lemmas (2.9s)
✔ [846/899] Built Mathlib.Tactic.NormNum.Basic (6.3s)
✔ [847/900] Built Mathlib.Algebra.Order.Ring.Unbundled.Rat (5.4s)
✔ [848/900] Built Mathlib.Order.OmegaCompletePartialOrder (4.6s)
✔ [849/904] Built Mathlib.Order.CompleteLattice.Lemmas (2.8s)
✔ [850/904] Built Mathlib.Algebra.Order.Sub.Unbundled.Basic (2.4s)
✔ [851/904] Built Mathlib.Util.SynthesizeUsing (1.6s)
✔ [852/906] Built Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm.Datatypes (1.5s)
✔ [853/908] Built Mathlib.Lean.Meta.Tactic.Rewrite (1.4s)
✔ [854/908] Built Mathlib.Algebra.Order.AddGroupWithTop (2.9s)
✔ [855/908] Built Mathlib.Order.GaloisConnection.Basic (3.9s)
✔ [856/908] Built Mathlib.Data.Tree.Basic (1.7s)
✔ [857/908] Built Mathlib.Tactic.Zify (2.2s)
✔ [858/911] Built Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm.SimplexAlgorithm (1.7s)
✔ [859/914] Built Mathlib.Util.ElabWithoutMVars (1.5s)
✔ [860/915] Built Mathlib.Algebra.Order.Ring.Unbundled.Basic (3.0s)
✔ [861/915] Built Mathlib.Algebra.Order.Sub.Basic (2.6s)
✔ [862/915] Built Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm.Gauss (1.9s)
✔ [863/917] Built Mathlib.Data.NNRat.Defs (3.8s)
✔ [864/917] Built Mathlib.Tactic.NormNum.Pow (4.8s)
✔ [865/921] Built Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm.PositiveVector (1.5s)
✔ [866/924] Built Mathlib.Order.ConditionallyCompleteLattice.Defs (2.2s)
✔ [867/924] Built Mathlib.Order.Hom.Order (2.5s)
✔ [868/924] Built Mathlib.Order.ConditionallyCompletePartialOrder.Defs (2.2s)
✔ [869/929] Built Mathlib.Order.Antichain (2.7s)
✔ [870/931] Built Mathlib.Algebra.Order.Ring.Defs (2.7s)
✔ [871/931] Built Mathlib.Data.Set.Order (2.3s)
✔ [872/931] Built Mathlib.Algebra.Field.Rat (2.5s)
✔ [873/931] Built Mathlib.Order.ConditionallyCompletePartialOrder.Basic (2.4s)
✔ [874/932] Built Mathlib.Order.Interval.Set.Image (3.5s)
✔ [875/932] Built Mathlib.Algebra.Order.Monoid.Basic (2.4s)
✔ [876/933] Built Mathlib.Order.LatticeIntervals (3.4s)
✔ [877/939] Built Mathlib.Algebra.Order.GroupWithZero.Canonical (7.1s)
✔ [878/939] Built Mathlib.Algebra.Order.Positive.Ring (2.8s)
✔ [879/939] Built Mathlib.Algebra.Order.Ring.Canonical (3.0s)
✔ [880/942] Built Mathlib.Order.CompleteBooleanAlgebra (7.4s)
✔ [881/942] Built Mathlib.Order.Interval.Set.LinearOrder (4.5s)
✔ [882/945] Built Mathlib.Algebra.Order.Ring.Rat (2.5s)
✔ [883/946] Built Mathlib.Algebra.Order.Ring.InjSurj (2.1s)
✔ [884/946] Built Mathlib.Tactic.CancelDenoms.Core (3.8s)
✔ [885/947] Built Mathlib.Data.Rat.Cast.Defs (2.0s)
✔ [886/948] Built Mathlib.Algebra.Order.Ring.Nat (2.6s)
✔ [887/950] Built Mathlib.Data.Set.BooleanAlgebra (2.2s)
✔ [888/956] Built Mathlib.Algebra.Order.Group.Abs (3.1s)
✔ [889/956] Built Mathlib.Data.Int.GCD (2.0s)
✔ [890/956] Built Mathlib.Algebra.Order.Field.Canonical (2.7s)
✔ [891/957] Built Mathlib.Algebra.Notation (1.0s)
✔ [892/957] Built Mathlib.Algebra.Order.Hom.Basic (2.1s)
✔ [893/958] Built Mathlib.Order.Interval.Set.UnorderedInterval (3.6s)
✔ [894/958] Built Mathlib.Data.Int.Cast.Pi (1.5s)
✔ [895/958] Built Mathlib.Data.Int.Cast.Field (2.0s)
✔ [896/958] Built Mathlib.Data.Rat.Cast.CharZero (2.7s)
✔ [897/958] Built Mathlib.Algebra.Order.Ring.Basic (2.0s)
✔ [898/961] Built Mathlib.Data.Nat.Cast.Order.Ring (2.8s)
✔ [899/962] Built Mathlib.Algebra.Notation.Support (3.1s)
✔ [900/962] Built Mathlib.Data.Set.Lattice.Indexed (3.2s)
✔ [901/962] Built Mathlib.Algebra.Order.Ring.Int (3.1s)
✔ [902/963] Built Mathlib.Data.Nat.Factorial.Basic (3.2s)
✔ [903/963] Built Aeneas.Tactic.Simp.SimpScalar.Init (2.2s)
✔ [904/964] Built Aeneas.Tactic.Solver.ScalarTac.Init (2.9s)
✔ [905/964] Built Aeneas.Tactic.Simp.SimpBoolProp.Init (2.1s)
✔ [906/964] Built Mathlib.Order.Interval.Set.OrderEmbedding (2.7s)
✔ [907/964] Built Mathlib.Algebra.Order.Group.PosPart (3.7s)
✔ [908/966] Built Mathlib.Algebra.Order.Invertible (2.3s)
✔ [909/967] Built Mathlib.Tactic.NormNum.Abs (2.9s)
✔ [910/967] Built Aeneas.Tactic.Conv.Bvify.Init (1.0s)
✔ [911/967] Built Mathlib.Tactic.Linarith.Lemmas (2.7s)
✔ [912/967] Built Mathlib.Tactic.NormNum.Inv (4.2s)
✔ [913/967] Built Mathlib.Data.Int.CharZero (2.5s)
✔ [914/967] Built Aeneas.Data.Nat (1.8s)
✔ [915/967] Built Aeneas.Data.Int (1.9s)
✔ [916/967] Built Mathlib.Algebra.Order.Ring.Cast (2.8s)
✔ [917/967] Built Mathlib.Data.Set.Lattice.Bounded (3.4s)
✔ [918/968] Built Aeneas.Tactic.Simp.SimpLists.Init (2.3s)
✔ [919/972] Built Aeneas.Tactic.Simp.SimpBoolProp.SimpBoolProp (3.1s)
✔ [920/978] Built Mathlib.Order.Interval.Set.OrdConnected (3.1s)
✔ [921/978] Built Mathlib.Order.ConditionallyCompleteLattice.Basic (5.2s)
✔ [922/981] Built Mathlib.Tactic.Linarith.Datatypes (3.2s)
✔ [923/981] Built Aeneas.Std.Scalar.Elab (3.6s)
✔ [924/981] Built Mathlib.Algebra.Group.Nat.Units (1.6s)
✔ [925/981] Built Batteries.Data.Fin.Basic (1.0s)
✔ [926/981] Built Mathlib.Tactic.NormNum.Eq (3.2s)
✔ [927/983] Built Mathlib.Algebra.Group.Irreducible.Defs (1.6s)
✔ [928/983] Built Mathlib.Order.BourbakiWitt (2.6s)
✔ [929/983] Built Mathlib.Data.Int.DivMod (1.3s)
✔ [930/983] Built Mathlib.Algebra.GroupWithZero.Opposite (1.9s)
✔ [931/983] Built Mathlib.Algebra.Group.ULift (2.4s)
✔ [932/983] Built Mathlib.Tactic.Linarith.Parsing (3.2s)
✔ [933/983] Built Mathlib.Tactic.Positivity.Core (5.7s)
✔ [934/987] Built Mathlib.Algebra.Prime.Defs (2.6s)
✔ [935/987] Built Mathlib.Tactic.Linarith.Preprocessing (4.0s)
✔ [936/987] Built Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm (3.0s)
✔ [937/987] Built Mathlib.Order.CompleteLatticeIntervals (4.4s)
✔ [938/989] Built Mathlib.Tactic.NormNum.Ineq (4.6s)
✔ [939/989] Built Mathlib.Order.FixedPoints (3.5s)
✔ [940/989] Built Mathlib.Algebra.Group.ModEq (2.3s)
✔ [941/989] Built Mathlib.Data.Fin.Basic (3.5s)
✔ [942/989] Built Mathlib.Data.Nat.Prime.Defs (2.0s)
✔ [943/990] Built Mathlib.Algebra.Ring.Equiv (5.5s)
✔ [944/990] Built Mathlib.Tactic.Ring.Common (10s)
✔ [945/990] Built Mathlib.Tactic.Linarith.Verification (4.0s)
✔ [946/990] Built Mathlib.Algebra.Ring.Opposite (4.4s)
✔ [947/992] Built Mathlib.Data.Nat.GCD.Basic (3.1s)
✔ [948/992] Built Mathlib.Data.Nat.Cast.Prod (1.8s)
✔ [949/992] Built Mathlib.Algebra.Order.Nonneg.Lattice (2.7s)
✔ [950/992] Built Aeneas.Data.Coinductive.ITreeWP.FunctionalWP (2.4s)
✔ [951/992] Built Mathlib.Tactic.NormNum.DivMod (3.2s)
✔ [952/992] Built Mathlib.Algebra.GroupWithZero.Units.Equiv (2.0s)
✔ [953/993] Built Mathlib.Algebra.CharP.Defs (2.9s)
✔ [954/997] Built Mathlib.Algebra.Ring.ULift (3.3s)
✔ [955/997] Built Mathlib.Algebra.Group.Int.Units (2.1s)
✔ [956/997] Built Mathlib.Data.Fin.SuccPred (4.3s)
✔ [957/997] Built Mathlib.Data.Nat.ModEq (3.6s)
✔ [958/997] Built Mathlib.Data.ENat.Defs (1.4s)
✔ [959/997] Built Aeneas.Data.Coinductive.ITreeWP.DWP (2.9s)
✔ [960/997] Built Aeneas.Data.Coinductive.ITreeWP.DWLP (3.1s)
✔ [961/1007] Built Mathlib.Algebra.Order.Nonneg.Ring (3.4s)
✔ [962/1007] Built Mathlib.Algebra.Order.Sub.WithTop (2.0s)
✔ [963/1007] Built Aeneas.Data.Coinductive.ITreeWP.Taxonomy (622ms)
✔ [964/1009] Built Mathlib.Algebra.Ring.Int.Units (1.9s)
✔ [965/1011] Built Aeneas.Data.Coinductive.ITreeWP.Tests (994ms)
✔ [966/1012] Built Mathlib.Data.Fin.Rev (2.4s)
✔ [967/1012] Built Mathlib.Tactic.Ring.Basic (6.3s)
✔ [968/1013] Built Mathlib.Control.Functor (1.6s)
✔ [969/1013] Built Mathlib.Data.Int.ModEq (2.7s)
✔ [970/1018] Built Aeneas.Data.Coinductive.ITreeWP (978ms)
✔ [971/1018] Built Mathlib.Tactic.Positivity.Basic (11s)
✔ [972/1018] Built Mathlib.Order.Interval.Set.WithBotTop (2.9s)
✔ [973/1018] Built Mathlib.Data.ENat.Basic (2.9s)
✔ [974/1018] Built Mathlib.Data.List.Monad (1.9s)
✔ [975/1018] Built Mathlib.Algebra.Order.Nonneg.Field (3.7s)
✔ [976/1018] Built Batteries.Data.List.Perm (1.6s)
✔ [977/1018] Built Mathlib.Algebra.Order.Ring.WithTop (6.4s)
✔ [978/1019] Built Mathlib.Algebra.Group.Fin.Basic (2.7s)
✔ [979/1019] Built Mathlib.Data.List.Defs (2.1s)
✔ [980/1019] Built Mathlib.Data.List.Forall2 (2.7s)
✔ [981/1019] Built Mathlib.Data.List.InsertIdx (2.5s)
✔ [982/1020] Built Mathlib.Tactic.Ring.RingNF (3.5s)
✔ [983/1027] Built Mathlib.Algebra.Order.Field.Rat (2.7s)
✔ [984/1027] Built Mathlib.Tactic.Linarith.Frontend (4.4s)
✔ [985/1027] Built Mathlib.Tactic.NormNum.OfScientific (3.0s)
✔ [986/1037] Built Mathlib.Algebra.CharP.Basic (2.7s)
✔ [987/1044] Built Mathlib.Data.List.Count (2.3s)
✔ [988/1053] Built Mathlib.Data.ENat.Monoid (3.7s)
✔ [989/1060] Built Mathlib.Data.Finset.Attr (1.8s)
✔ [990/1067] Built Aeneas.Std.WP (5.8s)
✔ [991/1067] Built Mathlib.Order.Cover (5.5s)
✔ [992/1067] Built Mathlib.Data.Set.List (2.5s)
✔ [993/1068] Built Mathlib.Data.List.Perm.Basic (3.3s)
✔ [994/1075] Built Batteries.Data.Fin.Lemmas (1.3s)
✔ [995/1080] Built Mathlib.Data.List.Induction (2.5s)
✔ [996/1080] Built Mathlib.Data.List.Basic (4.7s)
✔ [997/1080] Built Mathlib.Basic.Finite.Defs (2.3s)
✔ [998/1080] Built Mathlib.Data.Fin.Embedding (2.9s)
✔ [999/1080] Built Mathlib.Data.Rat.Cast.Order (5.3s)
✔ [1000/1080] Built Mathlib.Data.List.TakeDrop (4.4s)
✔ [1001/1080] Built Mathlib.Logic.Small.Defs (1.6s)
✔ [1002/1080] Built Mathlib.Basic.Countable.Defs (1.7s)
✔ [1003/1080] Built Aeneas.Tactic.Step.PrepareIntroOutputs (3.8s)
✔ [1004/1080] Built Mathlib.Data.List.Lattice (2.9s)
✔ [1005/1080] Built Mathlib.Data.List.Perm.Subperm (2.9s)
✔ [1006/1080] Built Aeneas.Command.Decompose (5.8s)
✔ [1007/1080] Built Mathlib.Basic.UnivLE (2.0s)
✔ [1008/1084] Built Mathlib.Tactic.NormNum (3.4s)
✔ [1009/1084] Built Mathlib.Data.List.Infix (3.2s)
✔ [1010/1084] Built Mathlib.Order.Fin.Basic (3.7s)
✔ [1011/1084] Built Mathlib.Data.List.Nodup (3.0s)
✔ [1012/1084] Built Mathlib.Logic.Small.Basic (2.4s)
✔ [1013/1087] Built Mathlib.Order.SuccPred.Basic (6.5s)
✔ [1014/1087] Built Mathlib.Algebra.Order.Hom.Monoid (6.1s)
✔ [1015/1087] Built Mathlib.Algebra.BigOperators.Group.List.Defs (1.7s)
✔ [1016/1089] Built Mathlib.Data.List.Flatten (1.8s)
✔ [1017/1089] Built Mathlib.Data.Multiset.Defs (2.6s)
✔ [1018/1089] Built Aeneas.Tactic.Step.SpecInfo (2.0s)
✔ [1019/1089] Built Mathlib.Data.List.ProdSigma (2.2s)
✔ [1020/1090] Built Mathlib.Tactic.Linarith (2.6s)
✔ [1021/1090] Built Mathlib.Basic.Countable.Small (2.2s)
✔ [1022/1090] Built Mathlib.Data.List.Dedup (2.4s)
✔ [1023/1090] Built Mathlib.Data.List.Perm.Lattice (2.4s)
✔ [1024/1090] Built Mathlib.Data.List.Duplicate (2.5s)
✔ [1025/1090] Built Mathlib.Data.List.Lex (2.6s)
✔ [1026/1092] Built Mathlib.Order.SuccPred.WithBot (2.7s)
✔ [1027/1095] Built Mathlib.Data.Fin.Tuple.Basic (4.7s)
✔ [1028/1095] Built Mathlib.Data.List.Rotate (3.1s)
✔ [1029/1097] Built Mathlib.Data.Multiset.ZeroCons (3.4s)
✔ [1030/1099] Built Mathlib.Order.SuccPred.Archimedean (4.2s)
✔ [1031/1099] Built Mathlib.Data.Finset.Defs (3.4s)
✔ [1032/1099] Built Mathlib.Algebra.Order.Hom.MonoidWithZero (4.5s)
✔ [1033/1101] Built Mathlib.Algebra.BigOperators.Group.List.Basic (4.7s)
✔ [1034/1101] Built Mathlib.Data.List.OfFn (2.8s)
✔ [1035/1101] Built Mathlib.Data.List.FinRange (2.6s)
✔ [1036/1101] Built Aeneas.Tactic.Solver.ScalarTac.Core (4.3s)
✔ [1037/1104] Built Mathlib.Data.List.Chain (3.9s)
✔ [1038/1104] Built Mathlib.Data.Multiset.Count (2.7s)
✔ [1039/1107] Built Mathlib.Data.Multiset.Basic (2.8s)
✔ [1040/1107] Built Mathlib.Data.Finset.Empty (2.9s)
✔ [1041/1107] Built Mathlib.Data.List.Enum (2.6s)
✔ [1042/1112] Built Mathlib.Data.Nat.Choose.Basic (3.0s)
✔ [1043/1113] Built Mathlib.Algebra.Order.Hom.Ring (3.7s)
✔ [1044/1113] Built Mathlib.Data.List.Range (2.7s)
✔ [1045/1114] Built Mathlib.Data.Set.Piecewise (2.3s)
✔ [1046/1120] Built Aeneas.Tactic.Step.Init (8.3s)
✔ [1047/1120] Built Mathlib.Order.SuccPred.Limit (5.5s)
✔ [1048/1120] Built Mathlib.Data.List.Sort (4.1s)
✔ [1049/1120] Built Mathlib.Data.Multiset.AddSub (3.5s)
✔ [1050/1121] Built Mathlib.Data.List.OffDiag (3.7s)
✔ [1051/1121] Built Mathlib.Algebra.BigOperators.Group.List.Lemmas (3.1s)
✔ [1052/1123] Built Aeneas.Std.Core.Cmp (3.5s)
✔ [1053/1128] Built Mathlib.Data.Set.Sigma (3.0s)
✔ [1054/1132] Built Aeneas.Tactic.Solver.ScalarTac.ScalarTac (7.3s)
✔ [1055/1134] Built Mathlib.Data.Set.Lattice.Image (4.2s)
✔ [1056/1135] Built Mathlib.Order.Hom.Bounded (5.1s)
✔ [1057/1139] Built Mathlib.Order.Hom.Lattice (5.0s)
✔ [1058/1139] Built Mathlib.Algebra.Order.SuccPred (4.1s)
✔ [1059/1139] Built Aeneas.Std.Core.Core (4.7s)
✔ [1060/1139] Built Mathlib.Data.List.NodupEquivFin (3.0s)
✔ [1061/1139] Built Mathlib.Data.Multiset.Replicate (2.8s)
✔ [1062/1139] Built Mathlib.Logic.Function.DependsOn (2.3s)
✔ [1063/1139] Built Mathlib.Control.Applicative (2.1s)
✔ [1064/1139] Built Mathlib.Control.Traversable.Basic (2.0s)
✔ [1065/1143] Built Mathlib.Logic.Embedding.Set (2.9s)
✔ [1066/1143] Built Mathlib.Data.Vector.Defs (2.6s)
✔ [1067/1147] Built Mathlib.Order.Setoid.Basic (2.8s)
✔ [1068/1147] Built Mathlib.Tactic.ApplyFun (2.6s)
✔ [1069/1147] Built Mathlib.Order.SuccPred.Nat (2.6s)
✔ [1070/1151] Built Mathlib.Data.List.Sublists (2.6s)
✔ [1071/1151] Built Mathlib.Data.List.Zip (2.4s)
✔ [1072/1153] Built Aeneas.Std.Core.Convert (3.6s)
✔ [1073/1153] Built Mathlib.Data.Multiset.MapFold (3.3s)
✔ [1074/1153] Built Mathlib.Order.Hom.BoundedLattice (4.7s)
✔ [1075/1153] Built Aeneas.Std.Alloc.Alloc (3.9s)
✔ [1076/1157] Built Mathlib.Data.Set.Lattice.Disjoint (2.3s)
✔ [1077/1157] Built Mathlib.Data.Nat.Bits (1.7s)
✔ [1078/1157] Built Mathlib.Order.SuccPred.ENat (2.8s)
✔ [1079/1160] Built Mathlib.Data.Vector.Basic (3.7s)
✔ [1080/1161] Built Mathlib.Data.Nat.Pairing (2.5s)
✔ [1081/1161] Built Mathlib.Data.Nat.Order.Lemmas (2.0s)
✔ [1082/1161] Built Mathlib.Data.Finset.Attach (3.1s)
✔ [1083/1163] Built Mathlib.Data.PNat.Equiv (2.1s)
✔ [1084/1165] Built Mathlib.Data.Multiset.Filter (3.5s)
✔ [1085/1165] Built Mathlib.Data.Set.Pairwise.Lattice (2.8s)
✔ [1086/1165] Built Mathlib.Data.List.MinMax (4.5s)
✔ [1087/1167] Built Mathlib.Data.ENat.Pow (3.2s)
✔ [1088/1167] Built Mathlib.Logic.Equiv.Nat (2.4s)
✔ [1089/1167] Built Aeneas.Std.Alloc.Boxed (4.4s)
✔ [1090/1167] Built Mathlib.Logic.Small.Set (2.4s)
✔ [1091/1167] Built Mathlib.Order.RelIso.Set (2.2s)
✔ [1092/1167] Built Mathlib.Data.Finset.Filter (2.9s)
✔ [1093/1171] Built Aeneas.Std.Scalar.Core (10s)
✔ [1094/1171] Built Mathlib.Order.Minimal (4.6s)
✔ [1095/1171] Built Mathlib.Order.Prod.Lex.Basic (3.6s)
✔ [1096/1171] Built Mathlib.Data.Finset.Erase (2.5s)
✔ [1097/1181] Built Mathlib.Algebra.BigOperators.Group.Multiset.Defs (2.8s)
✔ [1098/1184] Built Mathlib.Data.Multiset.UnionInter (3.2s)
✔ [1099/1184] Built Mathlib.Logic.Encodable.Basic (2.0s)
✔ [1100/1184] Built Mathlib.Basic.Countable.Basic (2.6s)
✔ [1101/1184] Built Mathlib.Order.CompleteLattice.Chain (2.2s)
✔ [1102/1184] Built Mathlib.SetTheory.Cardinal.Defs (2.8s)
✔ [1103/1185] Built Mathlib.Order.ConditionallyCompletePartialOrder.Indexed (3.0s)
✔ [1104/1188] Built Mathlib.Order.UpperLower.Basic (4.6s)
✔ [1105/1188] Built Mathlib.Algebra.GroupWithZero.Prod (2.7s)
✔ [1106/1191] Built Mathlib.Order.Sum.Order (5.4s)
✔ [1107/1191] Built Mathlib.Algebra.Ring.CompTypeclasses (2.3s)
✔ [1108/1195] Built Mathlib.Data.Fintype.Defs (3.9s)
✔ [1109/1202] Built Mathlib.Data.Multiset.Dedup (2.6s)
✔ [1110/1202] Built Mathlib.Data.Int.Cast.Prod (1.9s)
✔ [1111/1202] Built Mathlib.Data.Multiset.Range (2.4s)
✔ [1112/1202] Built Mathlib.Order.Zorn (2.3s)
✔ [1113/1202] Built Mathlib.Algebra.Group.Subsemigroup.Defs (3.2s)
✔ [1114/1207] Built Mathlib.Algebra.Group.Conj (2.9s)
✔ [1115/1207] Built Mathlib.Order.Hom.Lex (3.2s)
✔ [1116/1207] Built Mathlib.Algebra.Group.Action.Defs (3.5s)
✔ [1117/1207] Built Mathlib.Data.Finset.Dedup (2.7s)
✔ [1118/1207] Built Mathlib.Data.Multiset.Fold (2.7s)
✔ [1119/1207] Built Mathlib.Algebra.Order.Group.Multiset (2.7s)
✔ [1120/1207] Built Mathlib.Order.ConditionallyCompleteLattice.Indexed (4.0s)
✔ [1121/1209] Built Mathlib.Data.Multiset.FinsetOps (3.0s)
✔ [1122/1209] Built Mathlib.Algebra.Group.Pi.Lemmas (4.9s)
✔ [1123/1209] Built Mathlib.Algebra.Group.Action.Faithful (1.7s)
✔ [1124/1209] Built Mathlib.Algebra.Group.Subsemigroup.Basic (2.8s)
✔ [1125/1209] Built Mathlib.SetTheory.Cardinal.SchroederBernstein (3.4s)
✔ [1126/1209] Built Mathlib.Algebra.Group.Action.Opposite (2.7s)
✔ [1127/1209] Built Mathlib.Algebra.Group.Submonoid.Defs (3.7s)
✔ [1128/1211] Built Mathlib.Algebra.Ring.Prod (4.2s)
✔ [1129/1211] Built Mathlib.Algebra.BigOperators.Group.Multiset.Basic (3.2s)
✔ [1130/1211] Built Mathlib.Data.Multiset.Sum (2.6s)
✔ [1131/1211] Built Mathlib.Order.InitialSeg (3.0s)
✔ [1132/1211] Built Mathlib.Data.Sym.Basic (3.8s)
✔ [1133/1211] Built Mathlib.Order.SuccPred.CompleteLinearOrder (3.4s)
✔ [1134/1211] Built Mathlib.Data.Multiset.Lattice (2.8s)
✔ [1135/1213] Built Mathlib.Algebra.Group.Center (6.1s)
✔ [1136/1214] Built Mathlib.Algebra.Group.Action.Units (2.7s)
✔ [1137/1215] Built Mathlib.Data.Finset.Lattice.Basic (3.2s)
✔ [1138/1215] Built Mathlib.Data.Finset.Insert (4.1s)
✔ [1139/1215] Built Mathlib.Algebra.Group.Submonoid.MulAction (2.6s)
✔ [1140/1215] Built Mathlib.Algebra.GroupWithZero.Action.Defs (3.1s)
✔ [1141/1215] Built Mathlib.Logic.Function.CompTypeclasses (1.3s)
✔ [1142/1215] Built Mathlib.GroupTheory.Subsemigroup.Center (2.1s)
✔ [1143/1215] Built Mathlib.Algebra.Group.Submonoid.Basic (3.5s)
✔ [1144/1215] Built Mathlib.Algebra.Group.Pointwise.Set.Scalar (3.1s)
✔ [1145/1215] Built Mathlib.Algebra.Group.Action.Basic (2.5s)
✔ [1146/1215] Built Mathlib.Data.Multiset.Bind (3.2s)
✔ [1147/1218] Built Mathlib.Algebra.Regular.SMul (2.3s)
✔ [1148/1223] Built Mathlib.Data.Finset.SDiff (2.7s)
✔ [1149/1223] Built Mathlib.Data.Finset.Range (2.8s)
✔ [1150/1223] Built Mathlib.Data.Finset.Lattice.Lemmas (2.8s)
✔ [1151/1226] Built Mathlib.Algebra.Group.Submonoid.DistribMulAction (2.2s)
✔ [1152/1227] Built Mathlib.Algebra.Group.Hom.CompTypeclasses (1.8s)
✔ [1153/1230] Built Mathlib.Data.Finset.Disjoint (2.9s)
✔ [1154/1230] Built Mathlib.Algebra.Group.Subgroup.Defs (5.6s)
✔ [1155/1231] Built Mathlib.Algebra.Module.Defs (2.5s)
✔ [1156/1232] Built Mathlib.Algebra.Group.Action.TypeTags (1.8s)
✔ [1157/1232] Built Mathlib.Data.Multiset.Powerset (2.9s)
✔ [1158/1238] Built Mathlib.Data.Multiset.Pi (2.5s)
✔ [1159/1240] Built Mathlib.Algebra.GroupWithZero.Action.Units (2.2s)
✔ [1160/1248] Built Mathlib.Algebra.Group.Commute.Hom (1.6s)
✔ [1161/1250] Built Mathlib.Algebra.Group.Support (2.3s)
✔ [1162/1250] Built Mathlib.Algebra.Group.Action.Pretransitive (2.1s)
✔ [1163/1255] Built Mathlib.Algebra.Order.Group.Action (2.3s)
✔ [1164/1255] Built Mathlib.Data.Finset.Basic (3.9s)
✔ [1165/1256] Built Mathlib.Data.Finset.Image (4.3s)
✔ [1166/1258] Built Mathlib.Algebra.Group.Irreducible.Lemmas (2.5s)
✔ [1167/1258] Built Mathlib.Algebra.Ring.Divisibility.Basic (3.1s)
✔ [1168/1258] Built Mathlib.Data.PNat.Basic (3.6s)
✔ [1169/1258] Built Mathlib.GroupTheory.GroupAction.Defs (4.8s)
✔ [1170/1258] Built Mathlib.Algebra.Group.Action.Hom (2.5s)
✔ [1171/1258] Built Mathlib.Algebra.Group.Submonoid.Operations (8.3s)
✔ [1172/1259] Built Mathlib.Data.List.Permutation (2.9s)
✔ [1173/1259] Built Mathlib.Dynamics.FixedPoints.Basic (2.7s)
✔ [1174/1259] Built Mathlib.Data.Fintype.OfMap (2.6s)
✔ [1175/1259] Built Mathlib.Data.Finset.Fold (2.8s)
✔ [1176/1259] Built Mathlib.Data.Finset.BooleanAlgebra (3.2s)
✔ [1177/1259] Built Mathlib.Data.Finset.SymmDiff (2.6s)
✔ [1178/1259] Built Mathlib.Algebra.GroupWithZero.Action.End (1.9s)
✔ [1179/1259] Built Mathlib.Algebra.Prime.Lemmas (2.9s)
✔ [1180/1267] Built Mathlib.Algebra.Group.Embedding (1.9s)
✔ [1181/1267] Built Mathlib.Algebra.Group.Pointwise.Set.Basic (9.0s)
✔ [1182/1269] Built Mathlib.Algebra.Order.Ring.Abs (3.7s)
✔ [1183/1270] Built Mathlib.GroupTheory.Submonoid.Center (3.7s)
✔ [1184/1275] Built Mathlib.Data.Finset.Union (3.9s)
✔ [1185/1276] Built Mathlib.Data.Finset.Piecewise (3.3s)
✔ [1186/1276] Built Mathlib.Algebra.Ring.Action.Basic (2.9s)
✔ [1187/1277] Built Mathlib.Data.Fintype.Sets (3.7s)
✔ [1188/1277] Built Mathlib.Data.Finset.Card (6.7s)
✔ [1189/1279] Built Mathlib.Algebra.Group.Subgroup.Lattice (6.1s)
✔ [1190/1279] Built Mathlib.Algebra.Notation.Indicator (3.1s)
✔ [1191/1279] Built Mathlib.Algebra.GroupWithZero.Associated (4.5s)
✔ [1192/1280] Built Mathlib.Order.Hom.WithTopBot (4.5s)
✔ [1193/1280] Built Mathlib.Algebra.Group.Subsemigroup.MulOpposite (2.8s)
✔ [1194/1280] Built Mathlib.Algebra.Group.Pointwise.Set.Lattice (3.4s)
✔ [1195/1280] Built Mathlib.Data.Fintype.Basic (2.0s)
✔ [1196/1280] Built Mathlib.Algebra.Group.Action.Pointwise.Set.Basic (4.0s)
✔ [1197/1280] Built Mathlib.Data.Finset.Option (2.6s)
✔ [1198/1280] Built Mathlib.Data.Finset.Pi (3.2s)
✔ [1199/1280] Built Mathlib.Algebra.FreeMonoid.Basic (4.3s)
✔ [1200/1280] Built Mathlib.Data.Finset.Sum (3.5s)
✔ [1201/1280] Built Mathlib.Algebra.Group.Idempotent (2.3s)
✔ [1202/1280] Built Mathlib.Data.Finset.Prod (3.8s)
✔ [1203/1281] Built Mathlib.Algebra.BigOperators.Group.Finset.Defs (5.0s)
✔ [1204/1281] Built Mathlib.Data.Nat.Prime.Basic (3.3s)
✔ [1205/1281] Built Mathlib.Algebra.Ring.Associated (2.8s)
✔ [1206/1281] Built Mathlib.Algebra.Group.Submonoid.MulOpposite (2.8s)
✔ [1207/1281] Built Mathlib.Algebra.Order.BigOperators.Group.List (3.5s)
✔ [1208/1281] Built Mathlib.Algebra.Group.Subgroup.Map (5.9s)
✔ [1209/1281] Built Mathlib.Algebra.Group.Submonoid.Finite (2.7s)
✔ [1210/1285] Built Mathlib.Data.Fintype.Card (3.1s)
✔ [1211/1285] Built Mathlib.Algebra.Group.TransferInstance (2.9s)
✔ [1212/1285] Built Mathlib.Order.Sigma.Lex (1.5s)
✔ [1213/1287] Built Mathlib.Order.CompleteLattice.Finset (3.4s)
✔ [1214/1287] Built Mathlib.Algebra.CharP.Two (2.9s)
✔ [1215/1292] Built Mathlib.Algebra.Group.Subgroup.MulOpposite (2.9s)
✔ [1216/1298] Built Mathlib.Algebra.Group.Commutator (1.7s)
✔ [1217/1298] Built Mathlib.Algebra.Group.Subgroup.ZPowers.Basic (3.3s)
✔ [1218/1302] Built Mathlib.GroupTheory.GroupAction.Hom (12s)
✔ [1219/1302] Built Mathlib.Data.Fintype.EquivFin (3.3s)
✔ [1220/1302] Built Mathlib.Algebra.Group.Action.End (3.4s)
✔ [1221/1302] Built Mathlib.Data.Finset.Lattice.Fold (6.5s)
✔ [1222/1302] Built Mathlib.GroupTheory.Subsemigroup.Centralizer (2.6s)
✔ [1223/1302] Built Mathlib.Algebra.GroupWithZero.Pointwise.Set.Basic (2.3s)
✔ [1224/1302] Built Mathlib.Algebra.Group.Action.Prod (2.9s)
✔ [1225/1302] Built Mathlib.Algebra.Quotient (2.4s)
✔ [1226/1306] Built Mathlib.Algebra.Group.Subgroup.Ker (6.5s)
✔ [1227/1306] Built Mathlib.Algebra.GCDMonoid.Basic (7.2s)
✔ [1228/1306] Built Mathlib.Data.Fintype.Prod (2.8s)
✔ [1229/1306] Built Mathlib.Data.Fintype.Sum (2.8s)
✔ [1230/1306] Built Mathlib.Algebra.BigOperators.Group.Finset.Basic (8.5s)
✔ [1231/1306] Built Mathlib.Data.Fintype.Option (2.6s)
✔ [1232/1306] Built Mathlib.Basic.Denumerable (3.1s)
✔ [1233/1306] Built Mathlib.Data.ZMod.Defs (3.1s)
✔ [1234/1306] Built Mathlib.Algebra.Group.Submonoid.Membership (5.2s)
✔ [1235/1306] Built Mathlib.Data.Finset.Lattice.Union (2.8s)
✔ [1236/1306] Built Mathlib.GroupTheory.Submonoid.Centralizer (2.4s)
✔ [1237/1307] Built Mathlib.Data.Set.Finite.Basic (4.2s)
✔ [1238/1307] Built Mathlib.Data.Finset.Sigma (3.1s)
✔ [1239/1307] Built Mathlib.Algebra.GroupWithZero.Action.Basic (2.8s)
✔ [1240/1307] Built Mathlib.Data.Finset.Max (4.4s)
✔ [1241/1307] Built Mathlib.Algebra.GCDMonoid.Nat (2.8s)
✔ [1242/1307] Built Mathlib.GroupTheory.Coset.Defs (3.7s)
✔ [1243/1307] Built Mathlib.Algebra.GCDMonoid.Multiset (2.8s)
✔ [1244/1307] Built Mathlib.Algebra.BigOperators.GroupWithZero.Finset (2.6s)
✔ [1245/1307] Built Mathlib.Algebra.BigOperators.Option (2.7s)
✔ [1246/1307] Built Mathlib.GroupTheory.Congruence.Defs (4.5s)
✔ [1247/1307] Built Mathlib.Data.Finset.NoncommProd (3.9s)
✔ [1248/1307] Built Mathlib.Logic.Equiv.List (2.0s)
✔ [1249/1307] Built Mathlib.Algebra.BigOperators.Group.Finset.Piecewise (4.1s)
✔ [1250/1307] Built Mathlib.Data.Finset.Powerset (3.3s)
✔ [1251/1307] Built Mathlib.SetTheory.Cardinal.Order (3.8s)
✔ [1252/1311] Built Mathlib.Algebra.Module.NatInt (3.7s)
✔ [1253/1311] Built Mathlib.Data.Fintype.Pi (3.4s)
✔ [1254/1311] Built Mathlib.Data.Set.Finite.Range (3.2s)
✔ [1255/1311] Built Mathlib.Order.Preorder.Finite (3.1s)
✔ [1256/1311] Built Mathlib.Algebra.BigOperators.Group.Finset.Sigma (3.1s)
✔ [1257/1311] Built Mathlib.Data.Finset.Preimage (3.1s)
✔ [1258/1311] Built Mathlib.Algebra.GCDMonoid.Finset (2.9s)
✔ [1259/1311] Built Mathlib.Algebra.GroupWithZero.Action.Pointwise.Set (3.3s)
✔ [1260/1315] Built Mathlib.Data.Fintype.Sigma (3.7s)
✔ [1261/1315] Built Mathlib.Algebra.Group.Subgroup.Basic (8.0s)
✔ [1262/1317] Built Mathlib.GroupTheory.Congruence.Hom (3.3s)
✔ [1263/1317] Built Mathlib.Algebra.Group.Submonoid.BigOperators (3.3s)
✔ [1264/1317] Built Mathlib.Data.Fintype.List (2.0s)
✔ [1265/1317] Built Mathlib.Algebra.GroupWithZero.Action.Opposite (1.9s)
✔ [1266/1317] Built Mathlib.Algebra.Regular.Opposite (1.7s)
✔ [1267/1317] Built Mathlib.Data.Fintype.Powerset (2.8s)
✔ [1268/1317] Built Mathlib.Data.Set.Finite.Powerset (2.9s)
✔ [1269/1320] Built Mathlib.Basic.Finite.Prod (2.7s)
✔ [1270/1320] Built Mathlib.Data.Set.Countable (2.5s)
✔ [1271/1320] Built Mathlib.Logic.Equiv.Sigma (1.9s)
✔ [1272/1320] Built Mathlib.Algebra.Module.Opposite (1.9s)
✔ [1273/1320] Built Mathlib.Algebra.Group.Subgroup.MulOppositeLemmas (2.8s)
✔ [1274/1320] Built Mathlib.GroupTheory.Subgroup.Center (2.7s)
✔ [1275/1321] Built Mathlib.Data.Nat.Log (2.0s)
✔ [1276/1323] Built Mathlib.Data.Nat.Prime.Pow (3.2s)
✔ [1277/1323] Built Mathlib.Data.List.Cycle (4.9s)
✔ [1278/1323] Built Mathlib.Basic.Finite.Sigma (3.3s)
✔ [1279/1323] Built Mathlib.GroupTheory.Coset.Basic (6.1s)
✔ [1280/1323] Built Mathlib.Data.Fintype.Vector (3.2s)
✔ [1281/1323] Built Mathlib.GroupTheory.QuotientGroup.Defs (5.9s)
✔ [1282/1326] Built Mathlib.Algebra.Group.Pointwise.Set.Finite (3.9s)
✔ [1283/1326] Built Mathlib.Data.Set.Finite.Lattice (4.9s)
✔ [1284/1327] Built Mathlib.Order.Interval.Finset.Defs (7.5s)
✔ [1285/1327] Built Mathlib.Algebra.Module.Torsion.Free (3.1s)
✔ [1286/1327] Built Mathlib.Algebra.Group.Subgroup.Actions (2.7s)
✔ [1287/1327] Built Mathlib.GroupTheory.Subgroup.Centralizer (3.5s)
✔ [1288/1328] Built Mathlib.Algebra.IsPrimePow (2.5s)
✔ [1289/1328] Built Mathlib.Algebra.Order.Monoid.Multiset (2.4s)
✔ [1290/1328] Built Mathlib.Algebra.Order.BigOperators.Group.Multiset (2.9s)
✔ [1291/1328] Built Mathlib.Dynamics.PeriodicPts.Defs (3.5s)
✔ [1292/1331] Built Mathlib.Order.Interval.Set.SuccPred (3.2s)
✔ [1293/1331] Built Mathlib.Data.Fintype.BigOperators (3.6s)
✔ [1294/1331] Built Mathlib.Order.ConditionallyCompleteLattice.Finset (4.2s)
✔ [1295/1332] Built Mathlib.Algebra.Ring.CharZero (2.7s)
✔ [1296/1334] Built Mathlib.GroupTheory.GroupAction.ConjAct (3.8s)
✔ [1297/1337] Built Mathlib.Data.List.NatAntidiagonal (2.9s)
✔ [1298/1337] Built Mathlib.GroupTheory.GroupAction.Basic (5.1s)
✔ [1299/1339] Built Mathlib.Order.Interval.Finset.Basic (6.1s)
✔ [1300/1341] Built Mathlib.Algebra.Order.Antidiag.Prod (5.4s)
✔ [1301/1341] Built Mathlib.Order.Interval.Finset.SuccPred (4.9s)
✔ [1302/1341] Built Mathlib.Algebra.BigOperators.Ring.List (3.8s)
✔ [1303/1341] Built Mathlib.GroupTheory.Commutator.Basic (8.5s)
✔ [1304/1342] Built Mathlib.Data.List.Prime (4.2s)
✔ [1305/1342] Built Mathlib.Algebra.Order.BigOperators.Group.Finset (7.4s)
✔ [1306/1342] Built Mathlib.SetTheory.Cardinal.Basic (6.8s)
✔ [1307/1342] Built Mathlib.Data.Multiset.NatAntidiagonal (4.1s)
✔ [1308/1342] Built Mathlib.Data.Nat.Prime.Infinite (4.2s)
✔ [1309/1349] Built Mathlib.GroupTheory.GroupAction.SubMulAction (9.0s)
✔ [1310/1349] Built Mathlib.Order.Interval.Set.Infinite (3.3s)
✔ [1311/1351] Built Mathlib.Order.Interval.Multiset (3.9s)
✔ [1312/1352] Built Mathlib.Tactic.FinCases (3.1s)
✔ [1313/1352] Built Aeneas.Tactic.Simproc.ReduceZMod.Init (2.1s)
✔ [1314/1354] Built Mathlib.Data.Nat.Factors (3.1s)
✔ [1315/1354] Built Mathlib.Algebra.Module.RingHom (2.5s)
✔ [1316/1362] Built Mathlib.Algebra.Order.Interval.Finset.SuccPred (3.9s)
✔ [1317/1362] Built Mathlib.Data.Finset.NatAntidiagonal (3.2s)
✔ [1318/1362] Built Mathlib.SetTheory.Cardinal.ENat (3.7s)
✔ [1319/1366] Built Mathlib.Algebra.EuclideanDomain.Defs (2.5s)
✔ [1320/1366] Built Mathlib.Algebra.Group.PUnit (1.7s)
✔ [1321/1366] Built Mathlib.Data.Nat.Prime.Int (3.2s)
✔ [1322/1366] Built Mathlib.Order.Interval.Finset.Nat (3.9s)
✔ [1323/1366] Built Mathlib.Algebra.GroupWithZero.Action.Regular (2.5s)
✔ [1324/1366] Built Mathlib.GroupTheory.GroupAction.Quotient (6.5s)
✔ [1325/1366] Built Mathlib.Data.Nat.PrimeFin (3.5s)
✔ [1326/1368] Built Mathlib.Algebra.Ring.PUnit (2.6s)
✔ [1327/1368] Built Mathlib.Algebra.EuclideanDomain.Field (3.8s)
✔ [1328/1368] Built Mathlib.SetTheory.Cardinal.ToNat (4.7s)
✔ [1329/1368] Built Mathlib.Algebra.EuclideanDomain.Int (3.6s)
✔ [1330/1368] Built Aeneas.Tactic.Solver.ScalarTac.CondSimpTac (9.3s)
✔ [1331/1370] Built Mathlib.Algebra.EuclideanDomain.Basic (5.5s)
✔ [1332/1371] Built Mathlib.Algebra.Module.Submodule.Defs (7.8s)
✔ [1333/1375] Built Mathlib.Order.Lattice.Nat (5.8s)
✔ [1334/1375] Built Mathlib.Algebra.GroupWithZero.Idempotent (3.5s)
✔ [1335/1380] Built Mathlib.Algebra.Module.PUnit (4.2s)
✔ [1336/1381] Built Mathlib.Algebra.GroupWithZero.Action.Prod (4.5s)
✔ [1337/1381] Built Mathlib.Tactic.Abel (9.7s)
✔ [1338/1382] Built Mathlib.Algebra.GroupWithZero.NonZeroDivisors (7.5s)
✔ [1339/1384] Built Mathlib.Dynamics.PeriodicPts.Lemmas (4.0s)
✔ [1340/1385] Built Mathlib.SetTheory.Cardinal.Finite (6.7s)
✔ [1341/1385] Built Mathlib.Algebra.Ring.Idempotent (4.3s)
✔ [1342/1385] Built Mathlib.Algebra.Module.Submodule.Basic (5.7s)
✔ [1343/1385] Built Mathlib.Order.OrderIsoNat (5.7s)
✔ [1344/1385] Built Mathlib.Algebra.Module.Prod (3.6s)
✔ [1345/1388] Built Mathlib.RingTheory.Ideal.Defs (4.5s)
✔ [1346/1389] Built Mathlib.Algebra.Module.LinearMap.Defs (17s)
✔ [1347/1389] Built Mathlib.Basic.Finite.Set (3.7s)
✔ [1348/1389] Built Mathlib.Data.Finset.Order (3.6s)
✔ [1349/1389] Built Mathlib.Order.Hom.CompleteLattice (6.5s)
✔ [1350/1392] Built Mathlib.Algebra.GroupWithZero.Units.Fintype (3.8s)
✔ [1351/1394] Built Mathlib.Data.Set.Lattice.Order (2.0s)
✔ [1352/1397] Built Mathlib.NumberTheory.Divisors (14s)
✔ [1353/1402] Built Mathlib.GroupTheory.Coset.Card (5.0s)
✔ [1354/1402] Built Mathlib.Data.Set.Monotone (2.9s)
✔ [1355/1402] Built Mathlib.Order.WellQuasiOrder (3.8s)
✔ [1356/1405] Built Mathlib.Order.Interval.Set.OrderIso (2.0s)
✔ [1357/1407] Built Mathlib.Algebra.Algebra.Defs (4.5s)
✔ [1358/1409] Built Mathlib.Data.Set.Card (7.8s)
✔ [1359/1409] Built Mathlib.Order.Closure (3.0s)
✔ [1360/1410] Built Mathlib.Data.Finset.Lattice.Prod (3.0s)
✔ [1361/1411] Built Mathlib.Algebra.Module.Torsion.Field (3.2s)
✔ [1362/1411] Built Mathlib.Tactic.Ring.PNat (3.3s)
✔ [1363/1411] Built Mathlib.Algebra.GroupWithZero.Pi (1.8s)
✔ [1364/1413] Built Mathlib.Algebra.Group.Action.Pi (2.5s)
✔ [1365/1413] Built Mathlib.Order.ModularLattice (5.2s)
✔ [1366/1413] Built Mathlib.Algebra.Order.SuccPred.WithBot (3.1s)
✔ [1367/1416] Built Mathlib.Order.WellFoundedSet (5.3s)
✔ [1368/1416] Built Mathlib.SetTheory.Cardinal.NatCard (3.8s)
✔ [1369/1416] Built Mathlib.Tactic.Ring (4.0s)
✔ [1370/1416] Built Mathlib.Data.ENat.Lattice (4.7s)
✔ [1371/1416] Built Mathlib.Order.SupClosed (6.1s)
✔ [1372/1416] Built Mathlib.Algebra.Ring.Pi (4.9s)
✔ [1373/1416] Built Mathlib.Algebra.GroupWithZero.Action.Pi (3.0s)
✔ [1374/1418] Built Mathlib.Data.DFinsupp.Defs (7.8s)
✔ [1375/1421] Built Mathlib.Algebra.Module.Equiv.Defs (13s)
✔ [1376/1421] Built Mathlib.Data.Fin.VecNotation (5.3s)
✔ [1377/1421] Built Mathlib.Basic.Rel (5.7s)
✔ [1378/1424] Built Mathlib.Data.Fintype.Pigeonhole (3.6s)
✔ [1379/1426] Built Mathlib.Order.SupIndep (6.2s)
✔ [1380/1426] Built Mathlib.Algebra.Group.Hom.End (2.8s)
✔ [1381/1426] Built Mathlib.Algebra.Module.Pi (3.6s)
✔ [1382/1426] Built Mathlib.Algebra.Group.Submonoid.Pointwise (5.3s)
✔ [1383/1430] Built Mathlib.Algebra.Group.Subgroup.Finite (4.9s)
✔ [1384/1430] Built Mathlib.Algebra.Module.Equiv.Opposite (3.1s)
✔ [1385/1430] Built Mathlib.Algebra.GroupWithZero.Action.Hom (2.6s)
✔ [1386/1430] Built Mathlib.Algebra.GroupWithZero.ULift (1.8s)
✔ [1387/1431] Built Mathlib.Algebra.Module.End (2.8s)
✔ [1388/1431] Built Mathlib.Algebra.Module.Torsion.Pi (2.9s)
✔ [1389/1431] Built Mathlib.Order.Atoms (8.3s)
✔ [1390/1431] Built Mathlib.Algebra.Module.Submodule.Lattice (5.3s)
✔ [1391/1433] Built Mathlib.Data.DFinsupp.Module (3.6s)
✔ [1392/1433] Built Mathlib.Algebra.GroupWithZero.Submonoid.Pointwise (3.5s)
✔ [1393/1433] Built Mathlib.RingTheory.NonUnitalSubsemiring.Defs (3.5s)
✔ [1394/1433] Built Mathlib.Algebra.Group.Subgroup.Pointwise (5.3s)
✔ [1395/1434] Built Mathlib.Algebra.Ring.Action.Subobjects (3.2s)
✔ [1396/1434] Built Mathlib.GroupTheory.GroupAction.DomAct.Basic (4.1s)
✔ [1397/1434] Built Mathlib.Algebra.Module.ULift (4.0s)
✔ [1398/1434] Built Mathlib.Order.RelSeries (7.7s)
✔ [1399/1434] Built Mathlib.Algebra.Module.LinearMap.End (6.0s)
✔ [1400/1435] Built Mathlib.RingTheory.Ideal.Lattice (3.4s)
✔ [1401/1435] Built Mathlib.Algebra.Module.Submodule.RestrictScalars (4.6s)
✔ [1402/1436] Built Mathlib.Algebra.Group.Subsemigroup.Membership (3.4s)
✔ [1403/1436] Built Mathlib.Order.CompactlyGenerated.Basic (5.8s)
✔ [1404/1436] Built Mathlib.LinearAlgebra.Span.Defs (5.9s)
✔ [1405/1436] Built Mathlib.Algebra.GroupWithZero.Center (2.6s)
✔ [1406/1436] Built Mathlib.RingTheory.NonUnitalSubring.Defs (4.4s)
✔ [1407/1441] Built Mathlib.Algebra.GroupWithZero.Subgroup (4.1s)
✔ [1408/1441] Built Mathlib.Algebra.Ring.Subsemiring.Defs (4.6s)
✔ [1409/1441] Built Mathlib.Algebra.Group.Subsemigroup.Operations (5.0s)
✔ [1410/1445] Built Mathlib.Algebra.Module.Hom (3.2s)
✔ [1411/1445] Built Mathlib.Algebra.Module.LinearMap.Basic (4.0s)
✔ [1412/1445] Built Mathlib.Algebra.Ring.Centralizer (2.4s)
✔ [1413/1451] Built Mathlib.Algebra.Ring.Center (3.0s)
✔ [1414/1461] Built Mathlib.RingTheory.Ideal.Prime (3.5s)
✔ [1415/1462] Built Mathlib.Algebra.Module.Submodule.LinearMap (4.6s)
✔ [1416/1464] Built Mathlib.Algebra.Ring.Submonoid.Basic (2.7s)
✔ [1417/1465] Built Mathlib.Algebra.Ring.Hom.InjSurj (2.5s)
✔ [1418/1465] Built Mathlib.Order.KrullDimension (5.9s)
✔ [1419/1465] Built Mathlib.GroupTheory.QuotientGroup.Basic (8.0s)
✔ [1420/1465] Built Mathlib.Algebra.Ring.Subring.Defs (4.9s)
✔ [1421/1466] Built Mathlib.Algebra.NoZeroSMulDivisors.Defs (2.7s)
✔ [1422/1468] Built Mathlib.Algebra.Ring.Aut (2.5s)
✔ [1423/1470] Built Mathlib.Algebra.Group.Action.TransferInstance (3.2s)
✔ [1424/1470] Built Mathlib.Algebra.Group.Pointwise.Set.ListOfFn (2.5s)
✔ [1425/1470] Built Mathlib.Data.Finset.NAry (3.6s)
✔ [1426/1470] Built Mathlib.Algebra.Group.IsApply (2.4s)
✔ [1427/1472] Built Mathlib.Algebra.Group.Pointwise.Set.BigOperators (3.3s)
✔ [1428/1473] Built Mathlib.RingTheory.NonUnitalSubsemiring.Basic (4.8s)
✔ [1429/1475] Built Mathlib.Algebra.BigOperators.Group.Finset.Lemmas (3.2s)
✔ [1430/1475] Built Mathlib.Algebra.Ring.Action.Group (3.1s)
✔ [1431/1475] Built Mathlib.Algebra.GroupWithZero.Action.TransferInstance (3.0s)
✔ [1432/1475] Built Mathlib.Algebra.Module.Submodule.Map (6.7s)
✔ [1433/1475] Built Mathlib.Algebra.FiniteSupport.Defs (2.7s)
✔ [1434/1475] Built Mathlib.Algebra.Group.Shrink (3.3s)
✔ [1435/1475] Built Mathlib.Algebra.Group.Indicator (3.0s)
✔ [1436/1475] Built Mathlib.Algebra.GroupWithZero.Indicator (2.6s)
✔ [1437/1475] Built Mathlib.GroupTheory.Index (8.4s)
✔ [1438/1476] Built Mathlib.Algebra.BigOperators.Pi (4.1s)
✔ [1439/1476] Built Mathlib.Algebra.Module.Basic (3.4s)
✔ [1440/1476] Built Mathlib.Algebra.Module.Equiv.Basic (12s)
✔ [1441/1480] Built Mathlib.Algebra.Module.TransferInstance (3.3s)
✔ [1442/1480] Built Mathlib.RingTheory.NonUnitalSubring.Basic (6.1s)
✔ [1443/1480] Built Mathlib.Algebra.Module.Submodule.Ker (4.3s)
✔ [1444/1480] Built Mathlib.Algebra.Ring.Subsemiring.Basic (7.4s)
✔ [1445/1480] Built Mathlib.Algebra.Notation.FiniteSupport (3.1s)
✔ [1446/1483] Built Mathlib.Algebra.Module.Submodule.Pointwise (5.3s)
✔ [1447/1484] Built Mathlib.Algebra.Group.Pointwise.Finset.Basic (9.2s)
✔ [1448/1484] Built Mathlib.Algebra.Order.Group.Indicator (3.4s)
✔ [1449/1484] Built Mathlib.Algebra.BigOperators.Group.Finset.Pi (3.2s)
✔ [1450/1491] Built Mathlib.Algebra.Module.Shrink (2.8s)
✔ [1451/1491] Built Mathlib.Data.Multiset.Antidiagonal (3.2s)
✔ [1452/1491] Built Mathlib.Data.Multiset.Sections (2.4s)
✔ [1453/1492] Built Mathlib.Algebra.Module.Submodule.EqLocus (2.6s)
✔ [1454/1492] Built Mathlib.Algebra.Order.Hom.GroupNorm (2.2s)
✔ [1455/1492] Built Mathlib.Algebra.Order.BigOperators.GroupWithZero.List (2.1s)
✔ [1456/1500] Built Mathlib.Algebra.Order.BigOperators.GroupWithZero.Finset (3.2s)
✔ [1457/1503] Built Mathlib.Algebra.Order.BigOperators.Ring.List (2.8s)
✔ [1458/1509] Built Mathlib.Algebra.FiniteSupport.Basic (3.4s)
✔ [1459/1511] Built Mathlib.Algebra.Module.Submodule.Range (4.5s)
✔ [1460/1511] Built Mathlib.Algebra.Group.Pi.Torsion (2.2s)
✔ [1461/1511] Built Mathlib.Algebra.BigOperators.Ring.Multiset (3.1s)
✔ [1462/1513] Built Mathlib.Algebra.Order.Hom.RingNorm (2.5s)
✔ [1463/1513] Built Mathlib.Algebra.Order.BigOperators.GroupWithZero.Multiset (2.6s)
✔ [1464/1515] Built Mathlib.Data.List.Find (2.2s)
✔ [1465/1516] Built Mathlib.Data.Rat.BigOperators (2.5s)
✔ [1466/1516] Built Mathlib.Algebra.BigOperators.Group.Finset.Preimage (2.8s)
✔ [1467/1516] Built Mathlib.Algebra.Ring.NonZeroDivisors (2.8s)
✔ [1468/1517] Built Mathlib.Algebra.Ring.Submonoid.Pointwise (3.5s)
✔ [1469/1519] Built Mathlib.Algebra.Module.Submodule.Equiv (4.3s)
✔ [1470/1519] Built Mathlib.Algebra.Ring.Subring.Basic (8.7s)
✔ [1471/1519] Built Mathlib.Algebra.BigOperators.Ring.Finset (4.3s)
✔ [1472/1520] Built Mathlib.Algebra.Order.AbsoluteValue.Basic (3.0s)
✔ [1473/1520] Built Mathlib.Algebra.Order.BigOperators.Ring.Multiset (3.2s)
✔ [1474/1520] Built Mathlib.Algebra.Order.Kleene (3.0s)
✔ [1475/1520] Built Mathlib.Data.Multiset.Find (3.0s)
✔ [1476/1520] Built Mathlib.GroupTheory.GroupAction.SubMulAction.Pointwise (3.6s)
✔ [1477/1523] Built Mathlib.Data.Fintype.Lattice (2.7s)
✔ [1478/1523] Built Mathlib.Algebra.Field.IsField (2.4s)
✔ [1479/1525] Built Mathlib.RingTheory.Coprime.Basic (3.8s)
✔ [1480/1528] Built Mathlib.Data.Set.Semiring (3.7s)
✔ [1481/1528] Built Mathlib.Data.Finsupp.Defs (3.8s)
✔ [1482/1528] Built Mathlib.Data.Finset.Fin (3.2s)
✔ [1483/1531] Built Mathlib.Algebra.Order.BigOperators.Ring.Finset (5.1s)
✔ [1484/1533] Built Mathlib.Algebra.Algebra.Basic (5.8s)
✔ [1485/1533] Built Mathlib.GroupTheory.OrderOfElement (18s)
✔ [1486/1533] Built Mathlib.LinearAlgebra.Span.Basic (6.5s)
✔ [1487/1536] Built Mathlib.Order.Interval.Set.Fin (4.6s)
✔ [1488/1537] Built Mathlib.RingTheory.Coprime.Lemmas (4.7s)
✔ [1489/1537] Built Mathlib.Data.Fintype.Order (3.0s)
✔ [1490/1537] Built Mathlib.Data.Finsupp.Single (3.7s)
✔ [1491/1537] Built Mathlib.Algebra.Order.Interval.Set.Monoid (2.8s)
✔ [1492/1538] Built Mathlib.Order.SuccPred.LinearLocallyFinite (4.2s)
✔ [1493/1538] Built Mathlib.Algebra.BigOperators.NatAntidiagonal (2.9s)
✔ [1494/1539] Built Mathlib.RingTheory.Ideal.Span (3.0s)
✔ [1495/1539] Built Mathlib.Algebra.Algebra.Hom (5.9s)
✔ [1496/1539] Built Mathlib.Order.PartialSups (3.0s)
✔ [1497/1541] Built Mathlib.Data.Finsupp.Indicator (4.4s)
✔ [1498/1541] Built Mathlib.Order.Interval.Finset.Fin (5.5s)
✔ [1499/1546] Built Mathlib.LinearAlgebra.BilinearMap (14s)
✔ [1500/1546] Built Mathlib.Data.ZMod.Basic (6.9s)
✔ [1501/1546] Built Mathlib.Algebra.Group.Finsupp (5.4s)
✔ [1502/1546] Built Mathlib.RingTheory.Multiplicity (6.2s)
✔ [1503/1546] Built Mathlib.Algebra.Order.Interval.Finset.Basic (3.5s)
✔ [1504/1546] Built Mathlib.Tactic.Order.CollectFacts (3.8s)
✔ [1505/1546] Built Mathlib.Algebra.BigOperators.Finprod (10s)
✔ [1506/1546] Built Mathlib.RingTheory.Ideal.Maximal (3.6s)
✔ [1507/1546] Built Mathlib.Data.Finsupp.SMulWithZero (2.7s)
✔ [1508/1546] Built Mathlib.Order.Disjointed (3.1s)
✔ [1509/1546] Built Mathlib.Data.Finsupp.Ext (2.6s)
✔ [1510/1546] Built Mathlib.Algebra.Module.Submodule.Bilinear (3.4s)
✔ [1511/1549] Built Mathlib.Algebra.Algebra.ZMod (3.0s)
✔ [1512/1551] Built Mathlib.Tactic.Order.Preprocessing (2.3s)
✔ [1513/1551] Built Mathlib.Tactic.Order.ToInt (2.7s)
✔ [1514/1551] Built Mathlib.Tactic.Order.Graph.Basic (2.3s)
✔ [1515/1551] Built Mathlib.Algebra.BigOperators.GroupWithZero.Action (2.0s)
✔ [1516/1554] Built Mathlib.RingTheory.Ideal.Nonunits (3.1s)
✔ [1517/1557] Built Mathlib.Algebra.Algebra.NonUnitalHom (6.9s)
✔ [1518/1558] Built Mathlib.Algebra.Order.BigOperators.Group.LocallyFinite (3.7s)
✔ [1519/1562] Built Mathlib.Algebra.Algebra.Equiv (8.4s)
✔ [1520/1562] Built Mathlib.Order.Interval.Set.Disjoint (3.6s)
✔ [1521/1562] Built Mathlib.Tactic.Order.Graph.Tarjan (2.7s)
✔ [1522/1563] Built Mathlib.Order.Filter.Defs (4.2s)
✔ [1523/1563] Built Mathlib.Algebra.Order.Group.Basic (2.7s)
✔ [1524/1563] Built Mathlib.Algebra.BigOperators.Finsupp.Basic (5.0s)
✔ [1525/1564] Built Mathlib.Algebra.Module.BigOperators (3.5s)
✔ [1526/1566] Built Mathlib.Algebra.Order.Group.Action.Synonym (2.1s)
✔ [1527/1568] Built Mathlib.Algebra.Order.GroupWithZero.Synonym (1.9s)
✔ [1528/1569] Built Aeneas.Tactic.Simproc.ReduceZMod.ReduceZMod (6.1s)
✔ [1529/1569] Built Mathlib.LinearAlgebra.TensorProduct.Defs (6.0s)
✔ [1530/1569] Built Mathlib.Algebra.BigOperators.Intervals (4.6s)
✔ [1531/1569] Built Mathlib.Tactic.Order (3.3s)
✔ [1532/1569] Built Mathlib.Algebra.Group.Fin.Tuple (2.8s)
✔ [1533/1570] Built Mathlib.Algebra.Algebra.Opposite (4.6s)
✔ [1534/1570] Built Mathlib.Algebra.Order.GroupWithZero.Action.Synonym (2.7s)
✔ [1535/1570] Built Mathlib.Algebra.Algebra.Prod (3.6s)
✔ [1536/1572] Built Mathlib.Order.Filter.Basic (4.5s)
✔ [1537/1572] Built Mathlib.Algebra.Group.Graph (4.1s)
✔ [1538/1572] Built Mathlib.Logic.Equiv.Fin.Basic (3.6s)
✔ [1539/1577] Built Mathlib.Data.Set.Finite.Lemmas (2.9s)
✔ [1540/1577] Built Mathlib.LinearAlgebra.Quotient.Defs (4.5s)
✔ [1541/1587] Built Mathlib.Data.Nat.Choose.Sum (3.9s)
✔ [1542/1588] Built Mathlib.Order.Filter.AtTopBot.Defs (2.7s)
✔ [1543/1589] Built Mathlib.Order.Filter.Map (4.1s)
✔ [1544/1589] Built Mathlib.Algebra.GroupWithZero.Submonoid.Primal (3.3s)
✔ [1545/1589] Built Aeneas.Tactic.Solver.ScalarTac.Lemmas (8.6s)
✔ [1546/1589] Built Mathlib.Data.Finsupp.Basic (10s)
✔ [1547/1589] Built Mathlib.Order.Filter.AtTopBot.Disjoint (2.5s)
✔ [1548/1589] Built Mathlib.Data.BitVec (3.5s)
✔ [1549/1589] Built Mathlib.LinearAlgebra.TensorProduct.Basic (9.6s)
✔ [1550/1589] Built Mathlib.Algebra.Order.Module.Defs (8.7s)
✔ [1551/1592] Built Mathlib.Algebra.Algebra.Tower (6.2s)
✔ [1552/1594] Built Mathlib.Order.Filter.Tendsto (2.5s)
✔ [1553/1594] Built Mathlib.GroupTheory.FreeGroup.Basic (8.9s)
✔ [1554/1602] Built Mathlib.Order.Filter.Bases.Basic (3.8s)
✔ [1555/1602] Built Mathlib.RingTheory.UniqueFactorizationDomain.Defs (3.3s)
✔ [1556/1604] Built Mathlib.Data.Finsupp.Option (4.0s)
✔ [1557/1605] Built Aeneas.Std.Scalar.BvComp (5.1s)
✔ [1558/1612] Built Mathlib.Algebra.Order.Nonneg.Module (2.0s)
✔ [1559/1613] Built Mathlib.Data.Finsupp.SMul (3.7s)
✔ [1560/1614] Built Mathlib.Order.Filter.AtTopBot.Tendsto (2.3s)
✔ [1561/1616] Built Batteries.Data.Nat.Bitwise.Lemmas (763ms)
✔ [1562/1616] Built Mathlib.LinearAlgebra.Prod (10s)
✔ [1563/1616] Built Mathlib.Tactic.Algebraize (3.9s)
✔ [1564/1616] Built Mathlib.Data.List.GetD (2.1s)
✔ [1565/1617] Built Batteries.Data.Nat.Bitwise (693ms)
✔ [1566/1618] Built Aeneas.Tactic.Simp.SimpLemmas (2.2s)
✔ [1567/1620] Built Aeneas.Data.ListN (1.2s)
✔ [1568/1621] Built Batteries.Data.BitVec.Basic (714ms)
✔ [1569/1621] Built Batteries.Data.Fin.OfBits (661ms)
✔ [1570/1623] Built Aeneas.Std.Scalar.CloneCopy (4.7s)
✔ [1571/1625] Built Batteries.Data.Int (729ms)
✔ [1572/1625] Built Aeneas.Std.Core.Default (2.9s)
✔ [1573/1631] Built Mathlib.Order.Filter.AtTopBot.Basic (3.3s)
✔ [1574/1637] Built Batteries.Data.BitVec.Lemmas (898ms)
✔ [1575/1638] Built Mathlib.GroupTheory.Finiteness (6.5s)
✔ [1576/1638] Built Mathlib.Data.Nat.Bitwise (3.6s)
✔ [1577/1639] Built Aeneas.Tactic.Conv.Natify.Init (2.4s)
✔ [1578/1639] Built Aeneas.Tactic.Conv.ZModify.Init (2.2s)
✔ [1579/1641] Built Mathlib.LinearAlgebra.Finsupp.Defs (5.9s)
✔ [1580/1641] Built Aeneas.Data.Byte (3.2s)
✔ [1581/1648] Built Aeneas.Tactic.Simproc.ReduceNat (3.0s)
✔ [1582/1649] Built Mathlib.LinearAlgebra.TensorProduct.Map (10s)
✔ [1583/1649] Built Mathlib.LinearAlgebra.Pi (7.0s)
✔ [1584/1649] Built Mathlib.RingTheory.Finiteness.Defs (3.2s)
✔ [1585/1650] Built Aeneas.Std.SliceDef (4.9s)
✔ [1586/1650] Built Aeneas.Tactic.Simp.SimpScalar.SimpScalar (4.3s)
✔ [1587/1651] Built Aeneas.Tactic.Simp.SimpLists.SimpLists (4.1s)
✔ [1588/1652] Built Aeneas.Std.Scalar.LeadingZeros (4.2s)
✔ [1589/1652] Built Aeneas.Std.Scalar.EqOrd (5.6s)
✔ [1590/1653] Built Mathlib.LinearAlgebra.Finsupp.LSum (4.9s)
✔ [1591/1656] Built Aeneas.Std.Scalar.Pow (4.2s)
✔ [1592/1656] Built Aeneas.Std.Scalar.Rotate (4.4s)
✔ [1593/1656] Built Aeneas.Std.Scalar.SaturatingOps (4.5s)
✔ [1594/1662] Built Mathlib.Algebra.Algebra.Bilinear (4.5s)
✔ [1595/1662] Built Mathlib.RingTheory.Finiteness.Basic (4.6s)
✔ [1596/1662] Built Aeneas.Std.StringDef (4.1s)
✔ [1597/1669] Built Aeneas.Std.Scalar.WrappingOps.Add (4.6s)
✔ [1598/1669] Built Aeneas.Tactic.Simp.SimpScalar.Lemmas (4.8s)
✔ [1599/1669] Built Aeneas.Std.Scalar.WrappingOps.Mul (4.8s)
✔ [1600/1670] Built Mathlib.LinearAlgebra.Finsupp.Supported (3.3s)
✔ [1601/1675] Built Aeneas.Std.Scalar.WrappingOps.Shl (4.8s)
✔ [1602/1675] Built Aeneas.Std.Scalar.WrappingOps.Shr (4.6s)
✔ [1603/1678] Built Aeneas.Std.Alloc.String (2.5s)
✔ [1604/1684] Built Mathlib.Control.Lawful (1.2s)
✔ [1605/1686] Built Mathlib.Control.Monad.Writer (2.0s)
✔ [1606/1687] Built Aeneas.Std.RawPtr (4.2s)
✔ [1607/1688] Built Mathlib.RingTheory.Noetherian.Defs (3.6s)
✔ [1608/1688] Built Aeneas.Std.Scalar.WrappingOps.Sub (4.7s)
✔ [1609/1688] Built Aeneas.Std.Core.Atomic (2.6s)
✔ [1610/1688] Built Mathlib.Algebra.Module.Submodule.Finsupp (3.1s)
✔ [1611/1688] Built Aeneas.Std.Core.Panic (2.6s)
✔ [1612/1690] Built Mathlib.Control.Monad.Cont (2.1s)
✔ [1613/1696] Built Aeneas.Std.Core.CoreResult (3.4s)
✔ [1614/1706] Built Aeneas.Std.Core.Marker (3.3s)
✔ [1615/1707] Built Aeneas.Std.Core.Pin (2.7s)
✔ [1616/1708] Built Aeneas.Tactic.Simp.SimpScalar.Tests (4.7s)
✔ [1617/1709] Built Mathlib.LinearAlgebra.Finsupp.LinearCombination (5.2s)
✔ [1618/1709] Built Aeneas.Std.PrimitivesLemmas (3.4s)
✔ [1619/1713] Built Aeneas.Tactic.Simp.SimpIfs.Init (1.8s)
✔ [1620/1713] Built Aeneas.Data.Tuples (2.7s)
✔ [1621/1713] Built Aeneas.Std.Core.Ptr (4.2s)
✔ [1622/1713] Built Aeneas.Std.Scalar.WrappingOps (4.1s)
✔ [1623/1714] Built Aeneas.Data.Range.DivRange.Basic (2.6s)
✔ [1624/1715] Built Aeneas.Data.Fin (3.0s)
✔ [1625/1719] Built Aeneas.Tactic.Simp.SimpScalar (4.2s)
✔ [1626/1736] Built Mathlib.RingTheory.Ideal.Basic (3.5s)
✔ [1627/1737] Built Aeneas.Do.Elab (5.4s)
✔ [1628/1739] Built Aeneas.Data.Range.Lemmas (2.7s)
✔ [1629/1744] Built Aeneas.Data.Range.Notations (4.1s)
✔ [1630/1744] Built Aeneas.Tactic.Elab.TraitDefault.Test (1.1s)
✔ [1631/1744] Built Aeneas.Data.Range.MulRange.Basic (2.9s)
✔ [1632/1744] Built Aeneas.Tactic.Misc.FCongr.FCongr (1000ms)
✔ [1633/1745] Built Aeneas.Tactic.Simp.SimpIfs.SimpIfs (4.4s)
✔ [1634/1745] Built Aeneas.Data.Range.SRRange.Basic (2.6s)
✔ [1635/1745] Built Aeneas.Tactic.Misc.FApplyExact (2.1s)
✔ [1636/1745] Built Mathlib.Algebra.Algebra.Operations (7.9s)
✔ [1637/1747] Built Aeneas.Data.Range.DivRange.Lemmas (3.5s)
✔ [1638/1747] Built Aeneas.Tactic.Elab.TraitDefault (1.2s)
✔ [1639/1747] Built Aeneas.Std.Core.Alloc (4.5s)
✔ [1640/1747] Built Aeneas.Tactic.Misc.FCongr (813ms)
✔ [1641/1752] Built Aeneas.Tactic.RustAttributes (2.3s)
✔ [1642/1752] Built Aeneas.Tactic.Misc.Let.Let (2.6s)
✔ [1643/1755] Built Aeneas.Tactic.Elab (999ms)
✔ [1644/1755] Built Aeneas.Tactic.Misc.Let (1.9s)
✔ [1645/1760] Built Aeneas.Data.Range.DivRange.Notations (3.9s)
✔ [1646/1760] Built Aeneas.Data.Range.MulRange.Notations (3.9s)
✔ [1647/1760] Built Aeneas.Tactic.Solver.BvTac.Init (1.8s)
✔ [1648/1766] Built Aeneas.Tactic.Simp.SimpIfs (3.9s)
✔ [1649/1767] Built Aeneas.Tactic.Simp.SimpBoolProp (3.9s)
✔ [1650/1774] Built Aeneas.Data.Range.SRRange.Notations (4.0s)
✔ [1651/1775] Built Aeneas.Tactic.Simp.RingEqNF.Tactic (3.8s)
✔ [1652/1776] Built Aeneas.Data.Range.MulRange.Lemmas (4.5s)
✔ [1653/1776] Built Aeneas.Tactic.Solver.Grind (1.5s)
✔ [1654/1777] Built Aeneas.Tactic.Simproc.ReduceFin.Init (2.4s)
✔ [1655/1778] Built Aeneas.Tactic.Misc (2.7s)
✔ [1657/1862] Built Aeneas.Data.Range.DivRange (4.6s)
✔ [1658/1862] Built Aeneas.Tactic.Simproc.ReduceZMod (4.6s)
✔ [1659/1862] Built Aeneas.Tactic.Step.InferPost (3.0s)
✔ [1660/1862] Built Aeneas.Tactic.Simproc.ReduceFin.ReduceFin (2.6s)
✔ [1661/1862] Built Aeneas.Tactic.Simp.RingEqNF.Tests (4.2s)
✔ [1662/1862] Built Mathlib.RingTheory.Ideal.Operations (8.7s)
✔ [1663/1862] Built Aeneas.Data.Range.MulRange (3.7s)
✔ [1664/1862] Built AeneasMeta.Split (5.0s)
✔ [1665/1862] Built Aeneas.Tactic.Solver.Grind.Tests (3.9s)
✔ [1666/1862] Built Aeneas.Tactic.Simproc.ReduceFin (1.9s)
✔ [1667/1862] Built Aeneas.Tactic.Simp.RingEqNF (2.2s)
✔ [1668/1862] Built Mathlib.RingTheory.UniqueFactorizationDomain.Ideal (2.1s)
✔ [1669/1862] Built Mathlib.RingTheory.Noetherian.UniqueFactorizationDomain (1.0s)
✔ [1670/1862] Built Aeneas.Tactic.Solver.ScalarTac.Tests (8.4s)
✔ [1671/1862] Built Mathlib.RingTheory.Ideal.Maps (4.6s)
✔ [1672/1862] Built Mathlib.RingTheory.Ideal.Prod (1.4s)
✔ [1673/1862] Built Mathlib.RingTheory.PrincipalIdealDomain (1.6s)
✔ [1674/1862] Built Mathlib.RingTheory.Int.Basic (1.3s)
✔ [1675/1862] Built Aeneas.Tactic.Solver.Arith.Lemmas (2.6s)
✔ [1676/1862] Built Aeneas.Tactic.Solver.Arith (2.4s)
✔ [1677/1862] Built Aeneas.Tactic.Conv.Zify (2.8s)
✔ [1678/1862] Built Aeneas.Tactic.Solver.ScalarTac (2.0s)
✔ [1679/1862] Built Aeneas.Tactic.Conv.Natify.Natify (2.0s)
✔ [1680/1862] Built Aeneas.Tactic.Conv.ZModify.ZModify (2.0s)
✔ [1681/1862] Built Aeneas.Std.Range (3.7s)
✔ [1682/1862] Built Aeneas.Tactic.Conv.ZModify (3.9s)
✔ [1683/1862] Built Aeneas.Tactic.Solver.ScalarDecrTac (4.7s)
✔ [1684/1862] Built Aeneas.Std.Scalar.Bitwise (4.9s)
✔ [1685/1862] Built Aeneas.Tactic.Conv.Natify (5.0s)
✔ [1686/1862] Built Aeneas.Std.Scalar.Misc (5.2s)
✔ [1687/1862] Built Aeneas.Tactic.Step.GrindState (5.0s)
✔ [1688/1862] Built Aeneas.Std.Scalar.Casts (6.1s)
✔ [1689/1862] Built Aeneas.Data.List.List (8.5s)
✔ [1690/1862] Built Aeneas.Std.Scalar.Ops.Neg (5.0s)
✔ [1691/1862] Built Aeneas.Std.Scalar.Ops.Rem (5.3s)
✔ [1692/1862] Built Aeneas.Std.Scalar.Ops.Add (5.4s)
✔ [1693/1862] Built Aeneas.Std.Scalar.Ops.Mul (5.8s)
✔ [1694/1862] Built Aeneas.Std.Scalar.Ops.Sub (5.8s)
✔ [1695/1862] Built Aeneas.Std.Scalar.Ops.Div (6.9s)
✔ [1696/1862] Built Aeneas.Data.List (4.0s)
✔ [1697/1862] Built Aeneas.Std.Array.Core (5.3s)
✔ [1698/1862] Built Aeneas.Data.Range.SRRange.Lemmas (5.5s)
✔ [1699/1862] Built Aeneas.Std.Scalar.CheckedOps.Rem (4.8s)
✔ [1700/1862] Built Aeneas.Std.Scalar.CheckedOps.Mul (5.3s)
✔ [1701/1862] Built Aeneas.Std.Scalar.CheckedOps.Add (5.8s)
✔ [1702/1862] Built Aeneas.Std.Scalar.Notations (5.8s)
✔ [1703/1862] Built Aeneas.Std.Scalar.CheckedOps.Sub (5.7s)
✔ [1704/1862] Built Aeneas.Std.Scalar.Ops (4.9s)
✔ [1705/1862] Built Aeneas.Std.Scalar.CheckedOps.Div (5.5s)
✔ [1706/1862] Built Aeneas.Data.Array (5.4s)
✔ [1707/1862] Built Aeneas.Std.Array.Array (6.3s)
✔ [1708/1862] Built Aeneas.Data.BitVec (7.9s)
✔ [1709/1862] Built Aeneas.Data.Range.SRRange (5.2s)
✔ [1710/1862] Built Aeneas.Data.Discriminant (5.0s)
✔ [1711/1862] Built Aeneas.Std.Scalar.OverflowingOps.Mul (6.4s)
✔ [1712/1862] Built Aeneas.Std.Scalar.Default (5.4s)
✔ [1713/1862] Built Aeneas.Std.Scalar.OverflowingOps.Sub (7.3s)
✔ [1714/1862] Built Aeneas.Std.Slice (8.8s)
✔ [1715/1862] Built Aeneas.Std.Scalar.OverflowingOps.Div (5.5s)
✔ [1716/1862] Built Aeneas.Std.Scalar.CheckedOps (4.7s)
✔ [1717/1862] Built Aeneas.Std.Core.Fmt (4.6s)
✔ [1718/1862] Built Aeneas.Std.Scalar.OverflowingOps.Add (9.5s)
✔ [1719/1862] Built Aeneas.Data.Vector (5.4s)
✔ [1720/1862] Built Aeneas.Data.Range (4.2s)
✔ [1721/1862] Built Aeneas.Std.Core.Hash (4.4s)
✔ [1722/1862] Built Aeneas.Std.Scalar.CoreConvertNum (6.2s)
✔ [1723/1862] Built Aeneas.Std.Scalar.Fmt (4.7s)
✔ [1724/1862] Built Aeneas.Std.Std.Io (4.7s)
✔ [1725/1862] Built Aeneas.Std.Array.ArrayDebug (4.9s)
✔ [1726/1862] Built Aeneas.Std.Scalar.Display (4.5s)
✔ [1727/1862] Built Aeneas.Std.Core.Iter (6.1s)
✔ [1728/1862] Built Aeneas.Std.Core.Error (4.5s)
✔ [1729/1862] Built Aeneas.Std.Scalar.OverflowingOps (4.3s)
✔ [1730/1862] Built Aeneas.Std.Array.ArraySlice (6.1s)
✔ [1731/1862] Built Aeneas.Data (4.1s)
✔ [1732/1862] Built Aeneas.Tactic.Setup (4.3s)
✔ [1733/1862] Built Aeneas.Std.Core.Discriminant (3.7s)
✔ [1734/1862] Built Aeneas.Std.NetIpAddr (3.6s)
✔ [1735/1862] Built Aeneas.Std.Std (3.4s)
✔ [1736/1862] Built Aeneas.Std.Scalar (3.3s)
✔ [1737/1862] Built Aeneas.Std.Array (3.1s)
✔ [1738/1862] Built Aeneas.Std.SliceIter (4.4s)
✔ [1739/1862] Built Aeneas.Std.Target (3.0s)
✔ [1740/1862] Built Aeneas.Std.String (3.4s)
✔ [1741/1862] Built Aeneas.Std.Alloc.Vec (4.8s)
✔ [1742/1862] Built Aeneas.Std.RangeIter (4.8s)
✔ [1743/1862] Built Aeneas.Std.Core.CoreOption (3.8s)
✔ [1744/1862] Built Aeneas.Std.Core.FmtWithSlice (3.8s)
✔ [1745/1862] Built Aeneas.Std.StringIter (4.1s)
✔ [1746/1862] Built Aeneas.Std.Alloc.Slice (3.2s)
✔ [1747/1862] Built Aeneas.Std.Alloc.Vec.IntoIter (3.3s)
✔ [1748/1862] Built Aeneas.Std.Core (2.5s)
✔ [1749/1862] Built Aeneas.Std.Alloc (2.3s)
✔ [1750/1862] Built Aeneas.Tactic.Conv.Bvify.Bvify (10s)
✔ [1751/1862] Built Aeneas.Std (2.4s)
✔ [1752/1862] Built Aeneas.Tactic.Conv.Bvify.Lemmas (3.4s)
✔ [1753/1862] Built Aeneas.Tactic.Conv.Bvify.Tests (3.4s)
✔ [1754/1862] Built Aeneas.Do.Delab (3.6s)
✔ [1755/1862] Built Aeneas.Tactic.Conv.Bvify (2.0s)
✔ [1756/1862] Built Aeneas.Tactic.Simp.SimpLists.Tests (5.4s)
✔ [1757/1862] Built Aeneas.Command.Decompose.TestsRec (4.0s)
✔ [1758/1862] Built Aeneas.Tactic.Conv (3.7s)
✔ [1759/1862] Built Aeneas.Do.Tests (4.6s)
✔ [1760/1862] Built Aeneas.Tactic.Simp.SimpLists (3.0s)
✔ [1761/1862] Built Aeneas.Command.Decompose.Tests (7.2s)
✔ [1762/1862] Built Aeneas.Tactic.Simp.SimpListsScalar (2.8s)
✔ [1763/1862] Built Aeneas.Do (3.4s)
✔ [1764/1862] Built Aeneas.Tactic.Simp (2.3s)
✔ [1765/1862] Built Aeneas.Command.Decompose.TestsBig (15s)
✔ [1766/1862] Built Aeneas.Command (1.6s)
✔ [1767/1862] Built Aeneas.Tactic.Step.Step (9.0s)
✔ [1768/1862] Built Aeneas.Tactic.Solver.BvTac.BvTac (18s)
✔ [1769/1862] Built Aeneas.Tactic.Step.Tests.DspecInduction (3.6s)
✔ [1770/1862] Built Aeneas.Tactic.Step.StepArraySpec (4.3s)
✔ [1771/1862] Built Aeneas.Tactic.Simproc.BvSimprocs (4.0s)
✔ [1772/1862] Built Aeneas.Tactic.Step.StepStar (9.5s)
✔ [1773/1862] Built Aeneas.Tactic.Simproc (3.5s)
✔ [1774/1862] Built Aeneas.Tactic.Solver.BvTac.Lemmas (9.1s)
✔ [1775/1862] Built Aeneas.Tactic.Step.Deprecated (2.8s)
✔ [1776/1862] Built Aeneas.Tactic.Solver.BvTac (2.5s)
✔ [1777/1862] Built Aeneas.Tactic.Solver.BvTac.Tests (12s)
✔ [1778/1862] Built Aeneas.Tactic.Step (2.6s)
✔ [1779/1862] Built Aeneas.Tactic.Solver (4.0s)
✔ [1780/1862] Built Aeneas.Tactic.Step.Tests.MaxRecDepthMetavar (5.5s)
✔ [1781/1862] Built Aeneas.Tactic.Step.Tests.TupleDestruct (5.5s)
✔ [1782/1862] Built Aeneas.Tactic.Step.Tests.UncurryBind (5.0s)
✔ [1783/1862] Built Aeneas.Tactic.Step.Tests.MvcgenSpec (6.2s)
✔ [1784/1862] Built Aeneas.Tactic.Step.Tests.IntroOutputsRecursion (6.3s)
✔ [1785/1862] Built Aeneas.Tactic.Step.Tests.Coin (6.5s)
✔ [1786/1862] Built Aeneas.Tactic.Step.Tests.HigherOrderOption (6.8s)
✔ [1787/1862] Built Aeneas.Tactic.Step.Tests.SpecParameters (4.3s)
✔ [1788/1862] Built Aeneas.Tactic.Step.Tests.HigherOrder (7.8s)
✔ [1789/1862] Built Aeneas.Tactic.Step.Tests.IntroOutputs (8.0s)
✔ [1790/1862] Built Aeneas.Tactic.Step.Tests.DischargeTactic (3.0s)
✔ [1791/1862] Built Aeneas.Tactic.Step.Tests.ParserErrors (3.0s)
✔ [1792/1862] Built Aeneas.Tactic.Step.Tests.Triple (3.0s)
✔ [1793/1862] Built Aeneas.Tactic.Step.Tests (2.2s)
✔ [1794/1862] Built Aeneas.Tactic.Tests (312ms)
✔ [1795/1862] Built Aeneas.Tactic (2.1s)
✔ [1796/1862] Built Aeneas (2.2s)
✔ [1797/1862] Built Ipnet (2.9s)
✔ [1798/1862] Built Proofs.Collections (3.5s)
✔ [1799/1862] Built Proofs.Core (3.7s)
✔ [1800/1862] Built Proofs.AddrParseErrorValue (4.1s)
✔ [1801/1862] Built Proofs.MaskMath (4.2s)
✔ [1802/1862] Built Proofs.CidrModel (4.4s)
✔ [1803/1862] Built Proofs.PrefixLenErrorValue (4.3s)
✔ [1804/1862] Built Proofs.IPv4MaskMath (5.0s)
✔ [1805/1862] Built Proofs.IPv6MaskMath (5.0s)
✔ [1806/1862] Built Proofs.NewAssertInvalid (3.5s)
✔ [1807/1862] Built Proofs.OrderMath (3.7s)
✔ [1808/1862] Built Proofs.RangeMath (3.7s)
✔ [1809/1862] Built Proofs.AddressConversions (4.3s)
✔ [1810/1862] Built Proofs.NetworkMath (4.3s)
✔ [1811/1862] Built Proofs.IPv6NetMath (4.8s)
✔ [1812/1862] Built Proofs.IPv4SubnetMath (5.2s)
✔ [1813/1862] Built Proofs.IPv4NetMath (5.5s)
✔ [1814/1862] Built Proofs.IPv6Default (5.0s)
✔ [1815/1862] Built Proofs.IPv6RangeMath (5.5s)
✔ [1816/1862] Built Proofs.Comparisons (5.2s)
✔ [1817/1862] Built Proofs.IPv4AddressEq (5.2s)
✔ [1818/1862] Built Proofs.Arithmetic (5.4s)
✔ [1819/1862] Built Proofs.IPv6ConstructorMath (5.8s)
✔ [1820/1862] Built Proofs.IPv4SubnetBits (4.8s)
✔ [1821/1862] Built Proofs.IPv4SubnetStateMath (4.8s)
✔ [1822/1862] Built Proofs.IPv4SubnetTraceMath (5.2s)
✔ [1823/1862] Built Proofs.IPv4MaskOps (4.9s)
✔ [1824/1862] Built Proofs.Contains (4.9s)
✔ [1825/1862] Built Proofs.IPv6BitOps (4.9s)
✔ [1826/1862] Built Proofs.BitOps (5.3s)
✔ [1827/1862] Built Proofs.IPv6MaskOps (5.3s)
✔ [1828/1862] Built Proofs.IPv6SubnetMath (5.6s)
✔ [1829/1862] Built Proofs.IPv4SubnetRangeBits (4.7s)
✔ [1830/1862] Built Proofs.RangeNext (4.3s)
✔ [1831/1862] Built Proofs.IPv6NetOps (4.6s)
✔ [1832/1862] Built Proofs.IPv6SubnetStateMath (4.5s)
✔ [1833/1862] Built Proofs.IPv6SubnetTraceMath (4.5s)
✔ [1834/1862] Built Proofs.IPv6SubnetBits (4.6s)
✔ [1835/1862] Built Proofs.TaggedMask (4.6s)
✔ [1836/1862] Built Proofs.TaggedIPv6 (3.3s)
✔ [1837/1862] Built Proofs.IPv4NetOps (3.7s)
✔ [1838/1862] Built Proofs.RangeMore (4.4s)
✔ [1839/1862] Built Proofs.IPv6SubnetRangeBits (3.7s)
✔ [1840/1862] Built Proofs.TaggedDefaultFrom (2.0s)
✔ [1841/1862] Built Proofs.TaggedIPv4 (3.2s)
✔ [1842/1862] Built Proofs.IPv4SubnetStep (3.4s)
✔ [1843/1862] Built Proofs.IPv4SubnetEquality (2.3s)
✔ [1844/1862] Built Proofs.IPv4SubnetInvalid (2.8s)
✔ [1845/1862] Built Proofs.IPv4Derived (3.1s)
✔ [1846/1862] Built Proofs.IPv4IteratorDerived (3.1s)
✔ [1847/1862] Built Proofs.IPv6AddressEq (3.3s)
✔ [1848/1862] Built Proofs.IPv4SubnetIterator (3.6s)
✔ [1849/1862] Built Proofs.IPv6Derived (2.9s)
✔ [1850/1862] Built Proofs.IPv6RangeBasic (3.1s)
✔ [1851/1862] Built Proofs.IPv4SubnetActualTrace (2.0s)
✔ [1852/1862] Built Proofs.TaggedDerived (3.2s)
✔ [1853/1862] Built Proofs.IPv4SubnetAll (3.0s)
✔ [1854/1862] Built Proofs.IPv6RangeSteps (3.1s)
✔ [1855/1862] Built Proofs.IPv6RangeSkips (2.8s)
✔ [1856/1862] Built Proofs.TaggedRange (2.4s)
✔ [1857/1862] Built Proofs.IPv6SubnetStep (2.5s)
✔ [1858/1862] Built Proofs.IPv6SubnetIterator (2.5s)
✔ [1859/1862] Built Proofs.IPv6SubnetInvalid (2.4s)
✔ [1860/1862] Built Proofs.IPv6SubnetActualTrace (2.3s)
✔ [1861/1862] Built Proofs.IPv6SubnetAll (2.2s)
✔ [1862/1862] Built Proofs.TaggedSubnets (2.3s)
Build completed successfully (1862 jobs).
$ lake env lean --stdin (proofs.rs formal extraction and axiom audit)
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv6Derived.rangeCompare a b)","conclusion_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpOrd.cmp","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.rangeCompare","text":"IPv6Derived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpOrd.cmp","source":{"first_line":958,"last_line":971}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.rangeCompare","source":{"first_line":60,"last_line":64}}],"definitions_truncated":false,"first_line":100,"last_line":106,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv6AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv6Derived.rangeCompare a b))","theorem":"IPv6Derived.range_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"(ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r =\n match r with\n | ipnet.ipext.IpAddrRange.V4 a => ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count a\n | ipnet.ipext.IpAddrRange.V6 a => ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count a) ∧\n (RangeMath.size (TaggedRange.remaining r) ≤ IPv6RangeMath.usizeMax →\n ∃ out,\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r = Aeneas.Std.Result.ok out ∧\n ↑out = RangeMath.size (TaggedRange.remaining r)) ∧\n (IPv6RangeMath.usizeMax < RangeMath.size (TaggedRange.remaining r) →\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r =\n Aeneas.Std.Result.fail Aeneas.Std.Error.integerOverflow)","conclusion_segments":[{"ref":"Eq","text":"("},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" => "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count"},{"text":" "},{"text":"a"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" => "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count"},{"text":" "},{"text":"a"},{"ref":"Eq","text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"RangeMath.size","text":"RangeMath.size"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"LE.le","text":" ≤ "},{"ref":"IPv6RangeMath.usizeMax","text":"IPv6RangeMath.usizeMax"},{"text":" →\n "},{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.size","text":"RangeMath.size"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"IPv6RangeMath.usizeMax","text":"IPv6RangeMath.usizeMax"},{"ref":"LT.lt","text":" < "},{"ref":"RangeMath.size","text":"RangeMath.size"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" →\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.integerOverflow","text":"Aeneas.Std.Error.integerOverflow"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count","source":{"first_line":1268,"last_line":1277}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count","source":{"first_line":1241,"last_line":1266}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count","source":{"first_line":1227,"last_line":1239}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Proofs.RangeMath","name":"RangeMath.size","source":{"first_line":26,"last_line":28}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Proofs.IPv6RangeMath","name":"IPv6RangeMath.usizeMax","source":{"first_line":14,"last_line":14}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.integerOverflow","source":{"first_line":41,"last_line":41}}],"definitions_truncated":false,"first_line":444,"last_line":496,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r)\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Aeneas.Std.Result.{0} Aeneas.Std.Usize) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count a)\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count a))\n (And\n (@LE.le.{0} Nat instLENat (RangeMath.size (TaggedRange.remaining r)) IPv6RangeMath.usizeMax →\n @Exists.{1} Aeneas.Std.Usize fun (out : Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.Usize out))\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize out)\n (RangeMath.size (TaggedRange.remaining r))))\n (@LT.lt.{0} Nat instLTNat IPv6RangeMath.usizeMax (RangeMath.size (TaggedRange.remaining r)) →\n @Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.count r)\n (@Aeneas.Std.Result.fail.{0} Aeneas.Std.Usize Aeneas.Std.Error.integerOverflow)))","theorem":"TaggedRange.count_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.trunc = Aeneas.Std.Result.ok out ∧\n match n, hp with\n | ipnet.ipnet.IpNet.V4 v, hp =>\n ∃ t,\n out = ipnet.ipnet.IpNet.V4 t ∧\n t.prefix_len = v.prefix_len ∧\n CidrModel.ipv4Value t.addr = CidrModel.lower 32 (CidrModel.ipv4Value v.addr) ↑v.prefix_len\n | ipnet.ipnet.IpNet.V6 v, hp =>\n ∃ t,\n out = ipnet.ipnet.IpNet.V6 t ∧\n t.prefix_len = v.prefix_len ∧\n CidrModel.ipv6Value t.addr = CidrModel.lower 128 (CidrModel.ipv6Value v.addr) ↑v.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.trunc","text":"trunc"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"n"},{"text":", "},{"text":"hp"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"t"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"t"},{"ref":"And","text":" ∧\n "},{"text":"t"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"t"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"t"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"t"},{"ref":"And","text":" ∧\n "},{"text":"t"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"t"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.trunc","source":{"first_line":2248,"last_line":2258}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_3","source":null},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":561,"last_line":582,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipnet.IpNet fun (out : ipnet.ipnet.IpNet) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.trunc n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet out))\n (ipnet.ip_netmask_nat_spec.match_3.{1}\n (fun (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n Prop)\n n hp\n (fun (v : ipnet.ipnet.Ipv4Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V4 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.ipnet.Ipv4Net fun (t : ipnet.ipnet.Ipv4Net) =>\n And (@Eq.{1} ipnet.ipnet.IpNet out (ipnet.ipnet.IpNet.V4 t))\n (And (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Net.prefix_len t) (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr t))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))))))\n fun (v : ipnet.ipnet.Ipv6Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V6 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.ipnet.Ipv6Net fun (t : ipnet.ipnet.Ipv6Net) =>\n And (@Eq.{1} ipnet.ipnet.IpNet out (ipnet.ipnet.IpNet.V6 t))\n (And (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Net.prefix_len t) (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr t))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))))))","theorem":"ipnet.ip_trunc_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.min r = Aeneas.Std.Result.ok out ∧\n Option.map TaggedRange.addrValue out = RangeMore.firstValue (TaggedRange.remaining r) ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.min","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.min"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.firstValue","text":"RangeMore.firstValue"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.min","source":{"first_line":1403,"last_line":1418}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.RangeMore","name":"RangeMore.firstValue","source":{"first_line":103,"last_line":105}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min","source":{"first_line":1385,"last_line":1401}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min","source":{"first_line":1367,"last_line":1383}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}}],"definitions_truncated":false,"first_line":200,"last_line":244,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.min r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out))\n (And\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (RangeMore.firstValue (TaggedRange.remaining r)))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o)))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o)))))","theorem":"TaggedRange.min_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialEqIpAddrRange.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ TaggedDerived.rangeKey a = TaggedDerived.rangeKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialEqIpAddrRange.eq","text":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialEqIpAddrRange.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"TaggedDerived.rangeKey","text":"TaggedDerived.rangeKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedDerived.rangeKey","text":"TaggedDerived.rangeKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialEqIpAddrRange.eq","source":{"first_line":934,"last_line":956}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.rangeKey","source":{"first_line":18,"last_line":20}}],"definitions_truncated":false,"first_line":106,"last_line":133,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.IpAddrRange),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialEqIpAddrRange.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat (Prod.{0, 0} Nat Nat)) (TaggedDerived.rangeKey a) (TaggedDerived.rangeKey b)))","theorem":"TaggedDerived.range_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrIpv4AddrIpv4Addr.bitor a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.ipv4Value a ||| CidrModel.ipv4Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrIpv4AddrIpv4Addr.bitor","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrIpv4AddrIpv4Addr.bitor"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HOr.hOr","text":" ||| "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrIpv4AddrIpv4Addr.bitor","source":{"first_line":688,"last_line":700}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HOr.hOr","source":{"first_line":1606,"last_line":1606}},{"module":"Init.Prelude","name":"instHOrOfOrOp","source":{"first_line":1843,"last_line":1845}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instOrOp","source":{"first_line":100,"last_line":100}}],"definitions_truncated":false,"first_line":34,"last_line":45,"module":"Proofs.BitOps","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrIpv4AddrIpv4Addr.bitor a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HOr.hOr.{0, 0, 0} Nat Nat Nat (@instHOrOfOrOp.{0} Nat Nat.instOrOp) (CidrModel.ipv4Value a)\n (CidrModel.ipv4Value b)))","theorem":"BitOps.ipv4_or_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"rhs","type":"Aeneas.Std.U32","type_segments":[{"ref":"Aeneas.Std.U32","text":"Aeneas.Std.U32"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubU32Ipv4Addr.saturating_sub a rhs = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.ipv4Value a - ↑rhs","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubU32Ipv4Addr.saturating_sub","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubU32Ipv4Addr.saturating_sub"},{"text":" "},{"text":"a"},{"text":" "},{"text":"rhs"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"rhs"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U32","source":{"first_line":671,"last_line":671}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubU32Ipv4Addr.saturating_sub","source":{"first_line":619,"last_line":631}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U32","source":{"first_line":35,"last_line":35}}],"definitions_truncated":false,"first_line":9,"last_line":20,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv4Addr) (rhs : Aeneas.Std.U32),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubU32Ipv4Addr.saturating_sub a rhs)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat) (CidrModel.ipv4Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 rhs)))","theorem":"RangeMore.ipv4_saturating_sub_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialEqIpv6Net.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv6Derived.netKey a = IPv6Derived.netKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialEqIpv6Net.eq","text":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialEqIpv6Net.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv6Derived.netKey","text":"IPv6Derived.netKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv6Derived.netKey","text":"IPv6Derived.netKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialEqIpv6Net.eq","source":{"first_line":1777,"last_line":1786}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.netKey","source":{"first_line":14,"last_line":15}}],"definitions_truncated":false,"first_line":27,"last_line":40,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Net),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialEqIpv6Net.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true) (@Eq.{1} (Prod.{0, 0} Nat Nat) (IPv6Derived.netKey a) (IPv6Derived.netKey b)))","theorem":"IPv6Derived.net_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"∃ out, ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv6Net.from n = Aeneas.Std.Result.ok out ∧ out = ipnet.ipnet.IpNet.V6 n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv6Net.from","text":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv6Net.from"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv6Net.from","source":{"first_line":2038,"last_line":2043}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}}],"definitions_truncated":false,"first_line":155,"last_line":159,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net),\n @Exists.{1} ipnet.ipnet.IpNet fun (out : ipnet.ipnet.IpNet) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv6Net.from n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet out))\n (@Eq.{1} ipnet.ipnet.IpNet out (ipnet.ipnet.IpNet.V6 n))","theorem":"ipnet.ipnet.from_ipv6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndIpv6AddrIpv6Addr.bitand a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.ipv6Value a &&& CidrModel.ipv6Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndIpv6AddrIpv6Addr.bitand","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndIpv6AddrIpv6Addr.bitand"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HAnd.hAnd","text":" &&& "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndIpv6AddrIpv6Addr.bitand","source":{"first_line":715,"last_line":727}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HAnd.hAnd","source":{"first_line":1594,"last_line":1594}},{"module":"Init.Prelude","name":"instHAndOfAndOp","source":{"first_line":1835,"last_line":1837}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instAndOp","source":{"first_line":99,"last_line":99}}],"definitions_truncated":false,"first_line":9,"last_line":20,"module":"Proofs.IPv6BitOps","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndIpv6AddrIpv6Addr.bitand a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HAnd.hAnd.{0, 0, 0} Nat Nat Nat (@instHAndOfAndOp.{0} Nat Nat.instAndOp) (CidrModel.ipv6Value a)\n (CidrModel.ipv6Value b)))","theorem":"IPv6BitOps.ipv6_and_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"rhs","type":"Aeneas.Std.U128","type_segments":[{"ref":"Aeneas.Std.U128","text":"Aeneas.Std.U128"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubU128Ipv6Addr.saturating_sub a rhs = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.ipv6Value a - ↑rhs","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubU128Ipv6Addr.saturating_sub","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubU128Ipv6Addr.saturating_sub"},{"text":" "},{"text":"a"},{"text":" "},{"text":"rhs"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"rhs"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U128","source":{"first_line":673,"last_line":673}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubU128Ipv6Addr.saturating_sub","source":{"first_line":647,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U128","source":{"first_line":37,"last_line":37}}],"definitions_truncated":false,"first_line":33,"last_line":46,"module":"Proofs.IPv6RangeSteps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv6Addr) (rhs : Aeneas.Std.U128),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubU128Ipv6Addr.saturating_sub a rhs)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat) (CidrModel.ipv6Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U128 rhs)))","theorem":"IPv6RangeSteps.ipv6_saturating_sub_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv6Derived.subnetsCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.subnetsCompare","text":"IPv6Derived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpOrd.cmp","source":{"first_line":3135,"last_line":3154}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.subnetsCompare","source":{"first_line":69,"last_line":77}}],"definitions_truncated":false,"first_line":144,"last_line":153,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv6Derived.subnetsCompare a b))","theorem":"IPv6Derived.subnets_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out, n.hostmask = Aeneas.Std.Result.ok out ∧ CidrModel.ipv6Value out = 2 ^ (128 - ↑n.prefix_len) - 1","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.hostmask","text":"hostmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"},{"ref":"HSub.hSub","text":" - "},{"text":"1"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.hostmask","source":{"first_line":2348,"last_line":2355}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}}],"definitions_truncated":false,"first_line":335,"last_line":345,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr) (ipnet.ipnet.Ipv6Net.hostmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))","theorem":"ipnet.ipv6_hostmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv4AddrRange.from r = Aeneas.Std.Result.ok (ipnet.ipext.IpAddrRange.V4 r)","conclusion_segments":[{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv4AddrRange.from","text":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv4AddrRange.from"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv4AddrRange.from","source":{"first_line":1058,"last_line":1063}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}}],"definitions_truncated":false,"first_line":10,"last_line":14,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.IpAddrRange)\n (ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv4AddrRange.from r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.IpAddrRange (ipnet.ipext.IpAddrRange.V4 r))","theorem":"TaggedIPv4.from_ipv4_range_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]}],"conclusion":"∃ out,\n ipnet.mask.ip_mask_to_prefix m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8), out = Aeneas.Std.core.result.Result.Ok q ↔ TaggedMask.validMask m ↑q) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, TaggedMask.validMask m ↑q)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.mask.ip_mask_to_prefix","text":"ipnet.mask.ip_mask_to_prefix"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"q"},{"ref":"Iff","text":" ↔ "},{"ref":"TaggedMask.validMask","text":"TaggedMask.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"TaggedMask.validMask","text":"TaggedMask.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.mask.ip_mask_to_prefix","source":{"first_line":2166,"last_line":2175}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.TaggedMask","name":"TaggedMask.validMask","source":{"first_line":10,"last_line":13}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":54,"last_line":78,"module":"Proofs.TaggedMask","program":null,"program_head":null,"statement":"∀ (m : ipnet.core.net.ip_addr.IpAddr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError))\n (ipnet.mask.ip_mask_to_prefix m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError q))\n (TaggedMask.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n TaggedMask.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))))","theorem":"TaggedMask.ip_mask_to_prefix_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv4Value out = RangeMore.firstValue (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.firstValue","text":"RangeMore.firstValue"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min","source":{"first_line":1385,"last_line":1401}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeMore","name":"RangeMore.firstValue","source":{"first_line":103,"last_line":105}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}}],"definitions_truncated":false,"first_line":145,"last_line":170,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.min r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out)\n (RangeMore.firstValue (RangeNext.remaining r)))","theorem":"RangeMore.range_min_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialOrdIpv4Net.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv4Derived.keyCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialOrdIpv4Net.partial_cmp","text":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialOrdIpv4Net.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv4Derived.keyCompare","text":"IPv4Derived.keyCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialOrdIpv4Net.partial_cmp","source":{"first_line":1950,"last_line":1958}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv4Derived","name":"IPv4Derived.keyCompare","source":{"first_line":16,"last_line":20}}],"definitions_truncated":false,"first_line":50,"last_line":54,"module":"Proofs.IPv4Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Net),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialOrdIpv4Net.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (IPv4Derived.keyCompare a b)))","theorem":"IPv4Derived.partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialEqIpv6AddrRange.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv6Derived.rangeKey a = IPv6Derived.rangeKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialEqIpv6AddrRange.eq","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialEqIpv6AddrRange.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv6Derived.rangeKey","text":"IPv6Derived.rangeKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv6Derived.rangeKey","text":"IPv6Derived.rangeKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialEqIpv6AddrRange.eq","source":{"first_line":882,"last_line":896}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.rangeKey","source":{"first_line":57,"last_line":58}}],"definitions_truncated":false,"first_line":83,"last_line":98,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialEqIpv6AddrRange.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat Nat) (IPv6Derived.rangeKey a) (IPv6Derived.rangeKey b)))","theorem":"IPv6Derived.range_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.supernet = Aeneas.Std.Result.ok out ∧\n if ↑n.prefix_len = 0 then out = Option.none\n else\n ∃ parent,\n out = Option.some parent ∧\n ↑parent.prefix_len = ↑n.prefix_len - 1 ∧\n CidrModel.ipv4Value parent.addr = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len - 1) ∧\n ↑parent.prefix_len ≤ 32 ∧\n CidrModel.subset 32 (CidrModel.ipv4Value parent.addr) (↑parent.prefix_len) (CidrModel.ipv4Value n.addr)\n ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.supernet","text":"supernet"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.none","text":"Option.none"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"parent"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"parent"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":"\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.supernet","source":{"first_line":2496,"last_line":2507}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"instDecidableEqNat","source":{"first_line":1995,"last_line":1995}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}}],"definitions_truncated":false,"first_line":138,"last_line":209,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} (Option.{0} ipnet.ipnet.Ipv4Net) fun (out : Option.{0} ipnet.ipnet.Ipv4Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.ipnet.Ipv4Net)) (ipnet.ipnet.Ipv4Net.supernet n)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.ipnet.Ipv4Net) out))\n (@ite.{1} Prop\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (instDecidableEqNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} (Option.{0} ipnet.ipnet.Ipv4Net) out (@Option.none.{0} ipnet.ipnet.Ipv4Net))\n (@Exists.{1} ipnet.ipnet.Ipv4Net fun (parent : ipnet.ipnet.Ipv4Net) =>\n And (@Eq.{1} (Option.{0} ipnet.ipnet.Ipv4Net) out (@Option.some.{0} ipnet.ipnet.Ipv4Net parent))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr parent))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))\n (And\n (@LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr parent))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))))))","theorem":"IPv4NetOps.supernet_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"start","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"stop","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out, ipnet.ipext.Ipv6AddrRange.new start stop = Aeneas.Std.Result.ok out ∧ out = { start := start, «end» := stop }","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipext.Ipv6AddrRange.new","text":"ipnet.ipext.Ipv6AddrRange.new"},{"text":" "},{"text":"start"},{"text":" "},{"text":"stop"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.Ipv6AddrRange.mk","text":"{ "},{"text":"start"},{"ref":"ipnet.ipext.Ipv6AddrRange.mk","text":" := "},{"text":"start"},{"ref":"ipnet.ipext.Ipv6AddrRange.mk","text":", "},{"text":"«end»"},{"ref":"ipnet.ipext.Ipv6AddrRange.mk","text":" := "},{"text":"stop"},{"ref":"ipnet.ipext.Ipv6AddrRange.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.new","source":{"first_line":1102,"last_line":1110}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.mk","source":{"first_line":856,"last_line":856}}],"definitions_truncated":false,"first_line":17,"last_line":21,"module":"Proofs.Collections","program":null,"program_head":null,"statement":"∀ (start stop : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (out : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv6AddrRange) (ipnet.ipext.Ipv6AddrRange.new start stop)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv6AddrRange out))\n (@Eq.{1} ipnet.ipext.Ipv6AddrRange out (ipnet.ipext.Ipv6AddrRange.mk start stop))","theorem":"ipnet.ipv6_range_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"ipnet.ipnet.IpNet.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (TaggedDerived.netCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.IpNet.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.IpNet.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.netCompare","text":"TaggedDerived.netCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreCmpOrd.cmp","source":{"first_line":1867,"last_line":1889}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.netCompare","source":{"first_line":28,"last_line":33}}],"definitions_truncated":false,"first_line":90,"last_line":98,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpNet),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.IpNet.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (TaggedDerived.netCompare a b))","theorem":"TaggedDerived.net_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"start","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"stop","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out, ipnet.ipext.Ipv4AddrRange.new start stop = Aeneas.Std.Result.ok out ∧ out = { start := start, «end» := stop }","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipext.Ipv4AddrRange.new","text":"ipnet.ipext.Ipv4AddrRange.new"},{"text":" "},{"text":"start"},{"text":" "},{"text":"stop"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.Ipv4AddrRange.mk","text":"{ "},{"text":"start"},{"ref":"ipnet.ipext.Ipv4AddrRange.mk","text":" := "},{"text":"start"},{"ref":"ipnet.ipext.Ipv4AddrRange.mk","text":", "},{"text":"«end»"},{"ref":"ipnet.ipext.Ipv4AddrRange.mk","text":" := "},{"text":"stop"},{"ref":"ipnet.ipext.Ipv4AddrRange.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.new","source":{"first_line":1072,"last_line":1080}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.mk","source":{"first_line":863,"last_line":863}}],"definitions_truncated":false,"first_line":11,"last_line":15,"module":"Proofs.Collections","program":null,"program_head":null,"statement":"∀ (start stop : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (out : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv4AddrRange) (ipnet.ipext.Ipv4AddrRange.new start stop)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv4AddrRange out))\n (@Eq.{1} ipnet.ipext.Ipv4AddrRange out (ipnet.ipext.Ipv4AddrRange.mk start stop))","theorem":"ipnet.ipv4_range_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V6 n).hosts = Aeneas.Std.Result.ok (ipnet.ipext.IpAddrRange.V6 out) ∧\n CidrModel.ipv6Value out.start = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv6Value out.end = CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n IPv6NetOps.remaining out =\n RangeMath.ofInclusive (CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len)\n (CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.hosts","text":"hosts"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"out"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6NetOps.remaining","text":"IPv6NetOps.remaining"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"RangeMath.ofInclusive","text":"RangeMath.ofInclusive"},{"text":" "},{"text":"("},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":"\n "},{"text":"("},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.hosts","source":{"first_line":2679,"last_line":2689}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.IPv6NetOps","name":"IPv6NetOps.remaining","source":{"first_line":14,"last_line":16}},{"module":"Proofs.RangeMath","name":"RangeMath.ofInclusive","source":{"first_line":19,"last_line":20}}],"definitions_truncated":false,"first_line":10,"last_line":24,"module":"Proofs.TaggedIPv6","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (out : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.IpAddrRange) (ipnet.ipnet.IpNet.hosts (ipnet.ipnet.IpNet.V6 n))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.IpAddrRange (ipnet.ipext.IpAddrRange.V6 out)))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start out))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end out))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (@Eq.{1} RangeMath.HalfOpen (IPv6NetOps.remaining out)\n (RangeMath.ofInclusive\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))))))","theorem":"TaggedIPv6.hosts_v6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.Insts.CoreDefaultDefault.default = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out.addr = 0 ∧ out.prefix_len = 0#u8","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreDefaultDefault.default","text":"ipnet.ipnet.Ipv4Net.Insts.CoreDefaultDefault.default"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"And","text":" ∧ "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreDefaultDefault.default","source":{"first_line":2848,"last_line":2853}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Proofs.IPv4NetOps","name":"IPv4NetOps.default_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":13,"last_line":19,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"@Exists.{1} ipnet.ipnet.Ipv4Net fun (out : ipnet.ipnet.Ipv4Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Net.Insts.CoreDefaultDefault.default\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Net out))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr out))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Net.prefix_len out)\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n IPv4NetOps.default_spec._proof_1)))","theorem":"IPv4NetOps.default_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"∃ out, ipnet.ipnet.IpNet.new ip p = Aeneas.Std.Result.ok out ∧ out = ipnet.ipnet.ipNewExpected ip p","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.IpNet.new","text":"ipnet.ipnet.IpNet.new"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.ipNewExpected","text":"ipnet.ipnet.ipNewExpected"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"}],"definitions":[{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.new","source":{"first_line":2068,"last_line":2097}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Core","name":"ipnet.ipnet.ipNewExpected","source":{"first_line":80,"last_line":84}}],"definitions_truncated":false,"first_line":86,"last_line":109,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.IpAddr) (p : Aeneas.Std.U8),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.IpNet.new ip p)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError)\n out))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError) out\n (ipnet.ipnet.ipNewExpected ip p))","theorem":"ipnet.ipnet.ip_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ lower upper,\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.size_hint r = Aeneas.Std.Result.ok (lower, upper) ∧\n (↑lower, Option.map Aeneas.Std.UScalar.val upper) = TaggedRange.expectedHint r ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint a =\n Aeneas.Std.Result.ok (lower, upper)\n | ipnet.ipext.IpAddrRange.V6 a =>\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint a =\n Aeneas.Std.Result.ok (lower, upper)","conclusion_segments":[{"text":"∃ "},{"text":"lower"},{"text":" "},{"text":"upper"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.size_hint","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.size_hint"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"text":"↑"},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"Aeneas.Std.UScalar.val","text":"Aeneas.Std.UScalar.val"},{"text":" "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.expectedHint","text":"TaggedRange.expectedHint"},{"text":" "},{"text":"r"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"text":"upper"},{"ref":"Prod.mk","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.size_hint","source":{"first_line":1547,"last_line":1558}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar","source":{"first_line":70,"last_line":74}},{"module":"Proofs.TaggedRange","name":"TaggedRange.expectedHint","source":{"first_line":408,"last_line":411}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint","source":{"first_line":1535,"last_line":1545}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint","source":{"first_line":1519,"last_line":1533}}],"definitions_truncated":false,"first_line":413,"last_line":442,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} Aeneas.Std.Usize fun (lower : Aeneas.Std.Usize) =>\n @Exists.{1} (Option.{0} Aeneas.Std.Usize) fun (upper : Option.{0} Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize)))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.size_hint r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize))\n (@Prod.mk.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize) lower upper)))\n (And\n (@Eq.{1} (Prod.{0, 0} Nat (Option.{0} Nat))\n (@Prod.mk.{0, 0} Nat (Option.{0} Nat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize lower)\n (@Option.map.{0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) Nat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize) upper))\n (TaggedRange.expectedHint r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize)))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint a)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize))\n (@Prod.mk.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize) lower upper)))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize)))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint a)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize))\n (@Prod.mk.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize) lower upper))))","theorem":"TaggedRange.size_hint_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrIpv6AddrIpv6Addr.bitor a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.ipv6Value a ||| CidrModel.ipv6Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrIpv6AddrIpv6Addr.bitor","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrIpv6AddrIpv6Addr.bitor"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HOr.hOr","text":" ||| "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrIpv6AddrIpv6Addr.bitor","source":{"first_line":742,"last_line":754}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HOr.hOr","source":{"first_line":1606,"last_line":1606}},{"module":"Init.Prelude","name":"instHOrOfOrOp","source":{"first_line":1843,"last_line":1845}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instOrOp","source":{"first_line":100,"last_line":100}}],"definitions_truncated":false,"first_line":34,"last_line":45,"module":"Proofs.IPv6BitOps","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrIpv6AddrIpv6Addr.bitor a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HOr.hOr.{0, 0, 0} Nat Nat Nat (@instHOrOfOrOp.{0} Nat Nat.instOrOp) (CidrModel.ipv6Value a)\n (CidrModel.ipv6Value b)))","theorem":"IPv6BitOps.ipv6_or_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"ipnet.ipnet.Ipv6Net.Insts.CoreConvertFromIpv6Addr.from a = Aeneas.Std.Result.ok { addr := a, prefix_len := 128#u8 }","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreConvertFromIpv6Addr.from","text":"ipnet.ipnet.Ipv6Net.Insts.CoreConvertFromIpv6Addr.from"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"a"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"128"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreConvertFromIpv6Addr.from","source":{"first_line":2862,"last_line":2867}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.TaggedDefaultFrom","name":"TaggedDefaultFrom.ipv6_from_addr_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":19,"last_line":23,"module":"Proofs.TaggedDefaultFrom","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv6Addr),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net) (ipnet.ipnet.Ipv6Net.Insts.CoreConvertFromIpv6Addr.from a)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Net\n (ipnet.ipnet.Ipv6Net.mk a\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n TaggedDefaultFrom.ipv6_from_addr_spec._proof_1)))","theorem":"TaggedDefaultFrom.ipv6_from_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"∃ out, n.max_prefix_len = Aeneas.Std.Result.ok out ∧ out = 128#u8","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.max_prefix_len","text":"max_prefix_len"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"128"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.max_prefix_len","source":{"first_line":2289,"last_line":2293}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.Core","name":"ipnet.ipnet.ipv6_max_prefix_len_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":60,"last_line":62,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.Ipv6Net.max_prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n ipnet.ipnet.ipv6_max_prefix_len_spec._proof_1))","theorem":"ipnet.ipnet.ipv6_max_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"Aeneas.Std.U32","type_segments":[{"ref":"Aeneas.Std.U32","text":"Aeneas.Std.U32"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrU32Ipv4Addr.bitor a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.ipv4Value a ||| ↑b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrU32Ipv4Addr.bitor","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrU32Ipv4Addr.bitor"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HOr.hOr","text":" ||| "},{"text":"↑"},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U32","source":{"first_line":671,"last_line":671}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrU32Ipv4Addr.bitor","source":{"first_line":702,"last_line":713}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HOr.hOr","source":{"first_line":1606,"last_line":1606}},{"module":"Init.Prelude","name":"instHOrOfOrOp","source":{"first_line":1843,"last_line":1845}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instOrOp","source":{"first_line":100,"last_line":100}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U32","source":{"first_line":35,"last_line":35}}],"definitions_truncated":false,"first_line":47,"last_line":57,"module":"Proofs.BitOps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv4Addr) (b : Aeneas.Std.U32),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitOrU32Ipv4Addr.bitor a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HOr.hOr.{0, 0, 0} Nat Nat Nat (@instHOrOfOrOp.{0} Nat Nat.instOrOp) (CidrModel.ipv4Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 b)))","theorem":"BitOps.ipv4_or_u32_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.netmask = Aeneas.Std.Result.ok out ∧\n match n, hp with\n | ipnet.ipnet.IpNet.V4 v, hp =>\n ∃ a, out = ipnet.core.net.ip_addr.IpAddr.V4 a ∧ CidrModel.ipv4Value a = 2 ^ 32 - 2 ^ (32 - ↑v.prefix_len)\n | ipnet.ipnet.IpNet.V6 v, hp =>\n ∃ a, out = ipnet.core.net.ip_addr.IpAddr.V6 a ∧ CidrModel.ipv6Value a = 2 ^ 128 - 2 ^ (128 - ↑v.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.netmask","text":"netmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"n"},{"text":", "},{"text":"hp"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":", "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":", "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.netmask","source":{"first_line":2326,"last_line":2337}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_3","source":null},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}}],"definitions_truncated":false,"first_line":347,"last_line":366,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.IpAddr fun (out : ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.IpAddr) (ipnet.ipnet.IpNet.netmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.IpAddr out))\n (ipnet.ip_netmask_nat_spec.match_3.{1}\n (fun (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n Prop)\n n hp\n (fun (v : ipnet.ipnet.Ipv4Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V4 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (a : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V4 a))\n (@Eq.{1} Nat (CidrModel.ipv4Value a)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v)))))))\n fun (v : ipnet.ipnet.Ipv6Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V6 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (a : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V6 a))\n (@Eq.{1} Nat (CidrModel.ipv6Value a)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v)))))))","theorem":"ipnet.ip_netmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out, n.netmask = Aeneas.Std.Result.ok out ∧ CidrModel.ipv4Value out = 2 ^ 32 - 2 ^ (32 - ↑n.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.netmask","text":"netmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.netmask","source":{"first_line":2318,"last_line":2324}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}}],"definitions_truncated":false,"first_line":299,"last_line":310,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr) (ipnet.ipnet.Ipv4Net.netmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))))","theorem":"ipnet.ipv4_netmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"∃ out, n.max_prefix_len = Aeneas.Std.Result.ok out ∧ out = 32#u8","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.max_prefix_len","text":"max_prefix_len"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"32"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.max_prefix_len","source":{"first_line":2295,"last_line":2299}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.Core","name":"ipnet.ipnet.ipv4_max_prefix_len_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":48,"last_line":50,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.Ipv4Net.max_prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n ipnet.ipnet.ipv4_max_prefix_len_spec._proof_1))","theorem":"ipnet.ipnet.ipv4_max_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"ipnet.ipnet.Ipv4Net.new_assert ip p =\n if ↑p ≤ 32 then Aeneas.Std.Result.ok { addr := ip, prefix_len := p }\n else Aeneas.Std.Result.fail Aeneas.Std.Error.assertionFailure","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Net.new_assert","text":"ipnet.ipnet.Ipv4Net.new_assert"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" =\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.assertionFailure","text":"Aeneas.Std.Error.assertionFailure"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.new_assert","source":{"first_line":2109,"last_line":2117}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"Nat.decLe","source":{"first_line":2196,"last_line":2212}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.assertionFailure","source":{"first_line":40,"last_line":40}}],"definitions_truncated":false,"first_line":34,"last_line":42,"module":"Proofs.NewAssertInvalid","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.Ipv4Addr) (p : Aeneas.Std.U8),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net) (ipnet.ipnet.Ipv4Net.new_assert ip p)\n (@ite.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Net (ipnet.ipnet.Ipv4Net.mk ip p))\n (@Aeneas.Std.Result.fail.{0} ipnet.ipnet.Ipv4Net Aeneas.Std.Error.assertionFailure))","theorem":"NewAssertInvalid.ipv4_full_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"ipnet.ipnet.Ipv6Net.new_assert ip p =\n if ↑p ≤ 128 then Aeneas.Std.Result.ok { addr := ip, prefix_len := p }\n else Aeneas.Std.Result.fail Aeneas.Std.Error.assertionFailure","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Net.new_assert","text":"ipnet.ipnet.Ipv6Net.new_assert"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" =\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.assertionFailure","text":"Aeneas.Std.Error.assertionFailure"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.new_assert","source":{"first_line":2099,"last_line":2107}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"Nat.decLe","source":{"first_line":2196,"last_line":2212}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.assertionFailure","source":{"first_line":40,"last_line":40}}],"definitions_truncated":false,"first_line":44,"last_line":52,"module":"Proofs.NewAssertInvalid","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.Ipv6Addr) (p : Aeneas.Std.U8),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net) (ipnet.ipnet.Ipv6Net.new_assert ip p)\n (@ite.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Net (ipnet.ipnet.Ipv6Net.mk ip p))\n (@Aeneas.Std.Result.fail.{0} ipnet.ipnet.Ipv6Net Aeneas.Std.Error.assertionFailure))","theorem":"NewAssertInvalid.ipv6_full_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"∃ out, ipnet.ipnet.Ipv6Net.impl.addr n = Aeneas.Std.Result.ok out ∧ out = n.addr","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.Ipv6Net.impl.addr","text":"ipnet.ipnet.Ipv6Net.impl.addr"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.impl.addr","source":{"first_line":2946,"last_line":2951}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":52,"last_line":54,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr) (ipnet.ipnet.Ipv6Net.impl.addr n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} ipnet.core.net.ip_addr.Ipv6Addr out (ipnet.ipnet.Ipv6Net.addr n))","theorem":"ipnet.ipnet.ipv6_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialOrdIpNet.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (TaggedDerived.netCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialOrdIpNet.partial_cmp","text":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialOrdIpNet.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.netCompare","text":"TaggedDerived.netCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialOrdIpNet.partial_cmp","source":{"first_line":1891,"last_line":1897}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.netCompare","source":{"first_line":28,"last_line":33}}],"definitions_truncated":false,"first_line":100,"last_line":104,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpNet),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering)) (ipnet.ipnet.IpNet.Insts.CoreCmpPartialOrdIpNet.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (TaggedDerived.netCompare a b)))","theorem":"TaggedDerived.net_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.next r = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map TaggedRange.addrValue out, TaggedRange.remaining r') = RangeMath.next (TaggedRange.remaining r) ∧\n TaggedRange.family r' = TaggedRange.family r ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o a',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next a =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o ∧ r' = ipnet.ipext.IpAddrRange.V4 a'\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o a',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next a =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o ∧ r' = ipnet.ipext.IpAddrRange.V6 a'","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.next","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.next","text":"RangeMath.next"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a'"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a'"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.next","source":{"first_line":1204,"last_line":1225}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Proofs.RangeMath","name":"RangeMath.next","source":{"first_line":33,"last_line":39}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next","source":{"first_line":1177,"last_line":1202}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next","source":{"first_line":1150,"last_line":1175}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}}],"definitions_truncated":false,"first_line":46,"last_line":92,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n @Exists.{1} ipnet.ipext.IpAddrRange fun (r' : ipnet.ipext.IpAddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.next r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange out r')))\n (And\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (TaggedRange.remaining r'))\n (RangeMath.next (TaggedRange.remaining r)))\n (And (@Eq.{1} Bool (TaggedRange.family r') (TaggedRange.family r))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (a' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next a)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V4 a'))))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (a' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next a)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V6 a')))))))","theorem":"TaggedRange.next_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out, n.hostmask = Aeneas.Std.Result.ok out ∧ CidrModel.ipv4Value out = 2 ^ (32 - ↑n.prefix_len) - 1","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.hostmask","text":"hostmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"},{"ref":"HSub.hSub","text":" - "},{"text":"1"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.hostmask","source":{"first_line":2365,"last_line":2371}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}}],"definitions_truncated":false,"first_line":312,"last_line":321,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr) (ipnet.ipnet.Ipv4Net.hostmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))","theorem":"ipnet.ipv4_hostmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.contains ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Addr n a =\n Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ CidrModel.member 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len) (CidrModel.ipv4Value a))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.contains","text":"ipnet.ipnet.Ipv4Net.contains"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Addr","text":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Addr"},{"text":" "},{"text":"n"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"CidrModel.member","text":"CidrModel.member"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.contains","source":{"first_line":2608,"last_line":2616}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Addr","source":{"first_line":3023,"last_line":3029}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.CidrModel","name":"CidrModel.member","source":{"first_line":52,"last_line":52}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}}],"definitions_truncated":false,"first_line":233,"last_line":243,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net) (a : ipnet.core.net.ip_addr.Ipv4Addr)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.Ipv4Net.contains.{0} ipnet.core.net.ip_addr.Ipv4Addr\n ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Addr n a)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (CidrModel.member (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)) (CidrModel.ipv4Value a)))","theorem":"ipnet.ipv4_public_contains_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n ipnet.ipnet.IpNet.contains ipnet.selectedIpContainsAddr n a = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ ipnet.taggedMember n a)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.IpNet.contains","text":"ipnet.ipnet.IpNet.contains"},{"text":" "},{"ref":"ipnet.selectedIpContainsAddr","text":"ipnet.selectedIpContainsAddr"},{"text":" "},{"text":"n"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"ipnet.taggedMember","text":"ipnet.taggedMember"},{"text":" "},{"text":"n"},{"text":" "},{"text":"a"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Proofs.Contains","name":"ipnet.ip_contains_addr_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.contains","source":{"first_line":2838,"last_line":2846}},{"module":"Proofs.Contains","name":"ipnet.selectedIpContainsAddr","source":{"first_line":278,"last_line":281}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.Contains","name":"ipnet.taggedMember","source":{"first_line":156,"last_line":158}}],"definitions_truncated":false,"first_line":287,"last_line":296,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet) (a : ipnet.core.net.ip_addr.IpAddr)\n (hn :\n ipnet.ip_contains_addr_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.IpNet.contains.{0} ipnet.core.net.ip_addr.IpAddr ipnet.selectedIpContainsAddr n a)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true) (ipnet.taggedMember n a))","theorem":"ipnet.ip_public_contains_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"(ipnet.ipnet.IpNet.V6 n).is_sibling (ipnet.ipnet.IpNet.V4 m) = Aeneas.Std.Result.ok Bool.false","conclusion_segments":[{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.is_sibling","text":"is_sibling"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"m"},{"text":")"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Bool.false","text":"Bool.false"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.is_sibling","source":{"first_line":2634,"last_line":2647}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Bool.false","source":{"first_line":108,"last_line":109}}],"definitions_truncated":false,"first_line":122,"last_line":125,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net) (m : ipnet.ipnet.Ipv4Net),\n @Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.IpNet.is_sibling (ipnet.ipnet.IpNet.V6 n) (ipnet.ipnet.IpNet.V4 m))\n (@Aeneas.Std.Result.ok.{0} Bool Bool.false)","theorem":"TaggedIPv4.is_sibling_v6_v4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]}],"conclusion":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialOrdIpSubnets.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (TaggedDerived.subnetsCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialOrdIpSubnets.partial_cmp","text":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialOrdIpSubnets.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.subnetsCompare","text":"TaggedDerived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialOrdIpSubnets.partial_cmp","source":{"first_line":3201,"last_line":3209}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.subnetsCompare","source":{"first_line":42,"last_line":47}}],"definitions_truncated":false,"first_line":192,"last_line":196,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpSubnets),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialOrdIpSubnets.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (TaggedDerived.subnetsCompare a b)))","theorem":"TaggedDerived.subnets_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"∃ out, ipnet.ipnet.Ipv6Net.impl.prefix_len n = Aeneas.Std.Result.ok out ∧ out = n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.Ipv6Net.impl.prefix_len","text":"ipnet.ipnet.Ipv6Net.impl.prefix_len"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.impl.prefix_len","source":{"first_line":2269,"last_line":2273}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}}],"definitions_truncated":false,"first_line":56,"last_line":58,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.Ipv6Net.impl.prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out (ipnet.ipnet.Ipv6Net.prefix_len n))","theorem":"ipnet.ipnet.ipv6_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv4IteratorDerived.subnetsCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv4IteratorDerived.subnetsCompare","text":"IPv4IteratorDerived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpOrd.cmp","source":{"first_line":3156,"last_line":3175}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.subnetsCompare","source":{"first_line":26,"last_line":34}}],"definitions_truncated":false,"first_line":101,"last_line":110,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv4IteratorDerived.subnetsCompare a b))","theorem":"IPv4IteratorDerived.subnets_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv4IteratorDerived.rangeCompare a b)","conclusion_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpOrd.cmp","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv4IteratorDerived.rangeCompare","text":"IPv4IteratorDerived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpOrd.cmp","source":{"first_line":973,"last_line":986}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.rangeCompare","source":{"first_line":17,"last_line":21}}],"definitions_truncated":false,"first_line":57,"last_line":63,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv4AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv4IteratorDerived.rangeCompare a b))","theorem":"IPv4IteratorDerived.range_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialEqIpv4AddrRange.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv4IteratorDerived.rangeKey a = IPv4IteratorDerived.rangeKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialEqIpv4AddrRange.eq","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialEqIpv4AddrRange.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv4IteratorDerived.rangeKey","text":"IPv4IteratorDerived.rangeKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv4IteratorDerived.rangeKey","text":"IPv4IteratorDerived.rangeKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialEqIpv4AddrRange.eq","source":{"first_line":908,"last_line":922}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.rangeKey","source":{"first_line":14,"last_line":15}}],"definitions_truncated":false,"first_line":40,"last_line":55,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialEqIpv4AddrRange.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat Nat) (IPv4IteratorDerived.rangeKey a) (IPv4IteratorDerived.rangeKey b)))","theorem":"IPv4IteratorDerived.range_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndIpv4AddrIpv4Addr.bitand a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.ipv4Value a &&& CidrModel.ipv4Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndIpv4AddrIpv4Addr.bitand","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndIpv4AddrIpv4Addr.bitand"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HAnd.hAnd","text":" &&& "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndIpv4AddrIpv4Addr.bitand","source":{"first_line":661,"last_line":673}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HAnd.hAnd","source":{"first_line":1594,"last_line":1594}},{"module":"Init.Prelude","name":"instHAndOfAndOp","source":{"first_line":1835,"last_line":1837}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instAndOp","source":{"first_line":99,"last_line":99}}],"definitions_truncated":false,"first_line":9,"last_line":20,"module":"Proofs.BitOps","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndIpv4AddrIpv4Addr.bitand a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HAnd.hAnd.{0, 0, 0} Nat Nat Nat (@instHAndOfAndOp.{0} Nat Nat.instAndOp) (CidrModel.ipv4Value a)\n (CidrModel.ipv4Value b)))","theorem":"BitOps.ipv4_and_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V6 n).is_sibling (ipnet.ipnet.IpNet.V6 m) = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n 0 < ↑n.prefix_len ∧\n ↑n.prefix_len = ↑m.prefix_len ∧\n CidrModel.lower 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len - 1) =\n CidrModel.lower 128 (CidrModel.ipv6Value m.addr) (↑m.prefix_len - 1))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.is_sibling","text":"is_sibling"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"m"},{"text":")"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"text":"0"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.is_sibling","source":{"first_line":2634,"last_line":2647}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}}],"definitions_truncated":false,"first_line":83,"last_line":95,"module":"Proofs.TaggedIPv6","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv6Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (ipnet.ipnet.IpNet.is_sibling (ipnet.ipnet.IpNet.V6 n) (ipnet.ipnet.IpNet.V6 m))\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (And\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m)))\n (@Eq.{1} Nat\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr m))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))))))","theorem":"TaggedIPv6.is_sibling_v6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"ipnet.ipnet.IpNet.new_assert ip p =\n match ip with\n | ipnet.core.net.ip_addr.IpAddr.V4 a =>\n if ↑p ≤ 32 then Aeneas.Std.Result.ok (ipnet.ipnet.IpNet.V4 { addr := a, prefix_len := p })\n else Aeneas.Std.Result.fail Aeneas.Std.Error.assertionFailure\n | ipnet.core.net.ip_addr.IpAddr.V6 a =>\n if ↑p ≤ 128 then Aeneas.Std.Result.ok (ipnet.ipnet.IpNet.V6 { addr := a, prefix_len := p })\n else Aeneas.Std.Result.fail Aeneas.Std.Error.assertionFailure","conclusion_segments":[{"ref":"ipnet.ipnet.IpNet.new_assert","text":"ipnet.ipnet.IpNet.new_assert"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"ip"},{"text":" with\n | "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"a"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"},{"text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.assertionFailure","text":"Aeneas.Std.Error.assertionFailure"},{"text":"\n | "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"a"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"},{"text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.assertionFailure","text":"Aeneas.Std.Error.assertionFailure"}],"definitions":[{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.new_assert","source":{"first_line":2119,"last_line":2132}},{"module":"Proofs.NewAssertInvalid","name":"NewAssertInvalid.tagged_invalid.match_1","source":null},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"Nat.decLe","source":{"first_line":2196,"last_line":2212}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.assertionFailure","source":{"first_line":40,"last_line":40}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}}],"definitions_truncated":false,"first_line":54,"last_line":72,"module":"Proofs.NewAssertInvalid","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.IpAddr) (p : Aeneas.Std.U8),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.new_assert ip p)\n (NewAssertInvalid.tagged_invalid.match_1.{1}\n (fun (ip : ipnet.core.net.ip_addr.IpAddr) => Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) ip\n (fun (a : ipnet.core.net.ip_addr.Ipv4Addr) =>\n @ite.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V4 (ipnet.ipnet.Ipv4Net.mk a p)))\n (@Aeneas.Std.Result.fail.{0} ipnet.ipnet.IpNet Aeneas.Std.Error.assertionFailure))\n fun (a : ipnet.core.net.ip_addr.Ipv6Addr) =>\n @ite.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V6 (ipnet.ipnet.Ipv6Net.mk a p)))\n (@Aeneas.Std.Result.fail.{0} ipnet.ipnet.IpNet Aeneas.Std.Error.assertionFailure))","theorem":"NewAssertInvalid.tagged_full_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Net.contains ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Addr n a =\n Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ CidrModel.member 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len) (CidrModel.ipv6Value a))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.contains","text":"ipnet.ipnet.Ipv6Net.contains"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Addr","text":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Addr"},{"text":" "},{"text":"n"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"CidrModel.member","text":"CidrModel.member"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.contains","source":{"first_line":2556,"last_line":2564}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Addr","source":{"first_line":2997,"last_line":3003}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.CidrModel","name":"CidrModel.member","source":{"first_line":52,"last_line":52}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":245,"last_line":254,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net) (a : ipnet.core.net.ip_addr.Ipv6Addr)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.Ipv6Net.contains.{0} ipnet.core.net.ip_addr.Ipv6Addr\n ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Addr n a)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (CidrModel.member (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)) (CidrModel.ipv6Value a)))","theorem":"ipnet.ipv6_public_contains_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]}],"conclusion":"∃ out,\n ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialEqIpSubnets.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ TaggedDerived.subnetsKey a = TaggedDerived.subnetsKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialEqIpSubnets.eq","text":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialEqIpSubnets.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"TaggedDerived.subnetsKey","text":"TaggedDerived.subnetsKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedDerived.subnetsKey","text":"TaggedDerived.subnetsKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialEqIpSubnets.eq","source":{"first_line":3111,"last_line":3133}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.subnetsKey","source":{"first_line":22,"last_line":26}}],"definitions_truncated":false,"first_line":152,"last_line":179,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpSubnets),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.IpSubnets.Insts.CoreCmpPartialEqIpSubnets.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat (Prod.{0, 0} Nat (Prod.{0, 0} Nat Nat))) (TaggedDerived.subnetsKey a)\n (TaggedDerived.subnetsKey b)))","theorem":"TaggedDerived.subnets_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"(CidrModel.ipv6Value r.end < CidrModel.ipv6Value r.start →\n ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r = Aeneas.Std.Result.ok (Option.none, r) ∧\n IPv6SubnetStep.remaining r = RangeMath.HalfOpen.empty) ∧\n (∀ (hse : CidrModel.ipv6Value r.start ≤ CidrModel.ipv6Value r.end) (hq : ↑r.min_prefix_len ≤ 128),\n ∃ net r',\n ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r =\n Aeneas.Std.Result.ok (Option.some net, r') ∧\n CidrModel.ipv6Value net.addr = CidrModel.ipv6Value r.start ∧\n ↑net.prefix_len =\n IPv6SubnetMath.bestPrefix (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end + 1)\n (↑r.min_prefix_len) hq (IPv6SubnetAll.next_raw_spec._proof_2 r hse) ∧\n IPv6SubnetStep.remaining r' =\n IPv6SubnetMath.residual (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end + 1)\n (↑r.min_prefix_len) hq (IPv6SubnetAll.next_raw_spec._proof_2 r hse) ∧\n r'.min_prefix_len = r.min_prefix_len) ∧\n (CidrModel.ipv6Value r.start ≤ CidrModel.ipv6Value r.end →\n 128 < ↑r.min_prefix_len →\n ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r =\n Aeneas.Std.Result.fail Aeneas.Std.Error.panic)","conclusion_segments":[{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"LT.lt","text":" < "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":" →\n "},{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.none","text":"Option.none"},{"ref":"Prod.mk","text":", "},{"text":"r"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6SubnetStep.remaining","text":"IPv6SubnetStep.remaining"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.HalfOpen.empty","text":"RangeMath.HalfOpen.empty"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"hse"},{"text":" : "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"text":") ("},{"text":"hq"},{"text":" : "},{"text":"↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"text":"),\n "},{"text":"∃ "},{"text":"net"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"net"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6SubnetMath.bestPrefix","text":"IPv6SubnetMath.bestPrefix"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"IPv6SubnetAll.next_raw_spec._proof_2","text":"IPv6SubnetAll.next_raw_spec._proof_2"},{"text":" "},{"text":"r"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6SubnetStep.remaining","text":"IPv6SubnetStep.remaining"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6SubnetMath.residual","text":"IPv6SubnetMath.residual"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"IPv6SubnetAll.next_raw_spec._proof_2","text":"IPv6SubnetAll.next_raw_spec._proof_2"},{"text":" "},{"text":"r"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"r'"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"text":" →\n "},{"text":"128"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":" →\n "},{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.panic","text":"Aeneas.Std.Error.panic"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.end","source":{"first_line":2696,"last_line":2696}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.start","source":{"first_line":2695,"last_line":2695}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next","source":{"first_line":3285,"last_line":3323}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.IPv6SubnetStep","name":"IPv6SubnetStep.remaining","source":{"first_line":196,"last_line":198}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen.empty","source":{"first_line":15,"last_line":15}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","source":{"first_line":2697,"last_line":2697}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Proofs.IPv6SubnetMath","name":"IPv6SubnetMath.bestPrefix","source":{"first_line":29,"last_line":31}},{"module":"Init.Prelude","name":"HAdd.hAdd","source":{"first_line":1481,"last_line":1481}},{"module":"Init.Prelude","name":"instHAdd","source":{"first_line":1784,"last_line":1786}},{"module":"Init.Prelude","name":"instAddNat","source":{"first_line":1892,"last_line":1893}},{"module":"Proofs.IPv6SubnetAll","name":"IPv6SubnetAll.next_raw_spec._proof_2","source":null},{"module":"Proofs.IPv6SubnetMath","name":"IPv6SubnetMath.residual","source":{"first_line":174,"last_line":179}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.panic","source":{"first_line":45,"last_line":45}}],"definitions_truncated":false,"first_line":12,"last_line":39,"module":"Proofs.IPv6SubnetAll","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv6Subnets),\n And\n (@LT.lt.{0} Nat instLTNat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end r))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r)) →\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets))\n (ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets\n (@Option.none.{0} ipnet.ipnet.Ipv6Net) r)))\n (@Eq.{1} RangeMath.HalfOpen (IPv6SubnetStep.remaining r) RangeMath.HalfOpen.empty))\n (And\n (∀\n (hse :\n @LE.le.{0} Nat instLENat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end r)))\n (hq :\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len r))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipnet.Ipv6Net fun (net : ipnet.ipnet.Ipv6Net) =>\n @Exists.{1} ipnet.ipnet.Ipv6Subnets fun (r' : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets))\n (ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets\n (@Option.some.{0} ipnet.ipnet.Ipv6Net net) r')))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr net))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len net))\n (IPv6SubnetMath.bestPrefix (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end r))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len r)) hq\n (IPv6SubnetAll.next_raw_spec._proof_2 r hse)))\n (And\n (@Eq.{1} RangeMath.HalfOpen (IPv6SubnetStep.remaining r')\n (IPv6SubnetMath.residual (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end r))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len r)) hq\n (IPv6SubnetAll.next_raw_spec._proof_2 r hse)))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len r')\n (ipnet.ipnet.Ipv6Subnets.min_prefix_len r))))))\n (@LE.le.{0} Nat instLENat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start r))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end r)) →\n @LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len r)) →\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets))\n (ipnet.ipnet.Ipv6Subnets.Insts.CoreIterTraitsIteratorIteratorIpv6Net.next r)\n (@Aeneas.Std.Result.fail.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Subnets)\n Aeneas.Std.Error.panic)))","theorem":"IPv6SubnetAll.next_raw_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialOrdIpv6AddrRange.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv6Derived.rangeCompare a b))","conclusion_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialOrdIpv6AddrRange.partial_cmp","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialOrdIpv6AddrRange.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.rangeCompare","text":"IPv6Derived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialOrdIpv6AddrRange.partial_cmp","source":{"first_line":1048,"last_line":1056}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.rangeCompare","source":{"first_line":60,"last_line":64}}],"definitions_truncated":false,"first_line":108,"last_line":112,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv6AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreCmpPartialOrdIpv6AddrRange.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (IPv6Derived.rangeCompare a b)))","theorem":"IPv6Derived.range_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.is_sibling m = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n 0 < ↑n.prefix_len ∧\n ↑n.prefix_len = ↑m.prefix_len ∧\n CidrModel.lower 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len - 1) =\n CidrModel.lower 32 (CidrModel.ipv4Value m.addr) (↑m.prefix_len - 1))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.is_sibling","text":"is_sibling"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"text":"0"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.is_sibling","source":{"first_line":2618,"last_line":2632}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}}],"definitions_truncated":false,"first_line":211,"last_line":265,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv4Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv4Net.is_sibling n m) (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (And\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m)))\n (@Eq.{1} Nat\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr m))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))))))","theorem":"IPv4NetOps.is_sibling_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"Aeneas.Std.U128","type_segments":[{"ref":"Aeneas.Std.U128","text":"Aeneas.Std.U128"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrU128Ipv6Addr.bitor a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.ipv6Value a ||| ↑b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrU128Ipv6Addr.bitor","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrU128Ipv6Addr.bitor"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HOr.hOr","text":" ||| "},{"text":"↑"},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U128","source":{"first_line":673,"last_line":673}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrU128Ipv6Addr.bitor","source":{"first_line":756,"last_line":767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HOr.hOr","source":{"first_line":1606,"last_line":1606}},{"module":"Init.Prelude","name":"instHOrOfOrOp","source":{"first_line":1843,"last_line":1845}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instOrOp","source":{"first_line":100,"last_line":100}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U128","source":{"first_line":37,"last_line":37}}],"definitions_truncated":false,"first_line":47,"last_line":57,"module":"Proofs.IPv6BitOps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv6Addr) (b : Aeneas.Std.U128),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitOrU128Ipv6Addr.bitor a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HOr.hOr.{0, 0, 0} Nat Nat Nat (@instHOrOfOrOp.{0} Nat Nat.instOrOp) (CidrModel.ipv6Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U128 b)))","theorem":"IPv6BitOps.ipv6_or_u128_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Net.contains ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Net n m =\n Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n CidrModel.subset 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len) (CidrModel.ipv6Value m.addr) ↑m.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.contains","text":"ipnet.ipnet.Ipv6Net.contains"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Net","text":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Net"},{"text":" "},{"text":"n"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.contains","source":{"first_line":2556,"last_line":2564}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Net","source":{"first_line":2548,"last_line":2554}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":267,"last_line":276,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv6Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.Ipv6Net.contains.{0} ipnet.ipnet.Ipv6Net\n ipnet.ipnet.Ipv6Net.Insts.IpnetIpnetContainsSharedAIpv6Net n m)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr m))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))))","theorem":"ipnet.ipv6_public_contains_net_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.new ip p = Aeneas.Std.Result.ok out ∧\n out =\n if ↑p ≤ 32 then Aeneas.Std.core.result.Result.Ok { addr := ip, prefix_len := p }\n else Aeneas.Std.core.result.Result.Err ()","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.new","text":"ipnet.ipnet.Ipv4Net.new"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.new","source":{"first_line":2027,"last_line":2036}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Unit","source":{"first_line":214,"last_line":224}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"Nat.decLe","source":{"first_line":2196,"last_line":2212}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}}],"definitions_truncated":false,"first_line":11,"last_line":24,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.Ipv4Addr) (p : Aeneas.Std.U8),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv4Net.new ip p)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError)\n out))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError) out\n (@ite.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net Unit)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv4Net Unit (ipnet.ipnet.Ipv4Net.mk ip p))\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv4Net Unit Unit.unit)))","theorem":"ipnet.ipnet.ipv4_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"rhs","type":"Aeneas.Std.U128","type_segments":[{"ref":"Aeneas.Std.U128","text":"Aeneas.Std.U128"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpAddU128Ipv6Addr.saturating_add a rhs = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = Min.min (CidrModel.ipv6Value a + ↑rhs) (2 ^ 128 - 1)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpAddU128Ipv6Addr.saturating_add","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpAddU128Ipv6Addr.saturating_add"},{"text":" "},{"text":"a"},{"text":" "},{"text":"rhs"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Min.min","text":"Min.min"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HAdd.hAdd","text":" + "},{"text":"↑"},{"text":"rhs"},{"ref":"HAdd.hAdd","text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U128","source":{"first_line":673,"last_line":673}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpAddU128Ipv6Addr.saturating_add","source":{"first_line":591,"last_line":603}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"Min.min","source":{"first_line":1441,"last_line":1441}},{"module":"Init.Prelude","name":"instMinNat","source":{"first_line":2228,"last_line":2228}},{"module":"Init.Prelude","name":"HAdd.hAdd","source":{"first_line":1481,"last_line":1481}},{"module":"Init.Prelude","name":"instHAdd","source":{"first_line":1784,"last_line":1786}},{"module":"Init.Prelude","name":"instAddNat","source":{"first_line":1892,"last_line":1893}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U128","source":{"first_line":37,"last_line":37}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}}],"definitions_truncated":false,"first_line":11,"last_line":24,"module":"Proofs.IPv6RangeSteps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv6Addr) (rhs : Aeneas.Std.U128),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpAddU128Ipv6Addr.saturating_add a rhs)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@Min.min.{0} Nat instMinNat\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (CidrModel.ipv6Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U128 rhs))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))","theorem":"IPv6RangeSteps.ipv6_saturating_add_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"rhs","type":"Aeneas.Std.U32","type_segments":[{"ref":"Aeneas.Std.U32","text":"Aeneas.Std.U32"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpAddU32Ipv4Addr.saturating_add a rhs = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = Min.min (CidrModel.ipv4Value a + ↑rhs) (2 ^ 32 - 1)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpAddU32Ipv4Addr.saturating_add","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpAddU32Ipv4Addr.saturating_add"},{"text":" "},{"text":"a"},{"text":" "},{"text":"rhs"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Min.min","text":"Min.min"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HAdd.hAdd","text":" + "},{"text":"↑"},{"text":"rhs"},{"ref":"HAdd.hAdd","text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U32","source":{"first_line":671,"last_line":671}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpAddU32Ipv4Addr.saturating_add","source":{"first_line":577,"last_line":589}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"Min.min","source":{"first_line":1441,"last_line":1441}},{"module":"Init.Prelude","name":"instMinNat","source":{"first_line":2228,"last_line":2228}},{"module":"Init.Prelude","name":"HAdd.hAdd","source":{"first_line":1481,"last_line":1481}},{"module":"Init.Prelude","name":"instHAdd","source":{"first_line":1784,"last_line":1786}},{"module":"Init.Prelude","name":"instAddNat","source":{"first_line":1892,"last_line":1893}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U32","source":{"first_line":35,"last_line":35}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}}],"definitions_truncated":false,"first_line":16,"last_line":28,"module":"Proofs.RangeNext","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv4Addr) (rhs : Aeneas.Std.U32),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpAddU32Ipv4Addr.saturating_add a rhs)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@Min.min.{0} Nat instMinNat\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) (CidrModel.ipv4Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 rhs))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))","theorem":"RangeNext.ipv4_saturating_add_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialOrdIpAddrRange.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (TaggedDerived.rangeCompare a b))","conclusion_segments":[{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialOrdIpAddrRange.partial_cmp","text":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialOrdIpAddrRange.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.rangeCompare","text":"TaggedDerived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialOrdIpAddrRange.partial_cmp","source":{"first_line":1014,"last_line":1022}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.rangeCompare","source":{"first_line":35,"last_line":40}}],"definitions_truncated":false,"first_line":146,"last_line":150,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.IpAddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipext.IpAddrRange.Insts.CoreCmpPartialOrdIpAddrRange.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (TaggedDerived.rangeCompare a b)))","theorem":"TaggedDerived.range_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.supernet = Aeneas.Std.Result.ok out ∧\n if ↑n.prefix_len = 0 then out = Option.none\n else\n ∃ parent,\n out = Option.some parent ∧\n ↑parent.prefix_len = ↑n.prefix_len - 1 ∧\n CidrModel.ipv6Value parent.addr = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len - 1) ∧\n ↑parent.prefix_len ≤ 128 ∧\n CidrModel.subset 128 (CidrModel.ipv6Value parent.addr) (↑parent.prefix_len) (CidrModel.ipv6Value n.addr)\n ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.supernet","text":"supernet"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.none","text":"Option.none"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"parent"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"parent"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":"\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.supernet","source":{"first_line":2458,"last_line":2469}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"instDecidableEqNat","source":{"first_line":1995,"last_line":1995}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}}],"definitions_truncated":false,"first_line":85,"last_line":156,"module":"Proofs.IPv6NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} (Option.{0} ipnet.ipnet.Ipv6Net) fun (out : Option.{0} ipnet.ipnet.Ipv6Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.ipnet.Ipv6Net)) (ipnet.ipnet.Ipv6Net.supernet n)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.ipnet.Ipv6Net) out))\n (@ite.{1} Prop\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (instDecidableEqNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} (Option.{0} ipnet.ipnet.Ipv6Net) out (@Option.none.{0} ipnet.ipnet.Ipv6Net))\n (@Exists.{1} ipnet.ipnet.Ipv6Net fun (parent : ipnet.ipnet.Ipv6Net) =>\n And (@Eq.{1} (Option.{0} ipnet.ipnet.Ipv6Net) out (@Option.some.{0} ipnet.ipnet.Ipv6Net parent))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr parent))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))\n (And\n (@LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr parent))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))))))","theorem":"IPv6NetOps.supernet_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Net.new ip p = Aeneas.Std.Result.ok out ∧\n out =\n if ↑p ≤ 128 then Aeneas.Std.core.result.Result.Ok { addr := ip, prefix_len := p }\n else Aeneas.Std.core.result.Result.Err ()","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.new","text":"ipnet.ipnet.Ipv6Net.new"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"p"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.new","source":{"first_line":2016,"last_line":2025}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Unit","source":{"first_line":214,"last_line":224}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"Nat.decLe","source":{"first_line":2196,"last_line":2212}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}}],"definitions_truncated":false,"first_line":26,"last_line":38,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (ip : ipnet.core.net.ip_addr.Ipv6Addr) (p : Aeneas.Std.U8),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv6Net.new ip p)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError)\n out))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError) out\n (@ite.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net Unit)\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (Nat.decLe (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 p)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv6Net Unit (ipnet.ipnet.Ipv6Net.mk ip p))\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv6Net Unit Unit.unit)))","theorem":"ipnet.ipnet.ipv6_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V4 n).hosts = Aeneas.Std.Result.ok (ipnet.ipext.IpAddrRange.V4 out) ∧\n CidrModel.ipv4Value out.start = IPv4NetMath.hostStart (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv4Value out.end = IPv4NetMath.hostStop (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n RangeNext.remaining out = IPv4NetMath.hostsRemaining (CidrModel.ipv4Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.hosts","text":"hosts"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"out"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv4AddrRange.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostStart","text":"IPv4NetMath.hostStart"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv4AddrRange.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostStop","text":"IPv4NetMath.hostStop"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostsRemaining","text":"IPv4NetMath.hostsRemaining"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.hosts","source":{"first_line":2679,"last_line":2689}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.start","source":{"first_line":864,"last_line":864}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostStart","source":{"first_line":9,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.end","source":{"first_line":865,"last_line":865}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostStop","source":{"first_line":12,"last_line":13}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostsRemaining","source":{"first_line":15,"last_line":16}}],"definitions_truncated":false,"first_line":34,"last_line":46,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (out : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.IpAddrRange) (ipnet.ipnet.IpNet.hosts (ipnet.ipnet.IpNet.V4 n))\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.IpAddrRange (ipnet.ipext.IpAddrRange.V4 out)))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipext.Ipv4AddrRange.start out))\n (IPv4NetMath.hostStart (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipext.Ipv4AddrRange.end out))\n (IPv4NetMath.hostStop (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (@Eq.{1} RangeMath.HalfOpen (RangeNext.remaining out)\n (IPv4NetMath.hostsRemaining (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))))","theorem":"TaggedIPv4.hosts_v4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V6 n).supernet = Aeneas.Std.Result.ok out ∧\n if ↑n.prefix_len = 0 then out = Option.none\n else\n ∃ parent,\n out = Option.some (ipnet.ipnet.IpNet.V6 parent) ∧\n ↑parent.prefix_len = ↑n.prefix_len - 1 ∧\n CidrModel.ipv6Value parent.addr = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len - 1) ∧\n ↑parent.prefix_len ≤ 128 ∧\n CidrModel.subset 128 (CidrModel.ipv6Value parent.addr) (↑parent.prefix_len) (CidrModel.ipv6Value n.addr)\n ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.supernet","text":"supernet"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.none","text":"Option.none"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"parent"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"parent"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":"\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.supernet","source":{"first_line":2509,"last_line":2522}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"instDecidableEqNat","source":{"first_line":1995,"last_line":1995}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}}],"definitions_truncated":false,"first_line":55,"last_line":81,"module":"Proofs.TaggedIPv6","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} (Option.{0} ipnet.ipnet.IpNet) fun (out : Option.{0} ipnet.ipnet.IpNet) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.ipnet.IpNet))\n (ipnet.ipnet.IpNet.supernet (ipnet.ipnet.IpNet.V6 n))\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.ipnet.IpNet) out))\n (@ite.{1} Prop\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (instDecidableEqNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} (Option.{0} ipnet.ipnet.IpNet) out (@Option.none.{0} ipnet.ipnet.IpNet))\n (@Exists.{1} ipnet.ipnet.Ipv6Net fun (parent : ipnet.ipnet.Ipv6Net) =>\n And\n (@Eq.{1} (Option.{0} ipnet.ipnet.IpNet) out\n (@Option.some.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V6 parent)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr parent))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))\n (And\n (@LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr parent))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len parent))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))))))","theorem":"TaggedIPv6.supernet_v6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.network = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.network","text":"network"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.network","source":{"first_line":2230,"last_line":2238}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}}],"definitions_truncated":false,"first_line":443,"last_line":453,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr) (ipnet.ipnet.Ipv4Net.network n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))","theorem":"ipnet.ipv4_network_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCloneClone.clone","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreCloneClone.clone","source":{"first_line":1041,"last_line":1046}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":79,"last_line":81,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv6AddrRange) (ipnet.ipext.Ipv6AddrRange.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv6AddrRange r)","theorem":"IPv6Derived.range_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth r n = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv4Value out, RangeNext.remaining r') = RangeMore.skipFront (RangeNext.remaining r) ↑n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.skipFront","text":"RangeMore.skipFront"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth","source":{"first_line":1463,"last_line":1494}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.RangeMore","name":"RangeMore.skipFront","source":{"first_line":365,"last_line":370}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}}],"definitions_truncated":false,"first_line":460,"last_line":554,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (r' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth r n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out) (RangeNext.remaining r'))\n (RangeMore.skipFront (RangeNext.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))","theorem":"RangeMore.range_nth_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv4Derived.keyCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv4Derived.keyCompare","text":"IPv4Derived.keyCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpOrd.cmp","source":{"first_line":1854,"last_line":1865}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv4Derived","name":"IPv4Derived.keyCompare","source":{"first_line":16,"last_line":20}}],"definitions_truncated":false,"first_line":41,"last_line":48,"module":"Proofs.IPv4Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Net),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.Ipv4Net.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv4Derived.keyCompare a b))","theorem":"IPv4Derived.cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.PrefixLenError","type_segments":[{"ref":"ipnet.ipnet.PrefixLenError","text":"ipnet.ipnet.PrefixLenError"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.PrefixLenError","type_segments":[{"ref":"ipnet.ipnet.PrefixLenError","text":"ipnet.ipnet.PrefixLenError"}]}],"conclusion":"ipnet.ipnet.PrefixLenError.Insts.CoreCmpPartialEqPrefixLenError.eq a b = Aeneas.Std.Result.ok Bool.true","conclusion_segments":[{"ref":"ipnet.ipnet.PrefixLenError.Insts.CoreCmpPartialEqPrefixLenError.eq","text":"ipnet.ipnet.PrefixLenError.Insts.CoreCmpPartialEqPrefixLenError.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Bool.true","text":"Bool.true"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError.Insts.CoreCmpPartialEqPrefixLenError.eq","source":{"first_line":2007,"last_line":2014}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}}],"definitions_truncated":false,"first_line":14,"last_line":20,"module":"Proofs.PrefixLenErrorValue","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.PrefixLenError),\n @Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.PrefixLenError.Insts.CoreCmpPartialEqPrefixLenError.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool Bool.true)","theorem":"PrefixLenErrorValue.eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"ipnet.ipext.IpAddrRange.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreCloneClone.clone","text":"ipnet.ipext.IpAddrRange.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreCloneClone.clone","source":{"first_line":875,"last_line":880}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":53,"last_line":55,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.IpAddrRange) (ipnet.ipext.IpAddrRange.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.IpAddrRange r)","theorem":"TaggedDerived.range_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCloneClone.clone","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCloneClone.clone","source":{"first_line":1024,"last_line":1029}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":36,"last_line":38,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv4AddrRange) (ipnet.ipext.Ipv4AddrRange.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv4AddrRange r)","theorem":"IPv4IteratorDerived.range_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"ipnet.ipnet.IpNet.Insts.CoreCloneClone.clone n = Aeneas.Std.Result.ok n","conclusion_segments":[{"ref":"ipnet.ipnet.IpNet.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.IpNet.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreCloneClone.clone","source":{"first_line":1770,"last_line":1775}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":49,"last_line":51,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.Insts.CoreCloneClone.clone n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet n)","theorem":"TaggedDerived.net_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.hosts = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out.start = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv6Value out.end = CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n IPv6NetOps.remaining out =\n RangeMath.ofInclusive (CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len)\n (CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.hosts","text":"hosts"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6NetOps.remaining","text":"IPv6NetOps.remaining"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"RangeMath.ofInclusive","text":"RangeMath.ofInclusive"},{"text":" "},{"text":"("},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":"\n "},{"text":"("},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.hosts","source":{"first_line":2649,"last_line":2656}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.IPv6NetOps","name":"IPv6NetOps.remaining","source":{"first_line":14,"last_line":16}},{"module":"Proofs.RangeMath","name":"RangeMath.ofInclusive","source":{"first_line":19,"last_line":20}}],"definitions_truncated":false,"first_line":18,"last_line":38,"module":"Proofs.IPv6NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (out : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv6AddrRange) (ipnet.ipnet.Ipv6Net.hosts n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv6AddrRange out))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start out))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end out))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (@Eq.{1} RangeMath.HalfOpen (IPv6NetOps.remaining out)\n (RangeMath.ofInclusive\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))))))","theorem":"IPv6NetOps.hosts_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubIpv4AddrU32.saturating_sub a b = Aeneas.Std.Result.ok out ∧\n ↑out = CidrModel.ipv4Value a - CidrModel.ipv4Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubIpv4AddrU32.saturating_sub","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubIpv4AddrU32.saturating_sub"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HSub.hSub","text":" - "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U32","source":{"first_line":671,"last_line":671}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubIpv4AddrU32.saturating_sub","source":{"first_line":605,"last_line":617}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U32","source":{"first_line":35,"last_line":35}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}}],"definitions_truncated":false,"first_line":22,"last_line":33,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} Aeneas.Std.U32 fun (out : Aeneas.Std.U32) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U32)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpSubIpv4AddrU32.saturating_sub a b)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U32 out))\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat) (CidrModel.ipv4Value a)\n (CidrModel.ipv4Value b)))","theorem":"RangeMore.ipv4_saturating_sub_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv6Subnets.from r = Aeneas.Std.Result.ok (ipnet.ipnet.IpSubnets.V6 r)","conclusion_segments":[{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv6Subnets.from","text":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv6Subnets.from"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv6Subnets.from","source":{"first_line":3252,"last_line":3257}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V6","source":{"first_line":2713,"last_line":2713}}],"definitions_truncated":false,"first_line":28,"last_line":32,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv6Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpSubnets) (ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv6Subnets.from r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpSubnets (ipnet.ipnet.IpSubnets.V6 r))","theorem":"TaggedIPv4.from_ipv6_subnets_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubIpv6AddrU128.saturating_sub a b = Aeneas.Std.Result.ok out ∧\n ↑out = CidrModel.ipv6Value a - CidrModel.ipv6Value b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubIpv6AddrU128.saturating_sub","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubIpv6AddrU128.saturating_sub"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HSub.hSub","text":" - "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U128","source":{"first_line":673,"last_line":673}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubIpv6AddrU128.saturating_sub","source":{"first_line":633,"last_line":645}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U128","source":{"first_line":37,"last_line":37}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}}],"definitions_truncated":false,"first_line":83,"last_line":95,"module":"Proofs.IPv6RangeBasic","program":null,"program_head":null,"statement":"∀ (a b : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} Aeneas.Std.U128 fun (out : Aeneas.Std.U128) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U128)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpSubIpv6AddrU128.saturating_sub a b)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U128 out))\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U128 out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat) (CidrModel.ipv6Value a)\n (CidrModel.ipv6Value b)))","theorem":"IPv6RangeBasic.ipv6_saturating_sub_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V4 n).supernet = Aeneas.Std.Result.ok out ∧\n if ↑n.prefix_len = 0 then out = Option.none\n else\n ∃ parent,\n out = Option.some (ipnet.ipnet.IpNet.V4 parent) ∧\n ↑parent.prefix_len = ↑n.prefix_len - 1 ∧\n CidrModel.ipv4Value parent.addr = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len - 1) ∧\n ↑parent.prefix_len ≤ 32 ∧\n CidrModel.subset 32 (CidrModel.ipv4Value parent.addr) (↑parent.prefix_len) (CidrModel.ipv4Value n.addr)\n ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.supernet","text":"supernet"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.none","text":"Option.none"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"parent"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"parent"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"parent"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":"\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.supernet","source":{"first_line":2509,"last_line":2522}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"instDecidableEqNat","source":{"first_line":1995,"last_line":1995}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}}],"definitions_truncated":false,"first_line":76,"last_line":101,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} (Option.{0} ipnet.ipnet.IpNet) fun (out : Option.{0} ipnet.ipnet.IpNet) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.ipnet.IpNet))\n (ipnet.ipnet.IpNet.supernet (ipnet.ipnet.IpNet.V4 n))\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.ipnet.IpNet) out))\n (@ite.{1} Prop\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (instDecidableEqNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} (Option.{0} ipnet.ipnet.IpNet) out (@Option.none.{0} ipnet.ipnet.IpNet))\n (@Exists.{1} ipnet.ipnet.Ipv4Net fun (parent : ipnet.ipnet.Ipv4Net) =>\n And\n (@Eq.{1} (Option.{0} ipnet.ipnet.IpNet) out\n (@Option.some.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V4 parent)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr parent))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))\n (And\n (@LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr parent))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len parent))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))))))","theorem":"TaggedIPv4.supernet_v4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next r = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv4Value out, RangeNext.remaining r') = RangeMath.next (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.next","text":"RangeMath.next"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next","source":{"first_line":1177,"last_line":1202}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.RangeMath","name":"RangeMath.next","source":{"first_line":33,"last_line":39}}],"definitions_truncated":false,"first_line":68,"last_line":112,"module":"Proofs.RangeNext","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (r' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.next r)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out) (RangeNext.remaining r'))\n (RangeMath.next (RangeNext.remaining r)))","theorem":"RangeNext.range_next_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialEqIpv6Subnets.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv6Derived.subnetsKey a = IPv6Derived.subnetsKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialEqIpv6Subnets.eq","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialEqIpv6Subnets.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv6Derived.subnetsKey","text":"IPv6Derived.subnetsKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv6Derived.subnetsKey","text":"IPv6Derived.subnetsKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialEqIpv6Subnets.eq","source":{"first_line":3057,"last_line":3072}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.subnetsKey","source":{"first_line":66,"last_line":67}}],"definitions_truncated":false,"first_line":118,"last_line":142,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Subnets),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialEqIpv6Subnets.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat (Prod.{0, 0} Nat Nat)) (IPv6Derived.subnetsKey a) (IPv6Derived.subnetsKey b)))","theorem":"IPv6Derived.subnets_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.nth r n = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map TaggedRange.addrValue out, TaggedRange.remaining r') =\n RangeMore.skipFront (TaggedRange.remaining r) ↑n ∧\n TaggedRange.family r' = TaggedRange.family r ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o a',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth a n =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o ∧ r' = ipnet.ipext.IpAddrRange.V4 a'\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o a',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth a n =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o ∧ r' = ipnet.ipext.IpAddrRange.V6 a'","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.nth","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.nth"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"RangeMore.skipFront","text":"RangeMore.skipFront"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"ref":"And","text":" ∧\n "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth"},{"text":" "},{"text":"a"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a'"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth"},{"text":" "},{"text":"a"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a'"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.nth","source":{"first_line":1496,"last_line":1517}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Proofs.RangeMore","name":"RangeMore.skipFront","source":{"first_line":365,"last_line":370}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth","source":{"first_line":1463,"last_line":1494}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth","source":{"first_line":1420,"last_line":1461}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}}],"definitions_truncated":false,"first_line":293,"last_line":340,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n @Exists.{1} ipnet.ipext.IpAddrRange fun (r' : ipnet.ipext.IpAddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.nth r n)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange out r')))\n (And\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (TaggedRange.remaining r'))\n (RangeMore.skipFront (TaggedRange.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))\n (And (@Eq.{1} Bool (TaggedRange.family r') (TaggedRange.family r))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (a' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.nth a n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V4 a'))))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (a' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth a n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V6 a')))))))","theorem":"TaggedRange.nth_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialEqIpv4Subnets.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv4IteratorDerived.subnetsKey a = IPv4IteratorDerived.subnetsKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialEqIpv4Subnets.eq","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialEqIpv4Subnets.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv4IteratorDerived.subnetsKey","text":"IPv4IteratorDerived.subnetsKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv4IteratorDerived.subnetsKey","text":"IPv4IteratorDerived.subnetsKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialEqIpv4Subnets.eq","source":{"first_line":3084,"last_line":3099}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.subnetsKey","source":{"first_line":23,"last_line":24}}],"definitions_truncated":false,"first_line":75,"last_line":99,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Subnets),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialEqIpv4Subnets.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat (Prod.{0, 0} Nat Nat)) (IPv4IteratorDerived.subnetsKey a)\n (IPv4IteratorDerived.subnetsKey b)))","theorem":"IPv4IteratorDerived.subnets_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"ipnet.ipnet.Ipv6Net.Insts.CoreCloneClone.clone n = Aeneas.Std.Result.ok n","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.Ipv6Net.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreCloneClone.clone","source":{"first_line":1960,"last_line":1965}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":23,"last_line":25,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net) (ipnet.ipnet.Ipv6Net.Insts.CoreCloneClone.clone n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Net n)","theorem":"IPv6Derived.net_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.broadcast = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.broadcast","text":"broadcast"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.broadcast","source":{"first_line":2399,"last_line":2408}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":478,"last_line":487,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr) (ipnet.ipnet.Ipv6Net.broadcast n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))","theorem":"ipnet.ipv6_broadcast_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"ipnet.ipext.IpAddrRange.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (TaggedDerived.rangeCompare a b)","conclusion_segments":[{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreCmpOrd.cmp","text":"ipnet.ipext.IpAddrRange.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.rangeCompare","text":"TaggedDerived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreCmpOrd.cmp","source":{"first_line":988,"last_line":1012}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.rangeCompare","source":{"first_line":35,"last_line":40}}],"definitions_truncated":false,"first_line":135,"last_line":144,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.IpAddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipext.IpAddrRange.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (TaggedDerived.rangeCompare a b))","theorem":"TaggedDerived.range_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"q","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V6 n).subnets q = Aeneas.Std.Result.ok out ∧\n if ↑q < ↑n.prefix_len ∨ 128 < ↑q then out = Aeneas.Std.core.result.Result.Err ()\n else\n ∃ s,\n out = Aeneas.Std.core.result.Result.Ok (ipnet.ipnet.IpSubnets.V6 s) ∧\n CidrModel.ipv6Value s.start = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv6Value s.end = CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n s.min_prefix_len = q","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.subnets","text":"subnets"},{"text":" "},{"text":"q"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"q"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Or","text":" ∨ "},{"text":"128"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"q"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"s"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"s"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"q"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.subnets","source":{"first_line":2819,"last_line":2836}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Or","source":{"first_line":661,"last_line":671}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Init.Prelude","name":"instDecidableOr","source":{"first_line":1247,"last_line":1255}},{"module":"Init.Prelude","name":"Nat.decLt","source":{"first_line":2214,"last_line":2226}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V6","source":{"first_line":2713,"last_line":2713}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.start","source":{"first_line":2695,"last_line":2695}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.end","source":{"first_line":2696,"last_line":2696}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","source":{"first_line":2697,"last_line":2697}}],"definitions_truncated":false,"first_line":26,"last_line":53,"module":"Proofs.TaggedIPv6","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net) (q : Aeneas.Std.U8)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.IpNet.subnets (ipnet.ipnet.IpNet.V6 n) q)\n (@Aeneas.Std.Result.ok.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out))\n (@ite.{1} Prop\n (Or\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@instDecidableOr\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (Nat.decLt (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (Nat.decLt (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError Unit.unit))\n (@Exists.{1} ipnet.ipnet.Ipv6Subnets fun (s : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError\n (ipnet.ipnet.IpSubnets.V6 s)))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start s))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end s))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len s) q)))))","theorem":"TaggedIPv6.subnets_v6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialEqIpv4Net.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ IPv4Derived.key a = IPv4Derived.key b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialEqIpv4Net.eq","text":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialEqIpv4Net.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv4Derived.key","text":"IPv4Derived.key"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"IPv4Derived.key","text":"IPv4Derived.key"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialEqIpv4Net.eq","source":{"first_line":1798,"last_line":1807}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.IPv4Derived","name":"IPv4Derived.key","source":{"first_line":13,"last_line":14}}],"definitions_truncated":false,"first_line":26,"last_line":39,"module":"Proofs.IPv4Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Net),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv4Net.Insts.CoreCmpPartialEqIpv4Net.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true) (@Eq.{1} (Prod.{0, 0} Nat Nat) (IPv4Derived.key a) (IPv4Derived.key b)))","theorem":"IPv4Derived.eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.broadcast = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.upper 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.broadcast","text":"broadcast"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.broadcast","source":{"first_line":2410,"last_line":2418}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}}],"definitions_truncated":false,"first_line":455,"last_line":464,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr) (ipnet.ipnet.Ipv4Net.broadcast n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))","theorem":"ipnet.ipv4_broadcast_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.next_back r =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map TaggedRange.addrValue out, TaggedRange.remaining r') = RangeMore.backStep (TaggedRange.remaining r) ∧\n TaggedRange.family r' = TaggedRange.family r ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o a',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back a =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o ∧ r' = ipnet.ipext.IpAddrRange.V4 a'\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o a',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back a =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o ∧ r' = ipnet.ipext.IpAddrRange.V6 a'","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.next_back","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.next_back"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.backStep","text":"RangeMore.backStep"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a'"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a'"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.next_back","source":{"first_line":1616,"last_line":1640}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Proofs.RangeMore","name":"RangeMore.backStep","source":{"first_line":41,"last_line":46}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back","source":{"first_line":1588,"last_line":1614}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back","source":{"first_line":1560,"last_line":1586}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}}],"definitions_truncated":false,"first_line":245,"last_line":291,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n @Exists.{1} ipnet.ipext.IpAddrRange fun (r' : ipnet.ipext.IpAddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.next_back r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange out r')))\n (And\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (TaggedRange.remaining r'))\n (RangeMore.backStep (TaggedRange.remaining r)))\n (And (@Eq.{1} Bool (TaggedRange.family r') (TaggedRange.family r))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (a' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back\n a)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V4 a'))))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (a' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back\n a)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V6 a')))))))","theorem":"TaggedRange.next_back_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv6Value out =\n IPv6RangeBasic.lastValue (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6RangeBasic.lastValue","text":"IPv6RangeBasic.lastValue"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max","source":{"first_line":1332,"last_line":1339}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeBasic","name":"IPv6RangeBasic.lastValue","source":{"first_line":13,"last_line":14}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}}],"definitions_truncated":false,"first_line":47,"last_line":54,"module":"Proofs.IPv6RangeBasic","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeBasic.lastValue (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r))))","theorem":"IPv6RangeBasic.max_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"match m with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"m"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n ipnet.ipnet.IpNet.contains ipnet.selectedIpContainsNet n m = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ ipnet.taggedSubset n m)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.IpNet.contains","text":"ipnet.ipnet.IpNet.contains"},{"text":" "},{"ref":"ipnet.selectedIpContainsNet","text":"ipnet.selectedIpContainsNet"},{"text":" "},{"text":"n"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"ipnet.taggedSubset","text":"ipnet.taggedSubset"},{"text":" "},{"text":"n"},{"text":" "},{"text":"m"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Contains","name":"ipnet.ip_contains_addr_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.contains","source":{"first_line":2838,"last_line":2846}},{"module":"Proofs.Contains","name":"ipnet.selectedIpContainsNet","source":{"first_line":283,"last_line":285}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.Contains","name":"ipnet.taggedSubset","source":{"first_line":160,"last_line":162}}],"definitions_truncated":false,"first_line":298,"last_line":309,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.IpNet)\n (hn :\n ipnet.ip_contains_addr_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (hm :\n ipnet.ip_contains_addr_spec.match_1.{1} (fun (m : ipnet.ipnet.IpNet) => Prop) m\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.IpNet.contains.{0} ipnet.ipnet.IpNet ipnet.selectedIpContainsNet n m)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true) (ipnet.taggedSubset n m))","theorem":"ipnet.ip_public_contains_net_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[],"conclusion":"∃ n,\n ipnet.ipnet.Ipv6Net.Insts.CoreDefaultDefault.default = Aeneas.Std.Result.ok n ∧\n CidrModel.ipv6Value n.addr = 0 ∧ n.prefix_len = 0#u8","conclusion_segments":[{"text":"∃ "},{"text":"n"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreDefaultDefault.default","text":"ipnet.ipnet.Ipv6Net.Insts.CoreDefaultDefault.default"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"n"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"And","text":" ∧ "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreDefaultDefault.default","source":{"first_line":2953,"last_line":2958}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Proofs.IPv6Default","name":"IPv6Default.default_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":10,"last_line":18,"module":"Proofs.IPv6Default","program":null,"program_head":null,"statement":"@Exists.{1} ipnet.ipnet.Ipv6Net fun (n : ipnet.ipnet.Ipv6Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net) ipnet.ipnet.Ipv6Net.Insts.CoreDefaultDefault.default\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Net n))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n IPv6Default.default_spec._proof_1)))","theorem":"IPv6Default.default_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv6Value out =\n IPv6RangeBasic.firstValue (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6RangeBasic.firstValue","text":"IPv6RangeBasic.firstValue"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min","source":{"first_line":1367,"last_line":1383}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeBasic","name":"IPv6RangeBasic.firstValue","source":{"first_line":16,"last_line":17}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}}],"definitions_truncated":false,"first_line":56,"last_line":81,"module":"Proofs.IPv6RangeBasic","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.min r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeBasic.firstValue (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r))))","theorem":"IPv6RangeBasic.min_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"(CidrModel.ipv4Value r.end < CidrModel.ipv4Value r.start →\n ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r = Aeneas.Std.Result.ok (Option.none, r) ∧\n IPv4SubnetStep.remaining r = RangeMath.HalfOpen.empty) ∧\n (∀ (hse : CidrModel.ipv4Value r.start ≤ CidrModel.ipv4Value r.end) (hq : ↑r.min_prefix_len ≤ 32),\n ∃ net r',\n ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r =\n Aeneas.Std.Result.ok (Option.some net, r') ∧\n CidrModel.ipv4Value net.addr = CidrModel.ipv4Value r.start ∧\n ↑net.prefix_len =\n IPv4SubnetMath.bestPrefix (CidrModel.ipv4Value r.start) (CidrModel.ipv4Value r.end + 1)\n (↑r.min_prefix_len) hq (IPv4SubnetAll.next_raw_spec._proof_2 r hse) ∧\n IPv4SubnetStep.remaining r' =\n IPv4SubnetMath.residual (CidrModel.ipv4Value r.start) (CidrModel.ipv4Value r.end + 1)\n (↑r.min_prefix_len) hq (IPv4SubnetAll.next_raw_spec._proof_2 r hse) ∧\n r'.min_prefix_len = r.min_prefix_len) ∧\n (CidrModel.ipv4Value r.start ≤ CidrModel.ipv4Value r.end →\n 32 < ↑r.min_prefix_len →\n ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r =\n Aeneas.Std.Result.fail Aeneas.Std.Error.panic)","conclusion_segments":[{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"LT.lt","text":" < "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":" →\n "},{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.none","text":"Option.none"},{"ref":"Prod.mk","text":", "},{"text":"r"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv4SubnetStep.remaining","text":"IPv4SubnetStep.remaining"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.HalfOpen.empty","text":"RangeMath.HalfOpen.empty"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"hse"},{"text":" : "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"text":") ("},{"text":"hq"},{"text":" : "},{"text":"↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"),\n "},{"text":"∃ "},{"text":"net"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"net"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" =\n "},{"ref":"IPv4SubnetMath.bestPrefix","text":"IPv4SubnetMath.bestPrefix"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"IPv4SubnetAll.next_raw_spec._proof_2","text":"IPv4SubnetAll.next_raw_spec._proof_2"},{"text":" "},{"text":"r"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv4SubnetStep.remaining","text":"IPv4SubnetStep.remaining"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" =\n "},{"ref":"IPv4SubnetMath.residual","text":"IPv4SubnetMath.residual"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"IPv4SubnetAll.next_raw_spec._proof_2","text":"IPv4SubnetAll.next_raw_spec._proof_2"},{"text":" "},{"text":"r"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"r'"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"text":" →\n "},{"text":"32"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"r"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":" →\n "},{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.panic","text":"Aeneas.Std.Error.panic"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.end","source":{"first_line":2704,"last_line":2704}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.start","source":{"first_line":2703,"last_line":2703}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next","source":{"first_line":3351,"last_line":3389}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.IPv4SubnetStep","name":"IPv4SubnetStep.remaining","source":{"first_line":230,"last_line":232}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen.empty","source":{"first_line":15,"last_line":15}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","source":{"first_line":2705,"last_line":2705}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Proofs.IPv4SubnetMath","name":"IPv4SubnetMath.bestPrefix","source":{"first_line":29,"last_line":31}},{"module":"Init.Prelude","name":"HAdd.hAdd","source":{"first_line":1481,"last_line":1481}},{"module":"Init.Prelude","name":"instHAdd","source":{"first_line":1784,"last_line":1786}},{"module":"Init.Prelude","name":"instAddNat","source":{"first_line":1892,"last_line":1893}},{"module":"Proofs.IPv4SubnetAll","name":"IPv4SubnetAll.next_raw_spec._proof_2","source":null},{"module":"Proofs.IPv4SubnetMath","name":"IPv4SubnetMath.residual","source":{"first_line":174,"last_line":179}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.panic","source":{"first_line":45,"last_line":45}}],"definitions_truncated":false,"first_line":12,"last_line":39,"module":"Proofs.IPv4SubnetAll","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv4Subnets),\n And\n (@LT.lt.{0} Nat instLTNat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end r))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r)) →\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets))\n (ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets\n (@Option.none.{0} ipnet.ipnet.Ipv4Net) r)))\n (@Eq.{1} RangeMath.HalfOpen (IPv4SubnetStep.remaining r) RangeMath.HalfOpen.empty))\n (And\n (∀\n (hse :\n @LE.le.{0} Nat instLENat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end r)))\n (hq :\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len r))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.ipnet.Ipv4Net fun (net : ipnet.ipnet.Ipv4Net) =>\n @Exists.{1} ipnet.ipnet.Ipv4Subnets fun (r' : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets))\n (ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets\n (@Option.some.{0} ipnet.ipnet.Ipv4Net net) r')))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr net))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len net))\n (IPv4SubnetMath.bestPrefix (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end r))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len r)) hq\n (IPv4SubnetAll.next_raw_spec._proof_2 r hse)))\n (And\n (@Eq.{1} RangeMath.HalfOpen (IPv4SubnetStep.remaining r')\n (IPv4SubnetMath.residual (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end r))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len r)) hq\n (IPv4SubnetAll.next_raw_spec._proof_2 r hse)))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len r')\n (ipnet.ipnet.Ipv4Subnets.min_prefix_len r))))))\n (@LE.le.{0} Nat instLENat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start r))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end r)) →\n @LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len r)) →\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets))\n (ipnet.ipnet.Ipv4Subnets.Insts.CoreIterTraitsIteratorIteratorIpv4Net.next r)\n (@Aeneas.Std.Result.fail.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.Ipv4Net) ipnet.ipnet.Ipv4Subnets)\n Aeneas.Std.Error.panic)))","theorem":"IPv4SubnetAll.next_raw_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.hosts = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out.start = IPv4NetMath.hostStart (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv4Value out.end = IPv4NetMath.hostStop (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n RangeNext.remaining out = IPv4NetMath.hostsRemaining (CidrModel.ipv4Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.hosts","text":"hosts"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv4AddrRange.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostStart","text":"IPv4NetMath.hostStart"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipext.Ipv4AddrRange.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostStop","text":"IPv4NetMath.hostStop"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"IPv4NetMath.hostsRemaining","text":"IPv4NetMath.hostsRemaining"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.hosts","source":{"first_line":2658,"last_line":2677}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.start","source":{"first_line":864,"last_line":864}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostStart","source":{"first_line":9,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.end","source":{"first_line":865,"last_line":865}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostStop","source":{"first_line":12,"last_line":13}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.IPv4NetMath","name":"IPv4NetMath.hostsRemaining","source":{"first_line":15,"last_line":16}}],"definitions_truncated":false,"first_line":42,"last_line":91,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (out : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.Ipv4AddrRange) (ipnet.ipnet.Ipv4Net.hosts n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.Ipv4AddrRange out))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipext.Ipv4AddrRange.start out))\n (IPv4NetMath.hostStart (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipext.Ipv4AddrRange.end out))\n (IPv4NetMath.hostStop (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (@Eq.{1} RangeMath.HalfOpen (RangeNext.remaining out)\n (IPv4NetMath.hostsRemaining (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))))","theorem":"IPv4NetOps.hosts_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.contains ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Net n m =\n Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n CidrModel.subset 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len) (CidrModel.ipv4Value m.addr) ↑m.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.contains","text":"ipnet.ipnet.Ipv4Net.contains"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Net","text":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Net"},{"text":" "},{"text":"n"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"ref":"CidrModel.subset","text":"CidrModel.subset"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"(↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.contains","source":{"first_line":2608,"last_line":2616}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Net","source":{"first_line":2600,"last_line":2606}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Proofs.CidrModel","name":"CidrModel.subset","source":{"first_line":53,"last_line":53}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}}],"definitions_truncated":false,"first_line":256,"last_line":265,"module":"Proofs.Contains","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv4Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (@ipnet.ipnet.Ipv4Net.contains.{0} ipnet.ipnet.Ipv4Net\n ipnet.ipnet.Ipv4Net.Insts.IpnetIpnetContainsSharedAIpv4Net n m)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (CidrModel.subset (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr m))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))))","theorem":"ipnet.ipv4_public_contains_net_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCloneClone.clone","source":{"first_line":3228,"last_line":3233}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":114,"last_line":116,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv6Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Subnets) (ipnet.ipnet.Ipv6Subnets.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Subnets r)","theorem":"IPv6Derived.subnets_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"q","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.subnets q = Aeneas.Std.Result.ok out ∧\n if ↑q < ↑n.prefix_len ∨ 32 < ↑q then out = Aeneas.Std.core.result.Result.Err ()\n else\n ∃ s,\n out = Aeneas.Std.core.result.Result.Ok s ∧\n CidrModel.ipv4Value s.start = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv4Value s.end = CidrModel.upper 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n s.min_prefix_len = q","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.subnets","text":"subnets"},{"text":" "},{"text":"q"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"q"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Or","text":" ∨ "},{"text":"32"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"q"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"s"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"s"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"q"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.subnets","source":{"first_line":2801,"last_line":2817}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Or","source":{"first_line":661,"last_line":671}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Init.Prelude","name":"instDecidableOr","source":{"first_line":1247,"last_line":1255}},{"module":"Init.Prelude","name":"Nat.decLt","source":{"first_line":2214,"last_line":2226}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.start","source":{"first_line":2703,"last_line":2703}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.end","source":{"first_line":2704,"last_line":2704}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","source":{"first_line":2705,"last_line":2705}}],"definitions_truncated":false,"first_line":93,"last_line":123,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net) (q : Aeneas.Std.U8)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv4Net.subnets n q)\n (@Aeneas.Std.Result.ok.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError) out))\n (@ite.{1} Prop\n (Or\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@instDecidableOr\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (Nat.decLt (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (Nat.decLt (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError Unit.unit))\n (@Exists.{1} ipnet.ipnet.Ipv4Subnets fun (s : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv4Subnets ipnet.ipnet.PrefixLenError s))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start s))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end s))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len s) q)))))","theorem":"IPv4NetOps.subnets_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ lower upper,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint r =\n Aeneas.Std.Result.ok (lower, upper) ∧\n (↑lower, Option.map Aeneas.Std.UScalar.val upper) =\n IPv6RangeMath.sizeHint (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end)","conclusion_segments":[{"text":"∃ "},{"text":"lower"},{"text":" "},{"text":"upper"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"text":"↑"},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"Aeneas.Std.UScalar.val","text":"Aeneas.Std.UScalar.val"},{"text":" "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6RangeMath.sizeHint","text":"IPv6RangeMath.sizeHint"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint","source":{"first_line":1519,"last_line":1533}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar","source":{"first_line":70,"last_line":74}},{"module":"Proofs.IPv6RangeMath","name":"IPv6RangeMath.sizeHint","source":{"first_line":26,"last_line":28}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}}],"definitions_truncated":false,"first_line":48,"last_line":118,"module":"Proofs.IPv6RangeSkips","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} Aeneas.Std.Usize fun (lower : Aeneas.Std.Usize) =>\n @Exists.{1} (Option.{0} Aeneas.Std.Usize) fun (upper : Option.{0} Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize)))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.size_hint r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize))\n (@Prod.mk.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize) lower upper)))\n (@Eq.{1} (Prod.{0, 0} Nat (Option.{0} Nat))\n (@Prod.mk.{0, 0} Nat (Option.{0} Nat) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize lower)\n (@Option.map.{0, 0} (Aeneas.Std.UScalar Aeneas.Std.UScalarTy.Usize) Nat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize) upper))\n (IPv6RangeMath.sizeHint (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r))))","theorem":"IPv6RangeSkips.size_hint_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Net.with_netmask ip m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8),\n out = Aeneas.Std.core.result.Result.Ok { addr := ip, prefix_len := q } ↔ IPv4MaskOps.validMask m ↑q) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, IPv4MaskOps.validMask m ↑q)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Net.with_netmask","text":"ipnet.ipnet.Ipv4Net.with_netmask"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"),\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"q"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv4MaskOps.validMask","text":"IPv4MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"IPv4MaskOps.validMask","text":"IPv4MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.with_netmask","source":{"first_line":2907,"last_line":2921}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Proofs.IPv4MaskOps","name":"IPv4MaskOps.validMask","source":{"first_line":44,"last_line":45}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":128,"last_line":179,"module":"Proofs.IPv4MaskOps","program":null,"program_head":null,"statement":"∀ (ip m : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv4Net.with_netmask ip m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError)\n out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError\n (ipnet.ipnet.Ipv4Net.mk ip q)))\n (IPv4MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv4Net ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n IPv4MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))))","theorem":"IPv4MaskOps.with_netmask_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth r n = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv6Value out, IPv6RangeSteps.remaining r') =\n RangeMore.skipFront (IPv6RangeSteps.remaining r) ↑n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"RangeMore.skipFront","text":"RangeMore.skipFront"},{"text":" "},{"text":"("},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth","source":{"first_line":1420,"last_line":1461}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeSteps","name":"IPv6RangeSteps.remaining","source":{"first_line":55,"last_line":56}},{"module":"Proofs.RangeMore","name":"RangeMore.skipFront","source":{"first_line":365,"last_line":370}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}}],"definitions_truncated":false,"first_line":451,"last_line":467,"module":"Proofs.IPv6RangeSkips","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (r' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.nth r n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeSteps.remaining r'))\n (RangeMore.skipFront (IPv6RangeSteps.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))","theorem":"IPv6RangeSkips.nth_remaining_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back r =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv6Value out, IPv6RangeSteps.remaining r') = RangeMore.backStep (IPv6RangeSteps.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.backStep","text":"RangeMore.backStep"},{"text":" "},{"text":"("},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back","source":{"first_line":1560,"last_line":1586}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeSteps","name":"IPv6RangeSteps.remaining","source":{"first_line":55,"last_line":56}},{"module":"Proofs.RangeMore","name":"RangeMore.backStep","source":{"first_line":41,"last_line":46}}],"definitions_truncated":false,"first_line":130,"last_line":169,"module":"Proofs.IPv6RangeSteps","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (r' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.next_back r)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeSteps.remaining r'))\n (RangeMore.backStep (IPv6RangeSteps.remaining r)))","theorem":"IPv6RangeSteps.range_next_back_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"ipnet.ipnet.Ipv4Net.Insts.CoreCloneClone.clone n = Aeneas.Std.Result.ok n","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.Ipv4Net.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreCloneClone.clone","source":{"first_line":1943,"last_line":1948}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":22,"last_line":24,"module":"Proofs.IPv4Derived","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net) (ipnet.ipnet.Ipv4Net.Insts.CoreCloneClone.clone n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Net n)","theorem":"IPv4Derived.clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out,\n ipnet.mask.ipv6_mask_to_prefix m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8), out = Aeneas.Std.core.result.Result.Ok q ↔ IPv6MaskOps.validMask m ↑q) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, IPv6MaskOps.validMask m ↑q)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.mask.ipv6_mask_to_prefix","text":"ipnet.mask.ipv6_mask_to_prefix"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"q"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv6MaskOps.validMask","text":"IPv6MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"IPv6MaskOps.validMask","text":"IPv6MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.mask.ipv6_mask_to_prefix","source":{"first_line":2134,"last_line":2148}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.IPv6MaskOps","name":"IPv6MaskOps.validMask","source":{"first_line":44,"last_line":45}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":90,"last_line":126,"module":"Proofs.IPv6MaskOps","program":null,"program_head":null,"statement":"∀ (m : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError))\n (ipnet.mask.ipv6_mask_to_prefix m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError q))\n (IPv6MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n IPv6MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))))","theorem":"IPv6MaskOps.ipv6_mask_to_prefix_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]}],"conclusion":"ipnet.ipnet.IpSubnets.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.IpSubnets.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreCloneClone.clone","source":{"first_line":3050,"last_line":3055}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":57,"last_line":59,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.IpSubnets),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpSubnets) (ipnet.ipnet.IpSubnets.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpSubnets r)","theorem":"TaggedDerived.subnets_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialOrdIpv4Subnets.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv4IteratorDerived.subnetsCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialOrdIpv4Subnets.partial_cmp","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialOrdIpv4Subnets.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv4IteratorDerived.subnetsCompare","text":"IPv4IteratorDerived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialOrdIpv4Subnets.partial_cmp","source":{"first_line":3218,"last_line":3226}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.subnetsCompare","source":{"first_line":26,"last_line":34}}],"definitions_truncated":false,"first_line":112,"last_line":116,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv4Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipnet.Ipv4Subnets.Insts.CoreCmpPartialOrdIpv4Subnets.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering)\n (@Option.some.{0} Ordering (IPv4IteratorDerived.subnetsCompare a b)))","theorem":"IPv4IteratorDerived.subnets_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"Aeneas.Std.U128","type_segments":[{"ref":"Aeneas.Std.U128","text":"Aeneas.Std.U128"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndU128Ipv6Addr.bitand a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.ipv6Value a &&& ↑b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndU128Ipv6Addr.bitand","text":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndU128Ipv6Addr.bitand"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"HAnd.hAnd","text":" &&& "},{"text":"↑"},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U128","source":{"first_line":673,"last_line":673}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndU128Ipv6Addr.bitand","source":{"first_line":729,"last_line":740}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HAnd.hAnd","source":{"first_line":1594,"last_line":1594}},{"module":"Init.Prelude","name":"instHAndOfAndOp","source":{"first_line":1835,"last_line":1837}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instAndOp","source":{"first_line":99,"last_line":99}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U128","source":{"first_line":37,"last_line":37}}],"definitions_truncated":false,"first_line":22,"last_line":32,"module":"Proofs.IPv6BitOps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv6Addr) (b : Aeneas.Std.U128),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n (ipnet.core.net.ip_addr.Ipv6Addr.Insts.IpnetIpextIpBitAndU128Ipv6Addr.bitand a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HAnd.hAnd.{0, 0, 0} Nat Nat Nat (@instHAndOfAndOp.{0} Nat Nat.instAndOp) (CidrModel.ipv6Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U128 b)))","theorem":"IPv6BitOps.ipv6_and_u128_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"∃ out,\n n.prefix_len = Aeneas.Std.Result.ok out ∧\n out =\n match n with\n | ipnet.ipnet.IpNet.V4 x => x.prefix_len\n | ipnet.ipnet.IpNet.V6 x => x.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"n"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"x"},{"text":" => "},{"text":"x"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"x"},{"text":" => "},{"text":"x"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.prefix_len","source":{"first_line":2281,"last_line":2287}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Core","name":"ipnet.ipnet.ip_addr_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}}],"definitions_truncated":false,"first_line":134,"last_line":139,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.IpNet.prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out\n (ipnet.ipnet.ip_addr_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Aeneas.Std.U8) n\n (fun (x : ipnet.ipnet.Ipv4Net) => ipnet.ipnet.Ipv4Net.prefix_len x) fun (x : ipnet.ipnet.Ipv6Net) =>\n ipnet.ipnet.Ipv6Net.prefix_len x))","theorem":"ipnet.ipnet.ip_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count r = Aeneas.Std.Result.ok out ∧\n ↑out = RangeMath.size (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.size","text":"RangeMath.size"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count","source":{"first_line":1241,"last_line":1266}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Proofs.RangeMath","name":"RangeMath.size","source":{"first_line":26,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}}],"definitions_truncated":false,"first_line":253,"last_line":308,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} Aeneas.Std.Usize fun (out : Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.count r)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.Usize out))\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize out) (RangeMath.size (RangeNext.remaining r)))","theorem":"RangeMore.range_count_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]}],"conclusion":"match r with\n| ipnet.ipnet.IpSubnets.V4 a =>\n (CidrModel.ipv4Value a.end < CidrModel.ipv4Value a.start →\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a) =\n Aeneas.Std.Result.ok (Option.none, ipnet.ipnet.IpSubnets.V4 a) ∧\n IPv4SubnetStep.remaining a = RangeMath.HalfOpen.empty) ∧\n (∀ (hse : CidrModel.ipv4Value a.start ≤ CidrModel.ipv4Value a.end) (hq : ↑a.min_prefix_len ≤ 32),\n ∃ net a',\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a) =\n Aeneas.Std.Result.ok (Option.some (ipnet.ipnet.IpNet.V4 net), ipnet.ipnet.IpSubnets.V4 a') ∧\n CidrModel.ipv4Value net.addr = CidrModel.ipv4Value a.start ∧\n ↑net.prefix_len =\n IPv4SubnetMath.bestPrefix (CidrModel.ipv4Value a.start) (CidrModel.ipv4Value a.end + 1)\n (↑a.min_prefix_len) hq (TaggedSubnets.next_v4_raw_spec._proof_2 a hse) ∧\n IPv4SubnetStep.remaining a' =\n IPv4SubnetMath.residual (CidrModel.ipv4Value a.start) (CidrModel.ipv4Value a.end + 1)\n (↑a.min_prefix_len) hq (TaggedSubnets.next_v4_raw_spec._proof_2 a hse) ∧\n a'.min_prefix_len = a.min_prefix_len) ∧\n (CidrModel.ipv4Value a.start ≤ CidrModel.ipv4Value a.end →\n 32 < ↑a.min_prefix_len →\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a) =\n Aeneas.Std.Result.fail Aeneas.Std.Error.panic)\n| ipnet.ipnet.IpSubnets.V6 a =>\n (CidrModel.ipv6Value a.end < CidrModel.ipv6Value a.start →\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a) =\n Aeneas.Std.Result.ok (Option.none, ipnet.ipnet.IpSubnets.V6 a) ∧\n IPv6SubnetStep.remaining a = RangeMath.HalfOpen.empty) ∧\n (∀ (hse : CidrModel.ipv6Value a.start ≤ CidrModel.ipv6Value a.end) (hq : ↑a.min_prefix_len ≤ 128),\n ∃ net a',\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a) =\n Aeneas.Std.Result.ok (Option.some (ipnet.ipnet.IpNet.V6 net), ipnet.ipnet.IpSubnets.V6 a') ∧\n CidrModel.ipv6Value net.addr = CidrModel.ipv6Value a.start ∧\n ↑net.prefix_len =\n IPv6SubnetMath.bestPrefix (CidrModel.ipv6Value a.start) (CidrModel.ipv6Value a.end + 1)\n (↑a.min_prefix_len) hq (TaggedSubnets.next_v6_raw_spec._proof_2 a hse) ∧\n IPv6SubnetStep.remaining a' =\n IPv6SubnetMath.residual (CidrModel.ipv6Value a.start) (CidrModel.ipv6Value a.end + 1)\n (↑a.min_prefix_len) hq (TaggedSubnets.next_v6_raw_spec._proof_2 a hse) ∧\n a'.min_prefix_len = a.min_prefix_len) ∧\n (CidrModel.ipv6Value a.start ≤ CidrModel.ipv6Value a.end →\n 128 < ↑a.min_prefix_len →\n ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a) =\n Aeneas.Std.Result.fail Aeneas.Std.Error.panic)","conclusion_segments":[{"text":"match "},{"text":"r"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"LT.lt","text":" < "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":" →\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.none","text":"Option.none"},{"ref":"Prod.mk","text":", "},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv4SubnetStep.remaining","text":"IPv4SubnetStep.remaining"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.HalfOpen.empty","text":"RangeMath.HalfOpen.empty"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"hse"},{"text":" : "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"text":") ("},{"text":"hq"},{"text":" : "},{"text":"↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"),\n "},{"text":"∃ "},{"text":"net"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"net"},{"text":")"},{"ref":"Prod.mk","text":", "},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" =\n "},{"ref":"IPv4SubnetMath.bestPrefix","text":"IPv4SubnetMath.bestPrefix"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"TaggedSubnets.next_v4_raw_spec._proof_2","text":"TaggedSubnets.next_v4_raw_spec._proof_2"},{"text":" "},{"text":"a"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv4SubnetStep.remaining","text":"IPv4SubnetStep.remaining"},{"text":" "},{"text":"a'"},{"ref":"Eq","text":" =\n "},{"ref":"IPv4SubnetMath.residual","text":"IPv4SubnetMath.residual"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"TaggedSubnets.next_v4_raw_spec._proof_2","text":"TaggedSubnets.next_v4_raw_spec._proof_2"},{"text":" "},{"text":"a"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"a'"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"text":" →\n "},{"text":"32"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"text":" →\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.panic","text":"Aeneas.Std.Error.panic"},{"text":")"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"LT.lt","text":" < "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":" →\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.none","text":"Option.none"},{"ref":"Prod.mk","text":", "},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6SubnetStep.remaining","text":"IPv6SubnetStep.remaining"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.HalfOpen.empty","text":"RangeMath.HalfOpen.empty"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"hse"},{"text":" : "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"text":") ("},{"text":"hq"},{"text":" : "},{"text":"↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"},{"text":"),\n "},{"text":"∃ "},{"text":"net"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"net"},{"text":")"},{"ref":"Prod.mk","text":", "},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"net"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6SubnetMath.bestPrefix","text":"IPv6SubnetMath.bestPrefix"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"TaggedSubnets.next_v6_raw_spec._proof_2","text":"TaggedSubnets.next_v6_raw_spec._proof_2"},{"text":" "},{"text":"a"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"IPv6SubnetStep.remaining","text":"IPv6SubnetStep.remaining"},{"text":" "},{"text":"a'"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6SubnetMath.residual","text":"IPv6SubnetMath.residual"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"text":")"},{"text":" "},{"ref":"HAdd.hAdd","text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"HAdd.hAdd","text":" + "},{"text":"1"},{"ref":"HAdd.hAdd","text":")"},{"text":"\n "},{"text":"(↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"text":" "},{"text":"hq"},{"text":" "},{"text":"("},{"ref":"TaggedSubnets.next_v6_raw_spec._proof_2","text":"TaggedSubnets.next_v6_raw_spec._proof_2"},{"text":" "},{"text":"a"},{"text":" "},{"text":"hse"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"a'"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"LE.le","text":" ≤ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"text":" →\n "},{"text":"128"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"a"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"text":" →\n "},{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","text":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V6","text":"ipnet.ipnet.IpSubnets.V6"},{"text":" "},{"text":"a"},{"text":")"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.panic","text":"Aeneas.Std.Error.panic"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Proofs.TaggedSubnets","name":"TaggedSubnets.next_raw_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.end","source":{"first_line":2704,"last_line":2704}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.start","source":{"first_line":2703,"last_line":2703}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next","source":{"first_line":3391,"last_line":3412}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V4","source":{"first_line":2712,"last_line":2712}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Option.none","source":{"first_line":3055,"last_line":3056}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Proofs.IPv4SubnetStep","name":"IPv4SubnetStep.remaining","source":{"first_line":230,"last_line":232}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen.empty","source":{"first_line":15,"last_line":15}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","source":{"first_line":2705,"last_line":2705}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Proofs.IPv4SubnetMath","name":"IPv4SubnetMath.bestPrefix","source":{"first_line":29,"last_line":31}},{"module":"Init.Prelude","name":"HAdd.hAdd","source":{"first_line":1481,"last_line":1481}},{"module":"Init.Prelude","name":"instHAdd","source":{"first_line":1784,"last_line":1786}},{"module":"Init.Prelude","name":"instAddNat","source":{"first_line":1892,"last_line":1893}},{"module":"Proofs.TaggedSubnets","name":"TaggedSubnets.next_v4_raw_spec._proof_2","source":null},{"module":"Proofs.IPv4SubnetMath","name":"IPv4SubnetMath.residual","source":{"first_line":174,"last_line":179}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.panic","source":{"first_line":45,"last_line":45}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.end","source":{"first_line":2696,"last_line":2696}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.start","source":{"first_line":2695,"last_line":2695}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V6","source":{"first_line":2713,"last_line":2713}},{"module":"Proofs.IPv6SubnetStep","name":"IPv6SubnetStep.remaining","source":{"first_line":196,"last_line":198}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","source":{"first_line":2697,"last_line":2697}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Proofs.IPv6SubnetMath","name":"IPv6SubnetMath.bestPrefix","source":{"first_line":29,"last_line":31}},{"module":"Proofs.TaggedSubnets","name":"TaggedSubnets.next_v6_raw_spec._proof_2","source":null},{"module":"Proofs.IPv6SubnetMath","name":"IPv6SubnetMath.residual","source":{"first_line":174,"last_line":179}}],"definitions_truncated":false,"first_line":125,"last_line":172,"module":"Proofs.TaggedSubnets","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.IpSubnets),\n TaggedSubnets.next_raw_spec.match_1.{1} (fun (r : ipnet.ipnet.IpSubnets) => Prop) r\n (fun (a : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@LT.lt.{0} Nat instLTNat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end a))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a)) →\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a))\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets\n (@Option.none.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpSubnets.V4 a))))\n (@Eq.{1} RangeMath.HalfOpen (IPv4SubnetStep.remaining a) RangeMath.HalfOpen.empty))\n (And\n (∀\n (hse :\n @LE.le.{0} Nat instLENat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end a)))\n (hq :\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len a))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.ipnet.Ipv4Net fun (net : ipnet.ipnet.Ipv4Net) =>\n @Exists.{1} ipnet.ipnet.Ipv4Subnets fun (a' : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a))\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets\n (@Option.some.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V4 net)) (ipnet.ipnet.IpSubnets.V4 a'))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr net))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a)))\n (And\n (@Eq.{1} Nat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len net))\n (IPv4SubnetMath.bestPrefix (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end a))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len a))\n hq (TaggedSubnets.next_v4_raw_spec._proof_2 a hse)))\n (And\n (@Eq.{1} RangeMath.HalfOpen (IPv4SubnetStep.remaining a')\n (IPv4SubnetMath.residual (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end a))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len a))\n hq (TaggedSubnets.next_v4_raw_spec._proof_2 a hse)))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len a')\n (ipnet.ipnet.Ipv4Subnets.min_prefix_len a))))))\n (@LE.le.{0} Nat instLENat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start a))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end a)) →\n @LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len a)) →\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V4 a))\n (@Aeneas.Std.Result.fail.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n Aeneas.Std.Error.panic))))\n fun (a : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@LT.lt.{0} Nat instLTNat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end a))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a)) →\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a))\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets (@Option.none.{0} ipnet.ipnet.IpNet)\n (ipnet.ipnet.IpSubnets.V6 a))))\n (@Eq.{1} RangeMath.HalfOpen (IPv6SubnetStep.remaining a) RangeMath.HalfOpen.empty))\n (And\n (∀\n (hse :\n @LE.le.{0} Nat instLENat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end a)))\n (hq :\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len a))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipnet.Ipv6Net fun (net : ipnet.ipnet.Ipv6Net) =>\n @Exists.{1} ipnet.ipnet.Ipv6Subnets fun (a' : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a))\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets\n (@Option.some.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V6 net)) (ipnet.ipnet.IpSubnets.V6 a'))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr net))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len net))\n (IPv6SubnetMath.bestPrefix (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end a))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len a)) hq\n (TaggedSubnets.next_v6_raw_spec._proof_2 a hse)))\n (And\n (@Eq.{1} RangeMath.HalfOpen (IPv6SubnetStep.remaining a')\n (IPv6SubnetMath.residual (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a))\n (@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end a))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len a))\n hq (TaggedSubnets.next_v6_raw_spec._proof_2 a hse)))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len a')\n (ipnet.ipnet.Ipv6Subnets.min_prefix_len a))))))\n (@LE.le.{0} Nat instLENat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start a))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end a)) →\n @LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len a)) →\n @Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets))\n (ipnet.ipnet.IpSubnets.Insts.CoreIterTraitsIteratorIteratorIpNet.next (ipnet.ipnet.IpSubnets.V6 a))\n (@Aeneas.Std.Result.fail.{0} (Prod.{0, 0} (Option.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpSubnets)\n Aeneas.Std.Error.panic)))","theorem":"TaggedSubnets.next_raw_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"∃ out, ipnet.ipnet.Ipv4Net.impl.addr n = Aeneas.Std.Result.ok out ∧ out = n.addr","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.Ipv4Net.impl.addr","text":"ipnet.ipnet.Ipv4Net.impl.addr"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.impl.addr","source":{"first_line":2923,"last_line":2928}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}}],"definitions_truncated":false,"first_line":40,"last_line":42,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr) (ipnet.ipnet.Ipv4Net.impl.addr n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} ipnet.core.net.ip_addr.Ipv4Addr out (ipnet.ipnet.Ipv4Net.addr n))","theorem":"ipnet.ipnet.ipv4_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"∃ out, ipnet.ipnet.Ipv4Net.impl.prefix_len n = Aeneas.Std.Result.ok out ∧ out = n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.Ipv4Net.impl.prefix_len","text":"ipnet.ipnet.Ipv4Net.impl.prefix_len"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.impl.prefix_len","source":{"first_line":2275,"last_line":2279}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}}],"definitions_truncated":false,"first_line":44,"last_line":46,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.Ipv4Net.impl.prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out (ipnet.ipnet.Ipv4Net.prefix_len n))","theorem":"ipnet.ipnet.ipv4_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpSubnets","type_segments":[{"ref":"ipnet.ipnet.IpSubnets","text":"ipnet.ipnet.IpSubnets"}]}],"conclusion":"ipnet.ipnet.IpSubnets.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (TaggedDerived.subnetsCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.IpSubnets.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"TaggedDerived.subnetsCompare","text":"TaggedDerived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreCmpOrd.cmp","source":{"first_line":3177,"last_line":3199}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.subnetsCompare","source":{"first_line":42,"last_line":47}}],"definitions_truncated":false,"first_line":181,"last_line":190,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpSubnets),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.IpSubnets.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (TaggedDerived.subnetsCompare a b))","theorem":"TaggedDerived.subnets_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialOrdIpv4AddrRange.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv4IteratorDerived.rangeCompare a b))","conclusion_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialOrdIpv4AddrRange.partial_cmp","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialOrdIpv4AddrRange.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv4IteratorDerived.rangeCompare","text":"IPv4IteratorDerived.rangeCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialOrdIpv4AddrRange.partial_cmp","source":{"first_line":1031,"last_line":1039}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv4IteratorDerived","name":"IPv4IteratorDerived.rangeCompare","source":{"first_line":17,"last_line":21}}],"definitions_truncated":false,"first_line":65,"last_line":69,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipext.Ipv4AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreCmpPartialOrdIpv4AddrRange.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (IPv4IteratorDerived.rangeCompare a b)))","theorem":"IPv4IteratorDerived.range_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Net.with_netmask ip m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8),\n out = Aeneas.Std.core.result.Result.Ok { addr := ip, prefix_len := q } ↔ IPv6MaskOps.validMask m ↑q) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, IPv6MaskOps.validMask m ↑q)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Net.with_netmask","text":"ipnet.ipnet.Ipv6Net.with_netmask"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"),\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"ip"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"q"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv6MaskOps.validMask","text":"IPv6MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"IPv6MaskOps.validMask","text":"IPv6MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.with_netmask","source":{"first_line":2930,"last_line":2944}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}},{"module":"Proofs.IPv6MaskOps","name":"IPv6MaskOps.validMask","source":{"first_line":44,"last_line":45}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":128,"last_line":179,"module":"Proofs.IPv6MaskOps","program":null,"program_head":null,"statement":"∀ (ip m : ipnet.core.net.ip_addr.Ipv6Addr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv6Net.with_netmask ip m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError)\n out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError\n (ipnet.ipnet.Ipv6Net.mk ip q)))\n (IPv6MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv6Net ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n IPv6MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))))","theorem":"IPv6MaskOps.with_netmask_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back r n =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv4Value out, RangeNext.remaining r') = RangeMore.skipBack (RangeNext.remaining r) ↑n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.skipBack","text":"RangeMore.skipBack"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back","source":{"first_line":1687,"last_line":1720}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.RangeMore","name":"RangeMore.skipBack","source":{"first_line":372,"last_line":377}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}}],"definitions_truncated":false,"first_line":556,"last_line":645,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (r' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back r n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out) (RangeNext.remaining r'))\n (RangeMore.skipBack (RangeNext.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))","theorem":"RangeMore.range_nth_back_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.parser.AddrParseError","type_segments":[{"ref":"ipnet.parser.AddrParseError","text":"ipnet.parser.AddrParseError"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.parser.AddrParseError","type_segments":[{"ref":"ipnet.parser.AddrParseError","text":"ipnet.parser.AddrParseError"}]}],"conclusion":"ipnet.parser.AddrParseError.Insts.CoreCmpPartialEqAddrParseError.eq a b = Aeneas.Std.Result.ok Bool.true","conclusion_segments":[{"ref":"ipnet.parser.AddrParseError.Insts.CoreCmpPartialEqAddrParseError.eq","text":"ipnet.parser.AddrParseError.Insts.CoreCmpPartialEqAddrParseError.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Bool.true","text":"Bool.true"}],"definitions":[{"module":"Ipnet","name":"ipnet.parser.AddrParseError","source":{"first_line":3414,"last_line":3418}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Ipnet","name":"ipnet.parser.AddrParseError.Insts.CoreCmpPartialEqAddrParseError.eq","source":{"first_line":3428,"last_line":3435}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}}],"definitions_truncated":false,"first_line":15,"last_line":22,"module":"Proofs.AddrParseErrorValue","program":null,"program_head":null,"statement":"∀ (a b : ipnet.parser.AddrParseError),\n @Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.parser.AddrParseError.Insts.CoreCmpPartialEqAddrParseError.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool Bool.true)","theorem":"AddrParseErrorValue.eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"start","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"stop","type":"ipnet.core.net.ip_addr.Ipv6Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv6Addr","text":"ipnet.core.net.ip_addr.Ipv6Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv6Subnets.new start stop p = Aeneas.Std.Result.ok out ∧\n out = { start := start, «end» := stop, min_prefix_len := p }","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv6Subnets.new","text":"ipnet.ipnet.Ipv6Subnets.new"},{"text":" "},{"text":"start"},{"text":" "},{"text":"stop"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":"{ "},{"text":"start"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":" := "},{"text":"start"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":", "},{"text":"«end»"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":" := "},{"text":"stop"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":", "},{"text":"min_prefix_len"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv6Subnets.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.new","source":{"first_line":2763,"last_line":2771}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.mk","source":{"first_line":2694,"last_line":2694}}],"definitions_truncated":false,"first_line":32,"last_line":37,"module":"Proofs.Collections","program":null,"program_head":null,"statement":"∀ (start stop : ipnet.core.net.ip_addr.Ipv6Addr) (p : Aeneas.Std.U8),\n @Exists.{1} ipnet.ipnet.Ipv6Subnets fun (out : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Subnets) (ipnet.ipnet.Ipv6Subnets.new start stop p)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Subnets out))\n (@Eq.{1} ipnet.ipnet.Ipv6Subnets out (ipnet.ipnet.Ipv6Subnets.mk start stop p))","theorem":"ipnet.ipnet.ipv6_subnets_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.network = Aeneas.Std.Result.ok out ∧\n match n, hp with\n | ipnet.ipnet.IpNet.V4 v, hp =>\n ∃ a,\n out = ipnet.core.net.ip_addr.IpAddr.V4 a ∧\n CidrModel.ipv4Value a = CidrModel.lower 32 (CidrModel.ipv4Value v.addr) ↑v.prefix_len\n | ipnet.ipnet.IpNet.V6 v, hp =>\n ∃ a,\n out = ipnet.core.net.ip_addr.IpAddr.V6 a ∧\n CidrModel.ipv6Value a = CidrModel.lower 128 (CidrModel.ipv6Value v.addr) ↑v.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.network","text":"network"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"n"},{"text":", "},{"text":"hp"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.network","source":{"first_line":2386,"last_line":2397}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_3","source":null},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":489,"last_line":510,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.IpAddr fun (out : ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.IpAddr) (ipnet.ipnet.IpNet.network n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.IpAddr out))\n (ipnet.ip_netmask_nat_spec.match_3.{1}\n (fun (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n Prop)\n n hp\n (fun (v : ipnet.ipnet.Ipv4Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V4 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (a : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V4 a))\n (@Eq.{1} Nat (CidrModel.ipv4Value a)\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v)))))\n fun (v : ipnet.ipnet.Ipv6Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V6 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (a : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V6 a))\n (@Eq.{1} Nat (CidrModel.ipv6Value a)\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v)))))","theorem":"ipnet.ip_network_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv4Value out = RangeMore.lastValue (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.lastValue","text":"RangeMore.lastValue"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max","source":{"first_line":1341,"last_line":1348}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeMore","name":"RangeMore.lastValue","source":{"first_line":107,"last_line":109}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}}],"definitions_truncated":false,"first_line":137,"last_line":143,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out)\n (RangeMore.lastValue (RangeNext.remaining r)))","theorem":"RangeMore.range_max_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"ip","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]}],"conclusion":"∃ out,\n ipnet.ipnet.IpNet.with_netmask ip m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8),\n out = Aeneas.Std.core.result.Result.Ok (TaggedMask.expectedNet ip q) ↔\n TaggedMask.validMask m ↑q ∧ ↑q ≤ TaggedMask.addressWidth ip) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, TaggedMask.validMask m ↑q ∧ ↑q ≤ TaggedMask.addressWidth ip)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.IpNet.with_netmask","text":"ipnet.ipnet.IpNet.with_netmask"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"),\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"("},{"ref":"TaggedMask.expectedNet","text":"TaggedMask.expectedNet"},{"text":" "},{"text":"ip"},{"text":" "},{"text":"q"},{"text":")"},{"ref":"Iff","text":" ↔\n "},{"ref":"TaggedMask.validMask","text":"TaggedMask.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"And","text":" ∧ "},{"text":"↑"},{"text":"q"},{"ref":"LE.le","text":" ≤ "},{"ref":"TaggedMask.addressWidth","text":"TaggedMask.addressWidth"},{"text":" "},{"text":"ip"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"TaggedMask.validMask","text":"TaggedMask.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"And","text":" ∧ "},{"text":"↑"},{"text":"q"},{"ref":"LE.le","text":" ≤ "},{"ref":"TaggedMask.addressWidth","text":"TaggedMask.addressWidth"},{"text":" "},{"text":"ip"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.with_netmask","source":{"first_line":2177,"last_line":2190}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.TaggedMask","name":"TaggedMask.expectedNet","source":{"first_line":20,"last_line":23}},{"module":"Proofs.TaggedMask","name":"TaggedMask.validMask","source":{"first_line":10,"last_line":13}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Proofs.TaggedMask","name":"TaggedMask.addressWidth","source":{"first_line":15,"last_line":18}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":95,"last_line":166,"module":"Proofs.TaggedMask","program":null,"program_head":null,"statement":"∀ (ip m : ipnet.core.net.ip_addr.IpAddr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.IpNet.with_netmask ip m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError)\n out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError\n (TaggedMask.expectedNet ip q)))\n (And (TaggedMask.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (TaggedMask.addressWidth ip))))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.IpNet ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n And (TaggedMask.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (@LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (TaggedMask.addressWidth ip))))))","theorem":"TaggedMask.with_netmask_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.last r = Aeneas.Std.Result.ok out ∧\n Option.map TaggedRange.addrValue out = RangeMore.lastValue (TaggedRange.remaining r) ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.last","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.last"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.lastValue","text":"RangeMore.lastValue"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.last","source":{"first_line":1315,"last_line":1330}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.RangeMore","name":"RangeMore.lastValue","source":{"first_line":107,"last_line":109}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last","source":{"first_line":1297,"last_line":1313}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last","source":{"first_line":1279,"last_line":1295}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}}],"definitions_truncated":false,"first_line":110,"last_line":154,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.last r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out))\n (And\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (RangeMore.lastValue (TaggedRange.remaining r)))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o)))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o)))))","theorem":"TaggedRange.last_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"∃ out,\n n.max_prefix_len = Aeneas.Std.Result.ok out ∧\n out =\n match n with\n | ipnet.ipnet.IpNet.V4 a => 32#u8\n | ipnet.ipnet.IpNet.V6 a => 128#u8","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.max_prefix_len","text":"max_prefix_len"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"n"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"a"},{"text":" => "},{"text":"32"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"a"},{"text":" => "},{"text":"128"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.max_prefix_len","source":{"first_line":2301,"last_line":2307}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Core","name":"ipnet.ipnet.ip_addr_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.Core","name":"ipnet.ipnet.ipv4_max_prefix_len_spec._proof_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Proofs.Core","name":"ipnet.ipnet.ipv6_max_prefix_len_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":141,"last_line":146,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet),\n @Exists.{1} Aeneas.Std.U8 fun (out : Aeneas.Std.U8) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.U8) (ipnet.ipnet.IpNet.max_prefix_len n)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.U8 out))\n (@Eq.{1} Aeneas.Std.U8 out\n (ipnet.ipnet.ip_addr_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Aeneas.Std.U8) n\n (fun (a : ipnet.ipnet.Ipv4Net) =>\n Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n ipnet.ipnet.ipv4_max_prefix_len_spec._proof_1)\n fun (a : ipnet.ipnet.Ipv6Net) =>\n Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n ipnet.ipnet.ipv6_max_prefix_len_spec._proof_1))","theorem":"ipnet.ipnet.ip_max_prefix_len_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.trunc = Aeneas.Std.Result.ok out ∧\n out.prefix_len = n.prefix_len ∧\n CidrModel.ipv6Value out.addr = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.trunc","text":"trunc"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.trunc","source":{"first_line":2213,"last_line":2219}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}}],"definitions_truncated":false,"first_line":548,"last_line":559,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.ipnet.Ipv6Net fun (out : ipnet.ipnet.Ipv6Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv6Net) (ipnet.ipnet.Ipv6Net.trunc n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv6Net out))\n (And (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Net.prefix_len out) (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr out))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))))","theorem":"ipnet.ipv6_trunc_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.network = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv6Value out = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.network","text":"network"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.network","source":{"first_line":2202,"last_line":2211}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":466,"last_line":476,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr) (ipnet.ipnet.Ipv6Net.network n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))","theorem":"ipnet.ipv6_network_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ lower upper,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint r =\n Aeneas.Std.Result.ok (lower, upper) ∧\n ↑lower = RangeMath.size (RangeNext.remaining r) ∧ upper = Option.some lower","conclusion_segments":[{"text":"∃ "},{"text":"lower"},{"text":" "},{"text":"upper"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"lower"},{"ref":"Prod.mk","text":", "},{"text":"upper"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"lower"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.size","text":"RangeMath.size"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧ "},{"text":"upper"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"lower"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint","source":{"first_line":1535,"last_line":1545}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Proofs.RangeMath","name":"RangeMath.size","source":{"first_line":26,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}}],"definitions_truncated":false,"first_line":318,"last_line":345,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} Aeneas.Std.Usize fun (lower : Aeneas.Std.Usize) =>\n @Exists.{1} (Option.{0} Aeneas.Std.Usize) fun (upper : Option.{0} Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize)))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.size_hint r)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize))\n (@Prod.mk.{0, 0} Aeneas.Std.Usize (Option.{0} Aeneas.Std.Usize) lower upper)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize lower)\n (RangeMath.size (RangeNext.remaining r)))\n (@Eq.{1} (Option.{0} Aeneas.Std.Usize) upper (@Option.some.{0} Aeneas.Std.Usize lower)))","theorem":"RangeMore.range_size_hint_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]}],"conclusion":"∃ out, ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv4Net.from n = Aeneas.Std.Result.ok out ∧ out = ipnet.ipnet.IpNet.V4 n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"ref":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv4Net.from","text":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv4Net.from"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv4Net.from","source":{"first_line":2053,"last_line":2058}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}}],"definitions_truncated":false,"first_line":148,"last_line":153,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net),\n @Exists.{1} ipnet.ipnet.IpNet fun (out : ipnet.ipnet.IpNet) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.Insts.CoreConvertFromIpv4Net.from n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet out))\n (@Eq.{1} ipnet.ipnet.IpNet out (ipnet.ipnet.IpNet.V4 n))","theorem":"ipnet.ipnet.from_ipv4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"addr","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"ipnet.ipnet.Ipv4Net.Insts.CoreConvertFromIpv4Addr.from addr = Aeneas.Std.Result.ok { addr := addr, prefix_len := 32#u8 }","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Net.Insts.CoreConvertFromIpv4Addr.from","text":"ipnet.ipnet.Ipv4Net.Insts.CoreConvertFromIpv4Addr.from"},{"text":" "},{"text":"addr"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"32"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.Insts.CoreConvertFromIpv4Addr.from","source":{"first_line":2877,"last_line":2882}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.IPv4NetOps","name":"IPv4NetOps.from_ipv4_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":21,"last_line":25,"module":"Proofs.IPv4NetOps","program":null,"program_head":null,"statement":"∀ (addr : ipnet.core.net.ip_addr.Ipv4Addr),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net) (ipnet.ipnet.Ipv4Net.Insts.CoreConvertFromIpv4Addr.from addr)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Net\n (ipnet.ipnet.Ipv4Net.mk addr\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n IPv4NetOps.from_ipv4_spec._proof_1)))","theorem":"IPv4NetOps.from_ipv4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back r n =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv6Value out, IPv6RangeSteps.remaining r') =\n RangeMore.skipBack (IPv6RangeSteps.remaining r) ↑n","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"RangeMore.skipBack","text":"RangeMore.skipBack"},{"text":" "},{"text":"("},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back","source":{"first_line":1642,"last_line":1685}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeSteps","name":"IPv6RangeSteps.remaining","source":{"first_line":55,"last_line":56}},{"module":"Proofs.RangeMore","name":"RangeMore.skipBack","source":{"first_line":372,"last_line":377}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}}],"definitions_truncated":false,"first_line":469,"last_line":485,"module":"Proofs.IPv6RangeSkips","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (r' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back r n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeSteps.remaining r'))\n (RangeMore.skipBack (IPv6RangeSteps.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))","theorem":"IPv6RangeSkips.nth_back_remaining_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"(IPv6RangeMath.card (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end) ≤ IPv6RangeMath.usizeMax →\n ∃ out,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count r = Aeneas.Std.Result.ok out ∧\n ↑out = IPv6RangeMath.card (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end)) ∧\n (IPv6RangeMath.usizeMax < IPv6RangeMath.card (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end) →\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count r =\n Aeneas.Std.Result.fail Aeneas.Std.Error.integerOverflow)","conclusion_segments":[{"text":"("},{"ref":"IPv6RangeMath.card","text":"IPv6RangeMath.card"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"},{"ref":"LE.le","text":" ≤ "},{"ref":"IPv6RangeMath.usizeMax","text":"IPv6RangeMath.usizeMax"},{"text":" →\n "},{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"IPv6RangeMath.card","text":"IPv6RangeMath.card"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"("},{"ref":"IPv6RangeMath.usizeMax","text":"IPv6RangeMath.usizeMax"},{"ref":"LT.lt","text":" < "},{"ref":"IPv6RangeMath.card","text":"IPv6RangeMath.card"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"},{"text":" →\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.fail","text":"Aeneas.Std.Result.fail"},{"text":" "},{"ref":"Aeneas.Std.Error.integerOverflow","text":"Aeneas.Std.Error.integerOverflow"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Proofs.IPv6RangeMath","name":"IPv6RangeMath.card","source":{"first_line":16,"last_line":17}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}},{"module":"Proofs.IPv6RangeMath","name":"IPv6RangeMath.usizeMax","source":{"first_line":14,"last_line":14}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count","source":{"first_line":1227,"last_line":1239}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.fail","source":{"first_line":79,"last_line":79}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Error.integerOverflow","source":{"first_line":41,"last_line":41}}],"definitions_truncated":false,"first_line":371,"last_line":386,"module":"Proofs.IPv6RangeBasic","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n And\n (@LE.le.{0} Nat instLENat\n (IPv6RangeMath.card (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r)))\n IPv6RangeMath.usizeMax →\n @Exists.{1} Aeneas.Std.Usize fun (out : Aeneas.Std.Usize) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count r)\n (@Aeneas.Std.Result.ok.{0} Aeneas.Std.Usize out))\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize out)\n (IPv6RangeMath.card (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r)))))\n (@LT.lt.{0} Nat instLTNat IPv6RangeMath.usizeMax\n (IPv6RangeMath.card (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r))) →\n @Eq.{1} (Aeneas.Std.Result.{0} Aeneas.Std.Usize)\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.count r)\n (@Aeneas.Std.Result.fail.{0} Aeneas.Std.Usize Aeneas.Std.Error.integerOverflow))","theorem":"IPv6RangeBasic.count_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialOrdIpv6Net.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv6Derived.netCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialOrdIpv6Net.partial_cmp","text":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialOrdIpv6Net.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.netCompare","text":"IPv6Derived.netCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialOrdIpv6Net.partial_cmp","source":{"first_line":1967,"last_line":1975}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.netCompare","source":{"first_line":17,"last_line":21}}],"definitions_truncated":false,"first_line":51,"last_line":55,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Net),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipnet.Ipv6Net.Insts.CoreCmpPartialOrdIpv6Net.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (IPv6Derived.netCompare a b)))","theorem":"IPv6Derived.net_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"b","type":"Aeneas.Std.U32","type_segments":[{"ref":"Aeneas.Std.U32","text":"Aeneas.Std.U32"}]}],"conclusion":"∃ out,\n ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndU32Ipv4Addr.bitand a b = Aeneas.Std.Result.ok out ∧\n CidrModel.ipv4Value out = CidrModel.ipv4Value a &&& ↑b","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndU32Ipv4Addr.bitand","text":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndU32Ipv4Addr.bitand"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"HAnd.hAnd","text":" &&& "},{"text":"↑"},{"text":"b"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U32","source":{"first_line":671,"last_line":671}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndU32Ipv4Addr.bitand","source":{"first_line":675,"last_line":686}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HAnd.hAnd","source":{"first_line":1594,"last_line":1594}},{"module":"Init.Prelude","name":"instHAndOfAndOp","source":{"first_line":1835,"last_line":1837}},{"module":"Init.Data.Nat.Bitwise.Basic","name":"Nat.instAndOp","source":{"first_line":99,"last_line":99}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U32","source":{"first_line":35,"last_line":35}}],"definitions_truncated":false,"first_line":22,"last_line":32,"module":"Proofs.BitOps","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.Ipv4Addr) (b : Aeneas.Std.U32),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (out : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n (ipnet.core.net.ip_addr.Ipv4Addr.Insts.IpnetIpextIpBitAndU32Ipv4Addr.bitand a b)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv4Addr out))\n (@Eq.{1} Nat (CidrModel.ipv4Value out)\n (@HAnd.hAnd.{0, 0, 0} Nat Nat Nat (@instHAndOfAndOp.{0} Nat Nat.instAndOp) (CidrModel.ipv4Value a)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U32 b)))","theorem":"BitOps.ipv4_and_u32_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"q","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V4 n).subnets q = Aeneas.Std.Result.ok out ∧\n if ↑q < ↑n.prefix_len ∨ 32 < ↑q then out = Aeneas.Std.core.result.Result.Err ()\n else\n ∃ s,\n out = Aeneas.Std.core.result.Result.Ok (ipnet.ipnet.IpSubnets.V4 s) ∧\n CidrModel.ipv4Value s.start = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv4Value s.end = CidrModel.upper 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len ∧\n s.min_prefix_len = q","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.subnets","text":"subnets"},{"text":" "},{"text":"q"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"q"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Or","text":" ∨ "},{"text":"32"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"q"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"s"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"s"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"q"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.subnets","source":{"first_line":2819,"last_line":2836}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Or","source":{"first_line":661,"last_line":671}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Init.Prelude","name":"instDecidableOr","source":{"first_line":1247,"last_line":1255}},{"module":"Init.Prelude","name":"Nat.decLt","source":{"first_line":2214,"last_line":2226}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V4","source":{"first_line":2712,"last_line":2712}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.start","source":{"first_line":2703,"last_line":2703}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.end","source":{"first_line":2704,"last_line":2704}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.min_prefix_len","source":{"first_line":2705,"last_line":2705}}],"definitions_truncated":false,"first_line":48,"last_line":74,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net) (q : Aeneas.Std.U8)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.IpNet.subnets (ipnet.ipnet.IpNet.V4 n) q)\n (@Aeneas.Std.Result.ok.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out))\n (@ite.{1} Prop\n (Or\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@instDecidableOr\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (Nat.decLt (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (Nat.decLt (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError Unit.unit))\n (@Exists.{1} ipnet.ipnet.Ipv4Subnets fun (s : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.IpSubnets ipnet.ipnet.PrefixLenError\n (ipnet.ipnet.IpSubnets.V4 s)))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.start s))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Subnets.end s))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Subnets.min_prefix_len s) q)))))","theorem":"TaggedIPv4.subnets_v4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCloneClone.clone r = Aeneas.Std.Result.ok r","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"r"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.Insts.CoreCloneClone.clone","source":{"first_line":3211,"last_line":3216}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":71,"last_line":73,"module":"Proofs.IPv4IteratorDerived","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv4Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Subnets) (ipnet.ipnet.Ipv4Subnets.Insts.CoreCloneClone.clone r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Subnets r)","theorem":"IPv4IteratorDerived.subnets_clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"q","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.subnets q = Aeneas.Std.Result.ok out ∧\n if ↑q < ↑n.prefix_len ∨ 128 < ↑q then out = Aeneas.Std.core.result.Result.Err ()\n else\n ∃ s,\n out = Aeneas.Std.core.result.Result.Ok s ∧\n CidrModel.ipv6Value s.start = CidrModel.lower 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n CidrModel.ipv6Value s.end = CidrModel.upper 128 (CidrModel.ipv6Value n.addr) ↑n.prefix_len ∧\n s.min_prefix_len = q","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.subnets","text":"subnets"},{"text":" "},{"text":"q"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"ite","text":"if "},{"text":"↑"},{"text":"q"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Or","text":" ∨ "},{"text":"128"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"q"},{"ref":"ite","text":" then"},{"ref":"ite","text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"ite","text":"\n "},{"ref":"ite","text":"else\n "},{"text":"∃ "},{"text":"s"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"s"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.start","text":"start"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.end","text":"end"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"s"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","text":"min_prefix_len"},{"ref":"Eq","text":" = "},{"text":"q"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.subnets","source":{"first_line":2773,"last_line":2789}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"ite","source":{"first_line":1324,"last_line":1346}},{"module":"Init.Prelude","name":"Or","source":{"first_line":661,"last_line":671}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Init.Prelude","name":"instDecidableOr","source":{"first_line":1247,"last_line":1255}},{"module":"Init.Prelude","name":"Nat.decLt","source":{"first_line":2214,"last_line":2226}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.start","source":{"first_line":2695,"last_line":2695}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.end","source":{"first_line":2696,"last_line":2696}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.min_prefix_len","source":{"first_line":2697,"last_line":2697}}],"definitions_truncated":false,"first_line":40,"last_line":70,"module":"Proofs.IPv6NetOps","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net) (q : Aeneas.Std.U8)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError))\n (ipnet.ipnet.Ipv6Net.subnets n q)\n (@Aeneas.Std.Result.ok.{0}\n (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError) out))\n (@ite.{1} Prop\n (Or\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@instDecidableOr\n (@LT.lt.{0} Nat instLTNat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q))\n (Nat.decLt (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (Nat.decLt (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError Unit.unit))\n (@Exists.{1} ipnet.ipnet.Ipv6Subnets fun (s : ipnet.ipnet.Ipv6Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} ipnet.ipnet.Ipv6Subnets ipnet.ipnet.PrefixLenError s))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.start s))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (And\n (@Eq.{1} Nat (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Subnets.end s))\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv6Subnets.min_prefix_len s) q)))))","theorem":"IPv6NetOps.subnets_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"e","type":"ipnet.ipnet.PrefixLenError","type_segments":[{"ref":"ipnet.ipnet.PrefixLenError","text":"ipnet.ipnet.PrefixLenError"}]}],"conclusion":"ipnet.ipnet.PrefixLenError.Insts.CoreCloneClone.clone e = Aeneas.Std.Result.ok e","conclusion_segments":[{"ref":"ipnet.ipnet.PrefixLenError.Insts.CoreCloneClone.clone","text":"ipnet.ipnet.PrefixLenError.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"e"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"e"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError.Insts.CoreCloneClone.clone","source":{"first_line":2000,"last_line":2005}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":8,"last_line":12,"module":"Proofs.PrefixLenErrorValue","program":null,"program_head":null,"statement":"∀ (e : ipnet.ipnet.PrefixLenError),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.PrefixLenError) (ipnet.ipnet.PrefixLenError.Insts.CoreCloneClone.clone e)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.PrefixLenError e)","theorem":"PrefixLenErrorValue.clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next r = Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv6Value out, IPv6RangeSteps.remaining r') = RangeMath.next (IPv6RangeSteps.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMath.next","text":"RangeMath.next"},{"text":" "},{"text":"("},{"ref":"IPv6RangeSteps.remaining","text":"IPv6RangeSteps.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next","source":{"first_line":1150,"last_line":1175}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeSteps","name":"IPv6RangeSteps.remaining","source":{"first_line":55,"last_line":56}},{"module":"Proofs.RangeMath","name":"RangeMath.next","source":{"first_line":33,"last_line":39}}],"definitions_truncated":false,"first_line":83,"last_line":128,"module":"Proofs.IPv6RangeSteps","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (r' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.next r)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeSteps.remaining r'))\n (RangeMath.next (IPv6RangeSteps.remaining r)))","theorem":"IPv6RangeSteps.range_next_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n (ipnet.ipnet.IpNet.V4 n).is_sibling (ipnet.ipnet.IpNet.V4 m) = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n 0 < ↑n.prefix_len ∧\n ↑n.prefix_len = ↑m.prefix_len ∧\n CidrModel.lower 32 (CidrModel.ipv4Value n.addr) (↑n.prefix_len - 1) =\n CidrModel.lower 32 (CidrModel.ipv4Value m.addr) (↑m.prefix_len - 1))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.is_sibling","text":"is_sibling"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"m"},{"text":")"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"text":"0"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.is_sibling","source":{"first_line":2634,"last_line":2647}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}}],"definitions_truncated":false,"first_line":103,"last_line":114,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv4Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool)\n (ipnet.ipnet.IpNet.is_sibling (ipnet.ipnet.IpNet.V4 n) (ipnet.ipnet.IpNet.V4 m))\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (And\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m)))\n (@Eq.{1} Nat\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr m))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))))))","theorem":"TaggedIPv4.is_sibling_v4_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv4Value out = RangeMore.lastValue (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.lastValue","text":"RangeMore.lastValue"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last","source":{"first_line":1297,"last_line":1313}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeMore","name":"RangeMore.lastValue","source":{"first_line":107,"last_line":109}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}}],"definitions_truncated":false,"first_line":111,"last_line":135,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.last r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out)\n (RangeMore.lastValue (RangeNext.remaining r)))","theorem":"RangeMore.range_last_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hn","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]},{"binder":"explicit","kind":"hypothesis","name":"hm","type":"↑m.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.is_sibling m = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔\n 0 < ↑n.prefix_len ∧\n ↑n.prefix_len = ↑m.prefix_len ∧\n CidrModel.lower 128 (CidrModel.ipv6Value n.addr) (↑n.prefix_len - 1) =\n CidrModel.lower 128 (CidrModel.ipv6Value m.addr) (↑m.prefix_len - 1))","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.is_sibling","text":"is_sibling"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔\n "},{"text":"0"},{"ref":"LT.lt","text":" < "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Eq","text":" =\n "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"ref":"HSub.hSub","text":"("},{"text":"↑"},{"text":"m"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"ref":"HSub.hSub","text":")"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.is_sibling","source":{"first_line":2566,"last_line":2580}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"LT.lt","source":{"first_line":1407,"last_line":1407}},{"module":"Init.Prelude","name":"instLTNat","source":{"first_line":2037,"last_line":2038}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}}],"definitions_truncated":false,"first_line":158,"last_line":212,"module":"Proofs.IPv6NetOps","program":null,"program_head":null,"statement":"∀ (n m : ipnet.ipnet.Ipv6Net)\n (hn :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (hm :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} Bool fun (out : Bool) =>\n And (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.Ipv6Net.is_sibling n m) (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (And\n (@LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n)))\n (And\n (@Eq.{1} Nat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m)))\n (@Eq.{1} Nat\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr n))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr m))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len m))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1)))))))))","theorem":"IPv6NetOps.is_sibling_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"e","type":"ipnet.parser.AddrParseError","type_segments":[{"ref":"ipnet.parser.AddrParseError","text":"ipnet.parser.AddrParseError"}]}],"conclusion":"ipnet.parser.AddrParseError.Insts.CoreCloneClone.clone e = Aeneas.Std.Result.ok e","conclusion_segments":[{"ref":"ipnet.parser.AddrParseError.Insts.CoreCloneClone.clone","text":"ipnet.parser.AddrParseError.Insts.CoreCloneClone.clone"},{"text":" "},{"text":"e"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"e"}],"definitions":[{"module":"Ipnet","name":"ipnet.parser.AddrParseError","source":{"first_line":3414,"last_line":3418}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.parser.AddrParseError.Insts.CoreCloneClone.clone","source":{"first_line":3420,"last_line":3426}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}}],"definitions_truncated":false,"first_line":8,"last_line":13,"module":"Proofs.AddrParseErrorValue","program":null,"program_head":null,"statement":"∀ (e : ipnet.parser.AddrParseError),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.parser.AddrParseError) (ipnet.parser.AddrParseError.Insts.CoreCloneClone.clone e)\n (@Aeneas.Std.Result.ok.{0} ipnet.parser.AddrParseError e)","theorem":"AddrParseErrorValue.clone_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"∃ out,\n n.addr = Aeneas.Std.Result.ok out ∧\n out =\n match n with\n | ipnet.ipnet.IpNet.V4 x => ipnet.core.net.ip_addr.IpAddr.V4 x.addr\n | ipnet.ipnet.IpNet.V6 x => ipnet.core.net.ip_addr.IpAddr.V6 x.addr","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"n"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"x"},{"text":" => "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"x"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"x"},{"text":" => "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"x"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.addr","source":{"first_line":2260,"last_line":2267}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Core","name":"ipnet.ipnet.ip_addr_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":127,"last_line":132,"module":"Proofs.Core","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet),\n @Exists.{1} ipnet.core.net.ip_addr.IpAddr fun (out : ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.IpAddr) (ipnet.ipnet.IpNet.addr n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.IpAddr out))\n (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out\n (ipnet.ipnet.ip_addr_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => ipnet.core.net.ip_addr.IpAddr) n\n (fun (x : ipnet.ipnet.Ipv4Net) => ipnet.core.net.ip_addr.IpAddr.V4 (ipnet.ipnet.Ipv4Net.addr x))\n fun (x : ipnet.ipnet.Ipv6Net) => ipnet.core.net.ip_addr.IpAddr.V6 (ipnet.ipnet.Ipv6Net.addr x)))","theorem":"ipnet.ipnet.ip_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.hostmask = Aeneas.Std.Result.ok out ∧\n match n, hp with\n | ipnet.ipnet.IpNet.V4 v, hp =>\n ∃ a, out = ipnet.core.net.ip_addr.IpAddr.V4 a ∧ CidrModel.ipv4Value a = 2 ^ (32 - ↑v.prefix_len) - 1\n | ipnet.ipnet.IpNet.V6 v, hp =>\n ∃ a, out = ipnet.core.net.ip_addr.IpAddr.V6 a ∧ CidrModel.ipv6Value a = 2 ^ (128 - ↑v.prefix_len) - 1","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.hostmask","text":"hostmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"n"},{"text":", "},{"text":"hp"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":", "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"32"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"},{"ref":"HSub.hSub","text":" - "},{"text":"1"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":", "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"},{"ref":"HSub.hSub","text":" - "},{"text":"1"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.hostmask","source":{"first_line":2373,"last_line":2384}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_3","source":null},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}}],"definitions_truncated":false,"first_line":368,"last_line":387,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.IpAddr fun (out : ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.IpAddr) (ipnet.ipnet.IpNet.hostmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.IpAddr out))\n (ipnet.ip_netmask_nat_spec.match_3.{1}\n (fun (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n Prop)\n n hp\n (fun (v : ipnet.ipnet.Ipv4Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V4 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (a : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V4 a))\n (@Eq.{1} Nat (CidrModel.ipv4Value a)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))\n fun (v : ipnet.ipnet.Ipv6Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V6 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (a : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V6 a))\n (@Eq.{1} Nat (CidrModel.ipv6Value a)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))))\n (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))))","theorem":"ipnet.ip_hostmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.max r = Aeneas.Std.Result.ok out ∧\n Option.map TaggedRange.addrValue out = RangeMore.lastValue (TaggedRange.remaining r) ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o,\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max a = Aeneas.Std.Result.ok o ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.max","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.max"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.lastValue","text":"RangeMore.lastValue"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.max","source":{"first_line":1350,"last_line":1365}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.RangeMore","name":"RangeMore.lastValue","source":{"first_line":107,"last_line":109}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max","source":{"first_line":1341,"last_line":1348}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max","source":{"first_line":1332,"last_line":1339}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}}],"definitions_truncated":false,"first_line":155,"last_line":199,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsIteratorIteratorIpAddr.max r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out))\n (And\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (RangeMore.lastValue (TaggedRange.remaining r)))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv4Addr.max a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o)))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.max a)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) o))\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o)))))","theorem":"TaggedRange.max_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpOrd.cmp a b = Aeneas.Std.Result.ok (IPv6Derived.netCompare a b)","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpOrd.cmp","text":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpOrd.cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.netCompare","text":"IPv6Derived.netCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.Insts.CoreCmpOrd.cmp","source":{"first_line":1841,"last_line":1852}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.netCompare","source":{"first_line":17,"last_line":21}}],"definitions_truncated":false,"first_line":42,"last_line":49,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Net),\n @Eq.{1} (Aeneas.Std.Result.{0} Ordering) (ipnet.ipnet.Ipv6Net.Insts.CoreCmpOrd.cmp a b)\n (@Aeneas.Std.Result.ok.{0} Ordering (IPv6Derived.netCompare a b))","theorem":"IPv6Derived.net_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.core.net.ip_addr.IpAddr","type_segments":[{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"}]}],"conclusion":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpAddr.from a =\n match a with\n | ipnet.core.net.ip_addr.IpAddr.V4 x => Aeneas.Std.Result.ok (ipnet.ipnet.IpNet.V4 { addr := x, prefix_len := 32#u8 })\n | ipnet.core.net.ip_addr.IpAddr.V6 x =>\n Aeneas.Std.Result.ok (ipnet.ipnet.IpNet.V6 { addr := x, prefix_len := 128#u8 })","conclusion_segments":[{"ref":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpAddr.from","text":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpAddr.from"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" =\n "},{"text":"match "},{"text":"a"},{"text":" with\n | "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"x"},{"text":" => "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"x"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" := "},{"text":"32"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"},{"ref":"ipnet.ipnet.Ipv4Net.mk","text":" }"},{"text":")"},{"text":"\n | "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"x"},{"text":" =>\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":"{ "},{"text":"addr"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"x"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":", "},{"text":"prefix_len"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" := "},{"text":"128"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"},{"ref":"ipnet.ipnet.Ipv6Net.mk","text":" }"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreConvertFromIpAddr.from","source":{"first_line":2892,"last_line":2905}},{"module":"Proofs.TaggedDefaultFrom","name":"TaggedDefaultFrom.ipnet_from_addr_spec.match_1","source":null},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.mk","source":{"first_line":1758,"last_line":1758}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Proofs.TaggedDefaultFrom","name":"TaggedDefaultFrom.ipnet_from_addr_spec._proof_3","source":null},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.mk","source":{"first_line":1751,"last_line":1751}},{"module":"Proofs.TaggedDefaultFrom","name":"TaggedDefaultFrom.ipv6_from_addr_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":25,"last_line":37,"module":"Proofs.TaggedDefaultFrom","program":null,"program_head":null,"statement":"∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) (ipnet.ipnet.IpNet.Insts.CoreConvertFromIpAddr.from a)\n (TaggedDefaultFrom.ipnet_from_addr_spec.match_1.{1}\n (fun (a : ipnet.core.net.ip_addr.IpAddr) => Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) a\n (fun (x : ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet\n (ipnet.ipnet.IpNet.V4\n (ipnet.ipnet.Ipv4Net.mk x\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n TaggedDefaultFrom.ipnet_from_addr_spec._proof_3))))\n fun (x : ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet\n (ipnet.ipnet.IpNet.V6\n (ipnet.ipnet.Ipv6Net.mk x\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n TaggedDefaultFrom.ipv6_from_addr_spec._proof_1))))","theorem":"TaggedDefaultFrom.ipnet_from_addr_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"match n with\n| ipnet.ipnet.IpNet.V4 v => ↑v.prefix_len ≤ 32\n| ipnet.ipnet.IpNet.V6 v => ↑v.prefix_len ≤ 128","type_segments":[{"text":"match "},{"text":"n"},{"text":" with\n| "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"},{"text":"\n| "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":" => "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out,\n n.broadcast = Aeneas.Std.Result.ok out ∧\n match n, hp with\n | ipnet.ipnet.IpNet.V4 v, hp =>\n ∃ a,\n out = ipnet.core.net.ip_addr.IpAddr.V4 a ∧\n CidrModel.ipv4Value a = CidrModel.upper 32 (CidrModel.ipv4Value v.addr) ↑v.prefix_len\n | ipnet.ipnet.IpNet.V6 v, hp =>\n ∃ a,\n out = ipnet.core.net.ip_addr.IpAddr.V6 a ∧\n CidrModel.ipv6Value a = CidrModel.upper 128 (CidrModel.ipv6Value v.addr) ↑v.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.broadcast","text":"broadcast"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"n"},{"text":", "},{"text":"hp"},{"text":" with\n | "},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"text":"\n | "},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"v"},{"text":", "},{"text":"hp"},{"text":" =>\n "},{"text":"∃ "},{"text":"a"},{"text":",\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"a"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.upper","text":"CidrModel.upper"},{"text":" "},{"text":"128"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"v"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.broadcast","source":{"first_line":2420,"last_line":2431}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.Arithmetic","name":"ipnet.ip_netmask_nat_spec.match_3","source":null},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.CidrModel","name":"CidrModel.upper","source":{"first_line":51,"last_line":51}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.addr","source":{"first_line":1752,"last_line":1752}}],"definitions_truncated":false,"first_line":512,"last_line":533,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.IpAddr fun (out : ipnet.core.net.ip_addr.IpAddr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.IpAddr) (ipnet.ipnet.IpNet.broadcast n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.IpAddr out))\n (ipnet.ip_netmask_nat_spec.match_3.{1}\n (fun (n : ipnet.ipnet.IpNet)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) n\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n Prop)\n n hp\n (fun (v : ipnet.ipnet.Ipv4Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V4 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv4Addr fun (a : ipnet.core.net.ip_addr.Ipv4Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V4 a))\n (@Eq.{1} Nat (CidrModel.ipv4Value a)\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v)))))\n fun (v : ipnet.ipnet.Ipv6Net)\n (hp :\n ipnet.ip_netmask_nat_spec.match_1.{1} (fun (n : ipnet.ipnet.IpNet) => Prop) (ipnet.ipnet.IpNet.V6 v)\n (fun (v : ipnet.ipnet.Ipv4Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32))))\n fun (v : ipnet.ipnet.Ipv6Net) =>\n @LE.le.{0} Nat instLENat\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))) =>\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (a : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And (@Eq.{1} ipnet.core.net.ip_addr.IpAddr out (ipnet.core.net.ip_addr.IpAddr.V6 a))\n (@Eq.{1} Nat (CidrModel.ipv6Value a)\n (CidrModel.upper (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (CidrModel.ipv6Value (ipnet.ipnet.Ipv6Net.addr v))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len v)))))","theorem":"ipnet.ip_broadcast_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.IpNet","type_segments":[{"ref":"ipnet.ipnet.IpNet","text":"ipnet.ipnet.IpNet"}]}],"conclusion":"∃ out,\n ipnet.ipnet.IpNet.Insts.CoreCmpPartialEqIpNet.eq a b = Aeneas.Std.Result.ok out ∧\n (out = Bool.true ↔ TaggedDerived.netKey a = TaggedDerived.netKey b)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialEqIpNet.eq","text":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialEqIpNet.eq"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Bool.true","text":"Bool.true"},{"ref":"Iff","text":" ↔ "},{"ref":"TaggedDerived.netKey","text":"TaggedDerived.netKey"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedDerived.netKey","text":"TaggedDerived.netKey"},{"text":" "},{"text":"b"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreCmpPartialEqIpNet.eq","source":{"first_line":1819,"last_line":1839}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Init.Prelude","name":"Bool.true","source":{"first_line":110,"last_line":111}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.TaggedDerived","name":"TaggedDerived.netKey","source":{"first_line":14,"last_line":16}}],"definitions_truncated":false,"first_line":61,"last_line":88,"module":"Proofs.TaggedDerived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.IpNet),\n @Exists.{1} Bool fun (out : Bool) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.IpNet.Insts.CoreCmpPartialEqIpNet.eq a b)\n (@Aeneas.Std.Result.ok.{0} Bool out))\n (Iff (@Eq.{1} Bool out Bool.true)\n (@Eq.{1} (Prod.{0, 0} Nat (Prod.{0, 0} Nat Nat)) (TaggedDerived.netKey a) (TaggedDerived.netKey b)))","theorem":"TaggedDerived.net_eq_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"∃ out,\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last r = Aeneas.Std.Result.ok out ∧\n Option.map CidrModel.ipv6Value out =\n IPv6RangeBasic.lastValue (CidrModel.ipv6Value r.start) (CidrModel.ipv6Value r.end)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" =\n "},{"ref":"IPv6RangeBasic.lastValue","text":"IPv6RangeBasic.lastValue"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.start","text":"start"},{"text":")"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"r"},{"text":"."},{"ref":"ipnet.ipext.Ipv6AddrRange.end","text":"end"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last","source":{"first_line":1279,"last_line":1295}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Proofs.IPv6RangeBasic","name":"IPv6RangeBasic.lastValue","source":{"first_line":13,"last_line":14}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.start","source":{"first_line":857,"last_line":857}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.end","source":{"first_line":858,"last_line":858}}],"definitions_truncated":false,"first_line":19,"last_line":45,"module":"Proofs.IPv6RangeBasic","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsIteratorIteratorIpv6Addr.last r)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) out))\n (@Eq.{1} (Option.{0} Nat) (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr Nat CidrModel.ipv6Value out)\n (IPv6RangeBasic.lastValue (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.start r))\n (CidrModel.ipv6Value (ipnet.ipext.Ipv6AddrRange.end r))))","theorem":"IPv6RangeBasic.last_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv4AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv4AddrRange","text":"ipnet.ipext.Ipv4AddrRange"}]}],"conclusion":"∃ out r',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back r =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map CidrModel.ipv4Value out, RangeNext.remaining r') = RangeMore.backStep (RangeNext.remaining r)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.backStep","text":"RangeMore.backStep"},{"text":" "},{"text":"("},{"ref":"RangeNext.remaining","text":"RangeNext.remaining"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back","source":{"first_line":1588,"last_line":1614}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Proofs.RangeNext","name":"RangeNext.remaining","source":{"first_line":58,"last_line":60}},{"module":"Proofs.RangeMore","name":"RangeMore.backStep","source":{"first_line":41,"last_line":46}}],"definitions_truncated":false,"first_line":64,"last_line":101,"module":"Proofs.RangeMore","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv4AddrRange),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) fun (out : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (r' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.next_back r)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange out r')))\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr Nat CidrModel.ipv4Value out) (RangeNext.remaining r'))\n (RangeMore.backStep (RangeNext.remaining r)))","theorem":"RangeMore.range_next_back_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]}],"conclusion":"(ipnet.ipnet.IpNet.V4 n).is_sibling (ipnet.ipnet.IpNet.V6 m) = Aeneas.Std.Result.ok Bool.false","conclusion_segments":[{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"text":"."},{"ref":"ipnet.ipnet.IpNet.is_sibling","text":"is_sibling"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V6","text":"ipnet.ipnet.IpNet.V6"},{"text":" "},{"text":"m"},{"text":")"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Bool.false","text":"Bool.false"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.is_sibling","source":{"first_line":2634,"last_line":2647}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V6","source":{"first_line":1768,"last_line":1768}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Bool.false","source":{"first_line":108,"last_line":109}}],"definitions_truncated":false,"first_line":116,"last_line":120,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net) (m : ipnet.ipnet.Ipv6Net),\n @Eq.{1} (Aeneas.Std.Result.{0} Bool) (ipnet.ipnet.IpNet.is_sibling (ipnet.ipnet.IpNet.V4 n) (ipnet.ipnet.IpNet.V6 m))\n (@Aeneas.Std.Result.ok.{0} Bool Bool.false)","theorem":"TaggedIPv4.is_sibling_v4_v6_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipnet.Ipv4Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv4Subnets","text":"ipnet.ipnet.Ipv4Subnets"}]}],"conclusion":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv4Subnets.from r = Aeneas.Std.Result.ok (ipnet.ipnet.IpSubnets.V4 r)","conclusion_segments":[{"ref":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv4Subnets.from","text":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv4Subnets.from"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpSubnets.V4","text":"ipnet.ipnet.IpSubnets.V4"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets","source":{"first_line":2707,"last_line":2713}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv4Subnets.from","source":{"first_line":3245,"last_line":3250}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpSubnets.V4","source":{"first_line":2712,"last_line":2712}}],"definitions_truncated":false,"first_line":16,"last_line":20,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipnet.Ipv4Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpSubnets) (ipnet.ipnet.IpSubnets.Insts.CoreConvertFromIpv4Subnets.from r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpSubnets (ipnet.ipnet.IpSubnets.V4 r))","theorem":"TaggedIPv4.from_ipv4_subnets_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.Ipv6AddrRange","type_segments":[{"ref":"ipnet.ipext.Ipv6AddrRange","text":"ipnet.ipext.Ipv6AddrRange"}]}],"conclusion":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv6AddrRange.from r = Aeneas.Std.Result.ok (ipnet.ipext.IpAddrRange.V6 r)","conclusion_segments":[{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv6AddrRange.from","text":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv6AddrRange.from"},{"text":" "},{"text":"r"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"r"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv6AddrRange.from","source":{"first_line":1065,"last_line":1070}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}}],"definitions_truncated":false,"first_line":22,"last_line":26,"module":"Proofs.TaggedIPv4","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.Ipv6AddrRange),\n @Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipext.IpAddrRange)\n (ipnet.ipext.IpAddrRange.Insts.CoreConvertFromIpv6AddrRange.from r)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipext.IpAddrRange (ipnet.ipext.IpAddrRange.V6 r))","theorem":"TaggedIPv4.from_ipv6_range_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv4Net","type_segments":[{"ref":"ipnet.ipnet.Ipv4Net","text":"ipnet.ipnet.Ipv4Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 32","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"32"}]}],"conclusion":"∃ out,\n n.trunc = Aeneas.Std.Result.ok out ∧\n out.prefix_len = n.prefix_len ∧\n CidrModel.ipv4Value out.addr = CidrModel.lower 32 (CidrModel.ipv4Value n.addr) ↑n.prefix_len","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.trunc","text":"trunc"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"out"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"ref":"CidrModel.lower","text":"CidrModel.lower"},{"text":" "},{"text":"32"},{"text":" "},{"text":"("},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.trunc","source":{"first_line":2240,"last_line":2246}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Proofs.CidrModel","name":"CidrModel.lower","source":{"first_line":50,"last_line":50}}],"definitions_truncated":false,"first_line":535,"last_line":546,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv4Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))),\n @Exists.{1} ipnet.ipnet.Ipv4Net fun (out : ipnet.ipnet.Ipv4Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Net) (ipnet.ipnet.Ipv4Net.trunc n)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Net out))\n (And (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Net.prefix_len out) (ipnet.ipnet.Ipv4Net.prefix_len n))\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr out))\n (CidrModel.lower (@OfNat.ofNat.{0} Nat (nat_lit 32) (instOfNatNat (nat_lit 32)))\n (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)))))","theorem":"ipnet.ipv4_trunc_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"m","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]}],"conclusion":"∃ out,\n ipnet.mask.ipv4_mask_to_prefix m = Aeneas.Std.Result.ok out ∧\n (∀ (q : Aeneas.Std.U8), out = Aeneas.Std.core.result.Result.Ok q ↔ IPv4MaskOps.validMask m ↑q) ∧\n (out = Aeneas.Std.core.result.Result.Err () ↔ ¬∃ q, IPv4MaskOps.validMask m ↑q)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.mask.ipv4_mask_to_prefix","text":"ipnet.mask.ipv4_mask_to_prefix"},{"text":" "},{"text":"m"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"q"},{"text":" : "},{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Ok","text":"Aeneas.Std.core.result.Result.Ok"},{"text":" "},{"text":"q"},{"ref":"Iff","text":" ↔ "},{"ref":"IPv4MaskOps.validMask","text":"IPv4MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Iff","text":"("},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.core.result.Result.Err","text":"Aeneas.Std.core.result.Result.Err"},{"text":" "},{"ref":"Unit.unit","text":"("},{"ref":"Unit.unit","text":")"},{"ref":"Iff","text":" ↔ "},{"ref":"Not","text":"¬"},{"text":"∃ "},{"text":"q"},{"text":", "},{"ref":"IPv4MaskOps.validMask","text":"IPv4MaskOps.validMask"},{"text":" "},{"text":"m"},{"text":" "},{"text":"↑"},{"text":"q"},{"ref":"Iff","text":")"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result","source":{"first_line":7,"last_line":10}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.PrefixLenError","source":{"first_line":1977,"last_line":1981}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.mask.ipv4_mask_to_prefix","source":{"first_line":2150,"last_line":2164}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Core","name":"Iff","source":{"first_line":183,"last_line":194}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Ok","source":{"first_line":9,"last_line":9}},{"module":"Proofs.IPv4MaskOps","name":"IPv4MaskOps.validMask","source":{"first_line":44,"last_line":45}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Aeneas.Std.Core.Result","name":"Aeneas.Std.core.result.Result.Err","source":{"first_line":10,"last_line":10}},{"module":"Init.Prelude","name":"Unit.unit","source":{"first_line":226,"last_line":231}},{"module":"Init.Prelude","name":"Not","source":{"first_line":301,"last_line":308}}],"definitions_truncated":false,"first_line":90,"last_line":126,"module":"Proofs.IPv4MaskOps","program":null,"program_head":null,"statement":"∀ (m : ipnet.core.net.ip_addr.Ipv4Addr),\n @Exists.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError)\n fun (out : Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError))\n (ipnet.mask.ipv4_mask_to_prefix m)\n (@Aeneas.Std.Result.ok.{0} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out))\n (And\n (∀ (q : Aeneas.Std.U8),\n Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Ok.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError q))\n (IPv4MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))\n (Iff\n (@Eq.{1} (Aeneas.Std.core.result.Result.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError) out\n (@Aeneas.Std.core.result.Result.Err.{0, 0} Aeneas.Std.U8 ipnet.ipnet.PrefixLenError Unit.unit))\n (Not\n (@Exists.{1} Aeneas.Std.U8 fun (q : Aeneas.Std.U8) =>\n IPv4MaskOps.validMask m (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 q)))))","theorem":"IPv4MaskOps.ipv4_mask_to_prefix_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[],"conclusion":"∃ n,\n ipnet.ipnet.IpNet.Insts.CoreDefaultDefault.default = Aeneas.Std.Result.ok (ipnet.ipnet.IpNet.V4 n) ∧\n CidrModel.ipv4Value n.addr = 0 ∧ n.prefix_len = 0#u8","conclusion_segments":[{"text":"∃ "},{"text":"n"},{"text":",\n "},{"ref":"ipnet.ipnet.IpNet.Insts.CoreDefaultDefault.default","text":"ipnet.ipnet.IpNet.Insts.CoreDefaultDefault.default"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"ipnet.ipnet.IpNet.V4","text":"ipnet.ipnet.IpNet.V4"},{"text":" "},{"text":"n"},{"text":")"},{"ref":"And","text":" ∧\n "},{"ref":"CidrModel.ipv4Value","text":"CidrModel.ipv4Value"},{"text":" "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.addr","text":"addr"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"And","text":" ∧ "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv4Net.prefix_len","text":"prefix_len"},{"ref":"Eq","text":" = "},{"text":"0"},{"ref":"Aeneas.Std.U8.ofNat","text":"#u8"}],"definitions":[{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net","source":{"first_line":1755,"last_line":1760}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet","source":{"first_line":1762,"last_line":1768}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.Insts.CoreDefaultDefault.default","source":{"first_line":2855,"last_line":2860}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.IpNet.V4","source":{"first_line":1767,"last_line":1767}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv4Value","source":{"first_line":27,"last_line":28}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.addr","source":{"first_line":1759,"last_line":1759}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Net.prefix_len","source":{"first_line":1760,"last_line":1760}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8.ofNat","source":{"first_line":704,"last_line":704}},{"module":"Proofs.TaggedDefaultFrom","name":"TaggedDefaultFrom.ipnet_default_spec._proof_1","source":null}],"definitions_truncated":false,"first_line":10,"last_line":17,"module":"Proofs.TaggedDefaultFrom","program":null,"program_head":null,"statement":"@Exists.{1} ipnet.ipnet.Ipv4Net fun (n : ipnet.ipnet.Ipv4Net) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.IpNet) ipnet.ipnet.IpNet.Insts.CoreDefaultDefault.default\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.IpNet (ipnet.ipnet.IpNet.V4 n)))\n (And\n (@Eq.{1} Nat (CidrModel.ipv4Value (ipnet.ipnet.Ipv4Net.addr n))\n (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))))\n (@Eq.{1} Aeneas.Std.U8 (ipnet.ipnet.Ipv4Net.prefix_len n)\n (Aeneas.Std.U8.ofNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0)))\n TaggedDefaultFrom.ipnet_default_spec._proof_1)))","theorem":"TaggedDefaultFrom.ipnet_default_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"n","type":"ipnet.ipnet.Ipv6Net","type_segments":[{"ref":"ipnet.ipnet.Ipv6Net","text":"ipnet.ipnet.Ipv6Net"}]},{"binder":"explicit","kind":"hypothesis","name":"hp","type":"↑n.prefix_len ≤ 128","type_segments":[{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"LE.le","text":" ≤ "},{"text":"128"}]}],"conclusion":"∃ out, n.netmask = Aeneas.Std.Result.ok out ∧ CidrModel.ipv6Value out = 2 ^ 128 - 2 ^ (128 - ↑n.prefix_len)","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":", "},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.netmask","text":"netmask"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧ "},{"ref":"CidrModel.ipv6Value","text":"CidrModel.ipv6Value"},{"text":" "},{"text":"out"},{"ref":"Eq","text":" = "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"2"},{"ref":"HPow.hPow","text":" ^ "},{"ref":"HSub.hSub","text":"("},{"text":"128"},{"ref":"HSub.hSub","text":" - "},{"text":"↑"},{"text":"n"},{"text":"."},{"ref":"ipnet.ipnet.Ipv6Net.prefix_len","text":"prefix_len"},{"ref":"HSub.hSub","text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net","source":{"first_line":1748,"last_line":1753}},{"module":"Init.Prelude","name":"LE.le","source":{"first_line":1402,"last_line":1402}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"instLENat","source":{"first_line":2026,"last_line":2027}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.U8","source":{"first_line":33,"last_line":33}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.prefix_len","source":{"first_line":1753,"last_line":1753}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Net.netmask","source":{"first_line":2309,"last_line":2316}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Proofs.CidrModel","name":"CidrModel.ipv6Value","source":{"first_line":30,"last_line":31}},{"module":"Init.Prelude","name":"HSub.hSub","source":{"first_line":1491,"last_line":1491}},{"module":"Init.Prelude","name":"instHSub","source":{"first_line":1788,"last_line":1790}},{"module":"Init.Prelude","name":"instSubNat","source":{"first_line":2261,"last_line":2262}},{"module":"Init.Prelude","name":"HPow.hPow","source":{"first_line":1538,"last_line":1538}},{"module":"Init.Prelude","name":"instHPow","source":{"first_line":1804,"last_line":1806}},{"module":"Mathlib.Algebra.Group.Monoid","name":"NPow.toPow","source":{"first_line":369,"last_line":371}},{"module":"Mathlib.Algebra.Group.Monoid","name":"Monoid.toNPow","source":{"first_line":388,"last_line":393}},{"module":"Mathlib.Algebra.Group.Nat.Defs","name":"Nat.instMonoid","source":{"first_line":73,"last_line":73}}],"definitions_truncated":false,"first_line":323,"last_line":333,"module":"Proofs.Arithmetic","program":null,"program_head":null,"statement":"∀ (n : ipnet.ipnet.Ipv6Net)\n (hp :\n @LE.le.{0} Nat instLENat (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))),\n @Exists.{1} ipnet.core.net.ip_addr.Ipv6Addr fun (out : ipnet.core.net.ip_addr.Ipv6Addr) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.core.net.ip_addr.Ipv6Addr) (ipnet.ipnet.Ipv6Net.netmask n)\n (@Aeneas.Std.Result.ok.{0} ipnet.core.net.ip_addr.Ipv6Addr out))\n (@Eq.{1} Nat (CidrModel.ipv6Value out)\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128))))\n (@HPow.hPow.{0, 0, 0} Nat Nat Nat\n (@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))\n (@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))\n (@HSub.hSub.{0, 0, 0} Nat Nat Nat (@instHSub.{0} Nat instSubNat)\n (@OfNat.ofNat.{0} Nat (nat_lit 128) (instOfNatNat (nat_lit 128)))\n (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.U8 (ipnet.ipnet.Ipv6Net.prefix_len n))))))","theorem":"ipnet.ipv6_netmask_nat_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"a","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]},{"binder":"explicit","kind":"variable","name":"b","type":"ipnet.ipnet.Ipv6Subnets","type_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets","text":"ipnet.ipnet.Ipv6Subnets"}]}],"conclusion":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialOrdIpv6Subnets.partial_cmp a b =\n Aeneas.Std.Result.ok (Option.some (IPv6Derived.subnetsCompare a b))","conclusion_segments":[{"ref":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialOrdIpv6Subnets.partial_cmp","text":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialOrdIpv6Subnets.partial_cmp"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"("},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"("},{"ref":"IPv6Derived.subnetsCompare","text":"IPv6Derived.subnetsCompare"},{"text":" "},{"text":"a"},{"text":" "},{"text":"b"},{"text":")"},{"text":")"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets","source":{"first_line":2691,"last_line":2697}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Init.Data.Ord.Basic","name":"Ordering","source":{"first_line":17,"last_line":32}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialOrdIpv6Subnets.partial_cmp","source":{"first_line":3235,"last_line":3243}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.IPv6Derived","name":"IPv6Derived.subnetsCompare","source":{"first_line":69,"last_line":77}}],"definitions_truncated":false,"first_line":155,"last_line":159,"module":"Proofs.IPv6Derived","program":null,"program_head":null,"statement":"∀ (a b : ipnet.ipnet.Ipv6Subnets),\n @Eq.{1} (Aeneas.Std.Result.{0} (Option.{0} Ordering))\n (ipnet.ipnet.Ipv6Subnets.Insts.CoreCmpPartialOrdIpv6Subnets.partial_cmp a b)\n (@Aeneas.Std.Result.ok.{0} (Option.{0} Ordering) (@Option.some.{0} Ordering (IPv6Derived.subnetsCompare a b)))","theorem":"IPv6Derived.subnets_partial_cmp_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"start","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"stop","type":"ipnet.core.net.ip_addr.Ipv4Addr","type_segments":[{"ref":"ipnet.core.net.ip_addr.Ipv4Addr","text":"ipnet.core.net.ip_addr.Ipv4Addr"}]},{"binder":"explicit","kind":"variable","name":"p","type":"Aeneas.Std.U8","type_segments":[{"ref":"Aeneas.Std.U8","text":"Aeneas.Std.U8"}]}],"conclusion":"∃ out,\n ipnet.ipnet.Ipv4Subnets.new start stop p = Aeneas.Std.Result.ok out ∧\n out = { start := start, «end» := stop, min_prefix_len := p }","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":",\n "},{"ref":"ipnet.ipnet.Ipv4Subnets.new","text":"ipnet.ipnet.Ipv4Subnets.new"},{"text":" "},{"text":"start"},{"text":" "},{"text":"stop"},{"text":" "},{"text":"p"},{"ref":"Eq","text":" = "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"text":"out"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":"{ "},{"text":"start"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":" := "},{"text":"start"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":", "},{"text":"«end»"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":" := "},{"text":"stop"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":", "},{"text":"min_prefix_len"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":" := "},{"text":"p"},{"ref":"ipnet.ipnet.Ipv4Subnets.mk","text":" }"}],"definitions":[{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.U8","source":{"first_line":669,"last_line":669}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets","source":{"first_line":2699,"last_line":2705}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.new","source":{"first_line":2791,"last_line":2799}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Ipnet","name":"ipnet.ipnet.Ipv4Subnets.mk","source":{"first_line":2702,"last_line":2702}}],"definitions_truncated":false,"first_line":25,"last_line":30,"module":"Proofs.Collections","program":null,"program_head":null,"statement":"∀ (start stop : ipnet.core.net.ip_addr.Ipv4Addr) (p : Aeneas.Std.U8),\n @Exists.{1} ipnet.ipnet.Ipv4Subnets fun (out : ipnet.ipnet.Ipv4Subnets) =>\n And\n (@Eq.{1} (Aeneas.Std.Result.{0} ipnet.ipnet.Ipv4Subnets) (ipnet.ipnet.Ipv4Subnets.new start stop p)\n (@Aeneas.Std.Result.ok.{0} ipnet.ipnet.Ipv4Subnets out))\n (@Eq.{1} ipnet.ipnet.Ipv4Subnets out (ipnet.ipnet.Ipv4Subnets.mk start stop p))","theorem":"ipnet.ipnet.ipv4_subnets_new_spec","translation_rerun":false,"version":1}
proofs.rs:formal:{"axioms":["propext","Classical.choice","Quot.sound"],"binders":[{"binder":"explicit","kind":"variable","name":"r","type":"ipnet.ipext.IpAddrRange","type_segments":[{"ref":"ipnet.ipext.IpAddrRange","text":"ipnet.ipext.IpAddrRange"}]},{"binder":"explicit","kind":"variable","name":"n","type":"Aeneas.Std.Usize","type_segments":[{"ref":"Aeneas.Std.Usize","text":"Aeneas.Std.Usize"}]},{"binder":"explicit","kind":"hypothesis","name":"h64","type":"System.Platform.numBits = 64","type_segments":[{"ref":"System.Platform.numBits","text":"System.Platform.numBits"},{"ref":"Eq","text":" = "},{"text":"64"}]}],"conclusion":"∃ out r',\n ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.nth_back r n =\n Aeneas.Std.Result.ok (out, r') ∧\n (Option.map TaggedRange.addrValue out, TaggedRange.remaining r') = RangeMore.skipBack (TaggedRange.remaining r) ↑n ∧\n TaggedRange.family r' = TaggedRange.family r ∧\n (∀ (a : ipnet.core.net.ip_addr.IpAddr), out = Option.some a → TaggedRange.addrFamily a = TaggedRange.family r) ∧\n match r with\n | ipnet.ipext.IpAddrRange.V4 a =>\n ∃ o a',\n ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back a n =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V4 o ∧ r' = ipnet.ipext.IpAddrRange.V4 a'\n | ipnet.ipext.IpAddrRange.V6 a =>\n ∃ o a',\n ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back a n =\n Aeneas.Std.Result.ok (o, a') ∧\n out = Option.map ipnet.core.net.ip_addr.IpAddr.V6 o ∧ r' = ipnet.ipext.IpAddrRange.V6 a'","conclusion_segments":[{"text":"∃ "},{"text":"out"},{"text":" "},{"text":"r'"},{"text":",\n "},{"ref":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.nth_back","text":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.nth_back"},{"text":" "},{"text":"r"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"out"},{"ref":"Prod.mk","text":", "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"ref":"Prod.mk","text":"("},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"TaggedRange.addrValue","text":"TaggedRange.addrValue"},{"text":" "},{"text":"out"},{"ref":"Prod.mk","text":", "},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r'"},{"ref":"Prod.mk","text":")"},{"ref":"Eq","text":" = "},{"ref":"RangeMore.skipBack","text":"RangeMore.skipBack"},{"text":" "},{"text":"("},{"ref":"TaggedRange.remaining","text":"TaggedRange.remaining"},{"text":" "},{"text":"r"},{"text":")"},{"text":" "},{"text":"↑"},{"text":"n"},{"ref":"And","text":" ∧\n "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"ref":"And","text":" ∧\n "},{"text":"(∀ ("},{"text":"a"},{"text":" : "},{"ref":"ipnet.core.net.ip_addr.IpAddr","text":"ipnet.core.net.ip_addr.IpAddr"},{"text":"), "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.some","text":"Option.some"},{"text":" "},{"text":"a"},{"text":" → "},{"ref":"TaggedRange.addrFamily","text":"TaggedRange.addrFamily"},{"text":" "},{"text":"a"},{"ref":"Eq","text":" = "},{"ref":"TaggedRange.family","text":"TaggedRange.family"},{"text":" "},{"text":"r"},{"text":")"},{"ref":"And","text":" ∧\n "},{"text":"match "},{"text":"r"},{"text":" with\n | "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back","text":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back"},{"text":" "},{"text":"a"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V4","text":"ipnet.core.net.ip_addr.IpAddr.V4"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V4","text":"ipnet.ipext.IpAddrRange.V4"},{"text":" "},{"text":"a'"},{"text":"\n | "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a"},{"text":" =>\n "},{"text":"∃ "},{"text":"o"},{"text":" "},{"text":"a'"},{"text":",\n "},{"ref":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back","text":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back"},{"text":" "},{"text":"a"},{"text":" "},{"text":"n"},{"ref":"Eq","text":" =\n "},{"ref":"Aeneas.Std.Result.ok","text":"Aeneas.Std.Result.ok"},{"text":" "},{"ref":"Prod.mk","text":"("},{"text":"o"},{"ref":"Prod.mk","text":", "},{"text":"a'"},{"ref":"Prod.mk","text":")"},{"ref":"And","text":" ∧\n "},{"text":"out"},{"ref":"Eq","text":" = "},{"ref":"Option.map","text":"Option.map"},{"text":" "},{"ref":"ipnet.core.net.ip_addr.IpAddr.V6","text":"ipnet.core.net.ip_addr.IpAddr.V6"},{"text":" "},{"text":"o"},{"ref":"And","text":" ∧ "},{"text":"r'"},{"ref":"Eq","text":" = "},{"ref":"ipnet.ipext.IpAddrRange.V6","text":"ipnet.ipext.IpAddrRange.V6"},{"text":" "},{"text":"a'"}],"definitions":[{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange","source":{"first_line":867,"last_line":873}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.Usize","source":{"first_line":668,"last_line":668}},{"module":"Init.Prelude","name":"Eq","source":{"first_line":46,"last_line":76}},{"module":"Init.Prelude","name":"Nat","source":{"first_line":1349,"last_line":1371}},{"module":"Init.Prelude","name":"System.Platform.numBits","source":{"first_line":2429,"last_line":2433}},{"module":"Init.Prelude","name":"OfNat.ofNat","source":{"first_line":1393,"last_line":1393}},{"module":"Init.Prelude","name":"instOfNatNat","source":{"first_line":1395,"last_line":1397}},{"module":"Init.Core","name":"Exists","source":{"first_line":313,"last_line":341}},{"module":"Init.Prelude","name":"Option","source":{"first_line":3047,"last_line":3058}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr","source":{"first_line":23,"last_line":30}},{"module":"Init.Prelude","name":"And","source":{"first_line":645,"last_line":659}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result","source":{"first_line":67,"last_line":68}},{"module":"Init.Prelude","name":"Prod","source":{"first_line":603,"last_line":618}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.nth_back","source":{"first_line":1722,"last_line":1746}},{"module":"Aeneas.Std.Primitives","name":"Aeneas.Std.Result.ok","source":{"first_line":72,"last_line":72}},{"module":"Init.Prelude","name":"Prod.mk","source":{"first_line":614,"last_line":614}},{"module":"Proofs.RangeMath","name":"RangeMath.HalfOpen","source":{"first_line":14,"last_line":17}},{"module":"Init.Prelude","name":"Option.map","source":{"first_line":3082,"last_line":3094}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrValue","source":{"first_line":30,"last_line":32}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining","source":{"first_line":34,"last_line":36}},{"module":"Proofs.RangeMore","name":"RangeMore.skipBack","source":{"first_line":372,"last_line":377}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalar.val","source":{"first_line":76,"last_line":76}},{"module":"Aeneas.Std.Scalar.Core","name":"Aeneas.Std.UScalarTy.Usize","source":{"first_line":32,"last_line":32}},{"module":"Init.Prelude","name":"Bool","source":{"first_line":99,"last_line":111}},{"module":"Proofs.TaggedRange","name":"TaggedRange.family","source":{"first_line":38,"last_line":40}},{"module":"Init.Prelude","name":"Option.some","source":{"first_line":3057,"last_line":3058}},{"module":"Proofs.TaggedRange","name":"TaggedRange.addrFamily","source":{"first_line":42,"last_line":44}},{"module":"Proofs.TaggedRange","name":"TaggedRange.remaining.match_1","source":null},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange","source":{"first_line":860,"last_line":865}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv4Addr","source":{"first_line":13,"last_line":15}},{"module":"Ipnet","name":"ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back","source":{"first_line":1687,"last_line":1720}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V4","source":{"first_line":29,"last_line":29}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V4","source":{"first_line":872,"last_line":872}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange","source":{"first_line":853,"last_line":858}},{"module":"Aeneas.Std.NetIpAddr","name":"ipnet.core.net.ip_addr.Ipv6Addr","source":{"first_line":17,"last_line":19}},{"module":"Ipnet","name":"ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back","source":{"first_line":1642,"last_line":1685}},{"module":"Ipnet","name":"ipnet.core.net.ip_addr.IpAddr.V6","source":{"first_line":30,"last_line":30}},{"module":"Ipnet","name":"ipnet.ipext.IpAddrRange.V6","source":{"first_line":873,"last_line":873}}],"definitions_truncated":false,"first_line":342,"last_line":390,"module":"Proofs.TaggedRange","program":null,"program_head":null,"statement":"∀ (r : ipnet.ipext.IpAddrRange) (n : Aeneas.Std.Usize)\n (h64 : @Eq.{1} Nat System.Platform.numBits (@OfNat.ofNat.{0} Nat (nat_lit 64) (instOfNatNat (nat_lit 64)))),\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) fun (out : Option.{0} ipnet.core.net.ip_addr.IpAddr) =>\n @Exists.{1} ipnet.ipext.IpAddrRange fun (r' : ipnet.ipext.IpAddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange))\n (ipnet.ipext.IpAddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpAddr.nth_back r n)\n (@Aeneas.Std.Result.ok.{0} (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.IpAddr) ipnet.ipext.IpAddrRange out r')))\n (And\n (@Eq.{1} (Prod.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen)\n (@Prod.mk.{0, 0} (Option.{0} Nat) RangeMath.HalfOpen\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.IpAddr Nat TaggedRange.addrValue out)\n (TaggedRange.remaining r'))\n (RangeMore.skipBack (TaggedRange.remaining r) (@Aeneas.Std.UScalar.val Aeneas.Std.UScalarTy.Usize n)))\n (And (@Eq.{1} Bool (TaggedRange.family r') (TaggedRange.family r))\n (And\n (∀ (a : ipnet.core.net.ip_addr.IpAddr),\n @Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.some.{0} ipnet.core.net.ip_addr.IpAddr a) →\n @Eq.{1} Bool (TaggedRange.addrFamily a) (TaggedRange.family r))\n (TaggedRange.remaining.match_1.{1} (fun (r : ipnet.ipext.IpAddrRange) => Prop) r\n (fun (a : ipnet.ipext.Ipv4AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) =>\n @Exists.{1} ipnet.ipext.Ipv4AddrRange fun (a' : ipnet.ipext.Ipv4AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange))\n (ipnet.ipext.Ipv4AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv4Addr.nth_back\n a n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv4Addr) ipnet.ipext.Ipv4AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv4Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V4 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V4 a'))))\n fun (a : ipnet.ipext.Ipv6AddrRange) =>\n @Exists.{1} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr)\n fun (o : Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) =>\n @Exists.{1} ipnet.ipext.Ipv6AddrRange fun (a' : ipnet.ipext.Ipv6AddrRange) =>\n And\n (@Eq.{1}\n (Aeneas.Std.Result.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange))\n (ipnet.ipext.Ipv6AddrRange.Insts.CoreIterTraitsDouble_endedDoubleEndedIteratorIpv6Addr.nth_back\n a n)\n (@Aeneas.Std.Result.ok.{0}\n (Prod.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange)\n (@Prod.mk.{0, 0} (Option.{0} ipnet.core.net.ip_addr.Ipv6Addr) ipnet.ipext.Ipv6AddrRange o\n a')))\n (And\n (@Eq.{1} (Option.{0} ipnet.core.net.ip_addr.IpAddr) out\n (@Option.map.{0, 0} ipnet.core.net.ip_addr.Ipv6Addr ipnet.core.net.ip_addr.IpAddr\n ipnet.core.net.ip_addr.IpAddr.V6 o))\n (@Eq.{1} ipnet.ipext.IpAddrRange r' (ipnet.ipext.IpAddrRange.V6 a')))))))","theorem":"TaggedRange.nth_back_spec","translation_rerun":false,"version":1}
=== stderr ===
info: mathlib: materializing new dependency
info: mathlib: fetching revision '56a005855ea17e0b0958f73ec801ae140b0a1679' from https://github.com/leanprover-community/mathlib4.git
info: mathlib: checking out revision '56a005855ea17e0b0958f73ec801ae140b0a1679'
info: plausible: materializing new dependency
info: plausible: fetching revision 'dfa4f38190d07c37e315953e08b90fe2d95b3c24' from https://github.com/leanprover-community/plausible
info: plausible: checking out revision 'dfa4f38190d07c37e315953e08b90fe2d95b3c24'
info: LeanSearchClient: materializing new dependency
info: LeanSearchClient: fetching revision 'd6b4c7be5be75ec4917c873ac50c756dc1436372' from https://github.com/leanprover-community/LeanSearchClient
info: LeanSearchClient: checking out revision 'd6b4c7be5be75ec4917c873ac50c756dc1436372'
info: importGraph: materializing new dependency
info: importGraph: fetching revision 'a41f0e9a4dea23188ea9cc1c41ac9f8bbafe0b93' from https://github.com/leanprover-community/import-graph
info: importGraph: checking out revision 'a41f0e9a4dea23188ea9cc1c41ac9f8bbafe0b93'
info: proofwidgets: materializing new dependency
info: proofwidgets: fetching revision 'df72b022e558978a1c50264cfc4d7fec86fa8e04' from https://github.com/leanprover-community/ProofWidgets4
info: proofwidgets: checking out revision 'df72b022e558978a1c50264cfc4d7fec86fa8e04'
info: aesop: materializing new dependency
info: aesop: fetching revision '4a174c490d8707121c4a9290800489f105d85e07' from https://github.com/leanprover-community/aesop
info: aesop: checking out revision '4a174c490d8707121c4a9290800489f105d85e07'
info: Qq: materializing new dependency
info: Qq: fetching revision 'dce0ad79c486cb1fb504af04f953c3466b0c6db8' from https://github.com/leanprover-community/quote4
info: Qq: checking out revision 'dce0ad79c486cb1fb504af04f953c3466b0c6db8'
info: batteries: materializing new dependency
info: batteries: fetching revision '66e469188fe07963e5cf666c7d4433f45b8131c5' from https://github.com/leanprover-community/batteries
info: batteries: checking out revision '66e469188fe07963e5cf666c7d4433f45b8131c5'
info: Cli: materializing new dependency
info: Cli: fetching revision 'c24fe6078c630e89b489bffe59b3e20ac30d12c8' from https://github.com/leanprover/lean4-cli
info: Cli: checking out revision 'c24fe6078c630e89b489bffe59b3e20ac30d12c8'
Environment
The 2026-10-27 macOS arm64 run used the default formal features, Lean 4.35.0, Rust 1.91.1 for native tests and nightly-2026-09-17 for extraction. Fresh extraction matched the maintained model, and the Lean build, transitive axiom audit, mapping and runtime/shift checks passed. Default, no-default and all-features native tests passed separately. The local results and evidence summary record the configuration and evidence boundaries.
What is trusted
The selected crate bodies are extracted from the unchanged ipnet 2.12.2 release source. The source inventory and before-and-after checks establish the identity of those inputs; they do not independently prove that translation preserves every Rust behavior. The results depend on Rust-to-LLBC-to-Lean translation and selected standard-library models.
For address ordering, the model compares big-endian numeric values. The pinned Rust IPv4 comparison orders its octets lexicographically; the IPv6 comparison orders eight segments, each formed from a pair of octets. On the checked little-endian target, those orders agree with the corresponding big-endian numbers. The IPv6 constructor model similarly concatenates the big-endian bytes of its eight segments, matching the reviewed source's byte conversion and layout on that target. These are source-based correspondence arguments, not Lean proofs of Rust layout or comparator semantics. The concrete Result::ok model follows the source's variant match for the selected drop-free network and error types; it does not establish behavior for arbitrary destructors. The trailing-zero models reverse fixed-width bits and count leading zeros, matching the reviewed intrinsic's low-zero count, including zero yielding the bit width. These correspondences remain trusted even though the resulting model properties are kernel checked.
The independently pinned Aeneas patch supplies those narrow models and checked shift wrappers; the Charon patch lowers recorded true MIR undefined-behavior checks and represents divergent panic paths using the existing panic model, and selects the IPv6 constructor. This does not establish general abort or unwind equivalence. Checked shift-overflow examples, pinned standard-library source hashes, fresh extraction and the full theorem audit support this configuration but do not prove all Rust/model correspondence. Arithmetic lemmas about unchanged scalar models are kernel proofs about those models, not proofs of the Rust intrinsics. Runtime overflow and undefined-behavior checks were enabled and contract checks disabled. Lean's foundational propext, Classical.choice and Quot.sound are allowed by the transitive axiom audit.
Technical limitations
Parsing, formatting, aggregation, hashing, optional serde and schemars integrations, and unselected inherited defaults are outside the mapped claims. A nonempty raw subnet iterator with a requested prefix above the address-family width follows a modeled panic path. new_assert likewise does not have a total-success claim for invalid prefixes.
The model does not establish physical runtime behavior, general const evaluation, panic formatting, or abort/unwind equivalence. The accepted target is macOS arm64; retained Linux models are not an accepted run of this configuration. Full original logs are in a local evidence archive, and the committed summary is not a cargo-proofs SARIF recording.
Official base tool limitations
Lean backend only, requiring cargo-proofs 0.4.0 or later. The version identifies the official Aeneas Git revision pinned in lake-manifest.json (backends/lean); this revision uses Lean 4.35.0. The recorder checks committed Lean theorem declarations and permits only propext, Classical.choice, and Quot.sound as transitive axioms. It rejects sorryAx and custom axioms, including axiomatized external models. Charon/Aeneas extraction is not rerun. The author must review that the committed functional model matches the recorded Rust source, that the named theorem corresponds to the public API, and that the reported precondition matches the theorem. A checked theorem alone does not establish those links or the adequacy of the specification. The current adapter records the default Cargo configuration, with ordinary Lean module paths and a pinned official Git dependency. Other backends, custom Lake source directories, and local-path Aeneas dependencies are unsupported. See https://proofs.rs/book/aeneas.html and https://github.com/AeneasVerif/aeneas/tree/be86ab0f1989d04944292b345b24c435be3ad10a.
Aeneas be86ab0f1989d04944292b345b24c435be3ad10a — version details
Dependencies (5)
heapless ^0 · optional—schemars ^0.8 · optional—schemars ^1 · optional—serde ^1 · optional—serde_test ^1 · dev—Comments (0)
No comments.