proofs.rs

Report #9 — Selected network and iterator behavior in ipnet 2.12.2

Aeneas be86ab0f1989 + patch 5067f5146882

160 verified claims · 3 findings

Recorded by the author; proofs.rs has not re-run it. How to read a report

keiichiw · 2026-10-28 13:36 UTC

Revision v1

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)

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) -> IpNet
pub fn with_netmask(ip: IpAddr, netmask: IpAddr) -> Result<IpNet, PrefixLenError>

impl Ipv4AddrRange

pub fn new(start: Ipv4Addr, end: Ipv4Addr) -> Self

impl Ipv4Net

pub const fn new(ip: Ipv4Addr, prefix_len: u8) -> Result<Ipv4Net, PrefixLenError>
pub const fn new_assert(ip: Ipv4Addr, prefix_len: u8) -> Ipv4Net
pub fn with_netmask(ip: Ipv4Addr, netmask: Ipv4Addr) -> Result<Ipv4Net, PrefixLenError>

impl Ipv4Subnets

pub fn new(start: Ipv4Addr, end: Ipv4Addr, min_prefix_len: u8) -> Self

impl Ipv6AddrRange

pub fn new(start: Ipv6Addr, end: Ipv6Addr) -> Self

impl Ipv6Net

pub const fn new(ip: Ipv6Addr, prefix_len: u8) -> Result<Ipv6Net, PrefixLenError>
pub const fn new_assert(ip: Ipv6Addr, prefix_len: u8) -> Ipv6Net
pub fn with_netmask(ip: Ipv6Addr, netmask: Ipv6Addr) -> Result<Ipv6Net, PrefixLenError>

impl Ipv6Subnets

pub fn new(start: Ipv6Addr, end: Ipv6Addr, min_prefix_len: u8) -> Self

Methods

impl IpNet

pub fn addr(self: &Self) -> IpAddr
pub fn broadcast(self: &Self) -> IpAddr
pub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>
pub fn hostmask(self: &Self) -> IpAddr
pub fn hosts(self: &Self) -> IpAddrRange
pub fn is_sibling(self: &Self, other: &IpNet) -> bool
pub fn max_prefix_len(self: &Self) -> u8
pub fn netmask(self: &Self) -> IpAddr
pub fn network(self: &Self) -> IpAddr
pub fn prefix_len(self: &Self) -> u8
pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<IpSubnets, PrefixLenError>
pub fn supernet(self: &Self) -> Option<IpNet>
pub fn trunc(self: &Self) -> IpNet

impl Ipv4Net

pub const fn addr(self: &Self) -> Ipv4Addr
pub fn broadcast(self: &Self) -> Ipv4Addr
pub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>
pub fn hostmask(self: &Self) -> Ipv4Addr
pub fn hosts(self: &Self) -> Ipv4AddrRange
pub fn is_sibling(self: &Self, other: &Ipv4Net) -> bool
pub const fn max_prefix_len(self: &Self) -> u8
pub fn netmask(self: &Self) -> Ipv4Addr
pub fn network(self: &Self) -> Ipv4Addr
pub const fn prefix_len(self: &Self) -> u8
pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<Ipv4Subnets, PrefixLenError>
pub fn supernet(self: &Self) -> Option<Ipv4Net>
pub fn trunc(self: &Self) -> Ipv4Net

impl Ipv6Net

pub const fn addr(self: &Self) -> Ipv6Addr
pub fn broadcast(self: &Self) -> Ipv6Addr
pub fn contains<T>(self: &Self, other: T) -> bool where Self: Contains<T>
pub fn hostmask(self: &Self) -> Ipv6Addr
pub fn hosts(self: &Self) -> Ipv6AddrRange
pub fn is_sibling(self: &Self, other: &Ipv6Net) -> bool
pub const fn max_prefix_len(self: &Self) -> u8
pub fn netmask(self: &Self) -> Ipv6Addr
pub fn network(self: &Self) -> Ipv6Addr
pub const fn prefix_len(self: &Self) -> u8
pub fn subnets(self: &Self, new_prefix_len: u8) -> Result<Ipv6Subnets, PrefixLenError>
pub fn supernet(self: &Self) -> Option<Ipv6Net>
pub fn trunc(self: &Self) -> Ipv6Net

Trait 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

pub fn from(addr: IpAddr) -> IpNet

impl core::convert::From<core::net::ip_addr::Ipv4Addr> for Ipv4Net

pub fn from(addr: Ipv4Addr) -> Ipv4Net

impl core::convert::From<core::net::ip_addr::Ipv6Addr> for Ipv6Net

pub fn from(addr: Ipv6Addr) -> Ipv6Net

impl core::convert::From<ipnet::Ipv4AddrRange> for IpAddrRange

pub fn from(i: Ipv4AddrRange) -> IpAddrRange

impl core::convert::From<ipnet::Ipv4Net> for IpNet

pub fn from(net: Ipv4Net) -> IpNet

impl core::convert::From<ipnet::Ipv4Subnets> for IpSubnets

pub fn from(i: Ipv4Subnets) -> IpSubnets

impl core::convert::From<ipnet::Ipv6AddrRange> for IpAddrRange

pub fn from(i: Ipv6AddrRange) -> IpAddrRange

impl core::convert::From<ipnet::Ipv6Net> for IpNet

pub fn from(net: Ipv6Net) -> IpNet

impl core::convert::From<ipnet::Ipv6Subnets> for IpSubnets

pub fn from(i: Ipv6Subnets) -> IpSubnets

impl core::default::Default for …

fn default3 implementations

impl core::iter::traits::double_ended::DoubleEndedIterator for …

fn next_back3 implementations
fn nth_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
fn size_hint3 implementations

impl ipnet::IpAdd<u128> for core::net::ip_addr::Ipv6Addr

pub fn saturating_add(self: Self, rhs: u128) -> Ipv6Addr

impl ipnet::IpAdd<u32> for core::net::ip_addr::Ipv4Addr

pub fn saturating_add(self: Self, rhs: u32) -> Ipv4Addr

impl ipnet::IpBitAnd for …

fn bitand2 implementations

impl ipnet::IpBitAnd<u128> for core::net::ip_addr::Ipv6Addr

pub fn bitand(self: Self, rhs: u128) -> Ipv6Addr

impl ipnet::IpBitAnd<u32> for core::net::ip_addr::Ipv4Addr

pub fn bitand(self: Self, rhs: u32) -> Ipv4Addr

impl ipnet::IpBitOr for …

fn bitor2 implementations

impl ipnet::IpBitOr<u128> for core::net::ip_addr::Ipv6Addr

pub fn bitor(self: Self, rhs: u128) -> Ipv6Addr

impl ipnet::IpBitOr<u32> for core::net::ip_addr::Ipv4Addr

pub fn bitor(self: Self, rhs: u32) -> 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) -> Ipv6Addr

impl ipnet::IpSub<u32> for core::net::ip_addr::Ipv4Addr

pub fn saturating_sub(self: Self, rhs: u32) -> Ipv4Addr

Evidence

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 --stdin

Checks out the recorded source commit from GitHub. Install the report’s tool version before running.

Source on GitHub · SARIF with logs (.json)

Recorded run

Completed · 160 checks passed · 0 failed

2026-10-28T12:43:22.128930+00:00 · 749.3 seconds · Exit code 0

Recorded on the author’s machine.

CheckResultClaim
Lean checked theorem RangeNext.ipv4_saturating_add_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeNext.ipv4_saturating_add_spec
PassedClaim #1
Lean checked theorem BitOps.ipv4_and_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
BitOps.ipv4_and_addr_spec
PassedClaim #2
Lean checked theorem BitOps.ipv4_and_u32_spec; axioms limited to propext, Classical.choice, Quot.sound
BitOps.ipv4_and_u32_spec
PassedClaim #3
Lean checked theorem BitOps.ipv4_or_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
BitOps.ipv4_or_addr_spec
PassedClaim #4
Lean checked theorem BitOps.ipv4_or_u32_spec; axioms limited to propext, Classical.choice, Quot.sound
BitOps.ipv4_or_u32_spec
PassedClaim #5
Lean checked theorem RangeMore.ipv4_saturating_sub_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.ipv4_saturating_sub_addr_spec
PassedClaim #6
Lean checked theorem RangeMore.ipv4_saturating_sub_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.ipv4_saturating_sub_spec
PassedClaim #7
Lean checked theorem IPv6RangeSteps.ipv6_saturating_add_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSteps.ipv6_saturating_add_spec
PassedClaim #8
Lean checked theorem IPv6BitOps.ipv6_and_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6BitOps.ipv6_and_addr_spec
PassedClaim #9
Lean checked theorem IPv6BitOps.ipv6_and_u128_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6BitOps.ipv6_and_u128_spec
PassedClaim #10
Lean checked theorem IPv6BitOps.ipv6_or_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6BitOps.ipv6_or_addr_spec
PassedClaim #11
Lean checked theorem IPv6BitOps.ipv6_or_u128_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6BitOps.ipv6_or_u128_spec
PassedClaim #12
Lean checked theorem IPv6RangeBasic.ipv6_saturating_sub_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeBasic.ipv6_saturating_sub_addr_spec
PassedClaim #13
Lean checked theorem IPv6RangeSteps.ipv6_saturating_sub_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSteps.ipv6_saturating_sub_spec
PassedClaim #14
Lean checked theorem AddrParseErrorValue.clone_spec; axioms limited to propext, Classical.choice, Quot.sound
AddrParseErrorValue.clone_spec
PassedClaim #15
Lean checked theorem AddrParseErrorValue.eq_spec; axioms limited to propext, Classical.choice, Quot.sound
AddrParseErrorValue.eq_spec
PassedClaim #16
Lean checked theorem TaggedDerived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.range_clone_spec
PassedClaim #17
Lean checked theorem TaggedRange.next_back_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.next_back_spec
PassedClaim #18
Lean checked theorem TaggedRange.nth_back_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.nth_back_spec
PassedClaim #19
Lean checked theorem TaggedIPv4.from_ipv4_range_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.from_ipv4_range_spec
PassedClaim #20
Lean checked theorem TaggedIPv4.from_ipv6_range_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.from_ipv6_range_spec
PassedClaim #21
Lean checked theorem TaggedRange.count_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.count_spec
PassedClaim #22
Lean checked theorem TaggedRange.last_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.last_spec
PassedClaim #23
Lean checked theorem TaggedRange.max_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.max_spec
PassedClaim #24
Lean checked theorem TaggedRange.min_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.min_spec
PassedClaim #25
Lean checked theorem TaggedRange.next_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.next_spec
PassedClaim #26
Lean checked theorem TaggedRange.nth_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.nth_spec
PassedClaim #27
Lean checked theorem TaggedRange.size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedRange.size_hint_spec
PassedClaim #28
Lean checked theorem TaggedDerived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.range_cmp_spec
PassedClaim #29
Lean checked theorem TaggedDerived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.range_eq_spec
PassedClaim #30
Lean checked theorem TaggedDerived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.range_partial_cmp_spec
PassedClaim #31
Lean checked theorem TaggedDerived.net_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.net_clone_spec
PassedClaim #32
Lean checked theorem TaggedDefaultFrom.ipnet_default_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDefaultFrom.ipnet_default_spec
PassedClaim #33
Lean checked theorem TaggedDefaultFrom.ipnet_from_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDefaultFrom.ipnet_from_addr_spec
PassedClaim #34
Lean checked theorem ipnet.ipnet.from_ipv4_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.from_ipv4_spec
PassedClaim #35
Lean checked theorem ipnet.ipnet.from_ipv6_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.from_ipv6_spec
PassedClaim #36
Lean checked theorem TaggedDerived.net_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.net_cmp_spec
PassedClaim #37
Lean checked theorem TaggedDerived.net_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.net_eq_spec
PassedClaim #38
Lean checked theorem TaggedDerived.net_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.net_partial_cmp_spec
PassedClaim #39
Lean checked theorem TaggedDerived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.subnets_clone_spec
PassedClaim #40
Lean checked theorem TaggedIPv4.from_ipv4_subnets_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.from_ipv4_subnets_spec
PassedClaim #41
Lean checked theorem TaggedIPv4.from_ipv6_subnets_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.from_ipv6_subnets_spec
PassedClaim #42
Lean checked theorem TaggedSubnets.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedSubnets.next_raw_spec
PassedClaim #43
Lean checked theorem TaggedDerived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.subnets_cmp_spec
PassedClaim #44
Lean checked theorem TaggedDerived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.subnets_eq_spec
PassedClaim #45
Lean checked theorem TaggedDerived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDerived.subnets_partial_cmp_spec
PassedClaim #46
Lean checked theorem IPv4IteratorDerived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.range_clone_spec
PassedClaim #47
Lean checked theorem RangeMore.range_next_back_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_next_back_spec
PassedClaim #48
Lean checked theorem RangeMore.range_nth_back_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_nth_back_spec
PassedClaim #49
Lean checked theorem RangeMore.range_count_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_count_spec
PassedClaim #50
Lean checked theorem RangeMore.range_last_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_last_spec
PassedClaim #51
Lean checked theorem RangeMore.range_max_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_max_spec
PassedClaim #52
Lean checked theorem RangeMore.range_min_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_min_spec
PassedClaim #53
Lean checked theorem RangeNext.range_next_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeNext.range_next_spec
PassedClaim #54
Lean checked theorem RangeMore.range_nth_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_nth_spec
PassedClaim #55
Lean checked theorem RangeMore.range_size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound
RangeMore.range_size_hint_spec
PassedClaim #56
Lean checked theorem IPv4IteratorDerived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.range_cmp_spec
PassedClaim #57
Lean checked theorem IPv4IteratorDerived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.range_eq_spec
PassedClaim #58
Lean checked theorem IPv4IteratorDerived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.range_partial_cmp_spec
PassedClaim #59
Lean checked theorem IPv4Derived.clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4Derived.clone_spec
PassedClaim #60
Lean checked theorem IPv4NetOps.default_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.default_spec
PassedClaim #61
Lean checked theorem IPv4NetOps.from_ipv4_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.from_ipv4_spec
PassedClaim #62
Lean checked theorem IPv4Derived.cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4Derived.cmp_spec
PassedClaim #63
Lean checked theorem IPv4Derived.eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4Derived.eq_spec
PassedClaim #64
Lean checked theorem IPv4Derived.partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4Derived.partial_cmp_spec
PassedClaim #65
Lean checked theorem IPv4IteratorDerived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.subnets_clone_spec
PassedClaim #66
Lean checked theorem IPv4SubnetAll.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4SubnetAll.next_raw_spec
PassedClaim #67
Lean checked theorem IPv4IteratorDerived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.subnets_cmp_spec
PassedClaim #68
Lean checked theorem IPv4IteratorDerived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.subnets_eq_spec
PassedClaim #69
Lean checked theorem IPv4IteratorDerived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4IteratorDerived.subnets_partial_cmp_spec
PassedClaim #70
Lean checked theorem IPv6Derived.range_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.range_clone_spec
PassedClaim #71
Lean checked theorem IPv6RangeSteps.range_next_back_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSteps.range_next_back_spec
PassedClaim #72
Lean checked theorem IPv6RangeSkips.nth_back_remaining_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSkips.nth_back_remaining_spec
PassedClaim #73
Lean checked theorem IPv6RangeBasic.count_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeBasic.count_spec
PassedClaim #74
Lean checked theorem IPv6RangeBasic.last_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeBasic.last_spec
PassedClaim #75
Lean checked theorem IPv6RangeBasic.max_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeBasic.max_spec
PassedClaim #76
Lean checked theorem IPv6RangeBasic.min_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeBasic.min_spec
PassedClaim #77
Lean checked theorem IPv6RangeSteps.range_next_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSteps.range_next_spec
PassedClaim #78
Lean checked theorem IPv6RangeSkips.nth_remaining_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSkips.nth_remaining_spec
PassedClaim #79
Lean checked theorem IPv6RangeSkips.size_hint_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6RangeSkips.size_hint_spec
PassedClaim #80
Lean checked theorem IPv6Derived.range_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.range_cmp_spec
PassedClaim #81
Lean checked theorem IPv6Derived.range_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.range_eq_spec
PassedClaim #82
Lean checked theorem IPv6Derived.range_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.range_partial_cmp_spec
PassedClaim #83
Lean checked theorem IPv6Derived.net_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.net_clone_spec
PassedClaim #84
Lean checked theorem IPv6Default.default_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Default.default_spec
PassedClaim #85
Lean checked theorem TaggedDefaultFrom.ipv6_from_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedDefaultFrom.ipv6_from_addr_spec
PassedClaim #86
Lean checked theorem IPv6Derived.net_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.net_cmp_spec
PassedClaim #87
Lean checked theorem IPv6Derived.net_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.net_eq_spec
PassedClaim #88
Lean checked theorem IPv6Derived.net_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.net_partial_cmp_spec
PassedClaim #89
Lean checked theorem IPv6Derived.subnets_clone_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.subnets_clone_spec
PassedClaim #90
Lean checked theorem IPv6SubnetAll.next_raw_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6SubnetAll.next_raw_spec
PassedClaim #91
Lean checked theorem IPv6Derived.subnets_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.subnets_cmp_spec
PassedClaim #92
Lean checked theorem IPv6Derived.subnets_eq_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.subnets_eq_spec
PassedClaim #93
Lean checked theorem IPv6Derived.subnets_partial_cmp_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6Derived.subnets_partial_cmp_spec
PassedClaim #94
Lean checked theorem PrefixLenErrorValue.clone_spec; axioms limited to propext, Classical.choice, Quot.sound
PrefixLenErrorValue.clone_spec
PassedClaim #95
Lean checked theorem PrefixLenErrorValue.eq_spec; axioms limited to propext, Classical.choice, Quot.sound
PrefixLenErrorValue.eq_spec
PassedClaim #96
Lean checked theorem ipnet.ipnet.ip_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ip_addr_spec
PassedClaim #97
Lean checked theorem ipnet.ip_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_broadcast_nat_spec
PassedClaim #98
Lean checked theorem ipnet.ip_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_public_contains_addr_spec
PassedClaim #99
Lean checked theorem ipnet.ip_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_public_contains_net_spec
PassedClaim #100
Lean checked theorem ipnet.ip_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_hostmask_nat_spec
PassedClaim #101
Lean checked theorem TaggedIPv6.hosts_v6_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv6.hosts_v6_spec
PassedClaim #102
Lean checked theorem TaggedIPv4.hosts_v4_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.hosts_v4_spec
PassedClaim #103
Lean checked theorem TaggedIPv4.is_sibling_v6_v4_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.is_sibling_v6_v4_spec
PassedClaim #104
Lean checked theorem TaggedIPv6.is_sibling_v6_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv6.is_sibling_v6_spec
PassedClaim #105
Lean checked theorem TaggedIPv4.is_sibling_v4_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.is_sibling_v4_spec
PassedClaim #106
Lean checked theorem TaggedIPv4.is_sibling_v4_v6_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.is_sibling_v4_v6_spec
PassedClaim #107
Lean checked theorem ipnet.ipnet.ip_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ip_max_prefix_len_spec
PassedClaim #108
Lean checked theorem ipnet.ip_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_netmask_nat_spec
PassedClaim #109
Lean checked theorem ipnet.ip_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_network_nat_spec
PassedClaim #110
Lean checked theorem ipnet.ipnet.ip_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ip_new_spec
PassedClaim #111
Lean checked theorem NewAssertInvalid.tagged_full_spec; axioms limited to propext, Classical.choice, Quot.sound
NewAssertInvalid.tagged_full_spec
PassedClaim #112
Lean checked theorem ipnet.ipnet.ip_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ip_prefix_len_spec
PassedClaim #113
Lean checked theorem TaggedIPv6.subnets_v6_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv6.subnets_v6_spec
PassedClaim #114
Lean checked theorem TaggedIPv4.subnets_v4_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.subnets_v4_spec
PassedClaim #115
Lean checked theorem TaggedIPv6.supernet_v6_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv6.supernet_v6_spec
PassedClaim #116
Lean checked theorem TaggedIPv4.supernet_v4_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedIPv4.supernet_v4_spec
PassedClaim #117
Lean checked theorem ipnet.ip_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ip_trunc_nat_spec
PassedClaim #118
Lean checked theorem TaggedMask.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedMask.with_netmask_spec
PassedClaim #119
Lean checked theorem ipnet.ipv4_range_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_range_new_spec
PassedClaim #120
Lean checked theorem ipnet.ipnet.ipv4_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv4_addr_spec
PassedClaim #121
Lean checked theorem ipnet.ipv4_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_broadcast_nat_spec
PassedClaim #122
Lean checked theorem ipnet.ipv4_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_public_contains_addr_spec
PassedClaim #123
Lean checked theorem ipnet.ipv4_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_public_contains_net_spec
PassedClaim #124
Lean checked theorem ipnet.ipv4_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_hostmask_nat_spec
PassedClaim #125
Lean checked theorem IPv4NetOps.hosts_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.hosts_spec
PassedClaim #126
Lean checked theorem IPv4NetOps.is_sibling_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.is_sibling_spec
PassedClaim #127
Lean checked theorem ipnet.ipnet.ipv4_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv4_max_prefix_len_spec
PassedClaim #128
Lean checked theorem ipnet.ipv4_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_netmask_nat_spec
PassedClaim #129
Lean checked theorem ipnet.ipv4_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_network_nat_spec
PassedClaim #130
Lean checked theorem ipnet.ipnet.ipv4_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv4_new_spec
PassedClaim #131
Lean checked theorem NewAssertInvalid.ipv4_full_spec; axioms limited to propext, Classical.choice, Quot.sound
NewAssertInvalid.ipv4_full_spec
PassedClaim #132
Lean checked theorem ipnet.ipnet.ipv4_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv4_prefix_len_spec
PassedClaim #133
Lean checked theorem IPv4NetOps.subnets_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.subnets_spec
PassedClaim #134
Lean checked theorem IPv4NetOps.supernet_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4NetOps.supernet_spec
PassedClaim #135
Lean checked theorem ipnet.ipv4_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv4_trunc_nat_spec
PassedClaim #136
Lean checked theorem IPv4MaskOps.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4MaskOps.with_netmask_spec
PassedClaim #137
Lean checked theorem ipnet.ipnet.ipv4_subnets_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv4_subnets_new_spec
PassedClaim #138
Lean checked theorem ipnet.ipv6_range_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_range_new_spec
PassedClaim #139
Lean checked theorem ipnet.ipnet.ipv6_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv6_addr_spec
PassedClaim #140
Lean checked theorem ipnet.ipv6_broadcast_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_broadcast_nat_spec
PassedClaim #141
Lean checked theorem ipnet.ipv6_public_contains_addr_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_public_contains_addr_spec
PassedClaim #142
Lean checked theorem ipnet.ipv6_public_contains_net_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_public_contains_net_spec
PassedClaim #143
Lean checked theorem ipnet.ipv6_hostmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_hostmask_nat_spec
PassedClaim #144
Lean checked theorem IPv6NetOps.hosts_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6NetOps.hosts_spec
PassedClaim #145
Lean checked theorem IPv6NetOps.is_sibling_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6NetOps.is_sibling_spec
PassedClaim #146
Lean checked theorem ipnet.ipnet.ipv6_max_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv6_max_prefix_len_spec
PassedClaim #147
Lean checked theorem ipnet.ipv6_netmask_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_netmask_nat_spec
PassedClaim #148
Lean checked theorem ipnet.ipv6_network_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_network_nat_spec
PassedClaim #149
Lean checked theorem ipnet.ipnet.ipv6_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv6_new_spec
PassedClaim #150
Lean checked theorem NewAssertInvalid.ipv6_full_spec; axioms limited to propext, Classical.choice, Quot.sound
NewAssertInvalid.ipv6_full_spec
PassedClaim #151
Lean checked theorem ipnet.ipnet.ipv6_prefix_len_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv6_prefix_len_spec
PassedClaim #152
Lean checked theorem IPv6NetOps.subnets_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6NetOps.subnets_spec
PassedClaim #153
Lean checked theorem IPv6NetOps.supernet_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6NetOps.supernet_spec
PassedClaim #154
Lean checked theorem ipnet.ipv6_trunc_nat_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipv6_trunc_nat_spec
PassedClaim #155
Lean checked theorem IPv6MaskOps.with_netmask_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6MaskOps.with_netmask_spec
PassedClaim #156
Lean checked theorem ipnet.ipnet.ipv6_subnets_new_spec; axioms limited to propext, Classical.choice, Quot.sound
ipnet.ipnet.ipv6_subnets_new_spec
PassedClaim #157
Lean checked theorem TaggedMask.ip_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound
TaggedMask.ip_mask_to_prefix_spec
PassedClaim #158
Lean checked theorem IPv4MaskOps.ipv4_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv4MaskOps.ipv4_mask_to_prefix_spec
PassedClaim #159
Lean checked theorem IPv6MaskOps.ipv6_mask_to_prefix_spec; axioms limited to propext, Classical.choice, Quot.sound
IPv6MaskOps.ipv6_mask_to_prefix_spec
PassedClaim #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.

Updated 2026-10-16 00:00 UTC

Aeneas be86ab0f1989d04944292b345b24c435be3ad10a — version details

Dependencies (5)

CrateReports
heapless ^0 · optional—
schemars ^0.8 · optional—
schemars ^1 · optional—
serde ^1 · optional—
serde_test ^1 · dev—

Comments (0)

No comments.

Sign in to comment.