module Noetherian where

open import Prelude
open import Data.List
open import Data.List.Membership
open import Data.List.Properties using (is-empty)

module NonDec where
  data NoethAcc {A : Type a} (xs : List A) : Type a where
    noeth-acc : (∀ x  x  xs  NoethAcc (x  xs))  NoethAcc xs

  Noetherian : Type a  Type a
  Noetherian A = NoethAcc {A = A} []

module Decidable where
  NoethFrom : List A  Type _
  data NoethAcc {A : Type a} (x : A) (xs : List A) : Type a

  data NoethAcc x xs where
    done : x  xs  NoethAcc x xs
    more : x  xs  NoethFrom (x  xs)  NoethAcc x xs

  NoethFrom xs =  x  NoethAcc x xs

  Noetherian : Type a  Type a
  Noetherian A = NoethFrom {A = A} []