Documentation

LeanPool.ViscositySolutionTheory.ViscositySolns.Existence.Perron.Method.Core

Ported for Lean Pool: imports relocated and code adapted to Lean/Mathlib v4.34.0.

Perron method core assembly #

Core Perron existence assembly from upper and lower envelope hypotheses.

theorem ViscositySolns.PerronMethodExistenceTheorem {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupper : DirichletSubsolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlower : DirichletSupersolutionOn C boundary F g (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (henvelopeOrder : ∀ x ∈ C ∪ boundary, lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper) x ≤ upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) x) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Assembly form of Perron's method.

The analytic Perron work splits into two inputs:

  • the upper envelope of the Perron candidate is a Dirichlet subsolution;
  • the lower envelope of the Perron candidate is a Dirichlet supersolution.

Once those are available, comparison gives the reverse inequality between the two envelopes. If the standard envelope order supplies the forward inequality on the Dirichlet domain and boundary, the upper envelope is a Dirichlet solution. Later files should discharge the two analytic inputs via supremum stability and the bump lemma.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_viscosityEnvelopes {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupperVisc : ViscositySubsolution C F (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hupperSemi : UpperSemicontinuousOn (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper)) (C ∪ boundary)) (hlowerVisc : ViscositySupersolution C F (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerSemi : LowerSemicontinuousOn (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper)) (C ∪ boundary)) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hperronCobddBelowOnBoundary : ∀ x ∈ boundary, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) (hupperBddAboveOnBoundary : ∀ x ∈ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelowOnBoundary : ∀ x ∈ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hperronCobddAboveOnBoundary : ∀ x ∈ boundary, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) (henvelopeOrder : ∀ x ∈ C ∪ boundary, lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper) x ≤ upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) x) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method after the envelope boundary traces have been inherited from the barriers.

Compared with PerronMethodExistenceTheorem, this statement asks only for the interior viscosity properties of W^* and W_*. The Dirichlet boundary inequalities are derived from the lower/upper barrier traces and the pointwise Perron bounds.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_viscosityEnvelopes_of_localBounded {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupperVisc : ViscositySubsolution C F (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerVisc : ViscositySupersolution C F (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hperronCobddBelowOnBoundary : ∀ x ∈ boundary, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) (hupperBddAboveOnBoundary : ∀ x ∈ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelowOnBoundary : ∀ x ∈ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hperronCobddAboveOnBoundary : ∀ x ∈ boundary, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hperronBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) (hperronBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) (perronEnvelope C boundary F g B.lower B.upper)) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Variant of Perron's method where the elementary order W_* <= W^* is supplied by local boundedness of the Perron envelope on every relevant nhdsWithin filter.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_viscosityEnvelopes_of_barrierLocalBounded {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupperVisc : ViscositySubsolution C F (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerVisc : ViscositySupersolution C F (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method with local boundedness supplied by the barrier pair.

For every x ∈ C ∪ boundary, if the upper barrier is locally bounded above and the lower barrier is locally bounded below relative to C, then the pointwise Perron envelope inherits the local boundedness needed for the elementary envelope order W_* <= W^*. On boundary points the same hypotheses also provide the coboundedness assumptions needed to pass the barrier trace inequalities through limsup and liminf.

theorem ViscositySolns.DirichletBarrierPair.upperEnvelope_perronEnvelope_mem_perronClass {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupper : DirichletSubsolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) :
PerronClass C boundary F g B.lower B.upper (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

After the upper Perron envelope has been certified as a Dirichlet subsolution, comparison with the upper barrier places it back in the Perron class.

This is the formal version of the first maximality step in the source proof: W^* is admissible, hence it cannot lie above the Perron supremum.

theorem ViscositySolns.DirichletBarrierPair.upperEnvelope_perronEnvelope_eqOn_domain {n : ℕ} {C boundary : Set (Point n)} {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) (hcomparison : DirichletComparisonPrinciple C boundary F g) (hupper : DirichletSubsolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) :
Set.EqOn (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper)) (perronEnvelope C boundary F g B.lower B.upper) C

The admissibility of W^* forces equality between the pointwise Perron envelope W and its upper envelope on the PDE domain.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_upperHalfRelaxed_and_lowerViscosity_of_barrierLocalBounded {n : ℕ} {C boundary : Set (Point n)} [LocallyCompactSpace ↑C] {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) {ι : Type u_1} {uᵢ : ι → Point n → ℝ} {l : Filter ι} (hcomparison : DirichletComparisonPrinciple C boundary F g) (hF : OperatorContinuous F) (hsub : ∀ᶠ (i : ι) in l, ViscositySubsolution C F (uᵢ i)) (hbddAbove : ∀ x ∈ C, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hcobddBelow : ∀ x ∈ C, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hEq : upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) = upperHalfRelaxedLimit uᵢ l C) (hlowerVisc : ViscositySupersolution C F (lowerEnvelope C (perronEnvelope C boundary F g B.lower B.upper))) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method with the upper-envelope Dirichlet subsolution supplied by half-relaxed-limit stability.

This discharges the W^* subsolution input from PerronMethodExistenceTheorem.of_viscosityEnvelopes_of_barrierLocalBounded. The remaining analytic input is the viscosity supersolution property of W_*, which is the role of the Perron bump argument.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_upperHalfRelaxed_and_bumpInequality {n : ℕ} {C boundary : Set (Point n)} [LocallyCompactSpace ↑C] {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) {ι : Type u_1} {uᵢ : ι → Point n → ℝ} {l : Filter ι} (hcomparison : DirichletComparisonPrinciple C boundary F g) (hF : OperatorContinuous F) (hsub : ∀ᶠ (i : ι) in l, ViscositySubsolution C F (uᵢ i)) (hbddAbove : ∀ x ∈ C, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hcobddBelow : ∀ x ∈ C, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hEq : upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) = upperHalfRelaxedLimit uᵢ l C) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hineq : PerronLowerEnvelopeSubjetInequality C boundary F g B) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method with both analytic envelope inputs exposed in the form produced by the Perron construction.

The upper envelope is supplied by half-relaxed-limit stability. The lower envelope is supplied by the subjet inequality that the localized bump argument is meant to prove.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_upperHalfRelaxed_and_bumpContradiction {n : ℕ} {C boundary : Set (Point n)} [LocallyCompactSpace ↑C] {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) {ι : Type u_1} {uᵢ : ι → Point n → ℝ} {l : Filter ι} (hcomparison : DirichletComparisonPrinciple C boundary F g) (hF : OperatorContinuous F) (hsub : ∀ᶠ (i : ι) in l, ViscositySubsolution C F (uᵢ i)) (hbddAbove : ∀ x ∈ C, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hcobddBelow : ∀ x ∈ C, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hEq : upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) = upperHalfRelaxedLimit uᵢ l C) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hbump : PerronLowerEnvelopeBumpContradiction C boundary F g B) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method with the lower-envelope supersolution supplied by the formal bump contradiction.

This is the final assembly interface before the analytic localized bump construction itself: the only lower-side hypothesis is that a failed subjet inequality produces an impossible Perron-class function above the envelope.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_upperHalfRelaxed_and_strictPatch {n : ℕ} {C boundary : Set (Point n)} [LocallyCompactSpace ↑C] {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) {ι : Type u_1} {uᵢ : ι → Point n → ℝ} {l : Filter ι} (hcomparison : DirichletComparisonPrinciple C boundary F g) (hF : OperatorContinuous F) (hsub : ∀ᶠ (i : ι) in l, ViscositySubsolution C F (uᵢ i)) (hbddAbove : ∀ x ∈ C, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hcobddBelow : ∀ x ∈ C, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hEq : upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) = upperHalfRelaxedLimit uᵢ l C) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hpatch : PerronLowerEnvelopeStrictPatch C boundary F g B) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method from the source-shaped strict patch form of Lemma 4.4.

The lower-side analytic input says that each failed lower-envelope subjet inequality produces an admissible Perron-class member that is strictly above a level greater than W_* x on a relative neighborhood of the failed contact.

theorem ViscositySolns.PerronMethodExistenceTheorem.of_upperHalfRelaxed_and_strictSubsolutionPatch {n : ℕ} {C boundary : Set (Point n)} [LocallyCompactSpace ↑C] {F : Operator n} {g : Point n → ℝ} (B : DirichletBarrierPair C boundary F g) {ι : Type u_1} {uᵢ : ι → Point n → ℝ} {l : Filter ι} (hcomparison : DirichletComparisonPrinciple C boundary F g) (hF : OperatorContinuous F) (hsub : ∀ᶠ (i : ι) in l, ViscositySubsolution C F (uᵢ i)) (hbddAbove : ∀ x ∈ C, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hcobddBelow : ∀ x ∈ C, Filter.IsCoboundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (halfRelaxedFilter l C x) (halfRelaxedValue uᵢ)) (hEq : upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper) = upperHalfRelaxedLimit uᵢ l C) (hlowerTrace : BoundaryLowerTraceOn C boundary g B.lower) (hupperTrace : BoundaryUpperTraceOn C boundary g B.upper) (hne : ∀ x ∈ C ∪ boundary, (nhdsWithin x C).NeBot) (hupperBddAbove : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≤ x2) (nhdsWithin x C) B.upper) (hlowerBddBelow : ∀ x ∈ C ∪ boundary, Filter.IsBoundedUnder (fun (x1 x2 : ℝ) => x1 ≥ x2) (nhdsWithin x C) B.lower) (hpatch : PerronLowerEnvelopeStrictSubsolutionPatch C boundary F g B) :
DirichletSolutionOn C boundary F g (upperEnvelope C (perronEnvelope C boundary F g B.lower B.upper))

Perron's method from the source-shaped bumped-subsolution form of Lemma 4.4.

Here the bump lemma only has to construct a Dirichlet subsolution patch above the lower barrier. The upper-barrier bound needed for Perron-class membership is obtained from the same explicit DirichletComparisonPrinciple hypothesis used by the final Perron argument.